假设有一个用户输入的值n
,它进入下面的for
循环代码。是否有一种方法来矢量化以下代码?
A = 1:n
B = [1 1;1 1]
for i = 1:n
B = B + A(i)*B;
end
让我们看一个具体的例子:
n = 5;
A = 1:n;
B = [1 1; 1 1];
for i = 1:n
B = B + A(i) * B;
end
B
结果是:
B =
720 720
720 720
首先,我将重写这个循环:
n = 5;
A = 1:n;
B = [1 1; 1 1];
for i = 1:length(A)
B = B * (A(i) + 1);
end
B
这样,循环变量i
只迭代A
中的所有元素就更明显了。
也:B + A(i) * B
与B * (A(i) + 1)
相同。
现在,我们看到,在循环中,你基本上是在计算:
B = B * (A(1) + 1) * (A(2) + 1) * (A(3) + 1) ...
可以使用MATLAB的prod
函数来简化A
(或这里的A + 1
)中所有元素的乘积:
n = 5;
A = 1:n;
B = [1 1; 1 1];
B = B * prod(A + 1)
让我们检查一下结果:
B =
720 720
720 720
在A = 1:n
的特殊情况下,prod(A + 1)
的乘积只是n + 1
的阶乘,这样我们也可以使用MATLAB的factorial
函数:
n = 5;
B = [1 1; 1 1];
B = B * factorial(n + 1)