Sistemi letterali non lineari con Matlab

tommaso.stilo
Ciao! Devo risolvere un sistema non lineare di otto equazioni in otto incognite, utilizzando il metodo iterativo di Newton-Raphson. Il metodo so scriverlo ed utilizzarlo perfettamente; il problema è che in due delle equazioni compare il parametro t (tempo), in funzione del quale devono essere scritte tutte le soluzioni del sistema, per poi tracciarne i grafici. E' possibile farlo con Matlab e, se sì, come?
Grazie in anticipo.

Risposte
apatriarca
Non sono certo di aver compreso il problema ma immagino che tu debba richiamare più volte il metodo per risolvere il sistema usando di volta in volta un tempo diverso e memorizzando i risultati in un vettore in modo da poterlo visualizzare alla fine.

tommaso.stilo
Ah, quindi non è possibile far apparire ciascun risultato come legge (in funzione di t), che è quello che dovrei fare?

apatriarca
A meno di usare il symbolic toolbox (che non conosco ma dovrebbe avere funzionalità simili) non credo. O almeno non mi viene in mente niente.

tommaso.stilo
A quanto pare il problema si deve risolvere impostando una routine che vada a sostituire di volta in volta un valore diverso di t, generando un matrice le cui colonne sono i vettori delle soluzioni del sistema; una volta fatto questo, bisogna utilizzare il comando plot sulla matrice e creare i grafici delle soluzioni in funzione di t, ma non ho idea di come si faccia... qualche aiuto?

apatriarca
Si tratta semplicemente di un ciclo.. In cosa incontri difficoltà esattamente?

tommaso.stilo
Non riesco a far sì che nella matrice jacobiana varino sia i valori delle incognite (nel metodo iterativo, la soluzione trovata in una iterazione deve diventare soluzione di primo tentativo nell'iterazione successiva) sia il parametro t. Ho scritto questo finora:

function M=newratime(x0)
t=0;
i=0;
while(t<=6)
J=jacob(x0, t);
F=func(x0, t);
y=newra(F,J,x0, 0.000001, 10000);

for j=1:8
M(i,j)=y(j);
end
x0=y;
t=t+0.1;
i=i+1;
end
return

dove newra è questo metodo
function x=newra(f, J, x0, eps, max_iter)
k=0;

norma_residui=norm(f);
while(norma_residui>eps)

norma_residui=norm(f);

x=x0-J\f';

k=k+1;

if(k>max_iter)
disp('no');
disp(k);
break,
end

x0=x ;
end

tommaso.stilo
Ho fatto progressi... ho scritto questo
function  T = newra(x0,eps,max_iter)
    T=zeros(61,8);
    i=1;
    t=0;
    f=fun(x0,t);
    norma_residui=norm(f);
    while(t<=6)&&(i<=61)
        k=0;
    while(norma_residui>eps)
      
        f=fun(x0,t);
        
        J=jac(x0,t);
        % Calcola la norma del vettore dei residui
        norma_residui=norm(f);
        % Aggiorna la soluzione
        x=x0-J\f;
        % Aggiorna il contatore delle iterazioni
        k=k+1;
        % Arresta il calcolo se si raggiunge il massimu numero di iterazione
        if(k>max_iter)
            disp('no');
            disp(k);
            break, 
        end
        % Assumi come soluzione di primo tentativo quella 
      % ottenuta al ciclo precedente
            x0=x;
    end
    
     for j=1:8
    T(i,j)=x(j);
     end
    i=i+1;
    x0=x;
    end
end

Mi restituisce una matrice 61x8, in cui però si ripete 61 volte la soluzione con t =0... come mai?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.