You are on page 1of 3

Ejercicios con Matlab

Matemtica D - 2010

1.

Un ejemplo elemental de Diferencias Finitas

Consideremos la ecuacin diferencial con condicin inicial


x (t) = f (x(t)), t [0, T ], x(0) = x0 .

(1)

donde f y x0 estn dados. Queremos encontrar una solucin x : [0, T ] R, de (1). En los ejercicios a continuacin, veremos cmo elaborar cdigo en Matlab para obtener una solucin aproximada de estos problemas. Trabajaremos sobre un ejemplo concreto. Supongamos que
f (x) = sin(x), x0 = 1,

y T = 4.

Un algoritmo, que podemos llamar mtodo de diferencias nitas, obtiene una solucin aproximada basndose en la siguiente aproximacin:
x(t + t) x(t) + t x (t),

cuando t es pequeo. Aqu, aparece el concepto de diferencia nita


x(t) := x(t + t) x(t) t x (t),

>N=100;

Primero, tomemos una cantidad de partes en la que dividiremos el intervalo,

Tomemos N + 1 puntos en el intervalo [0, 4] uniformemente distribuidos


>h=1/N, >t=[0:h:4],

(todo lo que est con la fuente code sern sentencias que podemos ejecutar en el entorno Matlab.) Por lo tanto, si en nuestro ejemplo, comenzamos con t0 = 0, que es el nico valor de la x que tenemos disponible como dato, podemos aproximar el valor x(0,01) de la siguiente manera:
>x(1)=1, >x(2) = x(1)+h*sin(x(1)),

Anlogamente,

>x(3) = x(2)+h*sin(x(2)),

y as sucesivamente. . . hasta obtener el valor aproximado de x(4) (no confundir con x(4)), sentencias:

>x(N+1) = x(N)+h*sin(x(N)), Podemos utilizar un lazo for para implementar el ejemplo. Creamos un arichivo .m con las siguientes N=100, h=1/N, t=[0:h:4], x(1)=1,

for k=2:N+1, x(k)= x(k-1) + h*sin(4*x(k-1)); end >plot(t,x);

Para dibujar, usamos el comando plot.

function [y] = mifun(t,x) y=sin(x);

Con la funcin ode45 obtenemos otro resultado aproximado que podemos comparar con el obtenido anteriormente. Primero creamos una funcin mifun.m Luego, ejecutamos la siguiente sentencia,

>[t,x]=ode45('mifun',[0 1],1); y dibujamos sobre el otro dibujo en color rojo >hold >plot(t,x,'r');
2. Resolviendo la ecuacin del calor

Consideremos la ecuacin del calor con condiciones de borde e inicial,


(ED) 2u u = k 2 t x 0 < x < L, 0 < t < T,

(CB1) u(0, t) = A(t), 0 < t < T, (CB2) u(L, t) = B(t), 0 < t < T, (CI) u(x, 0) = f (x), 0 < x < L,

(2)

donde las funciones A, B , y f son datos del problema. El mtodo de diferencias nitas que usaremos se basa en las siguientes aproximaciones:
u u(x, t + t) u(x, t) (x, t) t t

(3) (4)

2u u(x + x, t) 2u(x, t) + u(x x, t) (x, t) 2 x (x)2

Tomemos ahora M + 1 puntos en el intervalo [0, L] y N + 1 puntos en el [0, T ] de la siguiente manera: Primero tomemos x = L/M y t = T /N . Luego, llamemos
x1 = 0, t1 = 0, xi = (i 1)x + x1 , 2 i M + 1, tj = (j 1)t + t1 , 2 j N + 1, ui,j = u(xi , tj ).

y si las expresiones de (3) y (4) fueran iguales, como lo exige la (ED) en (2), tendramos
ui,j+1 ui,j ui+1,j 2ui,j + ui1,j = , t (x)2

y, al despejar ui,j+1 ,
ui,j+1 =

t (ui+1,j 2ui,j + ui1,j ) + ui,j , (x)2

(5)

para 2 i M y 1 j N .

Ya estamos listos para comenzar a construir una aproximacin sobre la malla (xi , tj ) de una u que satisfaga (2), encontrando paso a paso los valores de ui,j . Los valores ui,0 para 1 i M + 1, estn dados por la (CI) en (2), ya que
ui,1 = f (xi ), 1 i M + 1.

Luego, segn (5), podemos calcular el valor de ui,2 , para 2 i M , como


ui,2 = t (ui+1,1 2ui,1 + ui1,1 ) + ui,1 , (x)2

y en los extremos, usamos la (CB) en (2) para tener u1,2 = A(t2 ) y uM +1,2 = B(t2 ). Procedemos de la misma manera, para calcular las restantes las de la matriz (ui,j ). Ejercicio 1. Implementar lo anterior con MatLab, para L = 2 , T = 10, f (x) = sin(x) y A(t) = B(t) = 0.

You might also like