2015-10-06 269 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); –

相關問題