在学习了 Java 的基本编程之后,我发现对于当前的算法课程过渡到 MatLab 最困难的部分是避免循环。我知道在 MatLab 中有很多巧妙的方法可以对操作进行矢量化,但是我的思维是如此“卡在”循环思维中,以至于我发现很难直观地了解如何对代码进行矢量化。一旦向我展示了它是如何完成的,这对我来说很有意义,但我自己并不那么容易看到它。目前,我有以下代码用于查找拉格朗日插值中使用的重心权重:
function w = barycentric_weights(x);
% The function is used to find the weights of the
% barycentric formula based on a given grid as input.
n = length(x);
w = zeros(1,n);
% Calculating the weights
for i = 1:n
prod = 1;
for j = 1:n
if i ~= j
prod = prod*(x(i) - x(j));
end
end
w(i) = prod;
end
w = 1./w;
我很确定在 MatLab 中一定有更聪明的方法可以做到这一点,但我就是想不出。如果有人有任何提示,我将非常感激:)。而我在 MatLab 中学习所有矢量化技巧的唯一方法就是看看它们是如何在各种场景中使用的,例如上述。