我想使用高斯向前和向后消除,以便最后我不需要做后退,因为除了我的对角线,我的矩阵中到处都是零...但是每次我都出错了尝试我的代码我不会在角落里得到所有的零,但是如果我单独尝试我的代码,那么唯一的向前消除工作和唯一的向后消除......
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,:);
答案 0 :(得分:2)
您需要将factor
基于Ab
矩阵,而不是A
矩阵;随着时间的推移,你的(3,2),(2,3),(1,3)和(1,2)值会发生变化。看起来您在前向消除过程中开始解决此问题,因为您在该因子计算中正确地包含了Ab。
作为附注,您可能希望通过将每行Ab除以“对角线”上的值来归一化