2009-11-26 8 views
-5

J'ai quelques problèmes sur la mise en équations n-linéaires dans matlab.Je ne sais pas comment je peux déclarer dans MATLAB.J'ai besoin de matlab code pour le réglage des équations n-linéaires ..ensemble d'équations n-linéaires dans matlab

+2

Ne pas dupliquer vos commentaires, et ajoutez une étiquette de devoirs le cas échéant. –

Répondre

3

Vous pouvez écrire des équations n-linéaires comme une équation matricielle pour la résoudre. Ici vous pouvez trouver bon exemple: (! Vidéo) http://blogs.mathworks.com/pick/2007/09/13/matlab-basics-video-solving-linear-equations/

Voir aussi ces pages:
http://en.wikipedia.org/wiki/System_of_linear_equations
http://en.wikipedia.org/wiki/Matrix_equation

+0

J'ai des n-équations et n-inconnues. Ce que je dois faire est de définir ces équations de sorte que lorsque l'entrée est entrée, la sortie sera donnée. Ceci est l'exemple d'entrée et de sortie de notre programme. Cela aidera à reconnaître notre problème. A1X1 + A2X2 .... + AnXn = B1. . . AnXn ............... = Bn que nous avons n-inconnues et n équations et je dois définir ces équations dans matlab. –

+2

SO? Quel est le problème? Lire le wiki ... Tisser des équations n dans l'équation matricielle est l'un des problèmes les plus fondamentaux de l'algèbre linéaire. Si vous ne pouvez pas le faire, alors votre problème est en mathématiques pauvres, pas matlab ... – Gacek

1

Vous pouvez résoudre un système linéaire de diverses manières, selon qu'il existe une solution unique ou pas.

Un moyen simple est de le réduire à la forme d'échelons réduits (rref).

Tenir compte du système:

x + 5y = 4 
2x - y = 1 

Vous pouvez écrire la matrice de coefficient A, et l'ERS, 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 comme une matrice augmentée (A | B):

>> horzcat(A,B) 

ans = 

    1  5  4 
    2 -1  1 

Et puis trouver le REF (A | B)

>> rref(ans) 

ans = 

    1.0000   0 0.8182 
     0 1.0000 0.6364 

Et donc x ~ .8182, y ~ .6364.

+0

J'ai des n-équations et n-inconnues. Ce que je dois faire est de définir ces équations de sorte que lorsque l'entrée est entrée, le la sortie sera donnée.Ceci est l'exemple d'entrée et de sortie de notre programme. Cela aidera à reconnaître notre problème. A1X1 + A2X2 .... + AnXn = B1 . . . AnXn ............... = Bn que nous avons n-inconnues et n équations et je dois définir ces équations dans matlab. –

1

La façon absolument plus rapide pour résoudre des équations linéaires dans MATLAB est simplement de configurer votre équation sur la forme

AX = B 

puis résoudre par

X = A\B 

Vous pouvez émettre

help mldivide 

pour plus d'informations sur la division matricielle et ses limites.

+0

Mais cela ne fonctionnera que s'il existe une solution unique. (C'est-à-dire que A est inversible). –

+1

@Alex: Oui, et cela produira un avertissement le disant. Il fonctionnera mieux que inv (A) * B cependant. J'ai aussi vérifié votre solution, et elle souffre du même problème (alors qu'il est plus long à taper). –

0

Un code pour la méthode itérative Guase Seidel tol est la tolérance d'erreur x0 est la première estimation pour la 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 
+0

itmax est le nombre maximal d'itérations qui empêche le programme de passer à une boucle unfinishrd. – Abolfazl