Matlab - Ecuacion no lineal

 
Vista:
sin imagen de perfil
Val: 43
Ha disminuido su posición en 13 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Ecuacion no lineal

Publicado por wil (26 intervenciones) el 16/02/2022 20:19:51
Hola, estoy intentado resolver la siguiente ecuacion no lineal por diferencias finitas :
% u_t=u_xx+6u(1-u)
%u(x,0)=(1+exp(x))^(-2)
%u(0,t)=(1+exp(-5t))^(-2)
%u(1,t)=(1+exp(1-5t))^(-2)

*************************************************
Mi codigo en matlab es el siguiente:

function w=ecuacion_test(xl,xr,tb,te,M,N)
% entrada: [xl,xr]=[0,1], [tb,te]=[0,1]
%passos em x e t : M=N=10
% w=ecuacion_test(0,1,0,1,10,10); Probe con estos datos
%
D=1.0;
f=@(x) (1+exp(x)).^(-2);

l=@(t) (1+exp(-5*t)).^(-2);
r=@(t) (1+exp(1-5*t)).^(-2);
h=(xr-xl)/M; k=(te-tb)/N; m=M+1; n=N;
sigma=(D*k)/(h*h);
w(:,1)=f(xl+(0:M)*h)'; % condicion inicial
w1=w;
for j=1:n
for it=1:3 % iteracion de Newton


DF1=zeros(m,m);DF2=zeros(m,m);

DF1=diag(1-6*k+2*sigma*ones(m,1))+diag(-sigma*ones(m-1,1),1);
DF1=DF1+diag(-sigma*ones(m-1,1),-1);
DF2=diag(2*6*k*w1);
DF=DF1+DF2;
F=-w(:,j)+(DF1+DF2/2)*w1;
DF(1,:)=[1, zeros(1,m-1)];% condcion de Dirichlet
DF(m,:)=[zeros(1,m-1) , 1];







F(1)=w1(1)-l(j);
F(m)=w1(m)-r(j); % Dirichlet conditions para F

w1=w1-DF\F; % METODO DE NEWTON


end
w(:,j+1)=w1;
end



x=xl+(0:m-1)*h;t=tb+(0:n)*k;
%u=zeros(M,N);


for itr=1:m
%fprintf('\n t x u(anal) err\n');
for i=1:n+1
uu(itr,i)=(1+exp(x(itr)-5*t(i))).^(-2);
w2(itr,i)=w(itr,i);
err(itr,i)=abs(uu(itr,i)-w2(itr,i));
end
end


for itr=1:m
fprintf('\n x \t t \t \t u(Exat.) \t w(Aprox.) \t erro \n');
for i=1:n+1
%fprintf('%6.2f %6.1f %15.6f %15.6f \n',x(itr),t(i),uu(itr,i),w(itr,i));
fprintf('%7.3f %7.3f %15.6f %15.6f %15.6f \n',x(itr),t(i),uu(itr,i),w2(itr,i),err(itr,i));

end
end

end


La solucion aproximada no esta ni cerca de la exacta, pienso que hay una parte del codigo que esta mal, pero no se cual es .
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder