Pagina 1 di 1

Risoluzione Sistema Equazioni non lineari

MessaggioInviato: 2 apr 2013, 16:29
da minidiable
Ragazzi la domanda che volevo fare in un post precedente era in realta' questa.

Ho da risolvere il sistema di equazioni non lineari seguente e non so come fare in MATLAB:

x_1x_3-0.5x_1x_2^2x_3=F_x
x_1x_2x_3=F_y
x_3-0.5x_1^2x_3=F_x

Mi potreste aiutare? GRAZIE

Re: Risoluzione Sistema Equazioni non lineari

MessaggioInviato: 2 apr 2013, 17:05
da minidiable
Ho provato in questo modo (la funzione Jfun e' lo jacobiano di quella Ffun e calcolo la soluzione del sistema con la funzione newtonsys):

Codice: Seleziona tutto
function J = Jfun( x )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
J(1,1)=x(3)-x(2)^2*x(3)/2;
J(1,2)=x(1)*x(2)*x(3);
J(1,3)=x(1)-x(1)*x(2)^2/2;

J(2,1)=x(2)*x(3);
J(2,2)=x(1)*x(3);
J(2,3)=x(1)*x(2);

J(3,1)=-x(1)*x(3);
J(3,2)=0;
J(3,3)=1-x(1)^2/2;
end


function F = Ffun( x )
%UNTITLED4 Summary of this function goes here
%   Detailed explanation goes here
F(1,1)=x(1)*x(3)-x(1)*x(2)^2*x(3)/2-0.0131;
F(2,1)=x(1)*x(2)*x(3)-7.72e-04;
F(3,1)=x(3)-x(1)^2*x(3)/2-0.6245;
end

%% I valori di F_x F_y e F_z sono valori reali misurati in un certo istante

function [ x,F,niter ] = newtonsys( Ffun,Jfun,x0,tol,nmax,varargin )
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here
niter=0;
err=tol+1;
x=x0;
while err>= tol && niter<=nmax
    J=feval(Jfun,x,varargin{:});
    F=feval(Ffun,x,varargin{:});
    delta=-J\F;
    x=x+delta;
    err=norm(delta);
    niter=niter+1;
end

F=norm(feval(Ffun,x,varargin{:}));
if(niter==nmax && err>tol)
    fprintf({'Il metodo non converge nel massimo numero di iterazioni',...
        'la ultima iterata calcolata ha residuo relativo pari a %e \n'},F)
else
    fprintf('Il metodo converge');
end

end


Il problema e' che mi da una soluzione, mi dice che esiste, ma la soluzione (logicamente) varia al variare del punto di partenza dell'algoritmo, come si fa a trovare la soluzione "vera" di questo sistema?

Grazie

Re: Risoluzione Sistema Equazioni non lineari

MessaggioInviato: 3 apr 2013, 17:38
da dimaios
minidiable ha scritto:Il problema e' che mi da una soluzione, mi dice che esiste, ma la soluzione (logicamente) varia al variare del punto di partenza dell'algoritmo, come si fa a trovare la soluzione "vera" di questo sistema?


Stai cercando di risolvere un problema di ottimizzazione globale con un algoritmo tipicamente utilizzato per la ricerca di minimi locali.

Re: Risoluzione Sistema Equazioni non lineari

MessaggioInviato: 30 apr 2013, 9:09
da MasterCud
Quando si risolvono problemi di questo tipo la prima cosa da fare è valutare il condizionamento del sistema, questo lo puoi fare semplicemente calcolando la norma 2. Purtroppo non esiste un metodo matematico unico e valido per risolvere il tuo sistema, l'unica cosa da fare è provarne diversi e valutare se le soluzioni sono simili.
Dato il numero limitato delle equazioni io proverei prima ad applicare un metodo standard ( utilizzando la matrice di Jordan anche se ha un condizionamento stratosferico, prova con una QR o una SVD), successivamente proverei un metodo di tipo iterativo (come hai fatto tu), Jacobi o Gauss-Seidel e poi confronterei le due soluzioni. Se sono simili bene altrimenti significa che hai un condizionamento talmente alto che ti sballa la soluzione e a quel punto i metodi classici servono a ben poco.