首页 > 解决方案 > 使用不同的参数值多次运行一个函数

问题描述

通过左键单击文件夹窗格上的文件以打开导入窗口并导入为元胞数组,导入了以下数据。每列都将成为我的变量之一(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']))

标签: matlab

解决方案


鉴于您有一个单元格数组,我认为它看起来像这样:

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

推荐阅读