Inaccuracy in solving simultaneous equations using matrix
조회 수: 13 (최근 30일)
이전 댓글 표시
So i was solving a system of n linear equations. My coefficient matrix is a tridiagonal one.
However as i was decreasing the values inside matrix or increasing n the error was increasing rapidly.
clear
n=1000;
B=(1:n);
B=B';
A=full(gallery('tridiag',n,0.341,0.232,0.741));
x=A\B;
c=A*x-B;
error=0;
for i=1:n
error=error+abs(c(i,1));
end
error
%error = 2.174626266011847e+155
Here the system is in the form Ax=B
ideally c should contain only zero.
Can anyone a suggest a method so that i can decrease the net error.
NOTE: I also tried the Thomas Algorithm even that gave an error of similar order .
댓글 수: 3
Walter Roberson
2020년 6월 3일
편집: Walter Roberson
2020년 6월 3일
n = 1000;
B = (1:n).';
A = sym( full(gallery('tridiag',n,0.341,0.232,0.741)) ); %11 seconds
x = A\B; %not fast!! 43 seconds
c = A*x-B;
error = sum(abs(c));
disp(error)
채택된 답변
Bjorn Gustavsson
2020년 6월 3일
If you run this code-snippet:
N = round(logspace(1,3,7));
for i1 = 1:numel(N),
n = N(i1);
B=(1:n)';
A=full(gallery('tridiag',n,0.341,0.232,0.741));
[U,S,V] = svd(A);
ph(i1) = plot(diag(S),'.-','linewidth',2,'markersize',15,'color',rand(1,3));
title(n)
drawnow
end
% Pause
set(gca,'xscale','log')
% Pause
set(gca,'yscale','log')
You will see that the smallest eigenvalue is way smaller than the next smallest. Such matrices A are illconditioned and are a bit more problematic to solve. For more information and better tools to handle such problems have a look at regtools.
HTH
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Linear Algebra에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!