Matlab-Splines中的指标函数

时间:2013-02-27 09:27:57

标签: function matlab splines

好吧,我遇到了一个愚蠢的问题,我自己的工作和网络搜索都没有真正提供解决方案,所以我想询问并查看是否有人有任何建议。我正在编写一个最终用于绘制利率曲线的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')

Splines函数写在这里:

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

使用&amp;&amp ;;时收到的错误消息是:

操作数到||和&amp;&amp;运算符必须可转换为逻辑标量值。

样条线错误(第9行)     if(t> knots(k + 4)&amp; t

样条线错误(第15行)     spline =((t-knots(k + 4))/(knots(k + 4 + n)-knots(k + 4)))*样条(n-1,k,t)+     ((节第(k + 5 + N)-t)/(节第(k + 5 + n)的-knots(K + 5)))*样条(N-1,K + 1,T);

样条线错误(第15行)     spline =((t-knots(k + 4))/(knots(k + 4 + n)-knots(k + 4)))*样条(n-1,k,t)+     ((节第(k + 5 + N)-t)/(节第(k + 5 + n)的-knots(K + 5)))*样条(N-1,K + 1,T);

样条线错误(第15行)     spline =((t-knots(k + 4))/(knots(k + 4 + n)-knots(k + 4)))*样条(n-1,k,t)+     ((节第(k + 5 + N)-t)/(节第(k + 5 + n)的-knots(K + 5)))*样条(N-1,K + 1,T);

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

我使用&amp;时出现的错误是:

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

样条线错误(第15行)     spline =((t-knots(k + 4))/(knots(k + 4 + n)-knots(k + 4)))*样条(n-1,k,t)+     ((节第(k + 5 + N)-t)/(节第(k + 5 + n)的-knots(K + 5)))*样条(N-1,K + 1,T);

样条线错误(第15行)     spline =((t-knots(k + 4))/(knots(k + 4 + n)-knots(k + 4)))*样条(n-1,k,t)+     ((节第(k + 5 + N)-t)/(节第(k + 5 + n)的-knots(K + 5)))*样条(N-1,K + 1,T);

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

我很遗憾地问我确定一个基本问题是什么,但这会非常令人沮丧,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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