Matlab - 在没有for语句的情况下将向量减去矩阵的每一行

标签 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 变量没有第二个。

最佳答案

你当然可以用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

关于Matlab - 在没有for语句的情况下将向量减去矩阵的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980783/

相关文章:

python - 矩阵的每一行和每一列中的最小值 - Python

python - 同情 : creating a numpy function from diagonal matrix that takes a numpy array

c++ - vector C++ 上的 Memset

Java,选择子序列

arrays - 在 Matlab 中查找反转次数

c - MATLAB:ert 未按预期生成 "from flie" block 的代码

matlab - 计算物体外切半径和内切半径 - Matlab

MATLAB:如何在另一个变量名称中使用变量值?

python - 是什么导致我的矩阵向量乘法的 Cython 实现速度减慢 2 倍?

javascript - Raphael JS 如何让内联 SVG 在 Firefox 3.6 中工作?