Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function Matlab样条函数中的指示函数_Function_Matlab_Splines - Fatal编程技术网

Function Matlab样条函数中的指示函数

Function Matlab样条函数中的指示函数,function,matlab,splines,Function,Matlab,Splines,好吧,我遇到了一个愚蠢的问题,我自己的工作和互联网搜索都没有真正提供解决方案,所以我想问一下,看看有没有人有什么建议。我正在编写一个最终用于绘制利率曲线的Matlab程序,这是通过使用三次B样条曲线,然后使用优化器获得三次B样条基的系数,并使用这些信息绘制图表来完成的。现在,我在尝试绘制图形时遇到了一个棘手的小问题。我将在下面提供错误消息和相关代码,但实际上是这样的: 要对给定阶数的B样条曲线进行编程,可以从指示器函数开始,然后递归地构建它们。这个指标与某个输入变量有关(对我来说,这是时间,但变

好吧,我遇到了一个愚蠢的问题,我自己的工作和互联网搜索都没有真正提供解决方案,所以我想问一下,看看有没有人有什么建议。我正在编写一个最终用于绘制利率曲线的Matlab程序,这是通过使用三次B样条曲线,然后使用优化器获得三次B样条基的系数,并使用这些信息绘制图表来完成的。现在,我在尝试绘制图形时遇到了一个棘手的小问题。我将在下面提供错误消息和相关代码,但实际上是这样的:

要对给定阶数的B样条曲线进行编程,可以从指示器函数开始,然后递归地构建它们。这个指标与某个输入变量有关(对我来说,这是时间,但变量的实际内容并不特别相关)。稍后,当我使用类似于t=(0:1:30)的范围来绘制关于这个变量的图形时,我得到一个错误,告诉我| |和&&运算符的操作数必须转换为逻辑标量值

我在互联网上搜索了一下,发现&&与向量输入不兼容(我知道我在尝试绘制图形时会将其传递到这里),并建议使用&。我试过了,结果收到了一个错误,说我的矩阵维数不一致,这对我来说没有意义,因为从一开始就没有任何矩阵。所以在这一点上,我不确定解决这个问题的好方法是什么。在matlab中是否有一种向量稳健的方法来编程指示器函数,从而允许绘图

以下是相关代码:

startvec = 0.007*ones(16,2);

%[x,fval] = fminsearch(@(x) FittingFunction(x, Rhat, today, startdays, enddays, fixedcoupondays, floatingcoupondays),startvec,optimset('Display','iter','MaxIter',50,'MaxFunEvals',50));

f0 = 0;
l0 = 0;
t = (0:1:30);

x = startvec;

for k=-3:1:12
    f0 = f0 + x(k+4,1).*Splines(3,k,t);
    l0 = l0 + x(k+4,2).*Splines(3,k,t);
end

h1 = figure('Name','OIS Curve','NumberTitle','off')
plot(t,f0);
title('OIS Curve as a Function of Time');
xlabel('time (years)');
ylabel('OIS Rate');
%hold off
print(h1,'-dpdf','OISCurve.pdf')

h2 = figure('Name','LIBOR Curve','NumberTitle','off')
plot(t,l0);
title('LIBOR Curve as a Function of Time');
xlabel('time (years)');
ylabel('LIBOR Rate');
%hold off
print(h2,'-dpdf','LIBORCurve.pdf')
函数样条曲线写在这里:

function spline = Splines(n,k,t)

% The following code builds a B-spline function of any degree, using the
% recursive properties of B-splines.  Can be defined from k=-3 to k=12.

knots = [-1/4 -1/6 -1/12 0 1/12 1/4 1/2 3/4 1 3/2 2 4 7 11 21 31 41 51 61 71 81 91 101 111];

if (n==0)
    if (t>knots(k+4) && t<knots(k+5))
        spline = 1;
    else
        spline = 0;
    end
else
    spline = ((t-knots(k+4))/(knots(k+4+n)-knots(k+4)))*Splines(n-1,k,t) + ((knots(k+5+n)-t)/(knots(k+5+n)-knots(k+5)))*Splines(n-1,k+1,t);
end
函数样条=样条(n,k,t)
%下面的代码使用
%B样条的递归性质。可以从k=-3到k=12定义。
结=[-1/4-1/6-1/1201/1213/413/224711311618191111];
如果(n==0)
如果(t>节(k+4)和&t节(k+4)和&t
样条曲线中的错误(第15行)
样条线=((t-结(k+4))/(结(k+4+n)-结(k+4)))*样条线(n-1,k,t)+
((节(k+5+n)-t)/(节(k+5+n)-k+5))*样条曲线(n-1,k+1,t)

样条曲线中的错误(第15行) 样条线=((t-结(k+4))/(结(k+4+n)-结(k+4)))*样条线(n-1,k,t)+ ((节(k+5+n)-t)/(节(k+5+n)-k+5))*样条曲线(n-1,k+1,t)

样条曲线中的错误(第15行) 样条线=((t-结(k+4))/(结(k+4+n)-结(k+4)))*样条线(n-1,k,t)+ ((节(k+5+n)-t)/(节(k+5+n)-k+5))*样条曲线(n-1,k+1,t)

Interestratesh1中的错误(第88行) f0=f0+x(k+4,1)。*样条曲线(3,k,t)

使用just&时出现的错误是:

使用时出错* 内部矩阵尺寸必须一致

样条曲线中的错误(第15行) 样条线=((t-结(k+4))/(结(k+4+n)-结(k+4)))*样条线(n-1,k,t)+ ((节(k+5+n)-t)/(节(k+5+n)-k+5))*样条曲线(n-1,k+1,t)

样条曲线中的错误(第15行) 样条线=((t-结(k+4))/(结(k+4+n)-结(k+4)))*样条线(n-1,k,t)+ ((节(k+5+n)-t)/(节(k+5+n)-k+5))*样条曲线(n-1,k+1,t)

Interestratesh1中的错误(第88行) f0=f0+x(k+4,1)。*样条曲线(3,k,t)


很抱歉,我想问一个基本的问题,但这肯定是一个非常令人沮丧的问题,因此非常感谢您的帮助。

如果您想对向量执行and操作,您必须使用单个
&
而不是双
&
a&b
将为eac返回一个带有
1
的逻辑向量h元素
i
其中
a(i)和&b(i)=1
0
其中
a(i)和&b(i)==0

如果要对向量执行and操作,则必须使用单个
&
而不是双
&
a&b
将为每个元素
i
返回一个逻辑向量,其中
a(i)和
b(i)==1
0
其中
a(i)和
b(i)==0

对不起,我错过了你说你已经尝试过的那部分!没问题。:)你认为还有其他建议可能有效吗?当你使用单曲
&
时,你会遇到什么错误?这条线上的矩阵尺寸误差:
spline=((t-knots(k+4))/(knots(k+4+n)-knots(k+4+n)-knots(k+4))*样条曲线(n-1,k,t)+((knots(k+5+n)-t)/(knots(k+5+n)-knots(k+5))*样条曲线(n-1,k+1,t)?是的,但我想我通过替换*by.*修复了它,然后代码似乎运行良好。然而,它仍然产生了一个奇怪的图形,这意味着我做错了什么;但是,堆栈交换无法修复这种错误。但是谢谢你看了它。:)我很感激。对不起,我错过了你说你已经试过的那部分!没问题。:)你认为还有什么其他的建议可行吗?当你使用单一的
&
时,你会遇到什么错误?这条线上的矩阵尺寸误差:
spline=((t-knots(k+4))/(knots(k+4+n)-knots(k+4+n)-knots(k+4))*样条曲线(n-1,k,t)+((knots(k+5+n)-t)/(knots(k+5+n)-knots(k+5))*样条曲线(n-1,k+1,t)?是的,但我想我通过替换*by.*修复了它,然后代码似乎运行良好。然而,它仍然产生了一个奇怪的图形,这意味着我做错了什么;但是,堆栈交换无法修复这种错误。但是谢谢你看了它。:)我很感激。