Está en la página 1de 3

function [x, t, U] = barra_explicito(c,h,k)

c=1;
h=0.2
k=0.02
if nargin < 3
if nargin==1
h=input('longitud de paso h=?');
end
k=(h/c)^2/2 % k maximo
end
tmax=input('Tiempo maximo tmax=?');
s=k*(c/h)^2
n=1/h-1; x=linspace(0,1,n+2);
M=tmax/k; t=linspace(0,tmax,M+1);
for i=0+1:(n+1)+1, U(i,1)=g(x(i)); end;
for j=1:M
U(1,j+1)=a(t(j));U(n+2,j+1)=b(t(j));
for i=2:n+1
U(i,j+1)=s*U(i-1,j)+(1-2*s)*U(i,j)+s*U(i+1,j);
end
end
U'
surf(x,t,U');view(85,45);
xlabel('Longitud (x)')
ylabel('Tiempo(t)')
zlabel('Temperatura (U)')
title('METODO EXPLICITO')

function a=a(t)
a=0;

function b=b(t)
b=0;

function g=g(x)
%g=sin(pi*x);
g=4*x-4*x.^2;
function U=nicolson(f,c1,c2,a,b,c,n,m)
% Programa para resolver la ecuacion del calor, con el metodo
%de Crank-Nicholson

% DATOS
% f=u(x,0) almacene como cadena de caracteres
% c1=u(0,t) y c2=u(a,t)
% a y b son los extremos derechos de [0,a] y [0,b]
% c es la constante de la ecuacion del calor
% n y m son el numero de nodos en [0,a] y [0,b]
% SALIDA
% U es la matriz de aproximaciones
%Inicializacion de los parametros y de U

h=a/(n-1);
k=b/(m-1);
r=c^2*k/h^2;
s1=2+2/r;
s2=2/r-2;
U=zeros(n,m);
% condiciones de contorno
U(1:1:m)=c1;
U(n,1:m)=c2;
%Generacion de la primera fila de U
U(2:n-1,1)=feval(f,h:h:(n-2)*h)';
%Construccion del os elementos diagonales y no diagonales de
%A y del vector de terminos independiente B y resolucion
%del sistema AX=B
Vd(1,1:n)=s1*ones(1,n);
Vd(1)=1;
Vd(n)=1;
Va=-ones(1,n-1);
Va(n-1)=0;
Vc=-ones(1,n-1);
Vc(1)=0;
Vb(1)=c1;
Vb(n)=c2;
for j=2:m
for i=2:n-1
Vb(i)=U(i-1,j-1)+U(i+1,j-1)+s2*U(i,j-1);
end
X=trisys(Va,Vd,Vc,Vb);
U(1:n,j)=X';
end
U=U'
function X=trisys(A,D,C,B)
%DATOS
% A es la subdiagonal de la matriz de los coeficientes
% D es la diagonal principal de la matriz de los coeficiente
% C es la matriz superdiagonal de la matriz de los coeficiente
% B es el vector de los terminos independientes del sistema lineal

%RESULTADOS
% X es le vector solucion

%A=[-1 2 5];
%D=[1 4 5 1];
%C=[2 1 4 2];
%B=[-2 4 1 3];
N=length(B);
for k=2:N
mult=A(k-1)/D(k-1);
D(k)=D(k)-mult*C(k-1);
B(k)=B(k)-mult*B(k-1);
end
X(N)=B(N)/D(N);
for k=N-1:-1:1
X(k)=(B(k)-C(k)*X(k+1))/D(k);
end
X=X';

También podría gustarte