楼主: xinhappy
2549 2

[学术与投稿] Matlab求助:样条函数程序单独可运行,循环后下标报错 [推广有奖]

  • 0关注
  • 1粉丝

已卖:1份资源

硕士生

70%

还不是VIP/贵宾

-

威望
0
论坛币
317 个
通用积分
26.6929
学术水平
2 点
热心指数
2 点
信用等级
0 点
经验
766 点
帖子
70
精华
0
在线时间
326 小时
注册时间
2010-3-4
最后登录
2024-2-21

楼主
xinhappy 在职认证  发表于 2013-9-14 14:11:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在做利率期限结构时,我用MacCulloch的样条函数编程:
函数:
  1. % the spine function of MacCulloch
  2. function f=f(m,d,j)
  3. k=length(d);
  4. if j==1
  5.     if m>=d(1) && m<=d(2)
  6.         f=m-(m^2)/(2*d(2));
  7.     elseif  m>d(2) && m<=d(k)
  8.         f=d(2)/2;
  9.     else
  10.         error('the first step is wrong')
  11.     end
  12. elseif j>=2 && j<=k-1
  13.     if m>=d(1) && m<=d(j-1)
  14.         f=0;
  15.     elseif m>d(j-1) && m<=d(j)
  16.         f=(m-d(j-1))^2/(2*(d(j)-d(j-1)));
  17.     elseif  m>d(j) && m<=d(j+1)
  18.         f=(d(j)-d(j-1))/2+(m-d(j))-(m-d(j))^2/(2*(d(j+1)-d(j)));
  19.     elseif  m>d(j+1) && m<=d(k)
  20.         f=(d(j+1)-d(j-1))/2;
  21.     else
  22.         error('the second step is wrong')
  23.     end
  24. elseif j==k
  25.     if m>=d(1) && m<=d(j-1)
  26.         f=0;
  27.     elseif m>d(j-1) && m<=d(j)
  28.         f=(m-d(j-1))^2/(2*(d(j)-d(j-1)));
  29.     else
  30.         error('the third step is wrong')
  31.     end
  32. else
  33.     error('you input the wrong number')
  34. end
复制代码
实验结果:
赋值:
m=[1,2,3,4,5,6,7,8,9,10];
d=[0;1;4;8];
j=2;
f(m(2),d,j)
得到结果:1.3333.
使用循环后:
f=0;
for q=1:10
    f=f+f(m(q),d,j);
end
报错:??? Subscript indices must either be real positive integers or logicals.

再单独运行:f(m(2),d,j)
报错:??? Index exceeds matrix dimensions.

配置:
matlab7.11.0(R2010b),32位。电脑:win7 (32位)。

       请问各位大侠,问题出在哪里呢?m是1*10的向量,循环是从第1个到第10个值,下标是这里出现问题的吗?另外如果设置的函数有问题,那么在第一次单独运行f(m(2),d,j)是正常的,循环过后再运行却报错。我是程序菜鸟,这个还是我个人意义上的第一次编程,请大家费心了。谢谢各位了




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB atlab matla 样条函数 Mat matlab

沙发
xinhappy 在职认证  发表于 2013-9-14 16:44:44
不用回复了,我已经解决了。是设置函数的变量名和调用的变量名起了冲突。谢谢大家了

藤椅
呈甄 发表于 2013-11-27 15:16:41
for i=1:length(m)
p(i)=f(m(i),d,j)
end
sum(p)

p=0
for i=1:length(m)
p=p+f(m(i),d,j)
end
结果得出来了,但??? Error using ==> f
the second step is wrong,这个我就不知道怎么回事了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-30 22:57