[Matlab] Passare argomenti ad una funzione
Ho creato uno script per risolvere il problema di Cauchy di una data funzione \(y'=f(t,y)\). Voglio creare ora una funzione per risolvere questo problema per qualsiasi \(y'=f(t,y)\) solamente che non so come passare una funzione generica \(y'\) come argomento, come si fa? Ho provato così:
Quello che lo script deve fare è prendere la funzione definita in f2.m e calcolare la soluzione approssimata, dopodiché confrontarla con la soluzione esatta in f1.m.
euler.m
f1.m
f2.m
Ma mi da errore:
Quello che lo script deve fare è prendere la funzione definita in f2.m e calcolare la soluzione approssimata, dopodiché confrontarla con la soluzione esatta in f1.m.
euler.m
%definisco passi e cond iniziale h=0.1; t=0:h:4; y_app(1)=1.0; %applico eulero for i=1:length(t-1), x=f(t(i),y_app(i)); y_app(i+1)=y_app(i)+h*x; end y_ex=f(t); %confronto i grafici plot(t,y_app,'b--',t,y_ex,'r-'); legend('Approssimata','Esatta'); title('Approssimazione di Eulero, h=0.01'); xlabel('Time'); ylabel('y*(t), y(t)');
f1.m
function b=f(t) b=2.5*exp(-2*t)-1.5*exp(-4*t);
f2.m
function a=f(t,y) a=3*exp(-4*t)-2*y;
Ma mi da errore:
??? Undefined function or method 'f' for input arguments of type 'double'. Error in ==> euler at 11 x=f(t(i),y_app(i));
Risposte
Nei file f1.m e f2.m rinomina la f rispettivamente f1 e f2, e correggi di conseguenza il file euler.m.
Ok, grazie!
Sai come fare per definire due funzioni nello stesso file? Perché ho bisogno di scrivere una cosa come:
e quindi devo avere una cosa del tipo
in quanto devo risolvere un sistema di equazioni del primo ordine e non posso scrivere le funzioni in file separati, altrimenti manco la consegna. Il problema è che se le funzioni devono avere lo stesso nome del file allora non posso usare lo stesso file, a meno che non sia lecito usare un qualche tipo di indice per fare riferimento alle diverse funzioni, boh. Tipo:
E' che adesso non ho a disposizione il programma se no proverei subito.
Sai come fare per definire due funzioni nello stesso file? Perché ho bisogno di scrivere una cosa come:
y1(t+1)=y1(t)+h*f1(t,y1,y2) y2(t+1)=y2(t)+h*f2(t,y1,y2)
e quindi devo avere una cosa del tipo
function a=f1(t,y1,y2) a=... function b=f2(t,y1,y2) b=...
in quanto devo risolvere un sistema di equazioni del primo ordine e non posso scrivere le funzioni in file separati, altrimenti manco la consegna. Il problema è che se le funzioni devono avere lo stesso nome del file allora non posso usare lo stesso file, a meno che non sia lecito usare un qualche tipo di indice per fare riferimento alle diverse funzioni, boh. Tipo:
function a=f1(i,t,y1,y2) if i=1 a=... if i=2 a=...
E' che adesso non ho a disposizione il programma se no proverei subito.
La definizione delle funzioni non riguarda l'implementazione della funzione per la risoluzione del problema di Cauchy usando il metodo di Eulero, ma riguarda il chiamante della funzione. Il metodo in cui questa funzione sia stata definita non ti deve riguardare. Ora, supponendo che tu abbia implementato una funzione per risolvere il problema di Cauchy chiamata cauchy, allora verrà chiamata passando il nome della funzione che devi richiamare nel tuo codice. Alternativamente, se vuoi usare il tuo script, devi scrivere qualcosa come
Dai per esempio una occhiata qua.
f = @(t, y) 3*exp(-4*t)-2*y;
Dai per esempio una occhiata qua.