Você está na página 1de 4

ONDA

a=input('Valor final en el eje x,a:');


b=input('Valor final del tiempo t,b:');
c=input('Ingrese c:');
h=input('Ingrese el paso en x, h:');
k=input('Ingrese el paso en t, k:');

n=a/h;m=b/k;r=c*k/h;
for i=1:n+1
x(i)=(i-1)*h;
f(i)=sin(pi*x(i));
g(i)=0;
end

for j=1:m+1
t(j)=(j-1)*k;
end
for j=1:m+1
u(1,j)=0;
u(n+1,j)=0;
end
for i=2:n
u(i,1)=f(i);
u(i,2)=f(i)+k*g(i);
end
for j=2:m
for i=2:n
u(i,j+1)=(2-2*r^2)*u(i,j)+r^2*(u(i+1,j)+u(i-1,j))-u(i,j-1);
end
end
disp('La solución aproximada es U')
disp(u)
surf(u)
xlabel('Posicion')
ylabel('Tiempo')
zlabel('Valores u')
Calor df

function w=calordf(xl,xr,yb,yt,M,N)
% Ecuación del calor por diferencias avanzadas
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x)sin(2*pi*x).^2;
l=@(t)0*t; r=@(t)0*t; D=1;
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N;
sigma=D*k/h/h;
a=diag(1-2*sigma*ones(m,1))+diag(sigma*ones(m-1,1),1);
a=a+diag(sigma*ones(m-1,1),-1);
lside=l(yb+(0:n)*k); rside=r(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h)';
for j=1:n
w(:,j+1)=a*w(:,j)+sigma*[lside(j); zeros(m-2,1); rside(j)];
end
w=[lside; w; rside];
x=(0:m+1)*h; t=(0:n)*k;
mesh(x,t,w'), view(60,30); axis([xl xr yb yt -1 1])
end

calor di

function w=calordi(xl,xr,yb,yt,M,N)
% Ecuación del calor por diferencias avanzadas
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x)sin(2*pi*x).^2;
l=@(t)0*t; r=@(t)0*t; D=1;
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N;
sigma=D*k/h/h;
a=diag(1+2*sigma*ones(m,1))+diag(-sigma*ones(m-1,1),1);
a=a+diag(-sigma*ones(m-1,1),-1); lside=l(yb+(0:n)*k);
rside=r(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h)';
for j=1:n
w(:,j+1)=a\(w(:,j)+sigma*[lside(j); zeros(m-2,1); rside(j)]);
end
w=[lside; w; rside];
x=(0:m+1)*h; t=(0:n)*k;
mesh(x,t,w'), view(60,30); axis([xl xr yb yt -1 1])
end
nicholson

function w=Crank_Nicolson(xl,xr,yb,yt,M,N)
% Ecuación del calor por Crank-Nicolson
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x)sin(pi*x)+sin(3*pi*x);
l=@(t)0*t; r=@(t)0*t; D=1;
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N; close all
sigma=D*k/h/h;
a=diag(2+2*sigma*ones(m,1))+diag(-sigma*ones(m-1,1),1);
a=a+diag(-sigma*ones(m-1,1),-1);
b=diag(2-2*sigma*ones(m,1))+diag(sigma*ones(m-1,1),1);
b=b+diag(sigma*ones(m-1,1),-1);
lside=l(yb+(0:n)*k); rside=r(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h)';
for j=1:n
sides=[lside(j)+lside(j+1);
zeros(m-2,1); rside(j)+rside(j+1)];
w(:,j+1)=a\(b*w(:,j)+sigma*sides);
end
w=[lside; w; rside];
x=(0:m+1)*h; t=(0:n)*k;
mesh(x,t,w'), view(60,30); axis([xl xr yb yt -1 1])
end
Estado estacionario

function w=Poisson(xl,xr,yb,yt,M,N)
% Ecuaci�n de Poisson por diferencias finitas
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x,y) 0; g1=@(x) 0; g2=@(x) x;
g3=@(y) 0; g4=@(y) y;
m=M+1; n=N+1; mn=m*n; close all
h=(xr-xl)/M; h2=h^2; k=(yt-yb)/N; k2=k^2;
x=xl+(0:M)*h; y=yb+(0:N)*k;
A=zeros(mn,mn); b=zeros(mn,1);
for i=2:m-1
for j=2:n-1
A(i+(j-1)*m,i-1+(j-1)*m)=1/h2; A(i+(j-1)*m,i+1+(j-1)*m)=1/h2;
A(i+(j-1)*m,i+(j-1)*m)=-2/h2-2/k2;
A(i+(j-1)*m,i+(j-2)*m)=1/k2; A(i+(j-1)*m,i+j*m)=1/k2;
b(i+(j-1)*m)=f(x(i),y(j));
end
end
for i=1:m
j=1; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g1(x(i));
j=n; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g2(x(i));
end
for j=2:n-1
i=1; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g3(y(j));
i=m; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g4(y(j));
end
v=A\b;
w=reshape(v(1:mn),m,n);
mesh(x,y,w')
end

Você também pode gostar