2015-10-06 268 views
3

我有一段代码用于考试,他们希望我为了达到更好的成绩而做的是在没有第二个“为“的声明。Matlab - 为矩阵的每一行减去一个向量而不用语句

的代码是:

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变量中相同的结果。

+0

'Z = X - 那些(尺寸(X,1),1)* y' – user3528438

+0

他们想要实现的Householder变换或吉文根据使用情况 – percusse

回答

3

你当然可以bsxfun最里面的循环。我正在让你解释你的prof它是如何做到的。浏览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 
+0

我想说的旋转对于其他用户来说,这是非常棒的,并且非常完美! 但她在课堂上向我们展示的东西并不是什么,我给她发了一封电子邮件,询问她的想法......我希望她不想要更“基本”的东西。在这种情况下,我不知道该怎么做。不管怎样,谢谢你! –

+0

@GiuseppeTrapasso我真的很有兴趣听到她的意见!她在班上谈了bsxfun吗?她期待什么样的矢量化技术? – Divakar

+0

我的老师提出了这个解决方案:A(piv(k + 1:n),k + 1:n)= A(piv(k + 1:n),k + 1:n)-A(piv(k + 1 :N)中,k)* A(PIV(K)中,k + 1:N); –

相关问题