Matlab: функция исключения Гаусса

#matlab #numerical-methods

#matlab

Вопрос:

 function x = Gauss_Elimination(A,b)

n = length(b);
x = zeros(n,1);

% Forward Elimination
for i = 1:n-1 

    for j = i 1:n

        mul = A(j,i)/A(i,i); % Multiplier

        for k = i 1:n

            A(j,k) = A(j,k) - mul*A(i,k);

        end

        b(j) = b(j) - mul*b(i);

    end

end

x(n) = b(n)/A(n,n); % Obtain solution for the last variable

% Back Substitution
for i = n-1:-1:1

    sum = b(i);

    for j = i 1:n

        sum = sum - A(i,j)*x(j);

    end

    x(i) = sum/A(i,i);

end
  

Когда=[0 1 1 1;3 0 3 -4;1 1 1 2;2 3 1 3]; b=[0;7;6;6]; x=[4;-3;1;2]

Однако, x = [NAN;NAN;NAN;NAN], когда я использую эту функцию.

Кто-нибудь скажет мне причину???

Ответ №1:

Попробуйте использовать точки останова, чтобы увидеть значение переменных на каждой итерации. Проблема в переменной «mul», вы что-то делите / 0-> бесконечно. Вот почему вы получаете эти результаты. Если вы установите

A=[2 1 1 1;3 4 3 -4;1 1 1 2;2 3 1 3]; b=[0;7;6;6]

в качестве ответа вы получаете: ответ =

-4.7273
1.7273
6.4545
1.2727

Надеюсь, это поможет.

Комментарии:

1. Спасибо, сэр. Вы мне очень помогли.

Ответ №2:

Вы можете скачать этот код здесь

https://github.com/pavdpr/matlab-latex/blob/master/RRE.m

Она выполняет исключение по Гауссу, а затем записывает его в LaTeX. вы можете перенести запись в Latex и просто взглянуть на код, который выполняет предварительное исключение.

И версия того же кода на python, если вы этого хотите

https://github.com/Maggick-/RRE2LaTeX/blob/master/RRE.py