PDA

View Full Version : [matlab] soluzione sistemi non lineari


eugenes
11-12-2008, 12:58
sto utilizzando la funzione seguente per risolvere sistemi di equazioni non lineari con il metodo di newton:

function [x,cont]= newton(fun,jac,x0,ep)
%
% Funzione per la risoluzione del sistema f(x)=0
% mediante il metodo di Newton.
%
% INPUT:
% fun, jac nomi dei file contenenti rispettivamente
% la funzione non lineare e
% la matrice Jacobiana della funzione
% x0 vettore contenente l'approssimazione iniziale della soluzione
% ep parametro di tolleranza per l'errore
% OUTPUT:
% x vettore soluzione del sistema (o equazione) non lineare
% cont numero di iterazioni fatte per ottenere l'approssimazione
% desiderata
%

y=feval(jac,x0)\feval(fun,x0);
x=x0-y;
cont=1;
while (norm(x-x0,'inf') > ep) & (cont<100)
x0=x;
y=feval(jac,x0)\feval(fun,x0);
x=x0-y;
cont=cont+1;
end
if cont==100
disp('Il procedimento non converge con la ');
disp('precisione desiderata.');
disp('Dopo 100 passi');
fprintf('\t\t norma = %f .',norm(x-x0,'inf'));
end

la fun in ingresso naturalmente è una funzione che contiene le espressioni delle singole funzioni non lineari.
se volessi ottenere una funzione newton che non richieda in ingresso la matrice jacobiana già calcolata analiticamente, ma calcoli le derivate parziali passo per passo come dovrei modificarla?

esiste già una funzione di matlab per farlo?

grazie!

Ken1986
11-12-2008, 15:23
Non ho mai risolto eq. non lineari con matlab, comunque prova a dare uno sguardo a questo (http://dm.ing.unibs.it/gastaldi/didattica2005/meccanica/lezioni/lab-zeri.pdf)