Está en la página 1de 19

Universidad Nacional de Colombia Sede Medellín

Solución Taller # 8 Con Matlab


Métodos Numéricos

Tema: Solución Numérica de Sistemas de Ecuaciones Diferenciales, Ecuaciones Diferenciales


de Orden Superior y Problemas de Contorno.

1. Considere el siguiente P.V.I. con solución única

Aplique el método de Runge-Kutta clásico de orden 4 con 20 pasos para aproximar la


solución del P.V.I. Grafique en una misma ventana la solución y la aproximación obtenida.
¿Cuál es el valor aproximado obtenido para y (2), y’ (2) y y’’ (2)?

Para Encontrar la solución al P.V.I dado se debe tener en cuenta que, para el caso en
cuestión, se tiene un Problema de orden superior. En este tipo de casos cuando se tienen
Problemas de Orden Superior lo que se toma como procedimiento general para resolver la
ecuación dada en Matlab, es reducir el orden de las derivadas involucradas en la Ecuación
Diferencial por medio de un cambio de Variables. En nuestro caso se puede proceder así:

Sea
x 1= y

'
x 1= y '

También
'
x 2= y

x2 ' = y ' '

Por tanto
'
x 2=x 1(1)

Si se considera
''
x 3= y

Así
'
x 3=x 2 (2)
Y Finalmente
' ' ''
x 3= y

' 1 3 4
x 3= x3 − 2 x 2+ 3 x 1+5 ln ( t ) +9(3)
t t t

Como vemos con (1), (2) y (3) se tiene un sistema de ecuaciones diferenciales que al
solucionarlas para cada variable se obtiene la solución para x 1 que es en realidad la
solución para y, del P.V.I Original. También se debe tener en cuenta las condiciones
iniciales:

x1 (1)

( )()
0
0
x = x2 (1) = 1
x3 (1) 3

Aplicamos Entonces el método de Runge- Kutta de orden 4 para sistemas, de la siguiente


manera:

Usamos rks4.m para ello invocamos el contenido de esta rutina con la instrucción help

help rks4.m
Entrada - F es el sistema introducido como cadena de caracteres 'F'
- a y b los extremos del intervalo
- Za = [x(a), y(a)] las condiciones iniciales
- M es el numero de pasos
Salida - T es el vector de pasos
- Z = [x1(t), . . ., xn(t)] donde xk(t) es la aproximacion a la
k-esima variable dependiente

Definimos a la Función F, como la función que contiene las ecuaciones diferenciales del
sistema dado (Lados derecho de cada derivada). Lo hacemos de la siguiente manera:

F=inline('[x(2),x(3),(1/t)*(x(3))-(3/(t^2))*x(2)+(4/(t^3))*x(1)+5*log(t)+9]','t','x')

F=

Inline function:

F(t,x) = [x(2),x(3),(1./t)*(x(3))-(3/(t^2))*x(2)+(4/(t^3))*x(1)+5*log(t)+9]

Recuerde que es necesario definir cuáles son la variable independiente y dependiente para
F. Aplicamos el método así
[T, Z] = rks4 (F, 1, 3, [0 1 3], 20)

T=

Columns 1 through 13

1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000


1.9000 2.0000 2.1000 2.2000

Columns 14 through 21

2.3000 2.4000 2.5000 2.6000 2.7000 2.8000 2.9000 3.0000

Z=

0 1.0000 3.0000
0.1165 1.3469 3.9560
0.2727 1.7945 5.0105
0.4791 2.3517 6.1474
0.7470 3.0263 7.3547
1.0885 3.8247 8.6232
1.5163 4.7527 9.9459
2.0435 5.8155 11.3170
2.6840 7.0176 12.7319
3.4518 8.3632 14.1869
4.3616 9.8562 15.6788
5.4281 11.5001 17.2048
6.6667 13.2982 18.7628
8.0930 15.2537 20.3507
9.7228 17.3693 21.9668
11.5723 19.6479 23.6096
13.6579 22.0921 25.2778
15.9963 24.7043 26.9700
18.6045 27.4869 28.6853
21.4995 30.4421 30.4227
24.6987 33.5721 32.1813

En los resultados anteriores se muestra el vector T, el cual contiene los valores de t


equiespaciados en [1 3] con 20 subintervalos. De manera simultánea se muestra en Z los
valores de solución de x 1 , x 2 y x3 . Cada una de las soluciones para cada t de cada una de
estas variables se encuentra por columnas, así para x 1 la solución para cada t es la
primera columna y de manera sucesiva ocurre para las demás variables. Como x 1 es
igual a y, entonces la solución del P.V.I para cada t es la columna uno. También se puede
obtener información de la primera derivada de y, que serían los datos de la segunda
columna. Y finalmente se puede obtener información de y’’ que serían los datos de la tercera
columna de Z.

De los resultados obtenidos y de la explicación Mostrada anteriormente los datos de y (2),


y’ (2) y y’’ (2); son respectivamente
Z(11,:)

ans =

4.3616 9.8562 15.6788

La grafica de la solución obtenida de manera aproximada y la solución analítica se puede


obtener así:

Definimos la solución analítica del P.V.I como una función inline g

g=inline('-t^2+t*cos(log(t))+t*sin(log(t))+(t^3)*log(t)')

g=

Inline function:
g(t) = -t^2+t*cos(log(t))+t*sin(log(t))+(t^3)*log(t)

Graficamos

plot(T,Z(:,1),'r'),hold on,grid on
fplot(g,[1 3],'b')

Finalmente lo que se observa es lo que se muestra en la siguiente página.


25

20

15

10

0
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3

Como se puede observar la solución analítica y la solución numérica se acercan demasiado,


hasta el punto en que no se alcanzan a distinguir las dos curvas. Ampliamos por medio del
instrumento de lupa para verificar que efectivamente existen diferencias entre las dos
soluciones:
10.2

10.15

10.1

10.05

10

9.95

9.9

9.85

2.405 2.41 2.415 2.42 2.425

2. Consideremos el problema de predecir la población de dos especies que compiten por la


misma comida. Si denotamos sus poblaciones en el instante t por x1 (t) y x2 (t), se suele
suponer que las tasas de natalidad de cada especie son proporcionales a las
correspondientes poblaciones, mientras que la tasa de mortalidad de cada especie depende
de la población de ambas. Supongamos que la población de una pareja determinada de
especies se describe mediante las ecuaciones:
Si se sabe que la población inicial de cada especie es de 10000 individuos, encuentre una
aproximación a la solución de este sistema cuando 0 ≤t ≤ 4 con intervalos de tiempo de
0.1, usando el método de Runge-Kutta clásico de orden 4. ¿Cuál es la población de
individuos de las especies 1 y 2 en el tiempo t = 2? ¿Cómo cambian las poblaciones de las
especies 1 y 2 en t = 2? Grafique, en una misma ventana, las aproximaciones obtenidas para
x1 (t) y x2 (t), y observe el comportamiento de estas poblaciones en el intervalo de tiempo
0 ≤t ≤ 4 .

Aplicamos el método de Runge- Kutta para sistemas teniendo en cuenta que se debe definir
la función F, la cual sería:

F=inline('[x(1)*(4-0.0003*x(1)-0.0004*x(2)),x(2)*(2-0.0002*x(1)-0.0001*x(2))]','t','x')

F=

Inline function:
F(t,x) = [x(1)*(4-0.0003*x(1)-0.0004*x(2)),x(2)*(2-0.0002*x(1)-0.0001*x(2))]

Aplicamos el Método de la siguiente manera:

Debemos saber el valor de M, lo calculamos

M=(4-0)/0.1

Ans=

40

Ejecutamos la rutina

[T, Z] = rks4 (F, 0, 4, [10000 10000],40)

T=

Columns 1 through 13

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000


1.0000 1.1000 1.2000

Columns 14 through 26

1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000 2.1000


2.2000 2.3000 2.4000 2.5000

Columns 27 through 39
2.6000 2.7000 2.8000 2.9000 3.0000 3.1000 3.2000 3.3000 3.4000
3.5000 3.6000 3.7000 3.8000

Columns 40 through 41

3.9000 4.0000

Z=

1.0e+004 *

1.0000 1.0000
0.7804 0.9308
0.6527 0.9000
0.5676 0.8903
0.5049 0.8938
0.4553 0.9065
0.4134 0.9264
0.3763 0.9519
0.3424 0.9824
0.3106 1.0172
0.2801 1.0559
0.2509 1.0981
0.2227 1.1436
0.1956 1.1920
0.1698 1.2428
0.1454 1.2956
0.1228 1.3498
0.1021 1.4046
0.0835 1.4594
0.0672 1.5134
0.0532 1.5658
0.0414 1.6158
0.0317 1.6630
0.0239 1.7067
0.0178 1.7467
0.0130 1.7828
0.0094 1.8149
0.0068 1.8432
0.0048 1.8678
0.0034 1.8891
0.0023 1.9073
0.0016 1.9228
0.0011 1.9358
0.0008 1.9468
0.0005 1.9560
0.0004 1.9637
0.0002 1.9701
0.0002 1.9754
0.0001 1.9797
0.0001 1.9833
0.0001 1.9863

Las poblaciones de cada especie se encuentran para x1 y x2 en la primera y la segunda


columna de Z respectivamente. Cada una de estas poblaciones corresponde a un valor de
tiempo dado. Se desea ahora saber cuál es el valor de cada población en el tiempo t= 2.
Ahora dado que se cuenta con número grande de datos, se convierte en un procedimiento
muy tedioso calcular para t= 2 la población de cada especie, contando el número de datos
de T y luego buscar la respuesta en Z. Para evitar este procedimiento calculamos el numero
de pasos que hay desde t= 0 hasta t= 2 y con este número podemos extraer de Z los valores
de las poblaciones para este tiempo:

M=(2-0)/0.1

M=

20

Como Matlab comienza su cuenta desde 1, entonces las poblaciones que estamos buscando
están ubicadas en la fila 21 de Z. Extraemos los datos así:

Z(21,:)

ans =

1.0e+004 *

0.0532 1.5658

De esta manera la población de la especie x1 para t= 2 es de 532 individuos y para la


especie x2 es de 15658 individuos. Los datos se entregan en números enteros puesto que se
está hablando de un problema de poblaciones. Ahora veamos una grafica del
comportamiento de las dos poblaciones durante el tiempo, para ello se puede proceder así

plot(T,Z(:,1),'r',T,Z(:,2),'k'),hold on,grid on

El grafico obtenido se muestra en la siguiente página.


4
x 10
2

1.8

1.6

1.4

1.2

0.8

0.6

0.4

0.2

0
0 0.5 1 1.5 2 2.5 3 3.5 4

Como se puede observar en el anterior grafico, mientras que la población de la especie x2


aumenta indefinidamente, la población de la especie x1 tiende a desaparecer. Desde el
punto de vista de la bilogía esto posee mucho sentido puesto que ambas especies están
compitiendo por el mismo alimento, lo cual implica que la especie más fuerte será la que
mejor logre propagarse.

Deseamos ver el cambio de las poblaciones x1 y x2. Como se sabe las derivadas son el
cambio de las poblaciones, las cuales están definidas en F. En dicha función solo se
necesitan los valores de las poblaciones en t= 2 pues solo depende de x (1) y x (2) que son
las poblaciones para las especies x1 y x2 en cualquier t. Hallamos el cambio evaluando a F
en las poblaciones para t= 2 así:

F(2,Z(21,:))
ans =

1.0e+003 *

-1.2889 5.1329
Del anterior resultado. El primer dato refleja el cambio de la población de la especie x1 que
en este caso está disminuyendo y el segundo dato es el cambio para la especie x2 que está
aumentando.

3. Problema de Aplicación.

a. La siguiente ecuación sirve para modelar la deflexión del mástil de un bote sometido a
la fuerza del viento:

Donde f es la fuerza del viento, E el módulo de elasticidad, L la longitud del mástil e I


el momento de inercia. Aproxime la deflexión si y = 0 y dy/dz = 0 en z = 0. Use los
valores de los parámetros f = 50, L = 30, E = 1.2e8 e I = 0.05 para sus cálculos,
utilizando el método clásico de Runge-Kutta de orden cuatro, con tamaño de paso h =
0.1. Grafique la deflexión del mástil obtenida.

Con los parámetros que se entregan en el problema también es posible plantear el P.V.I
para el caso en estudio así:

{
50
y''= 8
(30−z )2
2× 1.2× 10 × 0.05
y ( 0 ) =0
y ' ( 0 )=0

Como se puede ver el anterior P.V.I es un problema de orden superior. Por lo tanto se
debe someter al mismos procedimiento del numeral 1 en el cual se hizo reducción de
orden cambiando variables. Después de realizar dicho procedimiento el sistema queda:

x 2=x '1(1)

50
x '2= 8
(30−z )2 (2)
2 ×1.2 ×10 × 0.05

Y el vector de Condiciones iniciales es:

x 0= x1 (0) = 0
( ) ()
x2 ( 0) 0

Aplicando el método de Runge- Kutta de orden 4 al sistema dado se tiene:


F=inline('[x(2),(50/(2*(1.2e8)*0.05))*(30-z)^2]','z','x')

F=

Inline function:
F(z,x) = [x(2),(50/(2*(1.2e8)*0.05))*(30-z)^2]

[T, Z] = rks4 (F, 0, 30, [0 0], ((30-0)/0.1));

Por la gran cantidad de datos que arroja el método colocamos punto y coma al final de
la instrucción. Recuerde que en la primera columna de la matriz Z son los datos de
deflexión, o sea de solución del P.V.I planteado anteriormente para cada dato de altura
z. Recuerde que se soluciona el P.V.I en [0 30] puesto que z no puede ser mayor que la
longitud total del mástil. La variable z es la altura del mástil desde su base hasta su
punta y por ello está restringida al valor de la longitud total del mismo.

Para graficar la deflexión del mástil lo que se obtiene es

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 5 10 15 20 25 30
b. Realice los mismos cálculos de a., pero ahora, en lugar de usar una fuerza del viento
constante, emplee una fuerza que varíe con la altura de acuerdo con

Graficar la deflexión del mástil obtenida.

Para este caso redefinimos a F, en vez de colocar 50 como valor de f lo reemplazamos


por el nuevo argumento que se dan en el presente literal

F=inline('[x(2),((((200*z)/(5+z))*exp((-2*z)/30))/(2*(1.2e8)*0.05))*(30-z)^2]','z','x')

F=

Inline function:
F(z,x) = [x(2),((((200*z)/(5+z))*exp((-2*z)/30))/(2*(1.2e8)*0.05))*(30-z)^2]

Aplicando el método

[T, Z] = rks4 (F, 0, 30, [0 0], ((30-0)/0.1));

Grficamos así

plot(T,Z(:,1),'r'),hold on,grid on
1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 5 10 15 20 25 30

Se verifica que para este caso la deflexión del mástil aumento un poco más en
comparación con el caso en el cual la fuerza del viento posee un valor constante de 50.

4. Un sistema de resorte tiene una resistencia al movimiento proporcional al cuadrado de la


velocidad, y su movimiento está descrito por
Si el resorte se suelta desde un punto que está a una unidad de distancia por arriba de su
punto de equilibrio, es decir, x (0) = 1 y x’ (0) = 0, use el método clásico de Runge-Kutta de
orden cuatro para aproximar la posición del resorte en [0 7], tomando tamaño de paso h =
0. 05. Grafique la aproximación obtenida.

Dado que este problema es un problema de orden superior se debe aplicar una reducción de
orden similar a las usadas en el literal 1 y 3. Después de realizar esta reducción de orden el
sistema de ecuaciones diferenciales que queda es:

x 2=x '1(1)

x '2=−0.1 x 22−0.6 x 1 (2)

Con condiciones iniciales

x 0= x1 (0) = 1
( ) ()
x2 ( 0) 0

Aplicando el Método en cuestión sería

F=inline('[x(2),-0.1*(x(2)^2)-0.6*x(1)]','t','x')

F=

Inline function:
F(t,x) = [x(2),-0.1*(x(2)^2)-0.6*x(1)]

[T, Z] = rks4 (F, 0, 7, [1 0],140);

Graficamos así:

plot(T,Z(:,1),'r'),hold on,grid on

Las grafica resultante se muestra en la siguiente página.


1

0.5

-0.5

-1

-1.5
0 1 2 3 4 5 6 7

5. Aproxime la solución del problema de contorno

Donde y = y (x) con un tamaño de paso h = 0.05. ¿Cuál es un valor aproximado para y

(1.5)? Si la solución exacta del P.V.F. dado es grafique


el error absoluto de la aproximación obtenida para la discretización dada, y calcule el
máximo error absoluto en la aproximación calculada.

Para resolver este numeral recuerde que se deben plantear dos P.V.I. Dichos P.V.I sirven
para aplicar el método del disparo lineal que en Matlab su rutina correspondiente se
denomina linsht.m. Planteemos los dos P.V.I

{
'' '
u = p ( x ) u + q ( x ) u+r ( x)
u ( a )=α u' ( a )=0

{
v ' ' =p ( x ) v ' +q ( x ) v
v ( a )=0 v ' ( a )=1

Para identificar p(x), q(x) y r(x). Llevemos el P.V.F dado a la forma estándar

{
−4 ' 2 2
y '' = y − 2 y + 2 ln ⁡(x)
x x x
y ( 1 )=0.5 y ( 2 )=ln ⁡( 2)

De lo anterior

−4
p(x)=
x

−2
q ( x )= 2
x

2
r ( x )= ln ⁡( x )
x2

Nota: Plantee los dos P.V.I y reduzca su orden.

Después de plantear los dos P.V.I y reducir su orden aplicamos el método del disparo lineal
sabiendo que F1 es el sistema de ecuaciones diferenciales que sale del P.V.I asociado a u, y
F2 es el sistema de ecuaciones diferenciales asociado a v. Usando la instrucción help.

help linsht.m
Entrada - F1 y F2 son los sistemas de ecuaciones de primer orden
Representando los Problemas de Valor Inicial (P.V.I.'s) (9) and (10),
Respectivamente; introducidas como cadenas de caracteres 'F1', 'F2'
- a y b son los extremos del intervalo
- alpha = x(a) y beta = x(b); las condiciones frontera
- M es el número de pasos
Salida - L = [T', X]; donde T' es el vector de abscisas (M+1) x 1
y X es el vector de ordenadas (M+1) x 1
Definiendo F1 y F2

F1=inline('[x(2),-(4/t)*x(2)-(2/(t^2))*x(1)+(2/(t^2))*log(t)]','t','x')

F1 =

Inline function:
F1(t,x) = [x(2),-(4/t)*x(2)-(2/(t^2))*x(1)+(2/(t^2))*log(t)]

F2=inline('[x(2),-(4/t)*x(2)-(2/(t^2))*x(1)]','t','x')

F2 =

Inline function:
F2(t,x) = [x(2),-(4/t)*x(2)-(2/(t^2))*x(1)]

Aplicando el método

L = linsht (F1, F2, 1, 2, 0.5, log(2), 20)

L=

1.0000 0.5000
1.0500 0.5443
1.1000 0.5788
1.1500 0.6057
1.2000 0.6268
1.2500 0.6431
1.3000 0.6559
1.3500 0.6657
1.4000 0.6732
1.4500 0.6789
1.5000 0.6832
1.5500 0.6864
1.6000 0.6888
1.6500 0.6904
1.7000 0.6915
1.7500 0.6923
1.8000 0.6927
1.8500 0.6930
1.9000 0.6931
1.9500 0.6931
2.0000 0.6931

Como se puede observar el método del disparo lineal en su primera columna muestra los
valores de x equiespaciados 0.1 y en la segunda columna las aproximaciones
correspondientes de soluciones para cada t del P.V.F. Para y (1.5) la aproximación obtenida
es de 0.6832.
Nota: Se recomienda al Estudiante resolver la parte restante de este numeral de manera
independiente.

También podría gustarte