Octave Practicas
Octave Practicas
Octave Practicas
1. Un lenguaje de programacion 4
1.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1. Operacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2. Logicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.1. Generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2. Aritmeticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.3. Algebraicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3. Ecuaciones no Lineales 20
3.1. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1
Practicas con Octave 2
3.3. Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6. Derivacion e Integracion 39
7. Ecuaciones Diferenciales 44
10.Analisis Vectorial 85
Un lenguaje de programacion
1.1. Introduccion
Existen dos maneras de trabajar con Octave: de forma directa, ingresando comandos por la lnea de
comandos, o bien generando un programa en el editor. Un programa es un archivo de texto plano que
contiene una serie de instrucciones que octave puede interpretar y ejecutar, de extension .m.
1.2. Operadores
1.2.1. Operacionales
1. Suma, resta, multiplicacion, division
>> 8 + 2 (13 3) + 15/5
ans = 31
2. Raz cuadrada
>> sqrt(25)
ans = 5
3. Potencia
>> 3 2
ans = 9
>> 5 2
ans = 25
4. Exponencial y logaritmo neperiano
>> exp(log(2))
ans = 2
4
Practicas con Octave 5
6. Valor absoluto
>> abs(-20.14)
ans = 20,14
1.2.2. Logicos
1. Asignacion de igualdad
>> a = 3
a=3
2. Comparacion de igualdad
>> 7 == 3
ans = 0
>> 7 == 7
ans = 1
3. Comparacion de desigualdades; menor <, menor igual <=, mayor >, mayor igual >=
>> 9 >= 7
ans = 1
4. Distinto
>> 5! = 5
ans = 0
5. Conjuncion
>> a = 6; (a < 9)&(a! = 4)
ans = 1
6. Disyuncion
>> a = 5; (a > 7)|(a < 6)
ans = 1
7. Negacion
>> a = 5; !((a < 3)|(a = 1))
ans = 1
Practicas con Octave 6
1.3. Comandos
1.3.1. Generales
1. Borrar la ventana de comandos
>> clc
2. Borrar la memoria
>> clear
3. Salir del programa
>> exit
4. Muestra mas cifras decimales
>> format long
5. Muestra menos cifras decimales
>> format short
6. No muestra por pantalla el resultado
>> 5;
1.3.2. Aritmeticos
7. Mayor entero que sea menor o igual a x
>> floor(3,254)
ans = 3
8. Menor entero que sea mayor o igual a x
>> ceil(3,254)
ans = 4
9. Parte entera de x
>> fix(7,254)
ans = 7
1.3.3. Algebraicos
1. Vectores
>> [8, 5, 1]
ans = 8 5 1
3. Matrices
>> [8, 5, 1; 3, 7, 4]
8 5 1
ans =
3 7 4
4. Genera una matriz aleatoria 3x2 con numeros entre 7 y 10
>> randi([7, 10], 3, 2)
8 5
ans = 1 9
3 6
Practicas con Octave 8
6. Construye una matriz cuyo polinomio caracterstico tiene de coeficientes los del polinomio [1,2,3]
>> compan[(1, 2, 3)]
2 3
ans =
1 0
7. Longitud de un vector o de una matriz, numero de columnas
>> length([2, 5, 1])
ans = 3
8. Dimension de un vector o de una matriz, numero de filas y columnas
>> size([2, 5, 1])
ans = 1 3
9. Suma los elementos de un vector
>> sum([8, 5, 1])
ans = 14
Matrices, submatrices,
determinantes, sistemas de
ecuaciones
9
Practicas con Octave 10
6. Borra la 3a fila
>> A = [8, 5, 1, 7; 2, 4, 4, 3; 7, 1, 3, 1]; A(3, :) = []
8 5 1 7
ans =
2 4 4 3
7. Unir matrices en filas
>> [A, B]
8. Unir matrices en columnas
>> [A; B]
9. Unir matrices por bloques
>> blkdiag(A, B)
>> inv(A) B
13
ans = 3
5
Tambien podemos unir las matrices A y B y aplicar el metodo de GAuss-Jordan con el comando rref
(reduce row echelon from)
3 4 1 2 4 12
Sea A = 1 1 2 1 1 la matriz de los coeficiente y B = 6 , la matriz de los
1 2 5 4 2 8
terminos independiente.
x 9z 16
y = 7z s 8 z, s R
t 2
Construimos una funcion que calcule un sistema de ecuaciones empleando el metodo de eliminacion
de Gauss
sol=inv(A)*b
Ab
Pero hay que tener cuidado con el operador ya que no siempre coincide con lo dicho.
Estudiando los rangos o bien con la orden rref podemos ver que es incompatible, pero si hacemos:
b=[1;3;1]
Ab
ans =
1.31429
-0.38571
A*ans nos da
ans =
0.92857
3.01429
0.54286
En primer lugar parece haber calculado la inversa de una matriz 3x2 lo cual no tiene sentido ma-
tematico. Si escribimos
inv(A)
nos dira que no puede calcularla porque no es ua matriz cuadrada, entonces que operacion ha hecho?
At A x = At b
At A es siempre un matriz cuadrada, en nuestro caso nxn, si tiene inversa, podemos hacer
x = (At A)1 At b
A la matriz (At A)1 At , que existira cuando (At A) tenga inversa, la llamamos pseudoinversa por la
izquierda. Es una matriz que cumple que M.A = I, pero no A.M = I, ya que este ultimo producto ni
siquiera tiene sentido si estudiamos las dimensiones
La pseudoinversa de una matriz se puede calcular con el comando pinv, aunque en Octave, cuando la
matriz A no es cuadrada la orden
Ab
calcula
s=pinv(A)*b
que no es la solucion, pero puede ser una aproximacion a la solucion, ya que lo que realmente estamos
haciendo es aproximar por mnimos cuadrados.
Graficamente, en nuestro ejemplo anterior, son tres rectas que no se cortan, pero los puntos de corte
de cada par de ellas esta proximo, de ah que consigamos una aproximacion de la solucion relativamente
aceptable.
x+y =1
Si repetimos lo anterior con el sistema 2x y = 3 ,
xy =5
las soluciones seran peores aproximaciones, ya que los puntos de corte de las tres rectas estan muy
separados
Practicas con Octave 16
ans =
1.5714
-1.2857
A*ans
ans =
0.28571
4.42857
2.85714
Tambien es importante ver que ocurre con sistemas compatibles indeterminados, donde aunque la
matriz de los coeficientes fuese cuadrada, no tiene inversa
x+y =1
,
2x + 2y = 2
Ab
ans =
0.50000
0.50000
Pero, no nos ha dado una solucion cualquiera, nos ha dado la solucion s que cumple que k s k sera
Practicas con Octave 17
mnimo.
La pseudo inversa puede utilizarse para hacer una aproximacion por mnimos cuadrados, supongamos
que tenemos unos datos sobre unas tensiones ejercicidas sobre un cuerpo y el aumento en la longitud que
producen
Tensiones 0 0,06 0,14 0,25 0,31 0,47 0,6 0,7
,
Alargamientos 0 0,08 0,14 0,20 0,23 0,25 0,28 0,29
Buscamos si existe una relacion lineal entre las variables y = x1 T + x2 siendo T las tensiones y y
los alargamientos, para ello construimos las matrices
b=[0;0.08;0.14;0.2;0.23;0.25;0.28;0.29]
xs=pinv(A)*b
Obtenemos
xs =
0.374099
0.065441
El mismo resultado hubiesemos conseguido con la orden de interpolacion polinomica de octave polyfit
polyfit(A(:,1),recta(A(:,1),xs(1),xs(2)),1)
Por tanto la recta que mejor aproxime esos puntos, recta regresion, sera Y = 0,374099 X + 0,065441,
la representamos tomando como puntos sobre el eje x los valores de las tensiones.
figure 1
plot(A(:,1),b,r*)
y en la misma grafica, la recta, que definimos con parametros, as hacemos el programa mas general
para cuando quiera aplicarla a otros conjuntos de puntos
recta=inline(p1.*x+p2,x,p1,p2)
hold on
plot(A(:,1),recta(A(:,1),xs(1),xs(2)),b)
Practicas con Octave 18
Resultara
Observando la grafica se aprecia que una aproximacion por una parabola puede ser mas exacta, para
hacerlo tomamos una nueva matriz 8x3 donde la primera columna sean los valores de las tensiones al
cuadrado. Para no hacerlo manualmente podemos teclear
A1=[(A(:,1)).2 ];
B=[A1 A];
ys=pinv(B)*b
ys =
-0.739870
0.889101
0.018426
polyfit(B(:,2), parabola(B(:,2),ys(1),ys(2),ys(3)),2)
La representamos, los puntos como antes, la parabola en verde usando los puntos de las tensiones y
finalmente dibujamos la parabola en azul tomando mas valores para que se aprecie que es una parabola
figure 2
parabola=inline(p1.*x.2 +p2.*x+p3,x,p1,p2,p3);
plot(B(:,2),b,r*)
Practicas con Octave 19
hold on
plot(B(:,2), parabola(B(:,2),ys(1),ys(2),ys(3)),g)
t=[0:0.01:0.7];
yt=parabola(t,ys(1),ys(2),ys(3));
plot(t,yt,b)
Obteniendo
Captulo 3
Ecuaciones no Lineales
3.1. Funciones
En Octave existen tres tipos de funciones: las funciones anonimas, funciones en linea y las funciones
definidas mediante el comando function, utilizaremos esta ultima para definir expresiones mas complejas.
En su forma mas sencilla tiene la siguiente sintaxis:
function nombre
comandos
endfunction
Donde nombre es el nombre con el que llamaremos a la funcion 1 . La guardaremos en un fichero con
la extension .m y con el mismo nombre que el nombre de la funcion.
Para realizar una grafica Octave necesita dos vectores de la misma longitud, uno x = (x1 , x2 , . . . , xn )
con las coordenadas del eje x y otro y = (y1 , y2 , . . . , yn ) con las coordenadas del eje y. De esta manera
puede construir los pares (xi , yi ) y dibujar mediante interpolacion de los pares (xi , yi ).
Para dibujar una coleccion de puntos, por ejemplo tomando los puntos (1, 2), (1, 4), (2, 8), (3, 1)
escribimos
x = [-1, 1, 2, 3]
y = [2, 4, 8, 1]
plot(x,y)
Despues de cada pareja de vectores(x, y) podemos anadirle atributos o detalles de color, forma,
etc. Por ejemplo:
1 No utilizar tildes, espacios, la letra n y caracteres extranos o reservados.
20
Practicas con Octave 21
b - blue
r - red
g - green
k - black
o - dibuja crculos
x - dibuja cruces
- - dibuja un recta entre dos puntos sucesivos.
Para dibujar la grafica de un funcion en un intervalo [a,b] creamos un vector con numerosos
puntos entre a y b con los comandos
f = inline(x. 2+x+1,x)
I = [-2:0.01:2]
plot(I,f(I))
Presentacion de graficas
Para dibujar varias funciones en la misma ventana se van anadiendo al comando plot de dos
en dos:
f = inline(x.*sin(x),x);
g = inline(sin(x)./x,x);
I = [-5:0.01:5];
plot(I,f(I),b,I,g(I)),ok)
Para mostrar distintas graficas en distintas ventanas se usa el comando figure antes de
cada plot:
figure(1)
f = inline(x.*sin(x),x);
figure(2)
g = inline(sin(x)./x,x);
f = inline(x.*sin(x),x);
g = inline(sin(x)./x,x);
I = [-5:0.001:5];
subplot(2, 1, 1) Crea una matriz de 2 filas y 1 columna
plot(I,f(I)); Dibuja f en la primera casilla
subplot(2, 1, 2) Activa la segunda casilla
plot(I,g(I)); Dibuja g en la segunda casilla
Podemos anadir despues de cada plot comandos para incluir un ttulo, nombres en los ejes, leyendas,
etc.
f1 = inline(cos(x),x);
f2 = inline(sin(x),x);
I = [-5:0.01:5];
plot(I,f1(I),I,f2(I))
title(Funciones seno y coseno)
legend(cos(x),sin(x))
xlabel(eje x)
ylabel(eje y)
El comando fplot puede dibujar directamente una funcion conocida sin definir ningun vector,
fplot (fun,limites,numero de puntos)
probamos
fplot(1/(1+x**2),[-10,10],10);
fplot(1/(1+x**2),[-10,10]);
fplot(@cos,[-pi,pi]);
fplot([cos(x),sin(x)],[0,2*pi]);
fplot([x**3-3*x+2,1-x**2],[-4,4]);
o bien definiendo la funcion con @(x)
f1=@(x) 1./x;
fplot(f1,[-1,1]);
ezmesh (@(x, y) x.**2 - y.**2 - 1);
3.3. Polinomios
p=[1 0 6 2 -2 1]
polyout(p,x)
q=[3 2 1 9]
Practicas con Octave 23
p+2*q
dara un error, ya que los vectores no son de la misma dimension, luego habra que escribir
q=[0 0 3 2 1 9]
Para multiplicar
prod=conv(p,q)
Sera conveniente quitar los ceros que pueden aparecer a la derecha, con la orden
reduce(prod)
Para dividir, el comando deconv nos indica el cociente y el resto de la division, para ello q no puede
empezar por 0, luego antes hemos de quitarlos con polyreduce
q=polyreduce(q)
[q,r]=deconv(p,q)
Para obtener una descomposicion en fracciones simples usamos la orden residue, con la forma
[coef,den,coc,exp]=residue(p,s)
donde coc son los exponentes del polinomio cociente, y la expresion del resto en fracciones simples
nos la dan los otros datos, coef son lo coeficientes de la expresion racional, den dara unos valores xk que
indican que los denominadores son x xk , elevados a los exponentes que indique exp, todos ordenados
respectivamente. Por ejemplo si tomamos
s=[1,-2,1,0]
coef =
17
den =
k=
129
exp =
2
Practicas con Octave 24
t=linspace(-2,2,20);
p1=polyval(p,t)
plot(t,p1)
roots(s)
roots(p)
Aunque hay que precaucion con esa orden, puede inducir a errores cuando el polinomio tiene races
multiples, para un polinomio con 1 raiz de multiplicidad 8, no dara
roots(p8)
ans =
1.02171 + 0.00000i
1.01523 + 0.01540i
1.01523 - 0.01540i
0.99983 + 0.02154i
0.99983 - 0.02154i
0.98477 + 0.01506i
0.98477 - 0.01506i
0.97863 + 0.00000i
Tambien permite calcular derivadas e integrales indefinidas de polinomios con las ordenes
polyder(p)
polyint(p)
El resultado no dara el termino independiente 0, pero si se cambia por C se tiene la integral indefinida.
Practicas con Octave 25
La orden polyfit(x,y,n) permite calcular un polinomio de grado n que pase por los puntos determinados
por los vectores x e y.
Si
x=[ 1 2 3 4 5 6 7 8 9 10 11 12]
p11=polyfit(x,y,11)
x11=linspace(1,12,30)
y11=polyval(p11,x11)
plot(x,y,0 o0 ,x11,p11,0 r0 )
Para conseguir un polinomio de grado n que aproxime un conjunto de puntos, o una funcion f (x),
buscamos una polinomio que pase por los puntos (xi , yi ) para i = 1, ..n, en el caso de una funcion
yi = f (xi ).
Practicas con Octave 26
n
Y x xj
Vamos a utilizar la funcion auxiliar k (x) = , que vale 1 cuando x = xk y 0 en los
xk xj
j = 0,
j <> k.
demas xi , i <> k.
n
X
De esta forma el polinomio de interpolacion sera p(x) = k (x).
k
Por ejemplo, el polinomio que pase por los puntos (1, 2), (1, 3) y (3, 5), sera de segundo grado y lo
construiremos
Si queremos aproximar la raz de la ecuacion f (x) = 0 con una tolerancia tol y en un numero maximo
de nmax de iteraciones, se define la funcion f como una funcion inline con el comando
f = inline(...,x)
Metodo de la biseccion
Se eligen a y b de manera que f contenga una unica raz en el intervalo [a, b] y se ejecuta el comando:
[z,res,niter] = bisection(f,a,b,tol,nmax)
En la salida z contiene la aproximacion buscada, res el residuo y niter el numero de iteraciones que ha
tardado el metodo en alcanzar z.
Metodo de Newton.
df = inline(...,x)
[z,res,niter] = newton(f,df,x0,tol,nmax)
En la salida z contiene la aproximacion buscada, res el residuo y niter el numero de iteraciones que ha
tardado el metodo en alcanzar z.
Practicas con Octave 27
Si queremos resolver el problema de punto fijo (x) = x, primeramente se define como una funcion
inline con el comando
phi = inline(...,x)
[z,niter] = puntofijo2(phi,x0,tol,nmax)
En la salida z contiene la aproximacion buscada, res el residuo y niter el numero de iteraciones que ha
tardado el metodo en alcanzar z.
Si queremos aplicar el metodo de aceleracion de Aitken para resolver el mismo esquema se ejecuta el
comando
[z,niter] = aitken(phi,x0,tol,nmax)
Orden fzero.
fzero nos da una aproximacion a partir de un punto por metodos numericos, pero no sabemos que
metodo esta utilizando, y por tanto no lo podemos controlar
fun=@(x) x.3 3x + 1
fplot(fun,[-3,3])
fzero(fun,1)
ans = 0.34730
fzero(fun,-1)
ans = -1.8794
fzero(fun,0)
ans = 0.34730
fzero(fun,1)
ans = 0.34730
fzero(fun,3)
ans = 1.5321
Practicas con Octave 28
f (x) = 0
(0) (0)
Tomando como dato inicial el vector columna x0 = (x1 , . . . , xn )T Rn , para resolver el sistema
mediante el metodo de Newton necesitaremos crear 3 archivos .m distintos:
Archivo Ffun.m
function F=Ffun(x)
F(1,1) = x(1) 2-10x(1)+x(2) 2+8;
F(2,1) = x(1)x(2) 2+x(1)-10x(2)+8;
endfunction
Practicas con Octave 29
Archivo Jfun.m
function J=Jfun(x)
J(1,1) = 2x(1)-10;
J(1,2) = 2x(2);
J(2,1) = x(2) 2+1;
J(2,2) = 2x(1)x(2)-10;
endfunction
x0 = [0.5;0.5];
[z,res,niter] = newtonsys(@Ffun,@Jfun,x0,tol,nmax)
Captulo 4
En el captulo anterior hemos utilizado funciones para aplicar el metodo de eliminacion de Gauss.
A diferencia de los metodos directos, en los cuales se debe terminar el proceso para tener la respuesta,
en los metodos iterativos se puede suspender el proceso al termino de una iteracion y se obtiene una
aproximacion a la solucion. Un metodo iterativo consta de los siguientes pasos.
El metodo Jacobi es el metodo iterativo para resolver sistemas de ecuaciones lineales mas simple y se
aplica solo a sistemas cuadrados, es decir a sistemas con tantas incognitas como ecuaciones.
CX = B (4.1)
1. Primero se determina la ecuacion de recurrencia. Para ello se ordenan las ecuaciones y las incognitas.
De la ecuacion (4.1) se despeja la incognita X. En notacion matricial se escribirse como:
X = B + AX
30
Practicas con Octave 31
Xn+1 = B + AXn
Uno de los principales problemas de los metodos iterativos es la garanta de que el metodo va a
converger, es decir, va a producir una sucesion de aproximaciones cada vez efectivamente mas proximas
a la solucion. En el caso del metodo de Jacobi no existe una condicion exacta para la convergencia. Lo
mejor es una condicion que garantiza la convergencia, pero en caso de no cumplirse puede o no haberla es
la siguiente: Si la matriz de coeficientes original del sistema de ecuaciones es diagonalmente dominante,
el metodo de Jacobi seguro converge.
Una matriz se dice matriz diagonalmente dominante, si en cada uno de los renglones, el valor absoluto
del elemento de la diagonal principal es mayor que la suma de los valores absolutos de los elementos
restantes del mismo renglon. A veces la matriz de un sistema de ecuaciones no es diagonalmente dominante
pero cuando se cambian el orden de las ecuaciones y las incognitas el nuevo sistema puede tener matriz
de coeficientes diagonalmente dominante.
Con octave construimos una funcion itermeth que realiza el metodo iterativo general.
Donde A, B son las matrices de los coeficientes y la matriz de los terminos independientes, x0 es
la condicion inicial, nmax el numero maximo de iteraciones, tol la tolerancia y P la opcion de elegir el
metodo de Jacobi o del Gauss-Seidel.
Con esta funcion obtenemos algunos ejemplos para obtener la solucion de un sistema por el metodo
de Jacobi.
Veamos los comamdos para obtener los valores que diagonalizan una matriz.
1. Autovalores
>> A = [2, 1, 2; 1, 0, 2; 1, 1, 1]; lambda = eig(A)
1
lambda = 1
1
2. Coeficiente del polinomio caracterstico
>> A = [2, 1, 2; 1, 0, 2; 1, 1, 1]; poly(A)
ans = 1 1 1 1
3. Otra forma de obtener los autovalores
>> A = [2, 1, 2; 1, 0, 2; 1, 1, 1]; roots(poly(A))
1 + 0i
ans = 1 + 0i
1 + 0i
4. Salida de matriz con autovectores (matriz de paso) y matriz diagonal de autovalores (matriz dia-
gonal)
>> A = [2, 1, 2; 1, 0, 2; 1, 1, 1]; [vectorpropio, valorpropio]=eig(A)
vectorpropio =
0,904534 0,577350 0,636162
0,301511 0,577350 0,768704
0,301511 0,577350 0,066271
valorpropio =
Diagonal Matrix
34
Practicas con Octave 35
1,00000 0 0
0 1,00000 0
0 0 1,00000
5. Un programa para obtener la diagonalizacion de una matriz
Existen metodos numericos que nos conducen, a partir de la matriz del endomorfismo, a los autovec-
tores y autovalores con una cierta aproximacion.
Uno de estos metodos es el de las potencias, aplicable cuando la matriz es de diagonal estrictamente
dominante (los elementos de la diagonal principal son mayores en valor absoluto, que la suma de los
valores absolutos de los demas elementos de la fila correspondiente)
Sean 1 , 2 , n los autovalores (iguales o no) de la matriz Anxm . Se dice que i es dominante si
|i | > |j | i 6= i. Sea ~xi su autovector correspondiente a i , se dice que ~xi es autovector dominante.
k k !
k 2 n
~xk = A ~x0 = k1 c1 ~u1 + c2 ~u2 + + cn ~un
1 1
k
j
Y por ser lm = 0, obtenemos
k 1
~xk k1 c1 ~u1
Practicas con Octave 36
Con este procedimiento ~xk se aproxima al autovector ~u1 . Para que ~xk no crezca rapidamente, se
normaliza dividiendolo por la mayor de sus coordenadas en valor absoluto y as hacemos que el autovector
~u1 su coordenada mayor sea uno.
A~u1 = 1 ~u1
Para calcular el autovalor de menor valor absoluto aplicamos el metodo de las potencias a A1 , pues
sabemos, que los autovalores de A1 son los inversos de A.
Para obtener los restantes autovectores y autovalores aplicamos los procedimientos de deflacion.
Con Octave hemos construidos el siguiente metodo iterativo mediante la funcion eigpower
Aqu ponemos cuatro ejemplos de aplicacion del metodo de las potencias para calcular aproximada-
mente los autovalores y autovectores.
Practicas con Octave 37
Ejenplo1
Ejemplo2
Practicas con Octave 38
Ejemplo 3
Ejemplo4
Captulo 6
Derivacion e Integracion
La orden para derivar con Octave Symbolic es diff, para integrar int. El polinomio de Taylos se puede
obtener con la orden taylor(f,variable,punto,order,orden). Se pueden realizar tanto de una como de mas
variables
>> syms x y
>> f = x2 + 2 x exp(x) + 1
>> subs(df,x,4)
>> df=diff(f)
Calcula la derivada
>> db=diff(f,4)
>> in=int(f)
39
Practicas con Octave 40
>> g = x y + x5 y sin(x)
>> diff(g,x)
>> diff(g,x,2,y,1)
E integrales
>> int(g,x)
>> int(int(g,y),x)
>> int(int(g,x),y)
>> int(int(g,y,0,2),x,0,pi)
>> int(int(g,x,0,y),y,0,pi/2)
Dada una funcion continua y derivable, buscamos una aproximacion de la primera derivada en un
punto de un intervalo [a,b].
Utilizando el desarrollo en serie de Taylor, de orden uno, en torno a x0 y si h es una cantidad positiva
suficiente pequena, buscamos una aproximacion de la derivada en x0 + h
h2 00
f (x0 + h) = f (x0 ) + h.f 0 (x0 ) + f (1 ) x0 < 1 < x0 + h (6.1)
2
Despejando f 0 (x0 ) tenemos
f (x0 + h) f (x0 )
f 0 (x0 ) = (h)
h
donde (h) es el error de truncamiento, en ese caso de orden 1. De manera que una primera aproximacion
de la derivada la obtenemos con
f (x0 + h) f (x0 )
f 0 (x0 ) ,
h
que llamamos diferencia finita progresiva. Si repetimos el proceso en x0 h obtenemos
h2 00
f (x0 h) = f (x0 ) h.f 0 (x0 ) + f (2 ) x0 h < 2 < x0 (6.2)
2
y llegamos a
f (x0 ) f (x0 h)
f 0 (x0 )
h
que llamamos diferencia finita regresiva, otra posible aproximacion de la derivada. Restando las ecuaciones
6.1 y 6.2 obtenemos
f (x0 + h) f (x0 h) = 2h.f 0 (x0 ) + (h2 ) (6.3)
Practicas con Octave 41
f (x0 + h) f (x0 h)
f 0 (x0 )
2h
que denominamos diferencia finita centrada, y donde el error es menor, ya que es de orden 2.
Con el programa siguiente definimos una funcion que calcula la derivada utilizando la ecuacion de
derivada finita centrada, salvo en los extremos, donde utiliza la progresiva y regresiva, respectivamente.
Dado un vector x, y calculamos y = f (x), esa funcion nos dara un vector d, donde cada componente es
una aproximacion de la derivada en el punto correspondiente del vector x de la funcion f.
Si tomamos
>> x=[0:1:10]
>> y = x.2
>> d=der2p(x,y)
Obtendremos
ans =
1 2 4 6 8 10 12 14 16 18 19
el error en los extremos hubiese sido tambien mayor, pero de 2, siendo exactos el resto de valores.
Tambien se pueden obtener formulas con mas puntos. Muy usadas son las de tres y cinco puntos. Para
deducir la de tres puntos, se parte del desarrollo de Taylor de segundo grado en f (x0 + h) y f (x0 + 2h),
Practicas con Octave 42
Ecuaciones Diferenciales
>> clear
>> N = 15;
>> [x, y] = meshgrid(xmin : (xmax xmin)/N : xmax, ymin : (ymax ymin)/N : ymax);
Calculamos un vector en cada uno de esos puntos, partimos de un valor 1 para x, calculamos y y
luego normalizamos
>> dx = ones(size(x));
>> L = L + 1e 10;
>> dx = dx./L;
44
Practicas con Octave 45
>> dy = dy./L;
Y con la orden quiver representamos esos vectores unitarios en cada uno de los puntos >> quiver(x, y, dx, dy);
Y representamos
>> xlabel(0 x0 );
>> ylabel(0 y 0 );
Vamos a resolverlo desde tres puntos de vista, usando Octave Symbolic, con la orden Lsode y por
metodos numericos programados.
La orden dsolve del paquete de Octave Symbolic resuelve algunas ecuaciones sencillas. Puede utilizarse
instalando el programa o bien de manera Online.
Ejemplo1. Resolvamos una ecuacion conocida y+2y=-cos(t) Con el paquete simbolico cargando defi-
nimos las variables con las dependencias con syms
Escribimos la ecuacion y aplicamos la orden dsolve, obtenemos la solucion que simplificada con simplify
podemos comprobar que es la misma que calcularamos sin usar ordenador, como una lineal que es.
>> sg = dsolve(de3)
Para poder representar la curva, podemos convertir la solucion en funcion con la orden function
handle, procederamos:
Obteniendo la grafica
Ejemplo 2. Resolver y+ 2y+y=0 con y(0)=y(0)=0 y(0)=1. Hallar la ecuacion general, la par-
ticular y representar.
Veremos en este ejercicio que a pesar de usar Octave Symbolic, nos dara valores aproximados. Si lo
resolviesemos analticamente la ecuacion, las soluciones de la ecuacion caracterstica son 0 y 2/2(1i),
con lo cual los valores que da Octave no son exactos.
Practicas con Octave 48
Octave dispone de un driver para resolver problemas de Cauchy llamado lsode. Las opciones de
integracion se modifican utilizando la funcion lsode options.
Octave resuelve ecuaciones diferenciales no lineales, para ello utiliza la funcion lsode (the Livermore
Solver for Ordinary Differential Equations). Planteamos el Ptoblema de Cauchy (P.C.)
y 0 = f (t, y),
t [t0 , tN ]
y(t0 ) = y0
Cabe mencionar que la solucion que proporciona Octave es puramente numerica, es una matriz x, con
cada fila correspondiente a un elemento del vector t. El primer elemento de t debe ser t0 (t subndice 0 o
t inicial) y debe corresponder al estado inicial del sistema x0 , de modo que la primera fila de la salida es
x0 y utilizando dicha matriz puedes obtener con plot una grafica demostrativa de como se comporta la
ecuacion en un intervalo determinado. As que no esperemos resultados con variables, diferenciales y/o
Practicas con Octave 49
Hay 4 pasos para resolver una ecuacion diferencial en octave con lsode:
2. El segundo paso es definir un vector que represente los valores que va a tomar la variable indepen-
diente (t).
4. El cuarto y ultimo paso es usar el comando lsode para integrar y resolver la ecuacion diferencial,
que debemos representar para estudiar la solucion
Veamos un ejemplo. Resolver x2 x0 = et con x(0)=1 en el intervalo [0,20]. Defino la funcion, se puede
definir de distintas formas, utilizo la funcion anonima
>> x0=1;
>> t=linspace(0,20);
>> y=lsode(f0,x0,t);
>> plot(t,y)
dT
= k (T T a)
dt
Practicas con Octave 50
donde k es una constante, que llamamos constante de enfriamiento, que en realidad es el producto del
coeficiente de intercambio de calor, que depende del medio, por la superficie de contacto del cuerpo.
Ejemplo. Una placa de acero se extrae de un horno a 6000 C y se sumerge en un bano de aceite a 300 C.
Se sabe que la constante de enfriamiento de la pieza es 0,023. Determinar la temperatura que tendra
despues de 92 segundos.
T 0 (t) = 0,023(30 T ),
t [0, 92]
y(0) = 600
>>t=[0:0.1:92]
>>ys=lsode(fun,600,t)
>>ys(plot(t, ys)
Se puede ver que la solucion es cercana a 100, pero podemos precisar mas, como hemos dividido el
intervalo [0,92] con un paso de 0.1, el ultimo valor, correspondiente a 92, se encontrara en la posicion 921.
>> ys(921)
ans = 98.692
Ademas de Lsode Hay otras ordenes para tratar ecuaciones diferenciales de forma numerica en un
paquete de Octave llamado odepkg, pero no las vamos a tratar.
Si la orden la escribimos
Practicas con Octave 51
>>[ys,i,m]=lsode(fun,600,t)
Si el procedimiento es satisfactorio i nos dara 2, y cualquier otro valor en caso contrario; m nos dira
si es satisfactorio o nos proporcionara informacion cuando no lo sea.
Sea I un intervalo de la recta real, no reducido a un unico punto, y sea t0 un punto fijado de el.
Supongamos ademas que f es una funcion definida y continua en IxR y con valores en R, y sea y0 un
valor dado de R. En estas condiciones nos planteamos el siguiente problema: Hallar una funcion continua
y diferenciable y(t) definida en I y con valores en R verificando:
Este tipo de problemas se conoce con el nombre de problema de Cauchy para la ecuacion diferencial. La
condicion asociada se denomina condicion de Cauchy. Toda funcion y(t) verificando la EDO del problema
de Cauchy se denomina integral de la EDO o solucion particular de la EDO. En general las soluciones de
la EDO estaran dadas por la expresion formal:
Z
y(t) = C + f (t, y(t))dt
Donde C es una constante arbitrariamente elegida. A esta familia de soluciones se la denomina solucion
general de la EDO. En algunos casos puede haber ademas otras soluciones que no pertenezcan a la familia
de la solucion general. Dichas soluciones se denominaran soluciones singulares de la EDO.
A aquella solucion particular que, ademas de satisfacer la EDO del problema de Cauchy, verifique la
condicion de Cauchy se la denomina solucion del problema de Cauchy.
Teorema (de Cauchy-Lipschitz). Suponiendo que la funcion f(t,y) es una funcion continua sobre IxR
que es lipschitciana respecto a la segunda de sus variables, es decir:
Los problemas de Cauchy que no sean problemas de valor inicial por no ser t0 el extremo izquierdo
del intervalo I pueden reducirse a problemas de valor inicial mediante sencillos cambios de variable. En
efecto si I= [a,b] y t0 es un punto intermedio de I=[a,b] el problema de Cauchy correspondiente puede
descomponerse en dos problemas de la forma:
Aunque existen metodos especficos para abordar este tipo de problemas (como por ejemplo los lla-
mados metodos de tiro), por cuestiones de tiempo disponible no podremos abordarlos. Su tratamiento
numerico, no obstante, puede realizarse mediante metodos en diferencias finitas.
Existen numerosos tipos de metodos para la resolucion de problemas de valor inicial. Introduciremos
los metodos en diferencias finitas. Este tipo de metodos no persiguen la determinacion de la expresion de la
funcion solucion y(t) de un problema de valor inicial. Tan solo persiguen calcular, de forma aproximada, el
valor de la solucion en ciertos puntos ti ( i = 0, 1, 2, ..., N) seleccionados (bien de antemano por el usuario
de dichos metodos, bien de forma automatica a traves de algoritmos preparados para su calculo con el
objeto de asegurar ciertas tolerancias de error entre el valor exacto (desconocido) y el valor aproximado
por el metodo). Para su descripcion, siendo I = [t0 , t0 +T] consideremos dados los puntos en los que se
va a determinar la solucion y que denotaremos por:
Los metodos en diferencias finitas, en general, se basan en, conocidos los valores aproximados de la
solucion en los puntos tnk , tnk+1 , tnk+2 , ....., tn1 , que denotaremos como:
interpolar, habitualmente mediante un polinomio, la funcion y(t) sobre el soporte tnk , ....., tn . Esta
tecnica permite escribir
yn = (ynk , ynk+1 , ....., yn )
En este proceso hay muchas opciones posibles que nos conduciran a expresiones diferentes de la funcion .
Pero en todo caso seran expresiones en las que el valor aproximado yn se estimara en funcion de los valores
aproximados, previamente calculados, ynk , ynk+1 , ....., yn1 , donde puede aparecer eventualmente el
propio valor yn que se desea aproximar. Por ello, en general, se entendera por metodo numerico para
resolver un problema de valor inicial todo esquema de calculo (algoritmo) que nos permita evaluar yn
mediante una expresion de la forma:
Ademas tales tipos de metodos diremos que son metodos de k pasos en el sentido de que para evaluar
yn utilizan los k ultimos valores previamente calculados. En el caso de que k = 1 los metodos corres-
pondientes se dicen metodos de pasos libres o metodos unipaso. Por el contrario si k > 1 los metodos
correspondientes se dicen metodos de pasos ligados o metodos multipaso. Los metodos multipaso k pasos
solo podran utilizarse a partir del conocimiento de los k primeros valores, y para la determinacion de
estos deberan emplearse metodos de un menor numero de pasos. La combinacion de unos y otros no es
trivial pues interesa no estropear la precision que pueda conseguirse con el metodo de k pasos por utilizar
metodos menos precisos en las etapas iniciales. Ademas, conviene advertir ya, desde el comienzo, que la
consideracion de un numero mayor de pasos no implica necesariamente la mejora de las aproximaciones
obtenidas. Es relativamente frecuente que un metodo de un paso bien elegido conduzca a soluciones mas
baratas de obtener e igual o mas precisas que un metodo multipaso.
t0 < t1 < t2 < .... < tn < tn+1 < .... < tN = t0 + T
Designaremos por hn a los valores (tn+1 tn ) y por yn a las aproximaciones que se vayan obteniendo de
y(tn ), (n = 0, 1, ..., N). Si se supone que la funcion y(t) es al menos de clase C 2 ([t0 , tN ]), puede expresarse
el valor de y(t) en el punto tn+1 en funcion del valor de y(t) en tn mediante el siguiente desarrollo en
serie de Taylor:
h2
y(tn+1 ) = y(tn + hn ) = y(tn ) + hn .y 0 (tn ) + n y 00 (tn ) + ...
2
h2n 00
y(tn+1 ) = y(tn + hn ) = y(tn ) + hn .f (tn , y(tn )) +
y (tn ) + ...
2
Si hn es suficientemente pequeno, el desarrollo anterior podra aproximarse despreciando los terminos en
los que aparezcan potencias de hn superiores o iguales a 2, obteniendose as nuevamente el esquema de
calculo del metodo de Euler:
yn+1 = yn + hn .f (tn , y(tn ))
Este esquema de calculo de las soluciones aproximadas del Problema de Valor Inicial (P.V.I.) se conoce
con el nombre metodo de Euler explcito en honor al matematico Leonard Euler.
Si en lugar de expresar el valor de y(tn+1 ) en funcion del valor de la funcion y(t) y de sus derivadas
en tn , se hiciera al reves y se expresara el valor en tn en funcion del valor de y(t) y de sus derivadas en
tn+1 se obtendra:
h2n 00
y(tn ) = y(tn+1 hn ) = y(tn+1 ) hn .y 0 (tn+1 ) + y (tn+1 ) + ...
2
h2n 00
y(tn+1 ) hn .f (tn+1 , y(tn+1 )) = y(tn ) y (tn+1 ) + ...
2
Practicas con Octave 54
de la que, despreciando los terminos cuadraticos y posteriores en hn, se obtiene la formula que constituye
el esquema de calculo del metodo de Euler implcito (o retrogrado):
yn+1 = yn + hn .f (tn+1 , y(tn+1 ))
Este esquema de calculo exige, en cada paso, resolver una ecuacion algebraica. Para ello puede utilizarse
alguno de los metodos para resolver ecuaciones no lineales.
Si se combinan los desarrollos en serie anteriores, ponderando el segundo por el parametro [0, 1] y
el primero por (1-) se obtendra la familia de -metodos.
yn+1 = yn + hn )f (tn , y(tn )) + hn f (tn+1 , y(tn+1 ))
Para el caso en que =0 se trata del metodo de Euler explcito, para el caso =1 el de Euler implcito y
para =0.5 se conoce como metodo de Crank-Nicholson:
hn
yn+1 = yn + (f (tn , y(tn )) + f (tn+1 , y(tn+1 )))
2
Por regla general los metodos explcitos necesitan mas cantidad de pasos, pero estos son menos costosos.
En los metodos implcitos, al tener que resolver una ecuacion no lineal en cada paso, estos son mas
costosos, pero se pueden realizar en menos pasos. Una buena opcion puede ser el metodo de Crank-
Nicholson, aunque no hay una regla fija en este aspecto, pudiendo para una ecuacion ser mas ventajoso
uno y para otra ecuacion otro. Otro aspecto a tener en cuenta es la estabilidad. El metodo explicito tiene
perdida de estabilidad, y eso no ocurre en los metodos implcitos. En el ejemplo 2, veremos la estabilidad,
antes trabajaremos una ecuacion con los tres metodos. En el libro de Quarteroni se dan ficheros para
estos tres metodos vistos, sus nombres son feuler.m (para Euler explcito), beuler.m (para el implcito) y
cranknic.m .
Para llevarlo a cabo con Octave, primeramente definimos la funcion f (t, y) en la variables t, y como una
funcion inline, el intervalo en en el que se presenta el problema [t0 , tN ] y la condicion inicial y0 como:
f = inline(...,t,y)
tspan = [t0,tN]
y0 = ...
Despues se especifica el numero de intervalos Nh del mallado utilizado, es decir, el numero de intervalos
en los que se divide el intervalo [t0 , tN ] una vez conocido el paso de discretizacion h:
Nh = ...
Para todos los metodos, la salida consiste en el vector t que contiene los N h + 1 puntos del mallado
en los que se ha dividido el intervalo [t0 , tN ], y en el vector y que contiene las aproximaciones a la solucion
Practicas con Octave 55
Una vez ejecutado el metodo podemos dibujar la aproximacion mediante el comando plot(t,y)
Ejemplo.
y 0 (t) = (1 + 6 t) e1y 6
t [0, 6]
y(0) = log(10) + 1
La solucion analtica es: y(t) = log(10e6t + t) + 1. Aplicar el algoritmo de Euler Explcito para calcular
la solucion en el intervalo temporal [0, 6] con pasos de discretizacion h1 = 0.5, h2 = 0.15 y h3 = 0.25.
Discutir el comportamiento de las soluciones obtenidas en terminos de estabilidad numerica. Aplicar los
algoritmos de Euler Implcito y Crank-Nicholson Dibujar la solucion analtica junto con las soluciones
estables calculadas anteriormente. Calcular analticamente el instante en el cual se tiene el mnimo de
concentracion, as como su valor. En primer lugar definimos la funcion y la solucion analtica dada, as
como su valor inicial:
>>f=inline((1+6*t)*exp(1-y)-6,t,y);
>>sol=inline(log(10.*exp(-6.*t)+t)+1,t);
>> y0=log(10)+1;
>> N1=(tspan(2)-tspan(1))/h1;
>> N2=(tspan(2)-tspan(1))/h2;
>> N3=(tspan(2)-tspan(1))/h3;
>> [t1,uf1]=feuler(f,tspan,y0,N1);
>> [t2,uf2]=feuler(f,tspan,y0,N2);
>> [t3,uf3]=feuler(f,tspan,y0,N3);
>> figure(1)
>> plot(t1,uf1,.-r,t2,uf2,b,t3,uf3,*g,t2,sol(t2),k)
Observamos que la solucion obtenida para h1 presenta inestabilidad, vemos que las soluciones uf2 y
uf2 se mantienen por debajo de la solucion (eso ocurre con todas las explcitas) y parece ser que uf2 es
mejor aproximacion que uf3.
>> [t1,ub1]=beuler(f,tspan,y0,N1);
>> [t2,ub2]=beuler(f,tspan,y0,N2);
>> [t3,ub3]=beuler(f,tspan,y0,N3);
>> figure(2);
>> [t1,uc1]=cranknic(f,tspan,y0,N1);
>> [t2,uc2]=cranknic(f,tspan,y0,N2);
>> [t3,uc3]=cranknic(f,tspan,y0,N3);
>> figure(3)
Calculamos el punto donde la funcion analtica alcanza el mnimo usando el paquete symbolic
>> syms t
>> y=log(10*exp(-6*t)+t)+1
>> df=diff(y,t)v
>> solve(1-60*exp(-6*t)==0,t)
log(60)
La solucion que nos da es 6
>> log(60)/6
Podemos comprobar que Octave symbolic no resuelve esta ecuacion, y si lo intentamos con lsode,
calculamos la aproximacion y la representamos junto con la solucion analtica.
>> figure(5)
>> x0=1;
>> t=linspace(0,6);
>> y=lsode(f,x0,t);
>> ys=sol(t);
>> plot(t,y,b,t,ys,or)
Practicas con Octave 58
Vemos que la solucion dada por lsode no es nada buena, toma valores muy grandes, de forma que al
representarla junto con la analtica, esta no se aprecia.
Observamos que ninguna solucion presenta inestabilidad y que todas estan por encima de la solucion
analtica, ambas cuestiones ocurre siempre en un metodo implcito. Nuevamente la mejor aproximacion
es la correspondiente a h2 y la peor la de h1. Como las aproximaciones obtenidas por Euler explcito
estaban por debajo y por Euler implcito por encima, es probable que la mejor aproximacion se obtenga
por Crank-Nicholson.
Comparamos la mejor aproximacion de cada uno de los metodos, y efectivamente vemos que la mejor
opcion es Crank-Nicholson:
>> figure(4)
>> plot(t2,uf2,.-r,t2,ub2,b,t2,uc2,g,t2,sol(t2),k);
Euler Explcito
yn+1 = yn + h (kyn ) = (1 k h) yn
yn+1 = (1 k h) yn = (1 k h)2 yn1 = ... = (1 k h)n+1 y0
Euler Implcito
1
yn+1 = yn + h (kyn+1 ) yn+1 = ( ) yn
1+kh
1
yn+1 = ( )n+1 y0
1+kh
-metodos
1 (1 ) k h
yn+1 = yn h ((1 ) k yn + k yn+1 ) yn+1 = yn
1+kh
1 (1 ) k h n+1
yn+1 = ( ) y0
1+kh
Practicas con Octave 60
Para el metodo de Euler explcito, llamamos =(1-k h), la solucion aproximada en cada instante de
tiempo tn+1 es la condicion inicial (y(0) = y0 = 1) multiplicada por n+1 , es decir escribimos el esquema
de Euler explcito en la forma:
yn = n y0 = n
Para que la solucion aproximada efectivamente decrezca (al menos en valor absoluto) debera verificarse
que | |< 1. Puesto que hemos supuesto k > 0 y la longitud del paso tambien es positiva, un pequeno
calculo nos conduce a que el decaimiento en los valores absolutos de la solucion se preservara si 0 <
k h < 2 Lo anterior nos limita el tamano del paso que podemos utilizar si deseamos que nuestra solucion
aproximada decrezca con el transcurrir del tiempo, debiendo verificarse para ello que h < k2 En el caso de
que h = k2 la solucion numerica no explotara con el transcurrir del tiempo pero como en ese caso = 1
la solucion numerica oscilara en cada instante de calculo pasando del valor -1 al valor 1. No obstante se
puede ser un poco mas sutil en el examen de la longitud del paso de calculo a utilizar. En efecto, si se
desea que ademas la solucion aproximada sea siempre positiva la condicion a imponer es que 0 < < 1 ,
lo que nos conduce a que h(0, k1 ).
Notese que el intervalo al que deben pertenecer los valores de h es un intervalo abierto. En efecto, en
sus extremos la solucion numerica no oscilara entre valores negativos y positivos, pero tambien adolecera
de graves defectos. As el valor h = 0 no puede tomarse (pues todos los puntos de calculo se reduciran al
instante inicial t0 ). Y si se tomase h = k1 el valor de sera nulo y la solucion aproximada en instantes
positivos sera siempre 0. El problema entonces es saber cual es el mejor valor que podramos tomar para
el paso de integracion. El responder a esta pregunta, en este caso concreto, es muy simple. Puesto que la
solucion analtica es conocida, se tendra un error nulo si:
(1 h k)n = etn = enh 1 h.k = eh h = 0
Pero es absurdo pensar en tomar h = 0. No obstante, lo anterior nos indica que cuanto menor sea el
paso de integracion menor sera el error cometido. Debe matizarse no obstante que aqu nos estamos
refiriendo solo a un tipo de error: el que se comete con la aplicacion del metodo sin redondear los valores
obtenidos. La consideracion de que al trabajar con un programa de calculo se introducen ademas errores
de redondeo al no poderse almacenar infinitos decimales introducira (como se vera mas adelante) un
lmite inferior a los valores de h que puedan considerarse. Pero olvidandonos por el momento de los
errores de redondeo, efectivamente, cuanto menor sea el tamano del paso de integracion mas precisa
sera la aproximacion obtenida. Ilustremos lo anterior considerando la solucion analtica del problema y
las soluciones aproximadas mediante el metodo de Euler para distintos valores del tamano del paso de
integracion y tomando como valor de k = 5 (lo que hace que para pasos menores que 1/5 = 0,2 el metodo
produzca soluciones siempre positivas que decrecen en valor absoluto con el paso del tiempo): Observese
como para h = 0,2 la solucion obtenida es, efectivamente, siempre nula y como la solucion obtenida con
h = 0,02 es mas precisa que la obtenida para h = 0,1, y esta, a su vez, es mas precisa que la obtenida
para h = 0,2. Si tomasemos mayores valores del paso de integracion comenzaran a aparecer soluciones
oscilantes pero si no sobrepasamos el valor crtico h = 2/k = 0,4 la solucion decrece en valor absoluto
por lo que para tiempos grandes acaba convergiendo hacia la solucion exacta.
Si a h le asignamos el valor crtico h = 0,4 la solucion permanece acotada, no explota para tiempos
grandes, pero tampoco decrece en valor absoluto y oscila entre -1 y 1.
Finalmente si a h le asignamos valores superiores a 0.4, por ejemplo h = 0,5 la solucion aproximada,
en valor absoluto, crecera por lo que tendera a explotar para tiempos elevados. Diremos en este caso que
el esquema considerado se hace inestable
Representamos las graficas uf1 correspondiente a h = 0,2, uf2 para h = 0,1 y uf3 para h = 0,01 para
comprobar lo explicado anteriormente. En otra grafica representamos uf4 correspondiente a h = 0,4 y uf5
para h = 0,5 para mostrar los casos de inestabilidad. En ambos casos aparece la solucion.
Practicas con Octave 61
Examinemos ahora los metodos implcitos (es decir con > 0). En este caso la solucion aproximada
tambien puede expresarse como:
yn = n y0 (n = 1, 2, ....,N)
siendo ahora:
1 (1 ) k h 1+khkh kh
= = =1
1+kh 1+kh 1+kh
Puesto que 0 < 1, y k > 0 se verificara que a siempre sera inferior a 1. Para garantizar que
tambien es superior a -1 se debe verificar que:
kh
< 2 (1 2 ) k h < 2
1+kh
En el caso de que = 0, 5 la expresion anterior se verificara para cualquier valor que se tome para h el
esquema en ese caso es incondicionalmente estable. Y si < 0, 5 la condicion a imponer sobre el paso de
integracion para garantizar la estabilidad, sera:
2
h<
k (1 2 )
Estas elecciones del valor del paso de integracion nos aseguran que el valor de la solucion aproximada que
se obtenga tambien va a decaer hacia 0 para tiempos grandes. Si ademas se desease asegurar la positividad
de las soluciones aproximadas se debera hilar un poco mas fino. En efecto para que esto suceda se debe
obligar a que 0 < < 1. Ello nos conduce a que:
kh 2
< 1 (1 ) k h < 1 h <
1+kh k (1 )
Practicas con Octave 62
Observese que cuanto mas se aproxime ? al valor 1 mayor sera el tamano de paso maximo que puede
ser tomado para garantizar tanto la estabilidad de la solucion aproximada (es decir que no explote
para tiempos grandes) como su positividad. Particularmente para = 1 (esquema de Euler implcito)
cualquier tamano del paso de integracion nos servira para asegurar ambas cosas. Para el esquema de
Crank Nicholson la estabilidad nos la garantizara cualquier tamano del paso pero la positividad nos
obligara a considerar tamanos inferiores a 2/k. Ello nos ampla el tamano del paso que puede ser tomado
respecto al esquema explcito (en el que la positividad y la estabilidad se aseguraban con tamanos inferiores
a 1/k).
y 0 (t) = 5 y
t>0
y(0) = 1
para distintos valores del paso de integracion. Comencemos con el metodo de Euler implcito que, en
este caso se formulara como:
y0 = 1
1 n
yn = ( 1+5 h) (n = 1, 2, 3...)
y que sera estable y positivo para todos los valores de h que se consideren. Como puede apreciarse las
soluciones, efectivamente siempre permanecen positivas y decrecen con el tiempo. Pero tambien puede
advertirse como su precision es mas pobre a medida que se aumenta el paso de integracion temporal.
Ademas la solucion es aproximada en exceso es decir con valores mayores que la exacta, a diferencia de
lo que suceda en el metodo explcito. Los resultados que se obtienen con el metodo de Euler Implcito y
con el metodo de Crank-Nicholson:
y0 = 1
yn = ( 10,5 5h n
1+0,5 5 h ) (n = 1, 2, 3...)
Procediendo como se hizo anteriormente para Euler explcito, para los mismos valores de hi, se ob-
tendran las graficas
Practicas con Octave 63
Se observa que todas las soluciones permanecen positivas y, ademas, metodo no parece tan sensible
al paso de integracion en cuanto a su precision. No obstante si sobrepasamos el lmite h = 2/k = 2/5 =
0,4, (ub4, uc4) especialmente en el metodo de Crank Nicholson, para el tamano del paso comenzaremos
a perder la positividad y a notar la influencia del valor de h.
Esta cualidad de los esquemas implcitos, poder considerar pasos de integracion mas amplios que en
los explcitos sin perder la estabilidad, permite pensar en abordar problemas que se planteen en dominios
[t0 , t0 + T] en los que T tome valores elevados. Piensese, por ejemplo, que la EDO y 0 = ky es la que
rige procesos de desintegracion de isotopos radiactivos que, por su peligrosidad hacia el entorno, pueden
requerir estudiarlos durante millones de anos lo que hara inviable la consideracion de pasos de integracion
excesivamente pequenos. Pero, lamentablemente, no todo es la estabilidad y la positividad de los esquemas
de calculo sino que, ademas, habra que prestar atencion a su precision se hara un poco mas adelante. Y
a otros problemas como el que se plantea en el ejemplo siguiente.
Ejemplo
y 0 (t) = y 3
t>0
y(0) = 1
1
La solucion analtica, es de variable separada, es y(t) = 1+t .
2
Las iteraciones de Euler implcito seran yn+1 + h yn+1 = yn
Para h=0.1, calculamos el valor aproximado para t1 = 0,1. y1 + 0,1 y12 = 1 y1 puede ser
-10.916 o 0.916079
Conociendo la solucion analtica es facil comprobar que la solucion correcta es la segunda, pero lo
normal es no conocer la solucion exacta. Como resolver este problema? En ausencia de criterios propios
Practicas con Octave 64
del problema no se puede descartar una solucion frente a otra. Por ello, en estos casos, lo aconsejable
es acudir a los metodos predictor-corrector en los que, en sntesis, se utiliza un metodo explcito para
(predecir) obtener el valor de partida con el que aplicar el metodo de resolucion de ecuaciones no lineales
a la ecuacion obtenida del esquema implcito que nos permite refinar (corregir) el valor aproximado de la
solucion finalmente obtenida. La aplicacion de esta forma de proceder a nuestro problema nos conducira
en el primer paso de integracion a: Fase de prediccion mediante Euler explcito:
(0)
y1 = y0 h y02 = 1 0,1 (1)2 = 0,9
Fase de correccion mediante Euler implcito (resolviendo por el metodo de aproximaciones sucesivas):
(iter+1)
y1 = y0 h (y1iter )2 (iter = 0, 1, 2, ...)
El tercer paso de integracion nos permitira calcular y3 y(0 3) consistira en: Fase de prediccion
mediante Euler explcito:
(0)
y3 = y2 h y22 = 0,8447239 0,1 (0,8447239)2 = 0,7733681
(iter+1)
Fase de correccion mediante Euler implcito y3 = y1 h (y3iter )2 (iter = 0, 1, 2, ...)
Practicas con Octave 65
de lo que obtendramos
(1)
y3 = 0,8447239 0,1(0,7733681)2 = 0,7849141
(2)
y3 = 0,8447239 0,1 (0,7849141)2 = 0,7831149
(3)
y3 = 0,8447239 0,1 (0,7831149)2 = 0,783397
(4)
y3 = 0,8447239 0,1 (0,783397)2 = 0,7833529
(5)
y3 = 0,8447239 0,1 (0,7833529)2 = 0,7833598
(6)
y3 = 0,8447239 0,1 (0,7833598)2 = 0,7833587
(7)
y3 = 0,8447239 0,1 (0,7833587)2 = 0,7833589
Esta estrategia puede extenderse a esquemas numericos muy diferentes, combinando un esquema
explcito de prediccion y un esquema implcito de correccion. Por ejemplo, si se deseara utilizar un
-metodo con > 0 para la fase correctora y el metodo de Euler explcito para la fase predictora, el
esquema de calculo sera: Fase predictora (Euler explcito):
(0)
yn+1 = y0 hn f (tn , yn )
As por ejemplo, se deja como ejercicio propuesto verificar que la estrategia de calculo anterior con = 0,5
aplicada al problema de valor inicial del ejemplo 3 conduce a los valores
De hecho algunos metodos de calculo muy utilizados en la practica, y que posteriormente nos reen-
contraremos, podran interpretarse como un esquema predictor corrector en los que se realizan pocas
iteraciones del metodo de aproximaciones sucesivas en la fase de correccion. Es el caso por ejemplo de
combinar el metodo de Euler explcito en la fase de prediccion y realizar una sola iteracion en la fase
correctora utilizando el metodo de Crank-Nicholson, lo que nos conduce a:
(0)
yn+1 = yn + hn f (tn , yn )
hn (0)
yn+1 = yn + (f (tn , yn ) + f (tn+1 , yn+1 ))
2
por lo que, resumiendo las dos etapas en una unica expresion resulta:
hn
yn+1 = y : n + (f (tn , yn ) + f (tn+1 , yn + hn f (tn , yn )))
2
Este esquema de calculo recibe el nombre de metodo de Heun y su generalizacion seran los metodos de
Runge-Kutta.
Los P.V.I. pueden formularse de una forma mas general para sistemas de ecuaciones diferenciales de
primer orden. Mas concretamente, siendo I un intervalo de IR de la forma [t0 , t0 + T ] y siendo f una
funcion continua definida en IxRm y con valores en Rm .
Practicas con Octave 66
La extension de los metodos numericos a problemas en los que intervenga un sistema de ecuaciones
diferenciales ordinarias es automatica y, en cuanto a su analisis, seran validos los teoremas y propiedades
que se presenten con la precaucion de emplear la metrica (normas) correspondiente en IRm.
Cabe senalar ademas que numerosos problemas de valor inicial se formulan mediante ecuaciones
diferenciales ordinarias de orden superior a 1 de la forma:
z1 (t) = y(t), z2 (t) = y 0 (t), z2 (t) = y 00 (t), ...., zp (t) = y (p1 (t)
Con el paquete Symbolic, dependera de la version de Phyton que tengamos instalada en el ordenador,
por eso voy a hacerlo en octave online. Si lo intentamos directamente en nuestro octave puede que nos
de problemas y solo nos resuelva los homogeneos. https://octave-online.net/ Con los sistemas lineales no
tendremos problemas.
( 2t
x0 = 2 x y e2t + cose 3 (t)
y 0 = 17 x + 6 y + 25 t2
Practicas con Octave 67
>> dsolve([e1,e2])
Pero con sistemas no lineales no funciona. Veamos con este ejemplo de una reaccion qumica:
teniendo en cuenta las condiciones iniciales y1 (0) = 1 e y2 (0) = 0 Utilizando Octave Online sera
Intentamos resolver el problema de la reaccion qumica con lsode Definimos la funcion, los valores
iniciales y el intervalo entre 0 y 60 con h = 0,1
>> endfunction
Resolvamos ahora el sistema anterior aplicando los otros metodos. Empezemos con Euler Explcito.
El planteamiento es el mismo, pero la funcion y los datos seran vectores. En primer lugar definimos la
funcion, para ellos utilizamos la funcion function / endfunction :
K1=1;
K2=1;
K3=1;
K=0;
RR(1)=-K1*R(1)*(R(1)-K)+K2*R(2);
RR(2)=-(K2+K3)*R(2)+K1*R(1)*(R(1)-K);
R=RR
>> endfunction
Se debe utilizar una variable auxiliar, en este caso RR, ya que sino, si hubiesemos puesto
R(1)=-K1*R(1)*(R(1)-K)+K2*R(2);
Practicas con Octave 70
R(2)=-(K2+K3)*R(2)+K1*R(1)*(R(1)-K);
al calcular R(2) ya R(1) se habra actualizado en el calculo de la lnea anterior. Definimos los valores
iniciales para este problema:
>> RA0=1
>> RC0=0;
>> t 0=0;
>> t f=60;
>> h=0.1;
Pulsamos q para que no salgan todos los ficheros. Podemos aplicar tambien del mismo modo Euler
Implcito y Crank-Nicholson
>> figure1
>> plot(t,Re,-.,t,Ri,-,t,Rc, o)
Obtenemos
En el caso de los sistemas no se cumple que el en del caso de que Euler Explcito e Implcito sean
convergente, Crank-Nicholson estara entre ambos, al menos en todas las variables.
0
x = xy
Ejemplo. Modelo de Epidemias. Sea la ecuacion y 0 = xy y , donde
0
z = y
x(t) representa a los individuos susceptibles, es decir, aquellos que no han enfermado anteriormente
y por lo tanto pueden resultar infectados al entrar en contacto con la enfermedad. El tiempo medido
en semanas
y(t) representa a los individuos infectados y por lo tanto en condiciones de transmitir la enfermedad
a los del grupo anterior x
z(t), por ultimo, representa a los individuos recobrados de la enfermedad, y que ya no estan en
condiciones ni de enfermar nuevamente ni de transmitir la enfermedad a otros.
Resolver para = 0,2 y = 0,7 en el intervalo [0, 5] sabiendo que al principio haba una persona infectada
en una poblacion de 20 habitantes. Que situacion habra en la semana 3.
sis(1) = -b*y(1)*y(2);
sis(2) = b*y(1)*y(2)-g*y(2);
sis(3)=g*y(2)
>>endfunction
Damos los valores iniciales, en un principio habra 1 enfermo, 19 sanos y nadie que haya pasado la
enfermedad, luego x = 19, y = 1, z = 0
Practicas con Octave 72
>> t=[0:0.1:5];
sis =
sis =
>> figure(1)
>> plot(t,y)
Y obtenemos
Observando los valores iniciales, vemos que x esta en azul, y en rojo y z en amarillo. Si queremos asignar
nosotros los colores:
En la semana 3, tendremos
>> t(31)
Practicas con Octave 73
ans = 3
>> y(:,1)(31)
ans = 0.27486
>> y(:,2)(31)
ans = 4.8994
>> y(:,3)(31)
ans = 14.826
>>function R=EPIDEMIA3(t,R)
>>endfunction
Obtenemos
Como vemos, en este caso Euler Implcito no da buenos resultados, y por tanto, tampoco lo dara
Crank-Nicholson.
Resolvamos una ecuacion de oden superior no lineal, en el estudio de algunas capas lmite de flujos
laminares aparece la denominada ecuacion de Blasius que es una EDO de tercer orden de la forma:
ejercicioblasius.m:
function Z=blasius(x,Z)
Z(1)= Z(2);
Z(2)=Z(3)
Z(3)= -Z(1)*Z(3);
return
resolucionblasius.m:
alpha=0.47
z0=[0 0 alpha];
x0=0;
xf=6;
h=0.1;
N=xf/h;
[x,Z]=feuler(fblasius, [x0,xf],z0,N);
umbral=inline(0.*x+1,x);
figure
plot(x,Z,x,umbral(x),.g);
title(perfil blasius)
Obteniendo
Practicas con Octave 76
Los metodos de Runge-Kutta representan el ejemplo mas clasico de los metodos de pasos libres.
Consideramos el problema de valor inicial (P.V.I.) y la subdivision del intervalo [t0 , tN ] generando los
puntos t0 < t1 < t2 < .... < tn < tn+1 < .... < tN , y con subintervalos [tn , tn+1 ] de longitud hn (n = 0, 1,
..., N - 1).
Siendo y(tn ) el valor de la solucion en tn , el valor exacto de la solucion en tn+1 puede estimarse
mediante la expresion: Z tn+1
y(tn+1 ) = y(tn ) + f (t, y(t))dx.
tn
Una forma de obtener aproximaciones de dicho valor consistira en aproximar la integral de la expresion
anterior mediante una formula de integracion numerica:
p
X
yn+1 = yn + hn aj f (tn,j , yn,j ),
j=1
donde p es el numero de puntos de integracion usados en la formula escogida, aj (j = 1, ..., p) son los
pesos de dicha formula, tn,j (j = 1, ..., p) son los p puntos pertenecientes al intervalo [tn , tn+1 ] que actuan
como soporte para la formula de integracion y, finalmente, yn,j son los valores (o una aproximacion de
ellos) de y(t) en los puntos tn,j . El problema que se plantea es como evaluar yn,j . Para ello, procediendo
de forma similar, se considerara que:
Z tn,j
y(tn,j ) = y(tn ) + f (t, y(t))dx j = 1, 2, ..., p,
tn
por lo que una aproximacion de dichos valores puede obtenerse, nuevamente, aproximando la integral
anterior. Y en los metodos de Runge-Kutta esta aproximacion se realiza utilizando los mismos puntos
que en la expresion anterior, es decir:
p
X
yn,j = yn + hn bi,j f (tn,i , yn,i ),
j=1
donde bj,k (j, k = 1, ..., p) es el peso otorgado al punto tn,k en la formula de integracion numerica utilizada
para aproximar el valor de y(t) en tn,j . Las expresiones dadas forman un sistema de (p+1) ecuaciones
en las que las incognitas son los p valores yn,j (j = 1, ..., p) y el valor yn+1 . El uso de una u otra formula
de integracion numerica en las expresiones conduce a muy distintos esquemas de tipo Runge-Kutta. Por
ello para definir una formula de Runge-Kutta se debe concretar cuales son los puntos tn,j (j =1, ..., p)
utilizados en las formulas de integracion numerica, cuales son los coeficientes aj y bj,k (j, k = 1, ..., p)
usados en las formulas. Habitualmente, los puntos tn,j se suelen definir mediante una expresion del tipo:
tn,j = tn + cj hn j = 1, ..., p
En dicha tabla designaremos por vector a, matriz B y matriz C al vector y matrices siguientes:
b1,1 b1,2 ... b1,p c1 0 ... 0
a1 b2,1
a1 b2,2 ... b2,p
0
c2 ... 0
a= . B= . . ... . , B = . . ... . .
. . ... . . . ... .
ap
bp,1 bp,2 ... bp,p 0 0 ... cp
Ejemplo de Runge-Kutta.
Puede disenarse un metodo de Runge-Kutta en el que la formula que nos proporcione yn+1 utilice la
formula de Simpson:
Z b
ba a+b
(x)dx (a) + 4 ( ) + (b)
a 6 2
Para ello, se tomara p = 3 y en el intervalo [tn , tn+1 ] los puntos de integracion seran:
tn,1 = tn ( c1 = 0)
tn,2 = tn + 0,5 hn ( c2 = 0,5)
tn,3 = tn + hn ( c3 = 1)
y los pesos de integracion en la formula considerada seran: a1 =1/6, a2 =4/6, a3 =1/6, resultando:
1 4 1
yn+1 = yn+1 + hn f (tn,1 , yn,1 ) + f (tn,2 , yn,2 ) + f (tn,3 , yn,3 )
2 6 6
Para emplear la formula anterior es necesario evaluar: yn,1 (= yn ),yn,2 e yn,3 . Para ello se sabe que:
yn,1 = yn
Rt
yn,2 = yn + tnn,2 f (t, y(t))dt
Rt
yn,3 = yn + tnn,3 f (t, y(t))dt
resultara:
yn,1 = yn ( b1,1 = 0, b1,2 = 0, b1,3 = 0)
yn,1 = yn + h4n (f (tn , yn ) + f (tn,2 , yn,2 )) ( b2,1 = 1/4, b2,2 = 1/4, b2,3 = 0)
yn,3 = yn + hn f (tn,2 , yn,2 ) ( b3,1 = 0, b3,2 = 1, b3,3 = 0)
La segunda de las expresiones anteriores es una ecuacion (en general no lineal) que debera resolverse
mediante algun metodo numerico como los presentados en el tema anterior. El esquema en forma de
tabla sera:
0 0 0 0
1/2 1/4 1/4 0
1 0 1 0
1/6 4/6 1/6
Practicas con Octave 78
El metodo de Euler, puede considerarse como un caso particular de los metodos de Runge-Kutta en
el que p = 1 y:
0 0
1
El algoritmo rk2 contiene el metodo de Heun, mientras que el algoritmo rk3 contiene el metodo de
Runge-Kutta de orden 3 dado por la tabla
0 0 0 0
1/2 1/2 0 0
1 1 2 0
1/6 4/6 1/6
El metodo de Euler modificado y el metodo de Heun. Siendo un numero real, el metodo dado por:
0 0 0
0
1 1
1 2 2
tn,1 = tn
tn,2 = tn + 0,5 hn
tn,3 == tn + 0,5 hn (= tn,2 )
tn,4 = tn + hn
y como vemos se repite el punto medio. Con los puntos as tomados, se considera yn,1 = yn . El valor
de yn,2 se evalua aproximando la integral correspondiente mediante la formula del rectangulo con soporte
en el extremo izquierdo del intervalo de integracion, es decir:
Z tn,2
hn
y(tn,2 ) = y(tn ) + f (t, y(t))dt yn,2 = yn + f (tn , yn )
tn 2
Practicas con Octave 79
El valor de yn,3 se calcula aproximando la integral correspondiente mediante la formula del rectangulo
pero esta vez con el punto de soporte en el extremo derecho del intervalo y tomando precisamente yn,2
como valor aproximado de la funcion y(t) en dicho extremo derecho:
Z tn,3
hn hn
y(tn,3 ) = y(tn ) + f (t, y(t))dt yn,3 = yn + f (tn + , yn,2 )
tn 2 2
En cuanto al valor de yn,4 lo evaluaremos aproximando la integral correspondiente mediante una formula
de punto medio, considerando como valor de y(t) en el punto medio del intervalo en el que se plantea la
formula el valor yn,3 que se acaba de calcular, es decir
Z tn +hn
hn
y(tn,4 ) = y(tn ) + f (t, y(t))dt yn,4 = yn + hn f (tn + , yn,3 )
tn 2
Por ultimo, el valor de yn+1 se evalua, con ayuda de los valores anteriores, aproximando la integral
correspondiente mediante una formula de Simpson en la cual el peso asignado al punto medio del intervalo
se reparte por igual entre las dos aproximaciones del valor de y(t) que hemos obtenido en dicho punto
medio (y(tn,2 e yn,3 ):
Z tn +hn
y(tn+1 ) = y(tn ) + f (t, y(t))dt
tn
hn
yn+1 = yn + (f (tn , yn ) + 2 f (tn,2 , yn,2 ) + 2 f (tn,3 , yn,3 ) + f (tn,4 , yn,4 ))
6
hn hn hn
= yn + (f (tn , yn ) + 2 (f (tn + , yn,2 ) + f (tn + , yn,3 )) + f (tn + hn , yn,4 ))
6 2 2
Metodo de Euler Implcito Mejorado es el metodo de Runge-Kutta definido mediante la tabla:
1 1
1
que es el metodo
yn,1 = yn + hn f (tn+1 , yn,1 )
yn+1 = yn + hn f (tn+1 , yn + hn f (tn+1 , yn,1 ))
En resumen, el algoritmo del metodo de Runge-Kutta clasico, esta definido, en cada paso, por las expre-
siones:
tn,j = tn + cj hn (j = 1, .., p)
X p
yn,j = yn + hn bi,j f (tn,i , yn,i ), (j = 1, .., p)
j=1
p
X
yn+1 = yn + hn aj f (tn,j , yn,j )
j=1
A la hora de realizar un algoritmo de un metodo como el anterior, computacionalmente es mas eficaz
denotar por:
p
X
Wn,j = f (tn,j , yn + hn bi,j Wn,i ), (j = 1, .., p)
j=1
con lo que:
p
X
yn+1 = yn + hn aj Wn,j .
j=1
Se trata de dos sistemas de ecuaciones, en general no lineales, el primero nos proporcionara los valores
de Wn,j en cada paso. Estos valores introducidos en el segundo nos determinaran la solucion aproximada
yn+1 . Facilmente puede comprobarse que ambas expresiones son equivalentes a las antes utilizadas para
describir el metodo.
Practicas con Octave 80
u(a) = ua , u(b) = ub
[x,u] = bvp(a,b,N,mu,eta,sigma,f,ua,ub)
en donde mu= , eta= , sigma= , f es una funcion inline y N es el numero de nodos internos (es decir,
N = (No. Intervalos) 1 = ba
h 1 en donde h es el paso de discretizacion.
En la salida, x = (x1 , . . . , xN +1 ) es el vector que contiene los puntos del mallado y u = (u1 , . . . , uN +1 )
contiene las aproximaciones obtenidas por el metodo en los puntos del mallado.
2u
u
= + f (x, t) (x, t) (0, L) (0, T )
t x2
u(x, t) = g(x, t) x = 0, x=L
x (0, L)
u(x, 0) = u0 (x)
[x,u] = heattheta(xspan,tspan,nstep,theta,mu,u0,g,f)
en donde
t 1
Observacion. El metodo es estable (1 2) .
(x)2 2
Captulo 8
Dado un vector cualquiera u los comandos de Octave max y min devuelven los valores maximo y
mnimo que contiene el vector u.
Por ejemplo, si definimos el vector u = (2, 3, 4, 5, 6, 5, 4, 3, 2, 1), entonces max(u) devuelve 6 y min(u)
devuelve 1:
u = [2,3,4,5,6,5,4,3,2,1]
max(u)
min(u)
[Max,PosMax] = max(u)
[Min,PosMin] = min(u)
en las variables Max y Min se almacenan el valor maximo y el mnimo de u respectivamente, y en PosMax
y PosMin se almacenan las posiciones de u en donde se alcanzan.
Dado un vector cualquiera u el comando find devuelve la posicion (dentro del vector) en la que se
encuantra uno o varios valores de u. Es importante tener en cuenta que en Octave los vectores empiezan
en la posicion 1.
find(u==6)
find(u==4)
81
Practicas con Octave 82
el primer comando devuelve el valor (posicion) 5 y el segundo comando devuelve los valores 3 y 7, que
son en efecto las posiciones en las que se encuentra el 4 dentro de u.
El comando find permite tambien recuperar las posiciones en donde los valores del vector verifican
alguna condicion >, <, >=, <=, =.
Por ejemplo, el comando
find(u>=4)
Forma alternativa de calcular posiciones. En la mayor parte de los problemas que trataremos, las
busquedas de posiciones las realizaremos en vectores que representan los mallados
que consideramos para resolver de manera numerica los problemas que se nos plantean. Es este caso, si
tomamos como constante el paso de discretizacion h (constante), podemos recuperar todos los puntos del
mallado dentro del vector t en la posicion m mediante la formula:
t(m) = t0 + (m 1)h
Por ejemplo, si queremos calcular la aproximacion obtenida a partir del metodo de Euler explcito en
un intervalo [1, 3] en el instante t = 1,6 habiendo tomado un paso de discretizacion h = 0,1, tenemos que
1,6 1
t(m) = 1 + (m 1)0,1 = 1,6 = m = +1=7
0,1
Captulo 9
de la siguiente forma >> x = linspace(-2, 3, 1000); >> y = (1 2 x). (x <= 1) + ((x + 1).3 +
2 x). (x > 1); >> plot(x,y) >> plot(x,y,.)
Las funciones definidas a trozos tambien pueden definirse usando la funcion Heaviside o funcion
escalon:
0 ,x < 0
H(x) = 1/2 , x = 0
1 ,x > 0
Para utilizarla en Octave usamos la funcion heaviside.m, la cual podremos combinar para construir todo
tipo de funciones definidas a trozos.
Por ejemplo, prueba a dibujar las siguientes funciones en el intervalo [0, 5] usando Octave:
f = inline(heaviside(x-2),x)
f = inline(heaviside(x-2)-heaviside(x-4),x)
f = inline(exp(x).*(heaviside(x-2)-heaviside(x-4)),x)
83
Practicas con Octave 84
Se puede calcular la transformada de Laplace con Octave Symbolic. Con la orden laplace(f(t),t,s) o
bien laplace(f) o laplace(f,s) se puede calcular la transformada de Laplace. La transformada inversa se
puede calcular con ilaplace.
>> syms t
>> laplace(f)
>> laplace(g)
>> ilaplace(G)
Captulo 10
Analisis Vectorial
>> x = 1 : 0,1 : 1;
>> y = x;
>> quiver(X, Y, F X, F Y );
85
Practicas con Octave 86
h i
y x z2
Del mismo modo podramos representar un campo en R3 , x2 +y 2 , x2 +y 2,1 + 2
>> W = Z.2 /2 + 1;
>> h = quiver3(X, Y, Z, U, V, W );
Del mismo modo podramos representar 0, 0, 9 x2 y 2
Vemos diversas representaciones que nos pueden ayudar en los ejercicios de Analisis Vectorial.
>> polar(x, y)
Una curva en parametricas [t cos(t), t sin(t)] se podra representar directamente con plot
>>grid( on);
>> ro = 3 5. theta;
>> plot(x, y)
Con la orden mesh se puede representarp una superficie, sus curvas de nivel con contour, o ambas cosas
en una sola grafica con meshc, para z = 9 + x2 + y 2 ,
Definimos la componente Z
Y representamos
Con la orden surf se pueden representar superficies en parametricas. Para representar un toro definimos
>> R = 2; r = 1;
>> Z = r sin(T );
Hay ordenes que representan directamente una superficie conocida, se pueden ver en
https://www.gnu.org/software/octave/doc/interpreter/Three 002ddimensional-Geometric-Shapes.html
Octave Symbolic nos permite diversos calculos de analisis vectorial como el gradiente, la divergencia
o el rotacional con las ordenes gradient, divergence o curl respectivamente.
>> syms x y z
>> F = [x2 x, y 2 z, x2 + y 2 + z 2 ]
>> divergence(F )
>> curl(F )
[2 y + 1]
[ 2 x ]
[ 0 ]
>> f = x2 y 3 + 3 x z
>> g = gradient(f )
[2*x + 3*z]
[ 3 y 2 ]
[ 3x ]
>> g1 = subs(g, x, y, z, 1, 2, 3)
Practicas con Octave 92
[-7 ]
[-12]
[3]
>> gx = subs(f x, x, y, z, 1, 2, 3)
>> gy = subs(f y, x, y, z, 1, 2, 3)
>> gz = subs(f z, x, y, z, 1, 2, 3)
>> f = 3 x2 4 y 2 ;
>> g = gradient(f );
>> gs = subs(g, x, y, 1, 2)
>> c1 = gs(1)/mg
>> c2 = gs(2)/mg
>> vpa(c1)
>> vpa(c2)
>> t1 = 3 : 0,2 : 3;
>> clabel(cn)
>> axisequal
Practicas con Octave 93
>> holdon