MATLABのn線形方程式のセット
質問
matlabでn線形方程式の設定に問題があります。matlabで宣言する方法がわかりません。n線形方程式の設定にはmatlabコードが必要です。
解決
n線形方程式を1つの行列方程式として記述して、それを解くことができます。ここに素晴らしい例を見つけることができます: http://blogs.mathworks .com / pick / 2007/09/13 / matlab-basics-video-solving-linear-equations / (ビデオ!)
これらのページもご覧ください:
http://en.wikipedia.org/wiki/System_of_linear_equations
http://en.wikipedia.org/wiki/Matrix_equation
他のヒント
線形システムは、独自のソリューションが存在するかどうかに応じて、さまざまな方法で解決できます。
簡単な方法は、それを縮小エシェロン形式(rref)に減らすことです。
システムの検討:
x + 5y = 4
2x - y = 1
次のように、係数行列AとRHS、Bを記述できます( '
は転置演算子です)
>> A = [1 5; 2 -1]
A =
1 5
2 -1
>> B = [4 1]'
B =
4
1
拡張マトリックス(A | B)として記述できます:
>> horzcat(A,B)
ans =
1 5 4
2 -1 1
そしてREF(A | B)を見つけます
>> rref(ans)
ans =
1.0000 0 0.8182
0 1.0000 0.6364
したがって、x〜.8182、y〜.6364。
MATLABで線形方程式を解くための絶対最速の方法は、次の形式で方程式を設定することです
AX = B
そして解決方法
X = A\B
発行できます
help mldivide
行列の分割とその制限の詳細については、こちらをご覧ください。
反復法Guase Seidelのコード tolはエラー耐性 x0は解の最初の推測です
function seidel(A,b,x0,tol,itmax)
%Solve the system Ax=b using the Gauss-Seidel iteration method.
clc
% =======================================================
% Programmer : A. Ziaee mehr
%
help seidel
n=length(b);
x=zeros(n,1);
%fprintf('\n')
disp('The augumented matrix is = ')
Augm=[A b]
Y=zeros(n,1);
Y=x0;
for k=1:itmax +1
for ii=1:n
S=0;
for jj=1:ii-1
S=S+A(ii,jj)*x(jj);
end
for jj=ii+1:n
S=S+A(ii,jj)*x0(jj);
end
if (A(ii,ii)==0)
break
end
x(ii)=(-S+b(ii))/A(ii,ii);
end
err=abs(norm(x-x0));
rerr=err/(norm(x)+eps);
x0=x;
Y=[Y x];
if(rerr<tol)
break;
end
end
% Print the results
if (A(ii,ii)==0)
disp('division by zero')
elseif (k==itmax+1)
disp('No convergence')
else
%fprintf('\n')
disp('The solution vector are : ')
fprintf('\n')
disp('iter 0 1 2 3 4 ... ');
fprintf('\n')
for ii=1:n
fprintf('%1.0f= ',ii);
fprintf('%10.6f ',Y(ii,1:k+1));
fprintf('\n')
end
fprintf('\n')
disp(['The method converges after ',num2str(k),' iterations to'])
x
end
所属していません StackOverflow