2016-09-15 158 views
0

我想使用高斯向前和向後消除,因此最終我不需要做背部置換,因爲除了我的對角線外,我的矩陣中都有零。走錯了,每次我嘗試我的代碼,我沒有得到在角落裏的所有零,但如果我嘗試我的代碼seperately唯一的前鋒消除作品,唯一的淘汰落後太多.....高斯向前和向後消除

clc, close all, clear * 
%Input Matrix 
A = input('Enter a matrix: '); 
b = input('Enter the result vector: '); 
% for example this two: 
% A= [1 2 3; 2 1 1; 6 -7 5]; 
% b= [3; 2; 5]; 
Ab= [A, b]; 


%%%%%%%%%% gauss elimination forward & backward elimination%%%%%%%%%%%%%%% 
%Forward elimination 
% A(1,1) is pivot 
factor = A(2,1)/A(1,1); 
Ab(2,:) = Ab(2,:) - factor*Ab(1,:); 
factor = A(3,1)/A(1,1); 
Ab(3,:) = Ab(3,:) - factor*Ab(1,:); 
% A(2,2) is pivot 
factor = Ab(3,2)/Ab(2,2); 
Ab(3,:) = Ab(3,:) - factor*Ab(2,:); 

%Backward elimination 
% A(3,3) is pivot 
factor = A(2,3)/A(3,3); 
Ab(2,:) = Ab(2,:) - factor*Ab(3,:); 
factor = A(1,3)/A(3,3); 
Ab(1,:) = Ab(1,:) - factor*Ab(3,:); 
% A(2,2) is pivot 
factor = Ab(1,2)/Ab(2,2); 
Ab(1,:) = Ab(1,:) - factor*Ab(2,:); 

回答

2

您需要將factor設置在Ab矩陣上,而不是A矩陣;隨着時間的推移,你的(3,2),(2,3),(1,3)和(1,2)值將會改變。看起來你在你的前鋒消除期間開始解決這個問題,因爲你在該因子計算中正確包括了Ab。 作爲一個方面說明,你可能希望最後通過將Ab的每一行除以「對角線」上的值來歸一化

+0

非常感謝你:) – ECasio

+0

是的!將來,解決這種短代碼問題的一種好方法就是試着逐行瀏覽它,並查看輸出與您認爲應該發生的不同之處。在這種情況下,你會注意到你的第四個因素意外等於-5。 [我怎麼麻煩它] –