Matlab - 将一个向量减去矩阵的每一行而不用for语句

时间:2015-10-06 22:21:33

标签: matlab matrix vector vectorization subtraction

我有一个代码用于考试,他们希望我做的是为了达到更好的成绩是在没有第二个" for"的情况下实现同样的事情。言。

代码是:

piv = 1:n;                  %// piv: position vector
for k = 1:n-1               %// for each column :
   if ((max(abs(A(piv(k:n),k)))) > eps(normA))    %// if pivot is non zero
       [~, I] = max(A(piv(k:n),k));       %// find the max index
       I = I + (k-1);                 
       piv([k,I]) = piv([I,k]);       %// swap pivot elements
       A(piv(k+1:n),k) = A(piv(k+1:n),k)/A(piv(k),k);    %// calculate the multipliers and save them in the column 
       for j = k+1:n
            A(piv(j),k+1:n) = A(piv(j),k+1:n) - (A(piv(k),k+1:n)*A(piv(j),k));   %// multiply for multipliers and subtract them by the row 
       end 
    end
end

这是高斯分解方法,但并不重要,问题是我需要得到相同的结果而没有e和j变量的第二个。

1 个答案:

答案 0 :(得分:3)

你当然可以用bsxfun 杀死最里面的循环。我将留给您向教授解释它是如何做的。浏览bsxfun文档是个好主意,在这个过程中你可能会学到一些vectorization techniques。这是实施 -

parte2 = bsxfun(@times,A(piv(k),k+1:n),A(piv(k+1:n),k))
A(piv(k+1:n),k+1:n) = A(piv(k+1:n),k+1:n) - parte2