485 11

[问答] 自己定义的函数的一个变量取一系列值,运行后显示nonconformant arguments [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

初中生

47%

还不是VIP/贵宾

-

威望
0
论坛币
722 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
295 点
帖子
10
精华
0
在线时间
11 小时
注册时间
2016-12-24
最后登录
2019-5-18

顺风耳不能听 发表于 2019-1-11 19:43:38 |显示全部楼层
100论坛币

自己定义的函数的一个变量取一系列值,然后输出对应的结果。

function [price sig] = mcmc(s0, K, sigma, r, T, N, M)
rx=randn(M, N-1);
dt=T/(N-1);
S=[s0*ones(M,1) zeros(M,N-1)];
for i=1:(N-1)
S(:,i+1)=S(:,i)+S(:,i)*r*dt+sigma*dt^0.5*(S(:,i).*rx(:,i));
end;
p1=max(mean(S(:,1:end),2)-K,0);
price=exp(-r*T)*mean(p1);
sig=std(p1)/M^0.5;
end
[price sig]=mcmc(50,50,0.4,0.1,1,60:80,100000)
比如我在这里想要看N取60到80的时候对应的price和sig
运行结果显示nonconformant arguments
应该是矩阵运算的问题,该怎么解决啊?

stata SPSS
zwzhai 发表于 2019-1-11 21:35:32 |显示全部楼层
给你一个建议,你把这个函数给程序化,即用一个程序去运行一下。就知道哪错了。。。。很容易的。即去掉它的函数性。
回复

使用道具 举报

zwzhai 发表于 2019-1-11 21:42:44 |显示全部楼层
rx=randn(M, N-1);这里是不允许你用向量去定义N=60:80的。
回复

使用道具 举报

zwzhai 发表于 2019-1-11 21:48:03 |显示全部楼层
当然,你可以通过另外的方式把这个公式进行调整达到你算60到80的各个price与SIG值。
回复

使用道具 举报

zwzhai 发表于 2019-1-11 21:56:17 |显示全部楼层
本帖最后由 zwzhai 于 2019-1-12 15:32 编辑

function [price sig] = mcmc(s0, K, sigma, r, T, N, M)
x=0;
for NN=N
rx=randn(M, NN-1);
dt=T/(NN-1);
S=[s0*ones(M,1) zeros(M,NN-1)];
for i=1:(NN-1)
S(:,i+1)=S(:,i)+S(:,i)*r*dt+sigma*dt^0.5*(S(:,i).*rx(:,i));
end;
x=x+1;
p1=max(mean(S(:,1:end),2)-K,0);
price(x)=exp(-r*T)*mean(p1);
sig(x)=std(p1)/M^0.5;
end
end
回复

使用道具 举报

zwzhai 发表于 2019-1-11 21:56:54 |显示全部楼层
我运行了一下,可行!
回复

使用道具 举报

zwzhai 发表于 2019-1-12 15:36:47 |显示全部楼层
已帮你解决了。。。。。。。
回复

使用道具 举报

zwzhai 发表于 2019-1-12 15:37:32 |显示全部楼层

function [price sig] = mcmc(s0, K, sigma, r, T, N, M)
x=0;
for NN=N
rx=randn(M, NN-1);
dt=T/(NN-1);
S=[s0*ones(M,1) zeros(M,NN-1)];
for i=1:(NN-1)
S(:,i+1)=S(:,i)+S(:,i)*r*dt+sigma*dt^0.5*(S(:,i).*rx(:,i));
end;
x=x+1;
p1=max(mean(S(:,1:end),2)-K,0);
price(x)=exp(-r*T)*mean(p1);
sig(x)=std(p1)/M^0.5;
end
end
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 5 + 5 + 5 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

回复

使用道具 举报

顺风耳不能听 发表于 2019-1-13 22:08:24 |显示全部楼层
zwzhai 发表于 2019-1-12 15:37
function  = mcmc(s0, K, sigma, r, T, N, M)
x=0;
for NN=N
抱歉没及时回复,N是可以计算出一个区间的结果了,但是能不能让让所有变量可以像N这样呢?
请问应该怎么做呀?
回复

使用道具 举报

顺风耳不能听 发表于 2019-1-13 22:35:27 |显示全部楼层
zwzhai 发表于 2019-1-12 15:37
function  = mcmc(s0, K, sigma, r, T, N, M)
x=0;
for NN=N
我按照你的代码如法炮制了下,把NN换成了其它变量,比如做K的时候
function [price sig] = mcmc(s0, K, sigma, r, T, N, M)
x=0;
for KK=K
rx=randn(M, N-1);
dt=T/(N-1);
S=[s0*ones(M,1) zeros(M,N-1)];
for i=1:(N-1)
S(:,i+1)=S(:,i)+S(:,i)*r*dt+sigma*dt^0.5*(S(:,i).*rx(:,i));
end;
x=x+1;
p1=max(mean(S(:,1:end),2)-KK,0);
price(x)=exp(-r*T)*mean(p1);
sig(x)=std(p1)/M^0.5;
end
end
这样好像可以出结果,请问对吗?
如果对的话,我是不是能够直接用plot对函数输出结果作灵敏度分析的折线图呀
回复

使用道具 举报

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

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2019-6-19 13:48