如何将这个数学公式转换为矢量化的MATLAB代码?
a(i) = Sum (Log (b(i) / b(i-1)) - Sum (Log (b(i) / b(i-1)), 10) , 10 ) b是一个向量,且i > 10 。
而且, Sum (d(i),n) = d(i) + d(i-1) + ... + d(i-n+1) ,其中i > n
回答:
在MATLAB中对公式进行编码之前,可以进行很多简化。首先,如下定义函数f(i) :
f(i) = Log(b(i)/b(i-1)) = Log(b(i)) - Log(b(i-1)) 然后,按照定义的方式应用Sum函数,您可以看到许多术语相互抵消:
Sum(f(i),10) = f(i) + f(i-1) + ... + f(i-8) + f(i-9) = Log(b(i)) - Log(b(i-1)) + Log(b(i-1)) - Log(b(i-2)) + ... + Log(b(i-8)) - Log(b(i-9)) + Log(b(i-9)) - Log(b(i-10)) ==> Sum(f(i),10) = Log(b(i)) - Log(b(i-10)) 现在,这里变得有些棘手,因为可能有两种方法来解释嵌套的Sum运算:一种方法是内部求和变量i
依赖于外部求和变量i ,而一种内部求和变量i
无关 。外部求和变量i 。
当内在i依赖于外在i ...
然后对于外部求和的每个项,从该项的i的递减值开始计算内部求和。例如,外部求和的第五项应如下所示:
... + f(i-4) - Sum(f(i-4),10) + ... 因此, a(i)的等式将简化如下:
a(i) = Sum(f(i) - Sum(f(i),10),10) = Sum(Log(b(i)) - Log(b(i-1)) - Log(b(i)) + Log(b(i-10)),10) = Sum(Log(b(i-10)) - Log(b(i-1)),10) = Log(b(i-10)) - Log(b(i-1)) + Log(b(i-11)) - Log(b(i-2)) + ... + Log(b(i-18)) - Log(b(i-9)) + Log(b(i-19)) - Log(b(i-10)) [b(i-11)*b(i-12)*...*b(i-18)*b(i-19)] ==> a(i) = Log[-----------------------------------] [ b(i-1)*b(i-2)*...*b(i-8)*b(i-9) ] 这个最终方程可以在MATLAB中进行如下编码:
a(i) = log(prod(b(i-(11:19)))/prod(b(i-(1:9))));
当内在i独立于外在i ...
则内部求和的结果相对于外部求和实质上将是一个常数。例如,外部求和的第五项应如下所示:
... + f(i-4) - Sum(f(i),10) + ... 因此, a(i)的等式将简化如下:
a(i) = Sum(f(i) - Sum(f(i),10),10) = Sum(f(i),10) - 10*Sum(f(i),10) = -9*Sum(f(i),10) = 9*Log(b(i-10)) - 9*Log(b(i)) ==> a(i) = 9*Log(b(i-10)/b(i)) 这个最终方程可以在MATLAB中进行如下编码:
a(i) = 9*log(b(i-10)/b(i));
更多&回答...