全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
5669 6
2007-07-12

小弟初学MATLAB没几天,编了个算权证的公式,可是出现问题,出了inf,计算无法继续.请高手指点,见笑了.

function p = bs(r,t,sigma,s,x)

% This function calculates the value of

% Define varibales

% r--无风险利率 连续复利 单位:年

% t--权证到期时间

% sigma--标的股票波动率

% s--标的股票现价

% x--权证规定的执行价格

r = input('Enter the value of r: ');

t = input('Enter the valur of t: ');

sigma = input('Enter the value of sigma: ');

s = input('Enter the value of s: ');

x = input('Enter the value of x: ');

d1 = (log(s/x)+(r+sigma^2/2)*t)/sigma*sqrt(t)

d2= d1-sigma*sqrt(t)

p=x*exp(-r*t)*normcdf(-d2,0,1)-s*normcdf(-d1,0,1)

??? Input must be real.

Error in ==> erfc at 21

y = erfcore(x,1);

Error in ==> normcdf at 68

p = 0.5 * erfc(-z ./ sqrt(2));

Error in ==> bs at 16

p=x*exp(-r*t)*normcdf(-d2,0,1)-s*normcdf(-d1,0,1)

二维码

扫码加我 拉你入群

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

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

全部回复
2007-7-12 14:59:00
我不懂BS啊,不好意思。 如果有空,也请帮忙看看我的关于BP网的问题。thanks.
二维码

扫码加我 拉你入群

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

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

2007-7-12 17:06:00

d1 = (log(s/x)+(r+sigma^2/2)*t)/(sigma*sqrt(t));

d2 = d1-(sigma*sqrt(t));

call = s* normcdf(d1) - x* exp(-r*t) * normcdf(d2)

put = x* exp(-r*t) * normcdf(-d2) - s* normcdf(-d1)

二维码

扫码加我 拉你入群

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

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

2007-7-12 22:42:00

为什么你的normcdf(d1)不是normcdf(d1,0,1)呢?不应该是标准正态分布么?

d1(isnan(d1))=0这段代码是作什么用的?能给讲一下么?

二维码

扫码加我 拉你入群

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

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

2007-7-13 06:10:00

NaN是表示“Not a Number”的简写,表示非数字变量,isnan(d1)逻辑判断变量d1中有没有非数字元素(可以通俗理解其功能为is NaN ?),并且给出相应的位置,d1(isnan(d1))=0,表示将d1中非数字元素换成0。

比如MATLAB计算A=0 ,B=0,C=A/B,其结果不确定,就是“NaN”;变量C和任何其他变量的运算结果都是“NaN”;

比如 D =C*1;则D也是“NaN”;

不知清楚了没有。


normcdf(d1)和normcdf(d1,0,1)在MATLAB中是一回事,主要是MATLAB怕你累着了,关心你,不让你再写0,1了。normcdf(d1)默认为均值是0,方差是1的振态分布函数,如果不是0,1,就要用normcdf(d1,均值,方差)形式,

[此贴子已经被作者于2007-7-13 6:35:16编辑过]

二维码

扫码加我 拉你入群

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

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

2007-7-13 12:46:00
恩 清楚了 谢谢指点哈 以后还请多多讲解.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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