2016-09-15 156 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。 [我怎么麻烦它] –