【发布时间】:2015-01-26 15:33:07
【问题描述】:
我有一个函数,我想知道是否可以对其进行矢量化,而不必使用 for 循环。代码如下。
a=1:2:8
for jj=1:length(a)
b(jj)=rtfib(a(jj)); %fibbonacci function
end
b
下面的输出:
a =
1 3 5 7
>>>b =
1 3 8 21
我试图这样做
t = 0:.01:10;
y = sin(t);
但是执行下面的代码没有任何建议? ps:我试图保留函数 rtfib 因为它的速度,我需要使用非常大的斐波那契数。我正在使用 octave 3.8.1
a=1:2:8
b=rtfib(a)
下面是请求的 rtfib 代码
function f = rtfib(n)
if (n == 0)
f = 0;
elseif (n==1)
f=1;
elseif (n == 2)
f = 2;
else
fOld = 2;
fOlder = 1;
for i = 3 : n
f = fOld + fOlder;
fOlder = fOld;
fOld = f;
end
end
end
【问题讨论】:
-
这可能取决于您的
rtfib函数。你可以发布代码吗?而且,通过预分配b,即在循环输入b=zeros(size(a))之前,您可能会获得同样好的加速(如果您使用的是相当最新的Matlab 版本)。循环不再那么慢了 -
@Dan 当然,我已将 rtfib 代码添加到我使用 octave 3.8.1 的问题中,所以它还没有 matlab 快
-
不要介意向量化,但是您可以使用 rtfib 的单个 for 循环来保存整个向量,而不是双 for 循环!线性而不是二次运行时!
-
对于所有访问此帖子的 SO 用户,提供答案的 OP 和后续人员就高效快速地创建斐波那契数列进行了非常好的讨论。上面帖子中看到的代码来自这篇帖子:stackoverflow.com/questions/26829209/…