#matlab #matrix #sparse-matrix
#matlab #матрица #разреженная матрица
Вопрос:
Я новичок в Matlab, и я сталкиваюсь с проблемами всякий раз, когда пишу коды. У меня есть код Matlab для исключения по Гауссу без поворота, и я хотел бы реализовать его версию с ленточной матрицей, которая принимает аргумент k, обозначающий количество недиагональных записей в каждом направлении, которые отличны от нуля (ширина полосы пропускания), то есть aij = 0, если i> j kили j> i k. Функция может начинаться так: функция x = BandedGauss(A, b, k). Ниже приведено мое исключение по Гауссу без поворота:
function [x] = GE_WithoutPivoting1(A,b)
% Solve linear system Ax=b using Gaussian elimination
n = length(b);
for k=1:n-1
% Check to see if the pivot is zero
if abs(A(k,k)) < 1e-15
error('A has diagonal entries of zero')
end
% Apply transformation to remaining submatrix and RHS vector
for i=k 1:n
m = -A(i,k)/A(k,k); % multiplier for current row i
for j=k 1:n
A(i,j) = A(i,j) m*A(k,j);
end
b(i) = b(i) m*b(k);
end
end
% A is now upper diagonal. Now, call the back substitution function to
% solve for the x solution vector i.e., the transformed problem:
x = GE_BackSubstitution(A, b);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [x] = GE_BackSubstitution(A,b)
% Solve the upper triangular system Ax=b using backward substitution
n= length(b);
x = zeros(n,1);
for j=n:-1:1
% Check to see if the diagonal entry is zero
if abs(A(j,j)) < 1e-15
error('A is singular (zero diagonal entry)')
end
% Compute solution component
x(j) = b(j) / A(j,j);
% Update the RHS vector
for i=1:j-1
b(i) = b(i) - A(i,j)*x(j);
end
end
Комментарии:
1. Вы не задали вопрос и не рассказали нам, какие у вас проблемы.
2. Я хотел бы реализовать ее версию с ленточной матрицей, которая принимает аргумент k, обозначающий количество недиагональных записей в каждом направлении, которые отличны от нуля (ширина полосы пропускания)