楼主: 等风来撒
783 3

[问答] 一个很基础的问题...在线求解答 [推广有奖]

  • 0关注
  • 0粉丝

博士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
500 个
通用积分
35.5521
学术水平
0 点
热心指数
5 点
信用等级
0 点
经验
2497 点
帖子
220
精华
0
在线时间
232 小时
注册时间
2014-1-5
最后登录
2023-10-30

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有如下一程序,是计算期权的

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等等都是以向量形式输出的,如果这样的话我就不用一组组数据输出再得出结果了,请问有高手能帮帮忙吗...
二维码

扫码加我 拉你入群

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

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

关键词:求解答 function Sigma pnorm Delta 在线

这个...........
沙发
wangqian151 发表于 2014-10-25 07:04:43 |只看作者 |坛友微信交流群
写循环结构,for(i in 1:~~~)  {
f(~~~~~)->x[i]
x
}
已有 1 人评分论坛币 收起 理由
李会超 + 12 热心帮助其他会员

总评分: 论坛币 + 12   查看全部评分

使用道具

藤椅
meishanjia1900 发表于 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)

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

这里不再赘述。
已有 1 人评分论坛币 收起 理由
李会超 + 12 热心帮助其他会员

总评分: 论坛币 + 12   查看全部评分

使用道具

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

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

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

GMT+8, 2024-5-22 00:58