Problema codice matlab
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
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
ciao potresti dirci cosa dovrebbe fare questo programmino?
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?