(matlab) metodo di Newton inesatto

Messaggioda m3c4 » 23/01/2012, 16:28

Salve a tutti. vorrei chiedere un parere, o meglio un aiuto, sul Metodo di Newton inesatto, o forse conosciuto anche come metodo di newton esteso a funzioni vettoriali.

In teoria ho capito come funziona, infatti volevo partire dal metodo di risoluzione di Jacobi che ho implementato (vi posto il codice a fine post) e modificarlo a dovere, tanto più o meno cambia il calcolo fatto dentro il for.
Il problema è che non so proprio come calcolare la matrice jacobiana con matlab, trovassi il modo penso sarei apposto, e no so da dove partire...

Di qui il codice del Metodo di jacobi.
Grazie mille a tutti anticipatamente.

Codice: Seleziona tutto
function [niterazioni,vettoresoluzione,tJ] = jacobi(A,b,toll,Nmax)
%JACOBI metodo di Jacobi per la risoluzione di sistemi lineari
%
%   [niterazioni,vettoresoluzione,tJ] = jacobi(A,b,toll,Nmax) applica il
%   metodo di Jacobi alla matrice d'ingresso (A), al vettore dei termini
%   noti (b), considerando l'errore relativo massimo e il numero di
%   iterazioni massime (Nmax); restituisce il numero di iterazioni
%   (niterazioniJ), il vettore soluzione (vettoresoluzioneJ) e il tempo
%   impiegato dal metodo (tJ) per risolvere il sistema lineare.
%   NB: i dati sono visualizzati in FORMAT LONG (tale formato alla fine
%   della computazione torna a default)
%
%   Maurizio Idini
format long
n=size(A,1);        %dimesione della matrice A
x=zeros(n,1);       %inizializzazione del vettore soluzione
k=0;                %contatore
xv=ones(n,1);       %vettore soluzione esatto
tic                 %inizio contatore di tempo
while (k<Nmax)
    xv=x;
    x=x';
    k=k+1;
    for i=1:n
        if (i==1) 
            s = sum(A(i,i+1:n).*x(i+1:n));
            x (i) = ( b(i) - s) / A(i,i);
        else
             s = sum(A(i,1:i-1).*x(1:i-1));
             s = s + sum(A(i,i+1:n).*x(i+1:n));
             x (i) = ( b(i) - s) / A(i,i);
        end
    end
    x=x';
    if(norm(x-xv,2)<toll*norm(x,2)),break,end

end

tJ=toc;
fprintf('il tempo di calcolo è  %f \n', tJ);
niterazioni=k;
fprintf('Il numero di interazioni è %d \n', niterazioni);
vettoresoluzione=x;
disp('il vettore di soluzione è ');
vettoresoluzione
format short

ci sono 10 modi di sapere il binario: o lo sai o non lo sai...
m3c4
New Member
New Member
 
Messaggi: 51
Iscritto il: 10/01/2010, 23:04
Località: sassari, siena

Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti