![]() |
将数学公式转换为MATLAB代码
如何将这个数学公式转换为矢量化的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 [B]回答:[/B] 在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] 。外部求和变量i 。 [B]当内在i依赖于外在i ... [/B] 然后对于外部求和的每个项,从该项的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)))); [B]当内在i独立于外在i ... [/B] 则内部求和的结果相对于外部求和实质上将是一个常数。例如,外部求和的第五项应如下所示: ... + 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)); [url=https://stackoverflow.com/questions/4474196]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 01:08。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.