1

假设我有一个包含元素 1...n 的向量 v,并且我知道 v(1) = v_0,然后

v(i+1) = 1/(a*v(i) + b). 

这很容易使用单个 for 循环或递归来实现。递归在 Matlab 中是一个糟糕的想法,如果可能的话,单个 foo 循环仍然不是最优的。我可以矢量化这样的操作吗?

为了使这篇文章更有用,是否有一种通用的矢量化方法

v(i+1) = f(v(i)), 

其中 f(x) 是任意函数?怎么样的东西

v(i+1) = a(i)*v(i) + b(i)

其中 a 和 b 现在是向量。

4

1 回答 1

2

for由于即时编译,MATLAB 中的循环不像以前那么糟糕了。如有疑问,只需编写循环并继续您的工作。除非您的向量很大,否则循环不会打扰您。如果(且仅当)循环是瓶颈,请返回并尝试愚蠢的 MATLAB 技巧进行优化。

在对您的问题的具体回答中,不,我不相信有一种通用的方式来表达 v(i+1) = f(v(i))。您可以使用函数句柄轻松编写一个,但性能将不仅仅是对表达式进行开放编码。

于 2012-08-29T18:09:13.443 回答