1
Resolutores de Ecuaciones Diferenciales
Mathcad tiene una variedad de funciones para resolver numéricamente
ecuaciones diferenciales parciales:
Resolutor de Ecuaciones Diferenciales Ordinarias
odesolve(x,b,step)
rkfixed(y,x1,x2,npoints,D)
Sistemas Alisados
Bulstoer(y,x1,x2,npoints,D)
Sistemas Stiff
Stiffb(y,x1,x2,npoints,D,J)
Stiffr(y,x1,x2,npoints,D,J)
Sistemas lentamente variables
Rkadapt(y,x1,x2,npoints,D)
Encontrar el ultimo punto sobre el intervalo de integración
bulstoer(y,x1,x2,acc,D,kmax,s)
rkadapt(y,x1,x2,acc,D,kmax,s)
stiffb(y,x1,x2,acc,D,J,kmax,s)
stiffr(y,x1,x2,acc,D,J,kmax,s)
Resolver problemas de valores límites dos-puntos
bvalfit(v1,v2,x1,x2,xf,D,load1,load2,score)
sbval(v,x1,x2,D,load,score)
Resolver Ecuaciones Diferenciales a las derivadas parciales
relax(a,b,c,d,e,f,u,rjac)
multigrid(M,ncycle)
Resolución de una sola ecuación diferencial ordinaria
odesolve(x,b,[step]) Retorna una función de x la cual es una solución a la
ecuación diferencial ordinaria (ODE), sujeta a a los constreñiminetos de
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
2
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
valor inicial o bordes provista en el solve block. La ODE debe ser lineal en
sus derivadas más altas y el número de condiciones debe ser igual al orden
de la ODE.
.
Argumentos:
x es la variable de integración. x debe ser real.
b es el punto terminal del intervalo de integración. b debe ser real.
step (opcional) es el número de pasos usados internamente cuando se
calcula la solución.
Uso de la función odesolve:
Pasos para usar la función odesolve para resolver una ecuación diferencial
ordinaria:
• Tipee la palabra Given para arrancar el
solve block.
•
Por debajo del Given, tipee la ecuación
diferencial y sus constrñimientos usando
boolean operators.
•
Tippee la función odesolve con la
variable de integración, x, y el punto
terminal b.
Notes:
•
La ecuación diferencial puede ser escita usando los operadores
derivada tales como d/dx y d2/dx2 o usando notación primada similar
a y(x) e y'(x). (La combinación de teclas para el character prima es
Ctrl+F7.)
•
Los constreñimientos estarán en la forma de y(a)=b o y'(a)=b.
Mathcad no aceptará constrñimientos más complicados tales como
y'(a)+y(a)=b.
•
El punto terminal b debe ser más grande que el valor inicial.
•
Por default, odesolve usa un runge-kutta de paso fijo de resolución.
Para usar un método adaptivo, cliquee sobre odesolve con el botón
derecho del mouse y eleija Adaptive desde el menú pop-up.
•
Para resolver sistemas de ecuaciones diferenciales o para resolver
una que no es lineal en el término de derivada más alta, use rkfixed.
Ejemplo:
3
Los ejemplos de abajo demuestran cómo usar la función odesolve para
resolver ecuaciones diferenciales ordinarias:
Given
100 ⋅y''( x) + 10 ⋅y'( x) + 101 ⋅y( x)
y( 0)
0
y'( 0)
1
50 ⋅cos ⋅x
4
1
y := Odesolve( x , 150)
2
1.465
1
y( x)
0
− 0.698
−1
0
2
4
0
6
8
x
10
10
Given
4⋅
d2
2
f ( t) + f ( t)
f ( 0)
t
4
f ( 5)
13.5
dt
f := Odesolve( t , 5)
30
20
f ( t)
10
0
1
2
3
4
5
6
t
---------------------------------------------------------------------------------------------------Utilización de Matlab para resolución de Ecuaciones Diferenciales
DSOLVE Solución simbólica de ecuaciones diferenciales ordnarias
DSOLVE('eqn1','eqn2', ...) acepta ecuaciones simbólicas representando
ecuaciones diferenciales ordinarias y condiciones iniciales. Varias ecuaciones o
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
4
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
condiciones iniciales pueden ser agrupadas juntas, separadas por comas, en
un único argumento de entrada.
Por omisión, la variable independiente es ' t '. La variable independente puede
ser cambiada de 't' a alguna otra variable simbólica incluyendo esa variable
como el último argumento.
La letra 'D' denota derivada con respecto a la variable independiente, en este
caso usualmente d/dt. Una 'D' seguida por un dígito denota derivación
repetida; por ejemplo, D2 es d^2/dt^2. Cualesquiera caracteres siguiendo
estos operadores de derivación son tomados como variables dependientes; por
ejemplo, D3y denota al tercera derivada de y(t). Note que los nombes de las
variables simbólicas no deberán contener la letra 'D'.
Las condiciones iniciales son especificadas por ecuaciones tales como 'y(a)=b'
o 'Dy(a) = b' donde y es una de las variables dependientes y a y b son
constantes. Si el número de condiciones iniciales es menor que el número de
variables dependientes, las soluciones resultantes obtendrán constantes
arbitrarias, C1, C2, etc.
Son posibles tres diferentes tipos de salidas.
• Para una ecuación y una salida, es retornada la solución resultante, con
soluciones múltiples para una ecuación no lineal en un vector simbólico.
• Para varias ecuaciones e igual número de salidas, los resultados son
ordenados en orden lexicográfico y asignados a las salidas.
• Para varias ecuaciones y una única salida, se retorna una estructura
conteniendo las soluciones.
Si no se encuentra ninguna solución closed-form (explícita) , se intenta una
solución implícita. Cuando se retorna una solución implícita, se da una
advertencia.
Si no se puede calcular una solución explícita o implícita, entonces se da una
advertencia y se retorna el sym vacío. En algunos casos involucrando
ecuaciones no-lineales, la salida será una ecuación diferencial de más bajo
orden equivalente o una integral.
Ejemplos:
dsolve('Dx = -a*x') retorna
ans = exp(-a*t)*C1
x = dsolve('Dx = -a*x','x(0) = 1','s') retorna
x = exp(-a*s)
y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0') retorna
y=
[ sin(t)]
[ -sin(t)]
S = dsolve('Df = f + g','Dg = -f + g','f(0) = 1','g(0) = 2')
retorna una estructura S con campos
S.f = exp(t)*cos(t)+2*exp(t)*sin(t)
5
S.g = -exp(t)*sin(t)+2*exp(t)*cos(t)
Y = dsolve('Dy = y^2*(1-y)')
Advertencia: No puede ser encontrada solución explícita; se retorna la
solución implícita.
Y=
t+1/y-log(y)+log(-1+y)+C1=0
dsolve('Df = f + sin(t)', 'f(pi/2) = 0')
dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0')
S = dsolve('Dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1')
S = dsolve('Du=v, Dv=w, Dw=-u','u(0)=0, v(0)=0, w(0)=1')
w = dsolve('D3w = -w','w(0)=1, Dw(0)=0, D2w(0)=0')
y = dsolve('D2y = sin(y)'); pretty(y)
Algunos comandos, tales como ode45 (un resolutor de ecuaciones
diferenciales en forma numérica), requiere que su primer argumento sea una
funcción — para ser preciso o bien una función inline, como en
ode45(f, [0 2], 1).
o una function handle, esto es, el nombre de una función built-in o una función
M-file precedida por el símbolo especial @, como en
ode45(@func, [0 2], 1)).
Ecuaciones Diferenciales Ordinarias
El objetivo de este laboratorio es aprender técnicas para la resolución numérica de
problemas de valores iniciales (P.V.I.) para ecuaciones diferenciales ordinarias
(E.D.O.) y sistemas de E.D.O.
Matlab tiene varios comandos para la resolución numérica de P.V.I. para E.D.O.:
Resolutores de ecuaciones diferenciales.
Resolutores de problemas con valores iniciales para ODEs. (Si no tiene seguridad
acerca del stiffness, intente primero ODE45, luego ODE15S.)
[En matemática, una ecuación stiff es una ecuación diferencial en los que determinados
métodos numéricos para resolver la ecuación son numéricamente inestables, a menos
que el tamaño de paso sea tomado extremadamente pequeño. Ha resultado difícil
formular una definición precisa del stiff, pero la idea principal es que la ecuación
incluye algunos términos que pueden conducir a una variación rápida en la solución.]
ode45 – Resuelve ED non-stiff, por el medium order method.
ode23 - Resuelve ED non-stiff, por el low order method.
ode113 - Resuelve ED non-stiff,, por el variable order method.
ode23t - Resuelve ED moderadamente non-stiff, y DAEs Index 1, trapezoidal rule.
ode15s - Resuelve ED stiff y DAEs Index 1, variable order method.
ode23s - Resuelve ED stiff, low order method.
ode23tb - Resuelve ED stiff, low order method.
Como se ve en esta lista, hay métodos para resolver E.D.O. stiff y no stiff. Además hay
métodos de orden bajo, medio, alto y variable.
Todos ellos tienen una sintaxis semejante. Por ejemplo, para resolver el P.V.I.
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
6
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
en el intervalo [to, tf ] mediante el comando ode45 en su opción más sencilla, debe
ejecutarse:
[t,y]=ode45(’f’,[to tf],yo);
donde:
• f es el nombre de la función f(t, y) (típicamente definida mediante un programa
function en un archivo f.m);
• to y tf son los extremos del intervalo donde se desea conocer la solución;
• yo es el valor de la solución en to (es decir el valor de la condición inicial y(to) = yo);
• t devuelve los valores de la variable independiente t donde el método calcula el valor
de la solución;
• y devuelve los valores de la solución en cada uno de los puntos t.
Estos comandos no requieren como dato un paso de integración h pues todos ellos
determinan de manera automática en cada paso k, el tamaño del paso de integración
hk necesario para mantener los errores por debajo de una tolerancia determinada. Los
valores de t que entrega corresponden a los puntos
tk = tk−1 + hk, k = 1, 2, . . . , en los que el comando necesitó calcular el valor de y(tk).
Si se desea conocer la solución para ciertos valores de t, puede
alternativamente ejecutarse:
[t,y]=ode45(’f’,tspan,yo);
donde tspan es el vector de valores donde se desea conocer la solución. Por
ejemplo, tspan=0:0.1:1.
En ese caso, la salida t coincide con tspan e y contiene los valores de la
solución en esos puntos.
La tolerancia predeterminada de estos métodos es 10E−3, para el error
relativo, y 10E−6, para el error absoluto. Si se desea calcular la solución con
otras tolerancias, deben prefijarse las opciones elegidas mediante el comando
odeset. Además, en la ejecución del comando para resolver la E.D.O., debe
agregarse el parámetro adicional de opciones. La sintaxis para realizar esto es,
por ejemplo:
options=odeset(’RelTol’,1e-6,’AbsTol’,1.e-8);
[t,y]=ode45(’f’,[to tf],yo,options);
Si se ejecuta options=odeset(’RelTol’,1e-6,’AbsTol’,1.e-8) sin el “;” puede verse
que hay otras opciones que pueden prefijarse, además de las tolerancias de los
errores.
Por ejemplo, si se desea resolver el P.V.I.
en el intervalo [0, 1.5], mediante el comando ode45 y visualizar la solución
obtenida, debe crearse un fichero f.m como sigue:
7
function z=f(t,y)
z=y;
y ejecutarse:
[t,y]=ode45(’f’,[0 1.5],1);
plot(t,y,t,exp(t),'o')
Así se obtiene la siguiente gráfica:
El siguiente ejemplo resuelve la misma ecuación en los puntos t=0:0.1:1.5, con
error absoluto menor a 10−E6 y calcula los errores cometidos restando los
valores calculados a los de la solución verdadera, que en este caso es y(t) =
exp(t):
options=odeset('AbsTol',1.e-6);
tspan=0:.1:1.5;
[t,y]=ode45('f',tspan,1,options);
error=exp(t)-y
error =
1.0e-006 *
0
-0.0003
-0.0248
-0.0448
-0.0076
-0.0415
-0.0694
-0.0200
-0.0669
-0.1056
-0.0402
-0.1048
-0.1586
-0.0721
-0.1612
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
8
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
-0.0989
La salida que se presenta indica que los errores son efectivamente menores en
valor absoluto a 10E−6.
La resolución de P.V.I. para sistemas de E.D.O. se realiza mediante los
mismos comandos. En tal caso, f(t,y) debe ser una función a valores vectoriales
(es decir un vector columna de funciones) e y un vector columna de variables
de la misma dimensión. Además, la condición inicial yo también debe ser un
vector columna de la misma dimensión.
Por ejemplo, consideremos el P.V.I.
cuya solución exacta es:
Por lo tanto los puntos (x(t), y(t)) solución de este sistema de E.D.O, describen
la circunferencia unitaria.
Este sistema escrito vectorialmente resulta:
Para resolverlo debe crearse un fichero F.m como sigue:
function Z=F(t,Y)
Z=[Y(2);-Y(1)];
Los siguientes comandos resuelven este P.V.I. en el intervalo [0, 2] y grafican
la curva (x(t), y(t)), para 0 < t< 2, que se obtiene:
[t,Y]=ode45('f',[0 2*pi],[1;0]);
plot(Y(:,1),Y(:,2));
Así se obtiene la siguiente gráfica:
9
Supongamos que deseamos resolver y plotear la solución de la siguiente
ecuación diferencial de segundo orden
eqn2='D2y+8*Dy+2*y=cos(x)';
inits2 = 'y(0)=0, Dy(0)=1';
y=dsolve(eqn2,inits2,'x')
y =
1/65*cos(x)+8/65*sin(x)+(-1/130+53/1820*14ˆ(1/2))*exp((-4+14ˆ(1/2))*x)
-1/1820*(53+14ˆ(1/2))*14ˆ(1/2)*exp(-(4+14ˆ(1/2))*x)
x=0:0.1:1;
z=eval(vectorize(y));
plot(x,z)
Given
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
10
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
1
50 ⋅cos ⋅x
4
100 ⋅y''( x) + 10 ⋅y'( x) + 101 ⋅y( x)
y( 0)
y'( 0)
0
1
y := Odesolve( x , 150)
2
1.465
1
y( x)
0
− 0.698
−1
0
2
0
4
6
8
x
10
10
Resolver con Matlab:
eqn2='100*D2y+10*Dy+101*y=50*cos(0.25*x)';
inits2 = 'y(0)=0, Dy(0)=1';
y=dsolve(eqn2,inits2,'x')
x=0:0.1:10;
z=eval(vectorize(y));
plot(x,z)
Resolución de Sistemas de ED con Matlab
Supóngase que deseamos resolver y graficar las soluciones del sistema de tres
ED ordinarias
11
Primero, para encontrar una solución general, procedemos como en el caso de
una sóla ED, excepto que cada ecuación es abrazada por su par de comillas
(simples):
[x,y,z]=dsolve(’Dx=x+2*y-z’,’Dy=x+z’,’Dz=4*x-4*y+5*z’)
x =
-C1*exp(3*t)-C2*exp(t)-2*C3*exp(2*t)
y =
C1*exp(3*t)+C2*exp(t)+C3*exp(2*t)
z =
4*C1*exp(3*t)+2*C2*exp(t)+4*C3*exp(2*t)
Tenga en cuenta que ya no se ha especificado ninguna variable independiente,
MATLAB utiliza por defecto t.. Para resolver un problema de valores iniciales,
simplemente se define un conjunto de valores iniciales y se añaden al final del
comando dsolve (). Supongamos que tenemos x (0) = 1, y (0) = 2, y z (0) = 3.
Luego:
inits=’x(0)=1,y(0)=2,z(0)=3’;
[x,y,z]=dsolve(’Dx=x+2*y-z’,’Dy=x+z’,’Dz=4*x-4*y+5*z’,inits)
x =
-5/2*exp(3*t)-5/2*exp(t)+6*exp(2*t)
y =
5/2*exp(3*t)+5/2*exp(t)-3*exp(2*t)
z =
10*exp(3*t)+5*exp(t)-12*exp(2*t)
Finalmente, graficando esta solución
t=linspace(0,.5,25);
xx=eval(vectorize(x));
yy=eval(vectorize(y));
zz=eval(vectorize(z));
plot(t, xx, t, yy, t, zz)
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
12
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
Búsqueda de soluciones numéricas
MATLAB tiene una serie de herramientas para resolver numéricamente las
ecuaciones diferenciales ordinarias. Nos centraremos en los dos principales, el
incorporado en las funciones ode23 y ode45, que implementan versiones
de Runge-Kutta 2do/3er-orden y 4to/5to-orden, respectivamente.
Ejemplo. Aproximar numéricamente la solución de el ED de primer orden
sobre el intervalo x [0, .5].
Para cualquier ED en la forma y′ = f(x, y), comenzamos definiendo la función
f(x, y). Para ecuaciones únicas, podemos definir f(x, y) como una función inline.
Aquí,
f=inline('x*y^2+y')
f =
Inline function:
f(x,y) = x*yˆ2+y
El uso básico para el resolutor ode45 de Matlab es
ode45(function,domain,initial condition).
Esto es, usamos
[x,y]=ode45(f,[0 .5],1)
y MATLAB retorna dos vectores columna, el primero con valores de x y el
segundo con valores de y. Ya que x e y son vectores con los correspondientes
componentes, podemos graficar los valores con
plot(x,y)
13
Elección de la partición.
En la aproximación de esta solución, el algoritmo ode45 ha seleccionado una
partición determinada del intervalo [0, 0.5], y MATLAB ha devuelto un valor de y
en cada punto de esta partición. A menudo es el caso en la práctica en que nos
gustaría especificar la partición de valores en los que MATLAB devuelve una
aproximación. Por ejemplo, sólo puede ser que desee para aproximar y(0.1),
y(0,2), ..., y(0,5). Podemos especificar esto al introducir el vector de valores [0,
0.1, 0.2, 0.3, 0.4, 0.5], como el dominio en el ode45. Es decir, que utilizamos
xvalues=0:.1:.5;
[x,y]=ode45(f,xvalues,1)
x =
0
0.1000
0.2000
0.3000
0.4000
0.5000
y =
1.0000
1.1111
1.2500
1.4286
1.6667
2.0000
Opciones. Hay varias opciones disponibles para el resolutor ode45, dando al
usuario un control limitado sobre el algoritmo. Dos opciones importantes son la
tolerancia relativa y absoluta, respectivamente RelTol y AbsTol. En cada paso
del algoritmo ode45, un error se aproxima a ese paso. Si yk es la aproximación
de y(xk) en el paso k, y ek es el error aproximado en este paso, a continuación,
MATLAB elige su partición para asegurar
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
14
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
ek ≤ max (yk * RelTol , AbsTol),
donde los valores por defecto son RelTol = 0,001 y AbsTol = 0.000001.
Como un ejemplo de cuándo puede ser que desee cambiar estos valores,
observamos que si yk llega a ser grande, entonces al error ek se le permitirá
crecer bastante. En este caso, aumentar el valor de RelTol. Para la ecuación
y' = xy2 + y, con y (0) = 1, los valores de y llegan a ser muy grandes cuando x
se acerca a 1. De hecho, con las tolerancias de error por defecto, nos
encontramos con que el comando
[x, y] = ode45 (f, [0,1], 1);
conduce a un mensaje de error, causado por el hecho de que los valores de y
son cada vez más grandes a medida que x se acerca a 1. (Note en la parte
superior del vector de la columna para y que se multiplica por 1014.) Con el fin
de solucionar este problema, seleccione un valor menor para RelTol.
options=odeset ('RelTol', 1e-10);
[x, y] = ode45 (f, [0,1], 1,options);
max (y)
ans =
2.425060345544448e 07
Además de emplear el comando option, se ha calculado el valor máximo de
y(x) para mostrar que o mostrar que sí es bastante grande, aunque no tan
grandes como se sugiere en los últimos cálculos.
Ecuaciones de primer orden con M-files
Alternativamente, se puede resolver la misma ODE definiendo primero a f(x, y)
como un M-file firstode.m.
function yprime = firstode(x,y);
% FIRSTODE: Computes yprime = x*yˆ2+y
yprime = x*yˆ2 + y;
En este caso, sólo requerimos un cambio en el commando ode45: debemos
usar un puntero @ para indicar el M-file. Esto es, usamos los siguientes
comandos.
xspan = [0,.5];
y0 = 1;
[x,y]=ode23(@firstode,xspan,y0);
plot(x,y)
15
Sistemas de EDs
Resolver un sistema de EDs en MATLAB es muy similar a resolver una única
ecuación, aunque un sistema de EDs no puede ser definido como una función
inline debemos definirlo como un M-file.
Ejemplo. Resolver el sistema de ecuaciones de Lorenz
[Las ecuaciones de Lorenz tienen algunas propiedades de las ecuaciones en
derivados atmosféricos. Las soluciones de las ecuaciones de Lorenz han
servido como ejemplo de comportamiento caótico.]
Donde a los efectos de este ejemplo, vamos a tomar σ = 10, β = 8 / 3, y ρ = 28,
así como x (0) = - 8, y (0) = 8, y, z (0) = 27. El M-file que contiene las
ecuaciones de Lorenz aparece a continuación.
function xprime = lorenz1(t,x);
%LORENZ: Computes the derivatives involved in solving the
%Lorenz equations.
sig=10;
beta=8/3;
rho=28;
xprime=[-sig*x(1) + sig*x(2); rho*x(1) - x(2) - x(1)*x(3); -beta*x(3) + x(1)*x(2)];
Observe que x se almacena como x(1), y como x(2), y z como x(3). Además,
xprime es un vector columna, como se desprende de la coma después de la
primera aparición de x(2). Si en la ventana de comandos, escribimos
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
16
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
x0=[-8 8 27];
tspan=[0,20];
[t,x]=ode45(@lorenz1,tspan,x0);
Aunque no se dan aquí, la salida de este último comando consiste en una
columna de las tiempos seguido por una matriz con tres columnas, la primera
de las cuales se corresponde con los valores de x en los tiempos asociados, y
lo mismo para la segunda y tercera columna para y y z. La matriz se ha
denotado x en la declaración llamante ode45, y en general cualquier
coordenada de la matriz se puede especificar como x(m,n), donde m denota la
fila y n denota la columna.
En lo que se estará más interesado es en referencia a las columnas de x, las
cuales se corresponden con valores de los componentes del sistema. En este
sentido, podemos denotar todas las filas o todas las columnas por un colon (:).
Por ejemplo, x(:,1) se refiere a todas las filas de la primera columna de la matriz
x, es decir, se refiere a todos los valores de nuestro componente original x. Con
esta información, podemos fácilmente trazar el atractor extraño de Lorenz, que
es un gráfico de z en función de x:
plot(x(:,1),x(:,3))
Por supuesto, también podemos trazar cada componente de la solución en
función de t, y una forma útil de hacer esto es apilar los resultados. Podemos
crear la siguiente figura con:
subplot(3,1,1)
plot(t,x(:,1))
subplot(3,1,2)
plot(t,x(:,2))
subplot(3,1,3)
plot(t,x(:,3))
17
Pasando parámetros
Al analizar el sistema de ecuaciones diferenciales, a menudo se quiere
experimentar con diferentes valores de los parámetros. Por ejemplo, en el
estudio de las ecuaciones de Lorenz se podría considerar el comportamiento
en función de los valores de σ , β y ρ. Por supuesto, una forma de cambiar
esto es manualmente volviendo a abrir el M-file lorenz1.m cada vez que se
quiere probar con nuevos valores, pero no sólo es una forma lenta de hacerlo,
sino que es difícil de manejar para automatizar. Lo que podemos hacer en
cambio es pasar valores de los parámetros directamente a nuestro M-file a
través de la instrucción de llamada ode45. Para ver cómo funciona esto, lo
primero es alterar lorenz1.m en lorenz2.m, el último de los cuales acepta un
vector de parámetros que denotamos con p.
funtion XPRIME = lorenz2 (t, x, p);
% LORENZ: Calcula los derivados necesarios para resolver el
% ecuaciones de Lorenz.
sig = p (1), beta = p (2); rho = p (3);
XPRIME = * [-señal x (1) + * señal x (2); * rho x (1) - x (2) - x (1) * x (3)-beta * x
(3) + x (1) * x (2)];
Ahora puede enviar valores de los parámetros con ode45.
> p> = [10 08/03 28];
>> [t, x] = ode45 (@ lorenz1, tspan, x0, [], p);
Podemos enviar ahora los valores de parámetros con ode45.
p=[10 8/3 28];
[t,x]=ode45(@lorenz2,tspan,x0,[],p);
Ecuaciones de Segundo Orden
El primer paso en resolver una ED ordinaria de segundo orden (o más) en
MATLAB es escribir la ecuación como un sistema de primer orden. Como
ejemplo se retomará uno anterior. Tomando y1(x) = y(x) e y2(x) = y′(x), tenemos
el sistema
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
18
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
Método visto arriba: Codificado en Matlab (usando dsolve, solución simbólica):
eqn2 = 'D2y + 8*Dy + 2*y = cos(x)';
inits2 = 'y(0)=0, Dy(0)=1';
y=dsolve(eqn2,inits2,'x')
y =
exp((-4+14^(1/2))*x)*(53/1820*14^(1/2)-1/130)+exp(-(4+14^(1/2))*x)*(53/1820*14^(1/2)-1/130)+1/65*cos(x)+8/65*sin(x)
x=0:0.01:1;
z = eval(vectorize(y));
plot(x,z)
Método sistema de EDs (usando ode45, solución numérica)
Primero, se construye el M-file basado en:
function xprime = ee(x,y);
%
%
xprime=[y(2);-8*y(2)-2*y(1)+cos(x)];
Se ejecuta:
19
x0=[0 1]; % condiciones iniciales
tspan=[0,1]; % intervalo
[x,y]=ode45(@ee,tspan,x0);
plot(x,y(:,1))
Transformadas de Laplace
Una de las más útiles transformadas en matemática es la transformada de
Laplace. MATLAB tiene rutinas built-in para calcular la Transformada de
Laplace como su inversa. Por ejemplo, para computar la transformada de
f(t)=t2, simplemente tipee
syms t;
laplace(t^2)
ans =
2/s^3
Para invertir, digamos, F(s) = 1/(1+s), tipee
syms s;
ilaplace(1/(1+s))
ans =
exp(-t)
Problemas de contorno
Por diversas razones de mérito discutible mayoría de los cursos de introducción
a ecuaciones diferenciales ordinarias se centran principalmente en problemas
de valores iniciales (IVP). Otra clase de EDs que surgen a menudo en las
aplicaciones son los problemas de contorno (BVPs). Consideremos, por
ejemplo, la ecuación diferencial
y''- 3y '+ 2y = 0 y (0) = 0 y (1) = 10,
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
20
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
donde nuestras condiciones y(0) = 0 e y(1) = 10 se especifican en el límite del
intervalo de interés x ε [0, 1]. (Aunque nuestra solución normalmente se
extiende más allá de este intervalo, la mayoría de los escenarios comunes en
los problemas de valores en la frontera es el caso en el que sólo estamos
interesados en los valores de la variable independiente entre los puntos
extremos especificados.)
El primer paso en la solución de este tipo de ecuación es escribirlo como un
sistema de primer orden con y1 = y e y2 = y', por lo cual tenemos
Grabamos este sistema en el M-file bvpexample.m.
function yprime = bvpexample(t,y)
%BVPEXAMPLE: Differential equation for boundary value
%problem example.
yprime=[y(2); -2*y(1)+3*y(2)];
Luego, escribimos las condiciones de contorno como el M-file bc.m, lo cual
registra los residuos de contorno.
function res=bc(y0,y1)
%BC: Evaluates the residue of the boundary condition
res=[y0(1);y1(1)-10];
Por residuos, nos referimos a la parte izquierda de la condición de frontera, una
vez que ha sido puesta en 0.
En este caso, la segunda condición de contorno es y(1) = 10, de modo que su
residuo es y(1) - 10, que se registra en el segundo componente del vector que
devuelve bc.m. Las variables y0 e y1 representan la solución en x=0 y en x=1,
respectivamente, mientras que el 1 en el paréntesis indica el primer
componente del vector. En el caso de que la segunda condición de contorno
era y '(1)=10, reemplazaría a y1(1) - 10 con y1(2) - 10.
Ahora estamos en condiciones de comenzar a resolver el problema de
contorno. En el siguiente código, en primer lugar se especifica una cuadrícula
de valores de x para resolver en una estimación inicial del vector que se daría
para un problema de valor inicial [y (0), y '(0)]. (Por supuesto, y(0) conocido,
pero y'(0) debe ser una conjetura. En términos generales, MATLAB va a
resolver una familia de problemas de valores iniciales, buscando aquel para el
cual las condiciones de contorno se cumplen.) Resolvemos el problema del
valor límite con el resolutor built-in de MATLAB bvp4c.
sol=bvpinit(linspace(0,1,25),[0 1]);
sol=bvp4c(@bvpexample,@bc,sol);
sol.x
ans =
Columns 1 through 9
0 0.0417 0.0833 0.1250 0.1667 0.2083 0.2500 0.2917 0.3333
Columns 10 through 18
0.3750 0.4167 0.4583 0.5000 0.5417 0.5833 0.6250 0.6667 0.7083
Columns 19 through 25
21
0.7500 0.7917 0.8333 0.8750 0.9167 0.9583 1.0000
sol.y
ans =
Columns 1 through 9
0 0.0950 0.2022 0.3230 0.4587 0.6108 0.7808 0.9706 1.1821
2.1410 2.4220 2.7315 3.0721 3.4467 3.8584 4.3106 4.8072 5.3521
Columns 10 through 18
1.4173 1.6787 1.9686 2.2899 2.6455 3.0386 3.4728 3.9521 4.4805
5.9497 6.6050 7.3230 8.1096 8.9710 9.9138 10.9455 12.0742 13.3084
Columns 19 through 25
5.0627 5.7037 6.4090 7.1845 8.0367 8.9726 9.9999
14.6578 16.1327 17.7443 19.5049 21.4277 23.5274 25.8196
Observamos que en este caso, MATLAB devuelve la solución como una
estructura cuyo primer componente de la estructura sol.x simplemente contiene
sólo los valores de x especificados. El segundo es sol.y, que es una matriz que
contiene como primera fila los valores de y(x) en los puntos de la grilla x
especificada, y como segunda fila los valores correspondientes de y '(x).
Métodos Numéricos
A pesar de que se pueden resolver EDOs en MATLAB sin ningún conocimiento
de los métodos numéricos que emplea, a menudo es útil para comprender los
principios básicos subyacentes. En esta sección se utilizará el teorema de
Taylor para obtener métodos para aproximar la solución de una ecuación
diferencial.
Método de Euler
Consideremos la ecuación diferencial general de primer orden
y supongamos que queremos resolver esta ecuación en el intervalo de valores
de x [x0, xn]. Nuestro objetivo aspira a aproximar el valor de la solución y(x) en
cada uno de los valores de x en una partición P = [x0, x1, x2, ..., xn]. Puesto que
y(x0) está dado, el primer valor que necesitamos estimar es y(x1). Por el
Teorema de Taylor, podemos escribir
donde c ε (x0, x0). Observando desde nuestra ecuación que y′(x0) = f(x0, y(x0)),
tenemos
Si nuestra partición P tiene pequeños subintervalos, entonces x1 − x0 será
pequeño y se puede considerar la cantidad pequeña
como un término error. Esto es, tenemos
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
22
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
(6.2)
Ahora podemos calcular y(x2) de una manera similar usando el teorema de
Taylor para escribir
Una vez más, tenemos desde nuestra ecuación que y'(x1) = f(x1, y(x1)), y así
Si eliminamos el término
como un error, entonces tenemos
donde el valor y(x1) requerido aquí puede ser aproximado por el valor de (6.2).
Más generalmente, para cualquier k = 1, 2, ..., n - 1 se puede aproximar y(xk+1)
de la relación
donde y(xk) se conocerán a partir del cálculo anterior. Al igual que con los
métodos numéricos de la integración, es habitual en la práctica de tomar la
partición en subintervalos de igual anchura,
(En el estudio de métodos numéricos para ecuaciones diferenciales, esta
cantidad es a menudo denotada con h) En este caso, tenemos la relación
general
Si decimos que los valores de y0, y1, ..., yn denotan nuestras aproximaciones
para y en los puntos x0, x1, ..., xn (es decir, y0 = y(x0), y1 ≈ y(x1), etc), entonces
podemos aproximar y(x) sobre la partición de P calculando iterativamente
(6.3)
Ejemplo: Utilice el método de Euler (6.3) con n = 10 para resolver la ecuación
diferencial
en el intervalo [0, 1]. Llevaremos a cabo las primeras iteraciones en detalle, y a
continuación vamos a escribir un archivo de MATLAB M-file para aplicar el
23
método en su totalidad. En primer lugar, el valor inicial y(0) = π nos da los
valores x0 = 0 e y0=0. Si nuestra partición se compone de subintervalos de igual
anchura, entonces x1 =∆x = 1/10 = 0.1, y de acuerdo con (6.3)
Ahora tenemos el punto (x1, y1) = (.1,π), y podemos utilizar esto y (6.3) para
calcular
Ahora tenemos (x2, y2) = (0.2, 3.1725), y podemos utilizar esto para calcular
Más generalmente, podemos usar el M-file euler1.m
function [xvalues, yvalues] = euler1(f,x0,xn,y0,n)
%EULER: MATLAB function M-file that solve the
%ODE y’=f, y(x0)=y0 on [x0,y0] using a partition
%with n equally spaced subintervals
dx = (xn-x0)/n;
x(1) = x0;
y(1) = y0;
for k=1:n
x(k+1)=x(k) + dx;
y(k+1)= y(k) + f(x(k),y(k))*dx;
end
xvalues = x';
yvalues = y';
Podemos implementar este archivo con el siguiente código, que crea la figura
6.1.
f=inline('sin(x*y)');
[x,y]=euler1(f,0,1,pi,10);
plot(x,y)
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
24
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
Con ∆x=0.01
[x,y]=euler1(f,0,1,pi,100);
plot(x,y)
Resolutores ODE Avanzados
Además de los resolutores ODE ode23 y ode45, ambos basados en el método
de Runge-Kutta, MATLAB tiene otros resolutores adicionales, que aparecen a
continuación junto con las sugerencias para su uso que da el MATLAB-help.
• Resolutores Multipaso
- ode113. Si se utilizan tolerancias estrictas de error o la resolución de un
archivo ODE computacionalmente intensivo.
• Problemas stiff (véase más adelante)
- ode15s. Si ode45 es lento porque el problema es stiff.
- ode23s. Si se está utilizando tolerancias de error crudas para resolver
sistemas stiff y matriz de masa es constante.
- ode23t. Si el problema sólo es moderadamente stiff y necesitas una solución
sin amortiguación numérica.
- ode23tb. Si se utilizan tolerancias de error crudas para resolver sistemas stiff.
EDs stiffrígido
Con EDs stiff nos referimos a una ED para la cual los errores numéricos crecen
dramáticamente en el tiempo. Por ejemplo, considere la ED ordinaria
y '= -100y + 100 t + 1,
y(0) = 1.
25
Ya que la variable dependiente, y, en la ecuación está multiplicada por 100,
pequeños errores en nuestra aproximación tenderán a magnificarse. En
general, debemos tomar considerablemente pasos más pequeños en tiempo
para resolver EDs stiff, y esto puede alargar dramáticamente el tiempo de
resolución.
A menudo, las soluciones se puede calcular de manera más eficiente usando
uno de los resolutores diseñado para problemas stiff.
Ecuaciones diferenciales en derivadas parciales (PDE) en el espacio unidimensional
Para las PDE de valores inicial-borde con tiempo t y una variable espacial x,
MATLAB tiene un resolutor built-in llamado pdepe.
Ecuaciones únicas
Ejemplo. Supongamos, por ejemplo, que queremos resolver la ecuación del
calor
MATLAB specifica tal PDE parabólica en la forma
Las formas standard de una ecuación diferencial
El paso más importante en “preparación” de una ecuación diferencial para
los resolutores de Mathcad es adquirirla en la forma Standard que
entiendan los resolutotes. El proceso es tomar la ecuación diferencial y
liberarse de cualquier derivada de orden más alto que aparezca, dejando
sólo primeras derivadas. Su ecuación diferencial es entonces un sistema de
ecuaciones diferenciales de primer orden.
Por ejemplo, la ecuación diferencial:
d2
2
dx
y( x) + 3 ⋅
d
y( x) − 7 ⋅y( x)
dx
4 ⋅x
contiene una segunda derivada la cual puede ser escrita como una primera
derivada:
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
26
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
d2
2
y( x)
dx
d d
y( x)
dx dx
define dos funciones como:
y0 ( x)
y( x)
y1 ( x)
d
y0 ( x)
dx
Ahora la ecuación diferencial contiene dos funciones y es esencialmente un
sistema de dos ecuaciones diferenciales.
d
y0 ( x)
dx
d
dx
y1 ( x)
y1 ( x)
4 ⋅x + 7 ⋅y0 ( x) − 3 ⋅y1 ( x)
El próximo paso es capturar esta información en una función vector único
valuado D para usar con los resolutores de Ecuación Diferencial de
Mathcad:
4 ⋅x + 7 ⋅y0 − 3 ⋅y1
DY( x , y) :=
y1
Sistemas de ecuaciones diferenciales ordinarias
rkfixed(y, x1, x2, npoints, D) Retorna una matriz en la cual (1) la primera
columna contiene los puntos en los cuales es evaluada la solución y (2) las
columnas remanente contiene los valores correspondientes de la solución y
sus primeras n-1 derivadas.
Argumentos:
y debe ser o bien un vector de n valores inicales u un valor inicial
único.
x1, x2 son puntos extremos del intervalo sobre el cual la
solución a las ecuaciones diferenciales será evaluada. Los valores
iniciales en y son los valores en x1.
npoints es el número de puntos más allá del punto inicial para el
cual la solución es aproximada. Esto controla el número de filas
(1 + npoints) en la matriz retornada por rkfixed.
27
D es una función vector-valued n-element conteniendo las
primeras derivadas de las funciones desconocidas.
Notas:
•
rkfixed usa el método Runge-Kutta method de cuarto orden para
resolver una ecuación diferencial de primer orden.
•
Se puede usar rkfixed para resolver una ecuación diferencial así
también como un sistema de ecuaciones diferenciales.
Uso de la función rkfixed
Para sistemas de ecuaciones diferenciales o por una que no es lineal en el
término derivada de más alto orden, use rkfixed.
El ejemplo de abajo muestra cómo usar rkfixed para evaluar la solución de
una ecuación diferencial de segundo orden a puntos igualmente espaciados.
Solve
y( 0)
y' + 2 ⋅y
y''
1
y'( 0)
1
y :=
3
3
<- define las condiciones iniciales
−y1 + 2 ⋅y0
y1
D ( t , y) :=
<- primera derivada
<- segunda derivada
Z := rkfixed( y , 0 , 0.5 , 400 , D)
0
0
2
1
3
1 1.25·10 -3
1.004
2.999
2.5·10 -3
1.007
2.998
3 3.75·10 -3
1.011
2.996
5·10 -3
1.015
2.995
2
4
5 6.25·10 -3
1.019
2.994
7.5·10 -3
1.022
2.993
7 8.75·10 -3
1.026
2.992
8
0.01
1.03
2.99
6
Z=
1
0
<- Evalua solución en 400 puntos entre 0 y 0.5
9
0.011
1.034
2.989
10
0.013
1.037
2.988
11
0.014
1.041
2.987
12
0.015
1.045
2.986
13
0.016
1.049
2.985
14
0.018
1.052
2.984
15
0.019
1.056
2.982
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
28
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
Solución usando tamaños de pasos adaptivos
Rkadapt(y, x1, x2, npoints, D)
Retorna una matriz en la cual: (1) la primera columna contiene los puntos
en los cuales es evaluada la solución y (2) las columnas remanente contiene
los valores correspondientes de la solución y sus primeras n-1 derivadas.
Argumentos:
y debe ser o bien un vector de n valores inicales o un escalar.
x1, x2 son puntos extremos del intervalo sobre el cual la solución
a las ecuaciones diferenciales será evaluada. Los valores iniciales
en y son los valores en x1.
npoints es el número de puntos más allá del punto inicial para el
cual la solución es aproximada. Esto controla el número de filas
(1 + npoints) en la matriz retornada por rkfixed.
D es una función vector-valued n-element conteniendo las
primeras derivadas de las funciones desconocidas.
Notes:
•
A diferencia de rkfixed la cual integra en pasos de igual tamaño para
alcanzar una solución, Rkadapt examina cuán rápido una solución
está cambiando y adapta su tamaño de paso acordemente. Rkadapt
usará tamaños de paso no uniformes unternamente cuando resuelve
la ecuación diferencial, pero retornará la solución en puntos
igualmente espaciados.
Sistemas Alisados (Smooth systems)
Bulstoer(y, x1, x2, npoints, D) Retorna una matriz en la cual: (1) la
primera columna contiene los puntos en los cuales es evaluada la solución
y (2) las columnas remanente contiene los valores correspondientes de la
solución y sus primeras n-1 derivadas.
Argumentos:
y debe ser o bien un vector de n valores inicales o un escalar.
x1, x2 son puntos extremos del intervalo sobre el cual la solución
a las ecuaciones diferenciales será evaluada. Los valores iniciales
en y son los valores en x1.
npoints es el número de puntos más allá del punto inicial para el
cual la solución es aproximada. Esto controla el número de filas
(1 + npoints) en la matriz retornada por Bulstoer.
D es una función vector-valued n-element conteniendo las
primeras derivadas de las funciones desconocidas.
29
Notas:
•
Bulstoer usa el método Bulirsch-Stoer el cual sera ligeramente más
preciso que el método Runge-Kutta usado por rkfixed.
•
Use la función Bulstoer en vez de rkfixed cuando sepa que la
solución es alisada (smooth)
Ejemplo: Movimiento del Péndulo Simple
Se analizará mediante la función Bulstoer, también para evaluar una
integral para el período del péndulo.
Considérese un péndulo simple en movimiento en un plano sin resistencia
del aire ni fricción. Sea L la longitud de la varilla soporte, g la aceleración
de la gravedad y el ángulo que forma el alambre y la dirección de la
gravedad. La varilla soporte es rígida y sin masa.
La ecuación diferencial para el ángulo (t) es:
L⋅
d
2
2
θ ( t) + g ⋅ sin( θ ( t) )
θ ( 0)
0
θ0
dt
Valores de los parámetros de entrada:
L := 3 ⋅m
θ 0 :=
π
4
X1
D( t , X) :=
g
− ⋅sin( X0)
L
g = 9.807
2
s
T := 6
Punto derecho extremo
N := 100
Número de pasos de tiempo
θ 0
, 0 , T , N , D
0
P := Bulstoer
m
n := 0 , 1 .. N
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
30
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
π
1.384
4
(P〈1〉 )n
(P〈2〉 )n
−
π
4
− 1.384
0
1
2
〈 0〉
P n
( )
0
3
4
5
6
6
theta
derivative of theta
El periodo del péndulo (tiempo requerido para una oscilación completa) es
una integral elíptica completa sel primer tipo:
θ 0
2
x := sin
π
4⋅
⌠2
L
⋅
g
⌡0
1
2
1−x
dφ = 3.614 sec
2
⋅ sin(φ )
Sistemas Stiff
Stiffb(y, x1, x2, npoints, D, J)
Stiffr(Y, x1, x2, npoints, D, J)
Cada una de estas funciones retorna una matriz en la cual: (1) la primera
columna contiene los puntos en los cuales es evaluada la solución y (2) las
columnas remanentes contienen los valores correspondientes de la solución
y sus primeras n-1 derivadas.
Argumentos:
y debe ser o bien un vector de n valores inicales o un escalar.
x1, x2 son puntos extremos del intervalo sobre el cual la solución
a las ecuaciones diferenciales será evaluada. Los valores iniciales
en y son los valores en x1.
npoints es el número de puntos más allá del punto inicial para el
cual la solución es aproximada. Esto controla el número de filas
(1 + npoints) en la matriz retornada por by Stiffb or Stiffr.
31
D es una función vector-valued n-element conteniendo las
primeras derivadas de las funciones desconocidas.
J es una función que retorna la matriz n por (n+1) cuya primera
columna contiene derivadas y cuyas filas remanentes forman la
matriz Jacobiana para el sistema de ecuaciones diferenciales.
Notes:
•
Stiffb usa el método Bulirsch-Stoer para sistemas stiff. Stiffr usa el
método Rosenbrock.
•
Use uno de los dos resolutores de ecuación diferencial
específicamente diseñados para sistemas stiff: Stiffb y Stiffr cuando
resuelva un sistema stiff.
Stiff Differential Equations
A pesar de su éxito, los métodos de Runge-Kutta también tienen sus fallas.
Una clase particular de ecuaciones diferenciales problemáticas son aquellas
que exhiben stiffness. No hay una definición universalmente satisfactoria
de stiffness. En la práctica se aprenderá a sospechar que una ODE
(ecuación diferencial ordinaria) es stiff cuando un resolutor ODE falla para
producir una solución eficiente. Las sospechas serán confirmadas si
verdaderamente se obtienen mejores resultados cuando se usa un método
diseñado para problemas stiff, tales como las rutinas de Matlab ode23s u
ode15s.
Ejemplo de ODE stiff
Un ejemplo de modelo matemático, más que una aplicación práctica es:
(
Y' ( t)
−Y( t) − K ⋅ Y ( t) − e
Y ( 0)
1+ δ
−t
)
K>
> 1
aquí K es una constante grande, digamos 10 6 y δ es un número dado
tamaño ordinario, digamos δ = 1. La solución se conoce que es:
Y( t)
− ( K+1) ⋅ t
δ ⋅e
−t
+e
En esta formula el primer término se desvanece rápidamente a medida que
la ecuación diferencial fuerza la solución sobre la curva e -t .
− ( K+1) ⋅ t
Y ( t) := δ ⋅e
−7
t := 10
Facultad de Ingeniería – Universidad de Mendoza
−7
, 10
−7
+ 10
.. 0.001
Dr. Ing. Jesús Rubén Azor Montoya
32
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
1
0.905
0.5
Y ( t)
0
0
2 .10
−7
1×10
6
4 .10
6
6 .10
t
6
8 .10
6
−5
10
Después esta solución cambia lentamente.
− ( K+1) ⋅t
Y ( t) := δ ⋅e
0.99
Y ( t)
−t
t := 0.01 , 0.02 .. 5
+e
1
0.5
−3
6.738×10
0
1
0.01
2
3
t
4
5
5
La región corta de cambio rápido es la capa frontera, la curva de variación
lenta es conocida como la solución estado estacionario. Este
comportamiento es típico de problemas stiff.
Cuando se desea sólo el ultimo punto
Si no se está interesado en ver todos los valores intermedios tomados por
una solución, se puede ahorrar tiempo de procesamiento y reducir consumo
de memoria usando una de las funciones de abajo.
stiffb y stiffr para sistemas stiff.
rkadapt para sistemas lentamente variables.
bulstoer para sistemas alisados (smooth)
A diferencia de sus equivalentes en mayúsculas, no se debe especificar el
número de puntos en el resultado. En su lugar, debe especificar el nivel de
exactitud y permitir a estas funciones generar una solución que tenga el
número de elementos requeridos.
Ejemplo:
33
Solve
y''
y
−y
para x < 0
donde y(-1)=1 e y(1)=2
para x > 0
( x < 0) ⋅y0 + ( x ≥ 0) ⋅( −y0)
y1
D( x , y) :=
v10 := 1
< - valor de intento para y(-1
v20 := 1
< - valor de intento para y(1)
1
v10
load1( x1 , v1) :=
2
v20
load2( x2 , v2) :=
score( xf , y) := y
xf := 0
<- punto de dictontinuidad
< - y(-1)
< - valor de intento para y(-1
< - y(1)
< - valor de intento para y(1)
< - indica a Mathcad igualar las dos mitades de
solución en x=xf
S := bvalfitv1
( , v2 , −1 , 1 , 0 , D , load1, load2, score)
S = ( 0.092 −0.678 )
< - contiene [ y(-1) y(1)
Uso de valores intermedios para derivar condiciones iniciales
bvalfit(v1, v2, x1, x2, xf, D, load1, load2, score) Retorna un vector
conteniendo aquellos valores iniciales dejados sin especificar en x1.
Argumentos:
v1 es un vector de intento para valores iniciales dejados sin
especificar en x1. v2 es un vector que contiene intentos para valores
iniciales dejados de especificar en x2.
x1, x2 son puntos terminales del intervalo sobre la cual la solución a
ecuaciones diferenciales serán evaluadas.
xf es un punto entre x1 y x2 en los cuales la trayectorias de las
soluciones comienzan en x1 y aquelllas que comienzan en x2 están
constreñidas a ser igual.
D es una función vector-valuada de n elementos conteniendo las
primeras derivadas de las funciones desconocidads.
load1 es una function vector-valuada cuyos n elementos
corresponden a los valores de las n funciones incógnitas en x1.
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
34
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
Algunos de estos valores serán constantes especificadas por sus
condiciones iniciales. Si un valor es desconocido se deberá usar el
valor de intento correspondiente desde v1.
load2 es análoga a load1 pero los valores tomados las n funciones
incógnitas en x2.
score es una función vector-valuada de n elementos usada para
especificar cómo se desea que las soluciones igualen a xf.
Usualmente se deseará definir score(xf, y) := y para hacer que las
soluciones para todas las funciones incógnitas coincidan en xf.
Notas:
•
bvalfit resuelve un problema de valores límites de dos puntos
“disparando” desde los puntos terminales y equiparando trayectorias
de la solución y sus derivadas en el punto intermedio. Este método se
convierte en especialmente útil cuando la derivada tiene una
discontinuidad en alguna parte del intervalo de integración.
sbval (v1, v2, x1, x2, D, load, score) Retorna un vector conteniendo
aquellos valores iniciales dejados sin especificar en x1.
Argumentos:
v1 es un vector de intento para valores iniciales dejados sin
especificar en x1. v2 es un vector que contiene intentos para valores
iniciales dejados de especificar en x2.
x1, x2 son puntos terminales del intervalo sobre la cual la solución a
ecuaciones diferenciales serán evaluadas.
D es una function vector-valuada de n elementos conteniendo las
primeras derivadas de las funciones desconocidads.
load es una función vector-valuada cuyos n elementos corresponden
a los valores de las n funciones incógnitas en x1. Algunos de estos
valores serán constantes especificadas por sus condiciones iniciales.
Si un valor es desconocido se deberá usar el valor de intento
correspondiente desde v1.
score es una function vector-valuada que tiene el mismo número de
que v. Cada elemento es la diferencia entre una condición inicial en
x2, como originalmente se especificó, y el estimado correspondiente
desde la solución. El vector store mide cuán ajustadamente una
solución propuesta se adapta a las condiciones iniciales en x2. un
valor de 0 para cualquier elemento indica una adaptación perfecta.
Notas:
•
sbval resuelve un problema de valores límites de dos puntos
“disparando” desde los puntos terminales y equiparando trayectorias
de la solución y sus derivadas en el punto intermedio.
35
•
sbval computa los valores iniciales que la solución debe tener para
ajustar al valor inicial que se especificó. Se deben entonces tomar los
valores iniciales retornados por sbval y resolver el problema de valor
inicial resultante.
•
Cuando se conozca la solución en x1 y en x2, y se tengan n valores
conocidos, se deberá usar sbval para evaluar los valores iniciales
perdidos en x1. Una vez que se tienen estos valores iniciales
perdidods, se tendrá un problema con valores iniciales en vez de un
problema de valores límites de dos puntos.
Ecuación de Poisson
relax(a, b, c, d, e, f, u, rjac) Retorna una matriz cuadrada en la cual: (1)
una locación de elemento en la matriz corresponde a su locación dentro de
la región cuadrada, y (2) su valor Aproxima el valor de la solución en este
punto.
Argumentos:
a, b, c, d, e son matrices cuadradas todas del mismo tamaño
conteniendo los coeficientes de la ecuación diferencial.
f es una matriz cuadrada conteniendo el término fuente en cada
punto dentro del cuadrado.
u es una matriz cuadrada conteniendo valores límites junto con los
flancos de la región y los intentos iniciales para la solución dentro de
la región.
rjac es un radio spectral de la iteración Jacobi. Esto controla la
convergencia del algoritmo de relajación. Puede oscilar desde 0 a 1
pero su valor óptimo depende de los detalles del problema.
Notas:
•
Esta function usa el método de relajación para converger a la
solución.
•
Se deberá usa la función relax si se conoce el valor tomado por la
function desconocida u(x, y) sobre el total de los cuatro lados de una
región cuadrada.
•
Si la condición de contorno es cero sobre el total de los cuatro lados
del cuadrado dominio de integración, use en su lugar la función
multigrid.
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
36
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
Uso de la función relax
M R R := 1
R := 32
3⋅
MR , R := −2
,
4 4
M R R := 2
8
i := 0 .. 32
ai , k := 1
,
2
k := 0 .. 32
b := a
vi , k := 0
d := a
c := a
e := −4 ⋅a
f := −M
S1 := relax( a , b , c , d , e , f , v , 0.95)
S1
Ecuación de Poisson con condiciones de contorno cero
multigrid(M, ncycle) Retorna una matriz cuadrada en la cual: (1) una
locación de elemento en la matriz corresponde a su locación dentro de la
región cuadrada, y (2) su valor aproxima el valor de la solución en este
punto.
Argumentos:
M es una matriz cuadrada de 1+2^n filas cuyos elementos
corresponden al término fuente en el correspondiente punto en el
dominio cuadrado.
37
ncycle es el número de ciclos en cada nivel de la iteración multigrid.
Un valor de 2 dará generalmente una Buena aproximación de la
solución.
Notas:
Si u(x, y) es cero sobre los cuatro lados del cuadrado, use la función
multigrid. Esta function frecuentemente resolverá el problema más
rápido que relax.
•
Uso de multigrid:
R := 32
MR , R := 0
M R R := 1
3⋅
M R R := 2
M R 3 ⋅R := −2
4
,
,
4 4
8
4
,
2
S := multigridM
( , 2)
S
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
38
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
$$$$$$$$$$$$$$$$$$$$$$$$
MATLAB contiene dos funciones para calcular soluciones numérica de
ecuaciones diferenciales ordinarias; "ode23" y "ode45".
A continuación se describen los argumentos de los comandos MATLAB ODE.
[x,y] = ode23('función',a,b,inicial)
Esta instrucción regresa un conjunto de coordenadas "x" y "y" que representan
a la función y=f(x), los valores se calculan a través de métodos Runge-Kuta de
segundo y tercer orden.
El nombre "función", define una función que representa a una ecuación
diferencial ordinaria, ODE23 proporciona los valores de la ecuación diferencial
y'=g(x,y).
Los valores "a" y "b" especifican los extremos del intervalo en el cual se desea
evaluar a la función y=f(x).
El valor inicial y = f(a) especifica el valor de la función en el extremo izquierdo
del intervalo [a,b].
[x,y] = ode45('función',a,b,inicial)
Esta instrucción regresa un conjunto de coordenadas "x" y "y" que representan
a la función y=f(x), los valores se calculan a través de métodos Runge-Kuta de
cuarto y quinto orden.
El nombre "función", define una función que representa a una ecuación
diferencial ordinaria, ODE45 proporciona los valores de la ecuación diferencial
y'=g(x,y).
Los valores "a" y "b" especifican los extremos del intervalo en el cual se desea
evaluar a la función y=f(x).
El valor inicial y = f(a) especifica el valor de la función en el extremo izquierdo
del intervalo [a,b].
Las instrucciones "ODE23" y "ODE45" contienen dos parámetros adicionales.
Se usa un quinto parámetro para especificar una tolerancia relacionada con el
tamaño del paso; las tolerancias por omisión son 0.001 para ODE23 y
0.000001 para ODE45.
Existe un sexto parámetro que sirve para solicitar que la función exhiba
resultados intermedios, es decir, que realice rastreo; el valor por omisión "0"
indica que no se desean rastrear los resultados.
Como ilustración de la función ODE de MATLAB, se presentan los pasos para
calcular soluciones numéricas de ecuaciones diferenciales, las siguientes
instrucciones MATLAB definen las funciones requeridas para evaluar la
ecuación diferencial deseada.
Se graban las siguientes instrucciones con su editor ASCII favorito, en lo
particular yo uso el "editeur", si Ud. desea usarlo también, esta disponible en la
siguiente URL;
http://proton.ucting.udg.mx/shareware/editeur/editeur.zip
39
function dy = g1(x,y)
%
% g1
% esta función evalúa una ODE
% ecuación diferencial de primer grado
%
dy = 3*x.^2;
El siguiente paso consiste en grabar este archivo como "g1.m", sobre algún
subdirectorio de trabajo valido para el MATLAB, las siguientes instrucciones
resuelven g(x,y) dentro del intervalo [2,4] con condición inicial 0.5 para y=f(2).
% Determinar la Solución de la EDO
%
% dy = 3*x.^2;
%
[t,y] = ode23('g1',[2,4],0.5);
plot(t,y,'o'),...
title('Solución de la Ecuación dy = 3*x.^2'),...
xlabel('Tiempo'),ylabel('y = f(t)'),grid
Sobre el subdirectorio de trabajo valido se graba este archivo como "mat1.m" y
se escribe mat1, generándose la siguiente solución gráfica.
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
40
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
Mathcad.pdf
Las dos funciones más fáciles de usar, Odesolve y Pdesolve, son usadas
dentro de Solve Blocks. Hay muchas otras funciones que ayudan a relover
sistemas de ecuaciones diferenciales, incluyendo Adams, AdamsBDF, BDF,
Bulstoes, bvalfit, Jacob, multigrid, numol, Radau, relax, Rkadapt, rkfixed, sbval,
statespace, Stiffb y Stiffr.
La función Odesolve es usada en un Solve Block para resolver una única
ecuación diferencial (ED) o un sistema de EDs. Retorna la solución como una
función de la variable independiente. Hace esto salvando soluciones en un
número específico de puntos (npoints) igualmente espaciados en el intervalo
de la solución, y luego interpolando entre estos puntos usando la función
lspline. El Solve Block pone el valor inicial o constreñimientos de límites. La
ODE debe ser lineal en su término derivado más alto, y el número de
condiciones iniciales o en bordes debe ser igual al orden (u órdenes) de la(s)
ODE(s). La función tiene la forma Odesolve([vector],x,b,[npoints]). Los
argumentos son como sigue:
• Vector es usado sólo para sistemas de ODEs y es un vector de nombres
de función (con ningún nombre de variable incluido) como ellas
aparecen dentro del Solve Block.
• x es el nombre de la variable de integración.
• b es el punto final del intervalo de la solución. (El punto inicial del
intervalo de la solución es especificado por las condiciones iniciales).
41
• npoints es opcional y es el número entero de puntos equiespaciados
usados para interpolar la función solución. El valor por default es de
1000. Si npoints es incrementado, luego la solución interpolada es más
exacta. El valor default es usualmente adecuado, pero si se desea
resolver sobre un gran intervalo, se debe poner a npoints a un valor
mayor a 1000. El incremento de npoints lleva ala incremento en el
tiempo de cálculo.
-----
dsolve - Symbolic solution of ordinary differential equations
Syntax
dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
dsolve(...,'IgnoreAnalyticConstraints',value)
Descripción
dsolve('eq1','eq2',...,'cond1','cond2',...,'v') resuelve simbólicamente las EDs
ordinarias eq1, eq2,... usando v como la variable independiente. Aquí
cond1,cond2,... especifica condiciones iniciales o en bordes o ambas. También
se usa la siguiente sintaxis: dsolve('eq1, eq2',...,'cond1,cond2',...,'v'). La
variable independiente por default es t.
The letter D denotes differentiation with respect to the independent variable.
The primary default is d/dx. The letter D followed by a digit denotes repeated
differentiation. For example, D2 is d2/dx2. Any character immediately following
a differentiation operator is a dependent variable. For example, D3y denotes the
third derivative of y(x) or y(t).
You can specify initial and boundary conditions by equations like y(a) = b or
Dy(a) = b, where y is a dependent variable and a and b are constants. If the
number of the specified initial conditions is less than the number of dependent
variables, the resulting solutions contain the arbitrary constants C1, C2,....
Ejemplo:
>> dsolve('D2y=-3*y','y(0)=1')
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
42
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
ans =
C1*sin(3^(1/2)*t)+cos(3^(1/2)*t)
You can input each equation or a condition as a separate symbolic equation.
The dsolve command accepts up to 12 input arguments.
dsolve puede producir los siguientes tres tipos de salida:
*
Para una ecuación y una salida, dsolve retorna la solución resultante
con soluciones múltiples para una ecuación no-lineal en un vector simbólico.
*
Para varias ecuaciones y un número igual de salidas, dsolve ordena los
resultados alfabéticamente y los asigna a las salidas.
*
Para varias ecuaciones y una única salida, dsolve retorna una estructura
conteniendo las soluciones.
Si dsolve no puede encontrar una solución closed-form (explícita), intenta
buscar una solución implícita. Cuando dsolve retorna una solución implícita,
indica una advertencia. Si dsolve no puede encontrar una solución ni implícita
ni explícita, da una advertencia y retorna el sym vacío. En tal caso, se puede
encontrar una solución numérica, usando las funciones MATLAB ode23 u
ode45.
En algunos casos involucrando ecuaciones no-lineales, la salida es una
ecuación diferencial equivalente de más bajo orden o una integral.
dsolve(...,'IgnoreAnalyticConstraints',value) acepta los siguientes valores:
*
value = 'all' aplica simplificaciones puramente algebraicas a las
expresiones sobre ambos lados de las ecuaciones. Estas simplificaciones
pueden no ser generalmente válidas. El valor default de esta opción es all.
*
value = 'none' resuleve EDs ordinarias sin suposiciones adicionales. Los
resultados obtenidos con esta opción son correctos para todos los valores de
los argumentos.
Nota: Por default, el solver no garantiza la corrección y completitud de los
resultados. Si no se pone la opción IgnoreAnalyticConstraints a none,siempre
verifique los resultados retornados por el comando dsolve.
Examples
Solving Ordinary Differential Equations Symbolically
dsolve('Dx = -a*x')
ans =
C2/exp(a*t)
Specifying the Dependent Variable
43
The following differential equation presents f as a dependent variable:
dsolve('Df = f + sin(t)')
ans =
C4*exp(t) - sin(t)/2 - cos(t)/2
Specifying the Independent Variable
dsolve('(Dy)^2 + y^2 = 1','s')
ans =
1
-1
cosh(C7 + s*i)
cosh(C11 - s*i)
Setting Initial and Boundary Conditions
dsolve('Dy = a*y', 'y(0) = b')
ans =
b*exp(a*t)
dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0')
ans =
(1/exp(a*t*i))/2 + exp(a*t*i)/2
Solving a System of Differential Equations
z = dsolve('Dx = y', 'Dy = -x')
z =
x: [1x1 sym]
y: [1x1 sym]
Enter z.x and z.y to see the results:
z.x
ans =
C20*cos(t) + C19*sin(t)
z.y
ans =
C19*cos(t) - C20*sin(t)
Using the IgnoreAnalyticConstraints Option
By default, the solver applies the set of purely algebraic simplifications that are
not correct in general, but that can result in simple and practical solutions:
Facultad de Ingeniería – Universidad de Mendoza
Dr. Ing. Jesús Rubén Azor Montoya
44
“HERRAMIENTAS COMPUTACIONALES
EN CIENCIAS EXACTAS”
y = dsolve('Dy=1+y^2','y(0)=1')
y =
tan(pi/4 + t)
To obtain complete and generally correct solutions, set the value of the option
IgnoreAnalyticConstraints to none:
y = dsolve('Dy=1+y^2','y(0)=1',...
'IgnoreAnalyticConstraints','none')
y =
piecewise([C29 in Z_, tan(pi/4 + t + pi*C29)])
The algebraic simplifications also allow you to obtain solutions for the equations
that the solver cannot compute when it uses strict mathematical rules:
dsolve('Dv=19.6*v-0.00196*v^2','v(0)=1')
ans =
10000/(exp(log(9999) - (98*t)/5) + 1)
versus
dsolve('Dv=19.6*v-0.00196*v^2','v(0)=1',...
'IgnoreAnalyticConstraints','none')
Warning: Possibly spurious solutions [solvelib::checkSolutions]
ans =
piecewise([C38 in Z_, 1/(exp(log(9999) - (98*t)/5 +...
2*pi*C38*i)/10000 + 1/10000)])
Diagnostics
If dsolve cannot find an analytic solution for an equation, it prints the warning:
Warning: Explicit solution could not be found.
and returns an empty sym object.
See Also