全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
16482 11
2012-04-15
如题。总共60个即期利率曲线(每天一个),我想把这些曲线按照时间都放在一张三维图中。

相关代码如下:

PlottingDates = CurveSettle+20:30:CurveSettle+365*25;
TimeToMaturity = yearfrac(CurveSettle,PlottingDates);
NSParYields = NSModel.getParYields(PlottingDates);
plot3(TimeToMaturity,n,NSParYields)

运行出错:
Vectors must be the same lengths.




我知道问题应该是出在红色的n上面,n就是从1到60,我不知道应该怎样实现我的目的。应该是很简单的问题,但是我实在不擅长这方面的知识,希望高人来帮我一下。是不是程序用错了呢?

二维码

扫码加我 拉你入群

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

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

全部回复
2012-4-16 11:40:11
有人明白这个问题吗?请来帮我一下,非常感谢。自己顶
二维码

扫码加我 拉你入群

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

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

2012-4-16 16:32:03
aywinng 发表于 2012-4-16 11:40
有人明白这个问题吗?请来帮我一下,非常感谢。自己顶
个人认为应该不适合plot3
假设n=60,PlottingDates相同
NSParYields不同(这里我用NSParYields+0.001*i)
利用loop,画出60条curves

Settle = repmat(datenum('30-Apr-2008'),[6 1]);
Maturity = [datenum('07-Mar-2009');datenum('07-Mar-2011');...
datenum('07-Mar-2013');datenum('07-Sep-2016');...
datenum('07-Mar-2025');datenum('07-Mar-2036')];

CleanPrice = [100.1;100.1;100.8;96.6;103.3;96.3];
CouponRate = [0.0400;0.0425;0.0450;0.0400;0.0500;0.0425];
Instruments = [Settle Maturity CleanPrice CouponRate];

NSModel = IRFunctionCurve.fitNelsonSiegel('Zero',datenum('30-Apr-2008'),Instruments);

CurveSettle=733528 ;     %datenum('30-Apr-2008')
PlottingDates = CurveSettle+20:30:CurveSettle+365*25;
TimeToMaturity = yearfrac(CurveSettle,PlottingDates);
NSParYields = NSModel.getParYields(PlottingDates);
%plot(PlottingDates,NSParYields,'r')
%hold on
%datetick('x')

%%%%
n=60
figure;  
hold on;
for i=1:n     
plot(PlottingDates,(NSParYields+0.001*i));
end
datetick('x')
   ns.bmp      

二维码

扫码加我 拉你入群

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

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

2012-4-17 01:05:15
epoh 发表于 2012-4-16 16:32
个人认为应该不适合plot3
假设n=60,PlottingDates相同
NSParYields不同(这里我用NSParYields+0.001*i ...
高手!好厉害。但是我还是想画一个三维图。我把我的数据简化一下,变成10组,前辈帮我看看可以吗?

x轴范围是0-10(表示到期时间),y轴范围是0-10(表示共十条利率曲线),z轴范围是0-0.05(表示即期利率)。

x轴的取值是 x = [1 2 3 4 5 7 10];


十组即期利率数据的矩阵表示如下:
rate = [0.0204        0.0314        0.0384        0.0428        0.0455        0.0483        0.0497
0.0179        0.0316        0.0389        0.0429        0.0452        0.0474        0.0488
0.0165        0.0311        0.0385        0.0424        0.0447        0.0469        0.0484
0.0155        0.0304        0.0377        0.0417        0.0439        0.0462        0.0477
0.0148        0.0295        0.037        0.041        0.0433        0.0456        0.0471
0.0155        0.0293        0.0365        0.0404        0.0427        0.0451        0.0467
0.0164        0.0291        0.0358        0.0395        0.0418        0.0443        0.0461
0.0144        0.0284        0.0359        0.0399        0.0423        0.0447        0.0463
0.0146        0.0277        0.0349        0.0389        0.0414        0.044        0.0456
0.013        0.0252        0.0323        0.0364        0.0389        0.0416        0.0432]

我想把这些数据做成三维图,应该怎么实现呢?我用Matlab自带的图形工具总是不成功,不知道问题出在那里。
附件就是我想要实现的图形,是其他人论文中摘取的,拜托帮我看下。

即期利率三维图.jpg
附件是60条曲线放在一起的效果,大概就是这个样子的。

附件列表
即期利率三维图.jpg

原图尺寸 40.34 KB

即期利率三维图.jpg

二维码

扫码加我 拉你入群

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

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

2012-4-17 10:09:56
aywinng 发表于 2012-4-17 01:05
高手!好厉害。但是我还是想画一个三维图。我把我的数据简化一下,变成10组,前辈帮我看看可以吗?

x轴 ...
方便的话请告知原图之x,y,z各代表甚么

Vectors must be the same lengths.

x = [1 2 3 4 5 7 10];
所以y要设为 y=1:7,否则会出错

要画几条线,关键在rate matrix
如果是7 x 10,画10条
如果是7 x 60,画60条

所以x,y要设正确,图形才会漂亮

ratetranpose=rate'

plot3([1 2 3 4 5 7 10],ratetranpose,1:7)

grid on

   test.bmp

二维码

扫码加我 拉你入群

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

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

2012-4-17 10:34:57
应该用mesh或者surf函数绘制三维曲面图。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群