如何对以下计算进行矢量化?



假设有一个用户输入的值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) * BB * (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)

最新更新