全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5011 3
2017-02-15
FindImpVol2=function(S0,K,t,r,CM)
{
  Sigma0=-20;
  Sigma1=20;
  while((Sigma1-Sigma0)^(-2)<10^8){
    Sigma=Sigma1-g(S0,K,t,r,Sigma1,CM)/((g(S0,K,t,r,Sigma1,CM)-g(S0,K,t,r,Sigma0,CM))/(Sigma1-Sigma0))
    Sigma0=Sigma1
    Sigma1=Sigma
    Sigma=Sigma1-g(S0,K,t,r,Sigma1,CM)/((g(S0,K,t,r,Sigma1,CM)-g(S0,K,t,r,Sigma0,CM))/(Sigma1-Sigma0))
    Sigma0=Sigma1
    Sigma1=Sigma
  }
  return(Sigma)
}
FindImpVol2(135.02,K1[1],T1,r,CM1[1])
运行后显示『Error in while ((Sigma1 - Sigma0)^(-2) < 10^1) { :
  missing value where TRUE/FALSE needed』
但把循环条件改成10^2就可以运行了,就很迷。请问有什么解决办法吗?

二维码

扫码加我 拉你入群

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

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

全部回复
2017-2-17 14:28:13
while循环里面也要有返回值,
while((Sigma1-Sigma0)^(-2)<10^8){
    Sigma=Sigma1-g(S0,K,t,r,Sigma1,CM)/((g(S0,K,t,r,Sigma1,CM)-g(S0,K,t,r,Sigma0,CM))/(Sigma1-Sigma0))
    Sigma0=Sigma1
    Sigma1=Sigma
    Sigma=Sigma1-g(S0,K,t,r,Sigma1,CM)/((g(S0,K,t,r,Sigma1,CM)-g(S0,K,t,r,Sigma0,CM))/(Sigma1-Sigma0))
    Sigma0=Sigma1
    Sigma1=Sigma
    return(Sigma)#这里加上这个
  }
二维码

扫码加我 拉你入群

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

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

2017-2-18 21:11:09
循环里是不需要返回数值的,因为并没有在函数里运行。
复制代码

直接输入x就可以知道经过很多次循环运算后,x值是多少了。
不能用返回值的。
你的报错显示的是这个:
复制代码

目测函数里写的是
复制代码

可能是判定条件不对吧。
极有可能的结果是:Sigma1、Sigma0在计算过程中,出现了NA,你的循环表达式失效了。建议你仔细检查一下你的公式,看有无计算出NA的可能性。
二维码

扫码加我 拉你入群

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

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

2017-2-20 16:09:21
jiangbeilu 发表于 2017-2-18 21:11
循环里是不需要返回数值的,因为并没有在函数里运行。

直接输入x就可以知道经过很多次循环运算后,x值是 ...
好的。
有可能是Sigma1-Sigma出现为0的情况,从而分母变成0了……
虽然我也不知道为什么割线法求方程零点为什么会迭代到同一个点上……
谢谢回答!
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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