4166 11

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

  • 0关注
  • 0粉丝

等待验证会员

初中生

61%

还不是VIP/贵宾

-

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

楼主
顺风耳不能听 发表于 2019-1-11 19:43:38 |AI写论文
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
应该是矩阵运算的问题,该怎么解决啊?

关键词:Arguments argument FORMA form MEN

沙发
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
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
我运行了一下,可行!

7
zwzhai 发表于 2019-1-12 15:36:47
已帮你解决了。。。。。。。

8
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   查看全部评分

9
顺风耳不能听 发表于 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这样呢?
请问应该怎么做呀?

10
顺风耳不能听 发表于 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对函数输出结果作灵敏度分析的折线图呀

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-6 04:41