2016-09-15 2 views
0

Я хочу использовать исключение Гаусса вперед и назад, так что в конце мне не нужно делать backstubstion, потому что у меня есть везде нули в моей матрице, кроме моей диагонали ..... но что-то есть идет не так, каждый раз, когда я пытаюсь мой код я не получаю все нули в углу, но если я пытаюсь мой код отдельно только вперед работ элиминации и только назад элиминации тоже .....Гаусс вперед и назад устранение

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. [Вот как я беспокоился об этом] –

Смежные вопросы