全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
922 3
2014-10-24
我有如下一程序,是计算期权的

function (s,x,t,sigma,r,d)
+ {d1=(log(s/x)+(r+0.5*sigma**2)*t)/(sigma*sqrt(t));
+ d2=d1-sigma*sqrt(t);
+ call=s*exp(-d*t)*pnorm(d1)-x*exp(-r*t)*pnorm(d2);
+ delta=exp(-d*t)*pnorm(d1);
+ gamma=exp(-d*t)*dnorm(d1)/(s*sigma*sqrt(t));
+ theta=-exp(-d*t)*s*dnorm(d1)*sigma/(2*sqrt(t))+d*s*pnorm(d1)*exp(-d*t)-r*x*exp(-r*t)*pnorm(d2);
+ vega=s*exp(-d*t)*sqrt(t)*dnorm(d1);
+ rho=x*t*exp(-r*t)*pnorm(d2);
+ cp=c(call,delta,gamma,vega,theta,rho);
+ cp;


但是目前我只会输入一组参数然后输出一组值,请问有没有办法我可以一次输入N组参数,输出N组值,

例如,我想把s x t sigma r d全部变成向量,然后输出的delta gamma等等都是以向量形式输出的,如果这样的话我就不用一组组数据输出再得出结果了,请问有高手能帮帮忙吗...
二维码

扫码加我 拉你入群

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

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

全部回复
2014-10-25 07:04:43
写循环结构,for(i in 1:~~~)  {
f(~~~~~)->x[i]
x
}
二维码

扫码加我 拉你入群

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

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

2014-10-25 12:19:33
2楼正解,但2楼没有给出该x向量对应的参数情况,你事后怎么知道比如x[50]这个结果对应的原始参数(s,x,t,sigma,r,d)情况呢?我们应该先生成一个参数矩阵,再按其中给定的参数生成对应的结果向量:

   参数矩阵m.parameters:      结果向量x:

       [,1] [,2] [,3]
  [1,]    1    2    7  -------------  value1
  [2,]    1    2    8  -------------  value2
  [3,]    1    2    9  -------------  value3
  [4,]    1    3    7  -------------  value4
  [5,]    1    3    8  -------------  value5
  [6,]    1    3    9  -------------  value6
  [7,]    1    4    7  -------------  value7
  [8,]    1    4    8  -------------  value8
  [9,]    1    4    9  -------------  value9


我们将你的具体函数f(...)当成黑箱,不讨论其内容(正如2楼所做),这里专门探讨参数矩阵的生成方法:


(1)

先生成参数列表:

x = list()
x[[1]] = 1:10
x[[2]] = 2:5
x[[3]] = 7:9

其中x[[ i ]]表示参数 i 的取值范围

这只是一个样例,列表x的长度可以不止3,也可以是更多,这要看你的参数具体有多少个。


(2)

生成参数矩阵:

generate.parameters = function(x) {

  m.parameters = matrix(nrow = prod(unlist(lapply(x, length))), ncol = length(x))

  for (i in 1:length(x)) {

    a = ifelse(i < length(x), prod(unlist(lapply(x[(i+1):length(x)], length))), 1)
    b = ifelse(i > 1, prod(unlist(lapply(x[1:(i-1)], length))), 1)
    m.parameters[, i] = rep(x[[ i ]], each = a, times = b)

  }

  return(m.parameters)

}

> generate.parameters(x)
       [,1] [,2] [,3]
  [1,]    1    2    7
  [2,]    1    2    8
  [3,]    1    2    9
  [4,]    1    3    7
  [5,]    1    3    8
  [6,]    1    3    9
  [7,]    1    4    7
  [8,]    1    4    8
  [9,]    1    4    9
[10,]    1    5    7
[11,]    1    5    8
[12,]    1    5    9
[13,]    2    2    7
[14,]    2    2    8
[15,]    2    2    9
[16,]    2    3    7
[17,]    2    3    8
[18,]    2    3    9
[19,]    2    4    7
[20,]    2    4    8
[21,]    2    4    9
[22,]    2    5    7
[23,]    2    5    8
[24,]    2    5    9
[25,]    3    2    7
[26,]    3    2    8
[27,]    3    2    9
[28,]    3    3    7
[29,]    3    3    8
[30,]    3    3    9
.........

参数矩阵会穷尽众参数的所有可能组合。


(3)

针对该矩阵中各种参数组合,计算对应的结果

这里不再赘述。
二维码

扫码加我 拉你入群

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

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

2014-10-25 12:58:26
抱歉,楼上反复修改,原因是程序粘贴回复后会出现部分字符的丢失,也可能是机器在显示帖子的内容时将部分程序用的字符当成是控制显示格式的字符,所以给隐去了。
但是我又不想用“插入代码”功能。目前论坛的手机APP中还无法正常显示通过“插入代码”功能写入的程序内容。
所以只能反复修改,最后发现:“[[3]]”中的3如果换成字符i,就会直接变成"[]",最终我只能将内容写得开一些,变成"[[ i ]]"后才能正常显示。郁闷。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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