В MATLAB: возникают проблемы с отладкой кода для функции, которая переводит матрицу в эшелонированную форму.
Я пробовал следующую матрицу: A = [1 2 3; 1 2 4;1 2 4;1 2 4] и дает мне тот же результат после нескольких попыток исправить это: A =
1 2 3
0 0 1
0 0 1
0 0 1
A=[1 2 3 ;1 2 4; 1 2 4; 1 2 4]
echelon(A)
function x = echelon(A)
[m,n]= size(A);%m=rows, n= columns
j=1;
i=1;
while (i<=m && j<=n )
if is_pivot(A,i,j)==true
for k=i+1:m
if A(i,j)~=0
A(k,:)=A(k,:)-((A(k,j)/A(i,j))*A(i,:));%zero out corresponding row
else
C = A(i,:); %Let C be the ith first row of the matrix
A(i,:)= A(k,:);%Exchange the row with the one below it
A(k,:) = C;
end
end
if A(i,j)~=0
A(k,:)=A(k,:)-((A(k,j)/A(i,j))*A(i,:));%zero out corresponding row
end
end
if ~all(A(i,:)==0)
i=i+1;
j=j+1;
end
if i==m && all(A(i,:)==0)
break;
end
A
end
end
Матрица должна быть уменьшена до:
1 2 3
0 0 1
0 0 0
0 0 0
is_pivotфункция следующая
%is_pivot function checks to see if value is a pivot
%user gives A the matrix, i =row, j=column
function x= is_pivot2(A,i,j)
x=false;
idx = 1:size(A, 2) < j;
if all(A(i,:)==0)
x=false;
elseif all(A(:,j)==0)
x=false;
elseif j==1 && A(i,j)~=0
x=true;
elseif all(A(i, idx) == 0)
x=true;
end
x
end