Почему мой алгоритм исключения Гаусса не выполняет частичный разворот? - PullRequest
0 голосов
/ 12 октября 2019

Я работаю над некоторыми практическими упражнениями для практики MatLab, и одна из проблем требует, чтобы я включил частичное вращение к предыдущей проблеме, которая просит написать алгоритм для исключения Гаусса (который я сделал).

Частичная поворотная реализация разочаровала меня. Я попытался поместить частичный поворотный код в цикл, но он все равно заканчивает тем, что выдает неправильный ответ. Вот что у меня пока есть:

r = RandStream('mt19937ar','Seed',1234);
A = r.randn(6,7);
n = 6;
out = [];
for ii = 1:n-1 
    % Partial pivoting
    for k = ii:n-1
      [~,f] = max(abs(A(k:end,k)));
      f = n-(n-k+1)+f;    
      A([k f],:) = A([f k],:);
    end

    % Regular Gaussian elimination
    for j = ii+1:n
      if A(ii,ii) == 0
         print('Method failed: matrix is rank deficient');
      else
         A(j,:) = A(j,:) - (A(j,ii)/A(ii,ii))*A(ii,:);
      end
    end

    out = vertcat(t4_out,A);
end

Входные данные - это матрица A, которая имеет размер nxm (m> = n), а выходные данные должны быть nxm верхнего треугольного martix. В конце каждой итерации у меня есть матрица A (i) с нулями ниже диагонали в i-м столбце, и мне нужно построить матрицу [A (1), A (2), ..., A (n). -1)] (отсюда использование vertcat) и вывод должен быть матрицей 30х7. Я старался изо всех сил реализовать частичное вращение, но не все мои итерации заканчивались тем, что были верхнетреугольными матрицами. Я действительно не понимаю, что не так с моим частичным кодом поворота. Без частичного поворота мой обычный алгоритм исключения Гаусса все еще работает, и я получаю верхнюю треугольную матрицу. Может ли кто-нибудь помочь мне понять, почему мой частичный поворотный код не приводит меня к верхней треугольной матрице? Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...