【发布时间】:2017-06-20 12:46:16
【问题描述】:
我在 Matlab 中实现一个调用我在不同 .m 文件中编写的其他函数的函数时遇到很大困难。我被卡住的部分是对另一个函数中输入的不同值求和的部分,其中另一个函数内部也有一个和。第一个和的下限是第二个和的上限。
对于作为向量输入的 n 和作为标量输入的 x,我的 Hh(n,x) 函数可以正常工作。由于 n 的向量化输入,In 函数内部的 Hi 上的和可以通过调用 sum(Hh(0:n,x)) 快速计算出来。
我想对 In 函数做同样的事情,但是因为 In 内部的 n 现在的范围是 0 到 k-1,而外部函数中的 k 范围是 1 到 n,所以我不知道如何计算这个双和,其中内部和以外部和的下限作为上限。我想尽可能有效地评估这个双重和,因为以后我想用这些公式做很多模拟。现在我在 n 次评估函数,将每个值存储在一个向量中,然后求和,这在计算上非常密集......
我的 In 函数的 Matlab 代码是:
function in = In(n,c,alphaa,betaa, delta)
ie = 0:n;
in = -(exp(alphaa*c)/alphaa)...
.*sum((betaa/alphaa).^(n-ie).*Hh(ie,betaa*c-delta))...
-(betaa/alphaa).^(n+1)
end
外部函数的Matlab代码,我们暂时称它为函数f:
function f = F(n,a,mu,sigma,eta1,T)
for k = 1: n
vector(k) = In(k-1,a-mu*T,-eta1,-1/(sigma*sqrt(T)),-(sigma*eta1*sqrt(T)));
end
f = sum(vector);
end
如何让In里面的n的输入向量化,这样我就不用把所有输入的n值都单独存起来再计算总和,而是直接对输入的向量n计算总和。
感谢任何帮助,因为我现在严重卡住了!提前谢谢!
【问题讨论】:
标签: matlab performance sum vectorization memory-efficient