Problema codice matlab

lilianal
Ciao a tutti,
ho scritto il seguente codice matlab
x_max=2;
sigma=0.2;
T=1;
r=0.1;
h=0.01;
k=2*10^(-3);
S=90;
M=x_max/h-1;
N=T/k;

rho=h/k^2;
S_f(1)=1;
p=zeros(M,N);
for j=1:M
p(j,1)=0;
end

for n=1:N-1
p(M+1,n+1)=0;
end

alpha=1+(r*h^2)/sigma^2;
beta=1+h+0.5*h^2;

a=rho/2*(sigma^2-(r-(sigma^2/2)*h));
b=1-sigma^2*rho-r*k;
c=rho/2*(sigma^2+(r-0.5*sigma^2)*h);


for i=1:N-1
p(1,i)=1-S_f(i);
p(2,i)=alpha-beta*S_f(i);
p(3,i)=1+(4*r*h^2)/sigma^2-(1+2*h+2*h^2)*S_f(i);
d(i)= (alpha-(a*p(1,i)+b*p(2,i)+c*p(3,i)-(p(3,i)-p(1,i))/(2*h)))/((p(3,i)-p(1,i))/(2*h)+beta*S_f(i));
S_f(i+1)=d(i)*S_f(i);
end

terminato il ciclo for, il vettore S_f dovrebbe essere completamente determinato ed invece mi compare, nella stragrande maggioranza delle componenti NaN. Quale può essere il problema? grazie

Risposte
Kashaman
ciao potresti dirci cosa dovrebbe fare questo programmino?

lilianal
In realtà è solo una piccola parte di programma. Dovrei implementare un metodo esplicito per risolvere un problema a frontiera libera, cioè un problema in cui il dominio è funzione del tempo. La frontiera libera nel programma è proprio il vettore S_f, e l'algoritmo che sto adoperando dovrebbe prima di tutto fissare questa frontiera, utilizzando tecniche particolari che non sto qui a descrivere e poi in un secondo momento impostare il metodo esplicito. Il problema non è l'algoritmo ma il fatto che già in partenza la frontiera, con quei valori del passo spaziale e temporale non me la determina. Sarà forse un problema di instabilità del metodo?

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