ensemble d'équations n-linéaires dans matlab
Question
J'ai quelques problèmes pour définir des équations n-linéaires dans matlab.Je ne sais pas comment puis-je déclarer dans matlab.J'ai besoin d'un code matlab pour définir des équations n-linéaires ..
La solution
Vous pouvez écrire des équations n-linéaires comme une équation matricielle pour la résoudre. Ici vous pouvez trouver un bon exemple: http: //blogs.mathworks .com / pick / 2007/09/13 / matlab-bases-video-resolution-linear-equations / (video!)
Voir aussi ces pages:
http://fr.wikipedia.org/wiki/System_of_linear_equations
http://en.wikipedia.org/wiki/Matrix_equation
Autres conseils
Vous pouvez résoudre un système linéaire de différentes manières, selon qu’il existe ou non une solution unique.
Un moyen simple consiste à le réduire à une forme à échelle réduite (rref).
Considérez le système:
x + 5y = 4
2x - y = 1
Vous pouvez écrire la matrice de coefficients A et le RHS, B comme suit: ( '
est l'opérateur de transposition)
>> A = [1 5; 2 -1]
A =
1 5
2 -1
>> B = [4 1]'
B =
4
1
Vous pouvez l'écrire sous forme de matrice augmentée (A | B):
>> horzcat(A,B)
ans =
1 5 4
2 -1 1
Et ensuite trouver le REF (A | B)
>> rref(ans)
ans =
1.0000 0 0.8182
0 1.0000 0.6364
Et donc x ~ 0,8182, y ~ 0,6364.
Le moyen le plus rapide de résoudre des équations linéaires dans MATLAB consiste simplement à configurer votre équation sur le formulaire
AX = B
puis résoudre par
X = A\B
Vous pouvez émettre
help mldivide
pour trouver plus d'informations sur la division de la matrice et ses limitations.
Un code pour la méthode itérative Guase Seidel tol est une tolérance d'erreur x0 est le premier à deviner solution
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