본문 바로가기

소프트웨어/MATLAB

매트랩을 이용한 가우스소거법

% 아직 배우는단계라서..소스가 많이 더럽다...그래도저장!!

%만드느라 힘들었다..으...

 

 

function y = ms_gaus3(a)
% MS_GAUS3(A) is calculate det(A)
% a : Matrix

n=size(a);
dgEND=n(1,2)-1;


if(n(1,1)<(n(1,2)-1))
    fprintf('\n\n\t\twarring\n\n\tUnder-determined!!!!!\n\n\n')
    return;
end
if(n(1,1)==(n(1,2)-1) || n(1,1)>(n(1,2)-1))
x=[1:n(1,2)-1]; tmp=[1:n(1,2)];
for i=1:(n(1,1)-1)
    for j=1:n(1,1)-i
        if a(i,i)==0
            tmp=a(i,:);
            for k=0:(n(1,1)-i-1)
                a(i+k,:)=a(i+(k+1),:);
            end
            a(n(1,1),:)=tmp;
        end   
        a(i+1,:)=a(i+1,:)-a(i,:).*(a(i+1,i)/a(i,i));
         if(j~=(n(1,1)-i))
            tmp=a(i+1,:);    
            for k=1:(n(1,1)-1)-i
                a(i+k,:)=a(i+(k+1),:);   
            end
            a(n(1,1),:)=tmp;
        end
    end
end

for i=(n-1):-1:1
    x(n(1,2)-1)=a(n(1,1)-1,n(1,2)-1);
end

 

end

for i=1:dgEND
if a(i,i)==0
    fprintf('해가 무수히 많습니다\n')
    return;
end

end

%%

x=diag(a);

x(dgEND)=a(dgEND,dgEND+1)/a(dgEND,dgEND);
a(dgEND,dgEND+1)=x(dgEND);%x4의값
for j=dgEND-1:-1:1
        a(dgEND-j,dgEND)=a(dgEND-j,dgEND).*x(dgEND);
end

i=1;
while dgEND-i~=0
a(dgEND-i,dgEND+1)=(a(dgEND-i,dgEND+1)-sum(a(dgEND-i,dgEND-i+1:dgEND)))/x(dgEND-i);
x(dgEND-i)=a(dgEND-i,dgEND+1);

    for j=2:dgEND-i
        a(dgEND-j-i+1,dgEND-i)=a(dgEND-j,dgEND-i).*x(dgEND-i);
    end
     
   i=i+1;

end

fprintf('미지수들은 순서대로..x,y,z,,,,=>');
x'