matlab - 使用不同的参数值多次运行一个函数
问题描述
通过左键单击文件夹窗格上的文件以打开导入窗口并导入为元胞数组,导入了以下数据。每列都将成为我的变量之一(K = 第一列等)。
StrikePrice UnderlyingPrice mT Rf DividendRate Volatility
47 45 4 0.02 0.5 0.2
50 55 20 0.03 0.1 0.35
我正在使用 Mark Hoyle (2016) 首次编写的函数,该函数为 American Calls 定价
function LSMAmCallContDiv(S0,K,D,r,sigma,T,NSteps,NSims)
为这个函数填写我的数据的第一行;
function LSMAmCallContDiv(45, 47, 0.5, 0.02, 0.2, 4, 500, 100)
无论如何我可以执行此功能而无需手动更改单元格数组中第二行的值吗?(我在现实中处理很多行)。这是我在使用以下代码在 RStudio 中定价时实现的,但是我是 MatLab 的完整初学者。
jpmitmput30results = apply(jpmitmput30full, 1, function(x) AmerPutLSM(Spot = x['UnderlyingPrice'], sigma = x['Volatility'],
n=500, m=100, Strike = x['StrikePrice'],
r = x['Rf'], dr = x['DividendRate'],
mT = x['mT']))
解决方案
鉴于您有一个单元格数组,我认为它看起来像这样:
data = {47 45 4 0.02 0.5 0.2
50 55 20 0.03 0.1 0.35};
要获取一个值,您可以索引为data{row,column}
,例如data{1,3}
返回 4。
现在你需要的只是一个循环,以正确的顺序重复调用你的函数:
for ii=1:size(data,1)
LSMAmCallContDiv(data{ii,2},data{ii,1},data{ii,5},data{ii,4},data{ii,6},data{ii,3},500,100)
end
由于该函数没有输出参数,我们无法将其结果收集到数组中。您必须从终端窗口复制粘贴它们。如果您决定修改函数以返回值,那么您可以收集它们。首先将函数的第一行修改为:
function [Price,StdErr] = LSMAmCallContDiv(S0,K,D,r,sigma,T,NSteps,NSims)
然后在您自己的代码中:
Price = zeros(size(data,1),1);
StdErr = zeros(size(data,1),1);
for ii=1:size(data,1)
[Price(ii),StdErr(ii)] = LSMAmCallContDiv(data{ii,2},data{ii,1},data{ii,5},data{ii,4},data{ii,6},data{ii,3},500,100)
end
推荐阅读
- java - 如何在Android中限制Textview的最大长度,我想设置10行100字
- reactjs - 添加渲染 pdf 会话后,React jsx 类显示数据两次
- c# - 如何让 IIS 将请求重定向回浏览器,而不是应用程序重定向它?
- javascript - 无限的背景颜色循环
- php - 在数组php中计算行并计算其值
- android - 如果我没有收到带有 getDynamicLink(intent) 的 dynamicLink 会怎样?
- python - 我的 LSTM 模型没有学习,权重没有更新
- c++ - 使用“Microsoft Debugging Tools for Windows”进行内存泄漏检测
- powerbi - 当前 YTD 与上个月 YTD Power BI 度量
- git - 使用 git 将通用项目添加到特定项目