Я работаю над некоторыми практическими упражнениями для практики 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. Я старался изо всех сил реализовать частичное вращение, но не все мои итерации заканчивались тем, что были верхнетреугольными матрицами. Я действительно не понимаю, что не так с моим частичным кодом поворота. Без частичного поворота мой обычный алгоритм исключения Гаусса все еще работает, и я получаю верхнюю треугольную матрицу. Может ли кто-нибудь помочь мне понять, почему мой частичный поворотный код не приводит меня к верхней треугольной матрице? Любая помощь будет оценена.