Manual Matlab
Manual Matlab
Cursos de Capacitación
MATLAB
Curso de Capacitación
Tabla de contenido
I NTRODUCCI ON
CAPI TULO 3
Copias impresas
Aplicaciones II (5 hrs)
CAPÍ TULO 2
Gráficos con Matlab (5 hrs) Raices de ecuaciones no lineales
Contornos
i
Introducción
INTRODUCCION
¿ Qué es MATLAB?
Fundamentos de Matlab
ESTE CURSO
>>
En estos momentos usted esta en MATLAB. Desde este punto, comandos individuales del
MATLAB pueden ser dados después del prompt (>>). Los comandos se activaran cuando los
introduzca y de un ENTER. Algunos ejemplos serán dados a continuación.
SALIR DE MATLAB
>> quit
o con el comando:
>> exit
1
M A T L A B
AYUDA EN LINEA
>> help
[lista todos tópicos de Ayuda]
>>!del SALIDA.DAT
VARIABLES
MATLAB tiene variables definidas tales como pi, eps, y ans. Usted puede
saber su valor desde él interprete de MATLAB.
# >> eps
eps =
2.2204e-16
>> pi
ans =
3.1416
>> help pi
PI 3.1415926535897....
PI = 4*atan(1) = imag(log(-1)) = 3.1415926535897....
2
M A T L A B
Asignación de variables:
# >> x = 3
x=
>> y = x^2
y=
El eco puede ser suprimido al agregar un punto y coma al final del renglón de
comandos.
# >> x = 3;
>> y = x^2;
>> y
y=
3
M A T L A B
# >> who
ans x y
# >> clear x
MATLAB usa alguna notación estándar. Más de un comando puede ser usado
en una línea, si ellos son separados por comas.
>> 2+3;
>> 3*4, 4^2;
! Las potencias tienen prioridad sobre las divisiones y las multiplicaciones, las
cuales se realizan antes de las sumas y las substracciones. Por ejemplo
>> 2+3*4^2;
4
M A T L A B
>> a = sqrt(2)
a=
1.4142
>> format long, b=sqrt(2)
b=
1.41421356237310
>> format short
" Comando de edición en línea: Las teclas de flechas pueden ser usados para
edición de comando en línea, los cuales pueden ser modificados si esto es
requerido, para corregir errores. Presione la flecha hacia arriba, y modifique el
comando tal que quede como:
>> 2+3*4^2/2
Los paréntesis pueden ser usados para agrupar términos, o hacerlo más claro.
Por ejemplo:
>> (2 + 3*4^2)/2
genera = 25.
5
M A T L A B
MATRICES
1 2 3 4
5 6 7 8
9 8 7 6
define una matriz con 3 renglones y 4 columnas, con 12 elementos.
MATLAB trabaja, esencialmente, solo con una clase de objeto, una matriz
numérica rectangular, con entradas complejas. Cada variable en MATLAB es
referida como una matriz [un número es una matriz de 1 por 1]. En algunas
situaciones, las matrices de 1-por-1 son interpretados como escalares y las
matrices con un solo renglón o una sola columna son interpretados como
vectores.
6
M A T L A B
En una aplicación típica, las matrices A y B deberán ser definidas por los
parámetros del problema de ingeniería, y la matriz solución X será calculada.
hace que el lado izquierdo de la ecuación matricial (i.e., A.X) sea igual al lado
derecho de la matriz (i.e., matriz B). Pronto veremos como resolver este
sistema de ecuaciones en MATLAB (ver ejemplo abajo).
MATLAB esta diseñado para manejar matrices y para manipular matrices tan
simple como sea posible.
7
M A T L A B
>> A = [1 2 3; 4 5 6; 7 8 9];
>> A = [ 1 2 3
4 5 6
7 8 9]
! Note que:
8
M A T L A B
Al igual que con las variables, usamos el punto y coma con las matrices
podemos suprimir el eco. Esta característica puede ser explícitamente útil
cuando se utilizan matrices muy grandes que nosotros generamos en pasos
intermedios de nuestros cálculos.
MATLAB tiene muchos tipos de matrices las cuales pueden ser reconstruidas
dentro del sistema e.g.,
Función Descripción
! =============================================
diag regresa la diagonal principal de una matriz como un vector
eye matriz identidad
hilb matriz de Hilbert
magic cuadrado mágico
ones matriz de unos
rand generador de matrices aleatorias
triu parte triangular superior de una matriz
tril parte triangular inferior de una matriz
zeros matriz de ceros
=============================================
# >> rand(3)
ans =
0.0470 0.9347 0.8310
0.6789 0.3835 0.0346
0.6793 0.5194 0.0535
>>
9
M A T L A B
>> rand(m,n);
# >> magic(4)
" ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>>
10
M A T L A B
=============================================
>> A'
ans =
1 4 7
2 5 8
3 6 9
# >> B = [1+i 2 + 2*i 3 - 3*i]'
B=
1.0000 - 1.0000i
2.0000 - 2.0000i
3.0000 + 3.0000i
>>
Por ejemplo:
11
M A T L A B
16.0000 -38.0000
>>
Las funciones matriciales "any" y "all": Existe una función para determinar
si existe al menos una entrada no cero en la matriz, any, tan bien existe una
función para determinar si todas las entradas de una matriz son no cero, all.
# >> A = zeros(1,4)
" >> any(A)
>> D = ones(1,4)
>> any(D)
>> all(A)
12
M A T L A B
round, fix, ceil, y floor. Los siguientes ejemplos trabajan con dichos
comandos.
* , ^ , \ , y /,
[1,2,3,4].*[1,2,3,4]
ans =
1 4 9 16
" [1,2,3,4].^2
13
M A T L A B
AX=B
! >> X=A\B
>> X=B/A
EJEMPLO NUMERICO
# >> A = [ 3 -1 0; -1 6 -2; 0 -2 10 ];
>> B = [ 1; 5; 26 ];
>> X = A \ B
X=
1.0000
2.0000
3.0000
>>
14
M A T L A B
A*X ==> B
Y A*X - B ==> 0
>> A*X
ans =
1.0000
5.0000
26.0000
>> A*X - B
ans =
1.0e-14 *
0.0444
-0.2665
-0.3553
>>
ESTRUCTURAS DE CONTROL
El incremento por default es 1 por 1, pero esto puede ser cambiado. Por
ejemplo:
>> x = -3 : .3 : 3
x=
Columns 1 through 7
-3.0000 -2.7000 -2.4000 -2.1000 -1.8000 -1.5000 -1.2000
Columns 8 through 14
15
M A T L A B
Esto puede ser leído como: "x es el nombre de la lista, la cual comienza en -3,
y se incrementa con pasos de 0.3, hasta llegar a 3." Se puede pensar en una lista
como un vector renglón”.
>> x = [0.0:0.1:2.0]' ;
>> y = sin(x);
>> [x y]
Tratar esto. Notar que la función seno cuando opera con vectores, esto
produce también un vector.
La notación de dos puntos puede ser combinada con los métodos anteriores
de construcción de matrices. Por ejemplo:
OPERADORES LÓGICOS
Operador Descripción
< Menor que
> Mayor que
<= Menor o igual
>= Mayor o igual
== Igual
~= Diferente.
Nótese que "=" se usa para asignar un valor a una variable, mientras que
"==" se usa como un operador
Diferentes relaciones se pueden conectar mediante los operadores lógicos
Operador Descripción
& y
| o
~ no
16
M A T L A B
3<5
ans =
1
>> a = 3 == 5
a=
0
>>
# >> A = [ 1 2; 3 4 ];
>> B = [ 6 7; 8 9 ];
>> A == B
ans =
0 0
0 0
>> A < B
ans =
1 1
1 1
>>
Para que veas como funciona un operador lógico, debes intentar las siguientes
instrucciones:
>> ~A
>> A&B
>> A & ~B
>> A | B
>> A | ~A
CONDICIONALES
17
M A T L A B
if <condición>,
<programa>
end
# >> a = 1;
>> b = 2;
>> if a < b,
c = 3;
end;
>> c
c=
3
>>
if <condición1>,
<programa1>
else
<programa2>
end
if <condición1>,
<programa1>
elseif <condición2>,
<programa2>
end
18
M A T L A B
CICLOS
ejemplo
for i= 1 : n,
<programa>,
end
El programa repetirá <programa> una vez para cada valor del índice i, es
decir, para i=1,2,3,…,n.
# >> for i = 1 : 5,
c = 2*i
end
c=
2
c=
4
.....
c=
10
>>
En este programa hay dos ciclos for, uno anidado en el otro, que construyen la
siguiente matriz:
19
M A T L A B
es correcto.
while <condición>,
<programa>,
end
# function h=factorial(n)
h=1;
m=n;
20
M A T L A B
while m>=2
h=h*m;
m=m-1;
end
$ ALGUNAS NOTAS
if A == B
<instrucciones>
end
if any(any(A ~ B))
<instrucciones>
end
o simplemente
if A == B else
<instrucciones>
end
SUBMATRICES
! Ya hemos visto como los dos puntos ":" pueden ser utilizados para generar
vectores. Otro uso común de los dos puntos es el de extraer renglones y/o
columnas de una matriz, por ejemplo:
A(1:4,3)
A(:,3)
21
M A T L A B
A(1:4,:)
A(:,[2 4])
reemplaza las columnas 2,4 y 5 de la matriz A por las tres primeras columnas
de la matriz B.
# >> V=[0 1 0 1 1]
>> A(:,V)
>> A(V,:)
ESCRITURA DE PROGRAMAS
! LOS M-FILES
mi_prog.m
22
M A T L A B
>> mi_prog
# [x y] = meshgrid(-3:.1:3, -3:.1:3);
z = x.^2 - y.^2;
mesh(x,y,z);
>> prueba
A = [2 3 4; 5 6 7; 8 9 0]
inv(A)
el comando
>> matriz
>> path
23
M A T L A B
type <función>
por ejemplo:
# >>type mean
# function raiz2(x)
% RAIZ2(X) calcula la raíz cuadrada de X mediante el método de
Newton
% Valor inicial
xinicio = 1;
for i = 1:100
xnueva = ( xinicio + x/xinicio)/2;
disp(xnueva);
if abs(xnueva - xinicio)/xnueva < eps, break, end;
xinicio = xnueva;
end
24
M A T L A B
Las primeras líneas que tienen un "%" al principio son comentarios que
permiten al usuario tener ayuda directa mediante el comando help:
Ejemplo 2 : Una función puede tener varios argumentos de entrada y/o salida
[m n] = size(x);
if m == 1
m = n; % para el caso de un vector
end
mean = sum(x)/m;
stdev = sqrt(sum(x.^ 2)/m - mean.^2);
Nótese que la media y desviación estándar son calculadas dentro del cuerpo de
la función.
# >> y = [1:10];
>> [ym, yd] = stat(y)
ym =
5.5000
yd =
2.8723
>>
25
M A T L A B
>> xm = stat(x)
# function a = mcd(a,b)
a = round(abs(a));
b = round(abs(b));
if a == 0 & b == 0
error('mcd no esta definido si ambos números son cero')
else
while b ~= 0
r = rem(a,b);
a = b; b = r;
end
end
Por ejemplo,
26
M A T L A B
27
2
M A T L A B
Capítulo
GRÁFICOS
! En Matlab se pueden crear gráficas 2-D y 3D, a las cuales se les puede poner
título, etiquetas y textos dentro de ellas. Las funciones básicas de gratificado
son:
Función Descripción
plot(x,y) gráfica y vs x
plot(x,y1,x,y2,x,y3) gráfica y1, y2 y y3 vs x en la misma gráfica
xlabel('texto') etiqueta el eje x
ylabel('texto') etiqueta el eje y
title('texto') pone un título en la gráfica
gtext('texto') activa el mouse para colocar un texto en cualquier parte de la gráfica
presionando cualquier tecla (o botón)
print archivo.ps guarda la gráfica como un archivo postscript blanco y negro.
Por default, MATLAB imprime una sola gráfica en pantalla por ventana, para
poder imprimir dos o mas gráficas en la pantalla, existe el comando subplot.
Teclea
28
M A T L A B
>> ylabel('seno(x)')
# >> x = 0:.01:2*pi;y1=sin(x);y2=sin(2*x);
>> y3 = sin(4*x);plot(x,y1,x,y2,x,y3)
de la misma forma, se puede definir una matriz Y que contenga los valores de
la función en forma de columnas
Otra forma de hacerlo, es mediante el uso del comando hold. Este comando
mantiene activa la misma gráfica de tal forma que los siguientes comandos de
graficado se aplicaran sobre ella misma. Intenta realizar lo siguiente:
>> x = 0:.01:2*pi;y1=sin(x);y2=sin(2*x);
>> y3 = sin(4*x);plot(x,y1); hold on;
>> plot(x,y2); plot(x,y3); hold off
! =============================================
Sólida (-), no continua (-). dos puntos (:), línea-punto (-.)
Marcas : punto (.), cruz (+), asterisco (*), círculo (o),
equis (x)
=============================================
29
M A T L A B
>> x=linspace(-3,10,400);
>> y=exp(-x.^2);
>> plot(x,y)
El comando box off te ayudará si no quieres que una caja rodee a tu gráfica.
30
M A T L A B
>> t=(1:2:15)’*pi/8;
>> x=sin(t);
>> y=cos(t);
>> fill(x,y,’r’ );
>> axis square off
>> text(0,0,’ALTO’,’Color’,[1 1 1],’fontSize’,60,’HorizontalAlignment’,’Center’);
GRAFICAS TRIDIMENSIONALES
31
M A T L A B
Para poder crear una malla, la función meshgrid, crea una matriz x, de la cual
cada uno de los renglones equivale al vector xx, y la longitud de sus columnas
es del mismo largo que el vector yy. De la misma forma se crea una matriz y,
cuyos renglones son yy, y el largo de sus columnas el la longitud de xx:
Una vez creada la malla, uno puede definir la matriz z sobre el plano x-y. Por
ejemplo, para graficar la función:
2 2
z =e−( x + y )
# >> xx = -2:.1:2;
>> yy = xx;
>> [x,y] = meshgrid(xx,yy);
>> z = exp(-x.^2 - y.^2);
>> mesh(z)
Existen otras funciones para graficar en tres dimensiones, como son surf,
plot3, comet, etc…
! CONSIDERACIONES GENERALES
>> casesen
32
M A T L A B
Si quieres guardar en un archivo las variables que has utilizado en una sesión,
para poderlas utilizar posteriormente, simplemente teclea:
archivo.mat
que contiene los valores de las variables que utilizaste en tu sesión. Si quieres
guardar únicamente ciertas variables, puedes hacer lo siguiente
>> save x
>> save y
de tal forma que se crean los archivos x.mat y y.mat con los valores de estas
variables.
>> diary on
33
M A T L A B
y
>> diary off
respectivamente.
------------------------------------------------------------------------
34
M A T L A B
3
Aplicaciones
Algebra lineal
Matlab fue escrito, originalmente, para proveer una interfase de fácil uso para
utilizar las herramientas del álgebra lineal.
Uno de los problemas más comunes del álgebra lineal es la solución de un conjunto
de ecuaciones lineales. Por ejemplo, consideremos el siguiente sistema,
1 0 2 − 1 3
0 x1
1 1 0 x
5
3 2 0 − 2 2 = − 1
x3
0 0 −1 4 13
2 0 − 1 3 x4 11
35
M A T L A B
Como un recordatorio de álgebra lineal, es fácil mostrar que este problema tiene
una única solución si el rango de la matriz A y el rango de la matriz aumentada [A
B] son ambos iguales.
>> rank(A)
x = A−1B
>> x=inv(A)*B
>> x=A\B
[ Ax]T = B T
que puede ser rescrito como:
x T AT = B T
por lo que al tratar de resolverlo con Matlab este se tendría que escribir como:
>> B’/A’
lo que dará el mismo resultado, pero con la característica que se utilizó la división
normal de Matlab.
2 4 x1 6
2 4.0001 x = 6.0001
2
36
M A T L A B
2 4 x1 6
2 4.0001 x = 6
2
2 4 x1 6
2 3.9999 x = 6.0001
2
Esto se debe a que la matriz A está mal condicionada, esto se puede investigar con
el comando cond(matriz) de Matlab. Investigar como funciona.
Ax = λx
La traza de una matriz está definida como la suma de los elementos de la diagonal
principal, esta puede ser calculada con la función trace(A).
Las matrices sparce se definen como aquellas matrices donde la mayoria de los
elementos son cero, esto es importante porque si sabemos que muchos de los
elementos son cero entonces podemos, en principio, ahorrar espacio de disco al
definir la matriz como una matriz sparce, Matlab tiene el comando adecuado para
ello, sparce(A), lo que da como resultado la misma matriz, pero con la ventaja de
que se ahorra espacio, pero es necesario realizar operaciones con matrices que sean
sparce.
El siguiente ejemplo es para que se vea una comparación de utilizar o no este tipo
de almacenamiento,
>> B=eye(20);
>> BP=sparce(B);
>> whos;
37
M A T L A B
Integración numérica
Tanto la integración como la diferenciación son herramientas fundamentales en el
cálculo. La integración, en términos generales, calcula el área bajo la curva mientras
que la diferenciación describe la pendiente o el gradiente de una función. Matlab
provee de funciones para aproximar numéricamente las integrales y las pendientes
de una función. Las funciones estan escritas para calcular las integrales cuando la
función en cuestión está escrita en un m-file.
Matlab cuenta con tres funciones para este propósito: quad, quad8 y dblquad (para
versiones mayores de 4).
>> x=-5:2:5;
>>y=exp(-x.^2);
>>area=trapz(x,y)
>>integral=area/sqrt(pi)
Esta es una aproximación porque se han tomado pocos puntos bajo la curva y por
lo tanto está no ha sido bien definida. Probemos con lo siguiente:
>> x=linspace(-5,5,100);
>> y=exp(-x.^2);
>> area=trapz(x,y)
>> integral=area/sqrt(pi)
∫ f (x )dx
x
>> z=cumtrapz(x,y);
38
M A T L A B
>> plotyy(x,y,x,z)
Ajuste de curvas
El ajuste de curvas está muy relacionado con los polinómios, así que primero
veamos una introduccióna los mismos.
an x n + an − 1x n − 1 + an − 2 x n − 2 +...+ a1x + ao = 0
En Matlab es fácil expresar polinomios, porque sólo basta con definir sus
coeficientes. Por ejemplo,
Si uno quiere encontrar las raíces de este polinomio solo basta utilizar el siguiente
comando:
>> R=roots(C )
>> pp=poly(R )
39
M A T L A B
que
>> pp=poly(abs(R )<1e-12)=0 % esto cambia los elementos más pequeños a cero
>> conv(C1, C2 )
La suma de dos polinomios solo basta con sumar sus coeficientes, pero debemos
estar seguros que ambos coeficientes tienen la misma longitud.
function p=mmpadd(a,b)
% Suma de polinomios A y B
if nargin<2
end
a=a(: )’; b=b(: )’; % Esto asegura que los vectores sean vectores renglon
na=length(a); nb=length(b);
su uso será
>> f=mmpadd(g,t)
>> polyder(C1)
>> x=linspace(-1,3,100);
>> plot(x,y)
40
M A T L A B
Ajuste de curvas
En numerosas aplicaciones del área, uno se enfrenta al ajuste de los datos medidos
a una curva característica. Algunas veces uno escoge la curva que pase por todos
los puntos, pero en otras ocaciones uno escoge la más cercana a los datos, no
necesariamente pasando por todos los puntos. A este método se le conoce como
mínimos cuadrados.
>>x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];
>> y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
Para usar el polyfit es necesario dar el orden o grado del polinomio para buscar el
mejor ajuste. Sinosotros escogemos n=1 como el orden, se buscará la mejor línea
recta posible, es decir se realizará una regresión lineal, por otro lado, si escogemos
n=2, un polinomio cuadrático será ajustado a los datos.
>> n=2;
>> p=polyfit(x,y,n)
>> xi=linspace(0,1,100);
>> yi=polyval(p,xi);
Interpolación
La interpolación es una manera de estimar los valores de una función entre un
conjunto de datos dados.
41
M A T L A B
>> x2=linspace(0,2*pi,6);
De las dos gráficas de la función seno la que utiliza 60 puntos es más ocurrente que
la que utiliza 6 puntos.
T Beta Alfa
Interpolación bi-dimensional
Esto se aplica a relaciones dadas por z=f(x,y). Para ilustrar el uso de este tipo de
interpolación pongamos un ejemplo donde nos dan las profundidades del fondo
del océano obtenidas con un ecosonda, los puntos han sido obtenidos con un
muestreo cada 0.5 km en un arreglo rectangular.
42
M A T L A B
>> x=0: .5 : 4;
>> y=0: .5 : 6;
>> mesh(x, y, z)
>> [xxi,yyi]=meshgrid(xi,yi);
>>mesh(xxi,yyi,zzi)
43
M A T L A B
Podemos encontrar la posición del pico más alto con las siguientes
ordenes:
>> x= rand(1,12)*10 ;
>> y= rand(1,12)*10 ;
>> z= zeros(1,12);
El siguiente comando localiza los indices de los puntos más cercanos para
la formación de triángulos:
>> trimesh(tri, x, y, z)
Uno puede graficar sólo el contorno de los puntos externos con la serie
de comandos:
>> plot(x( k ), y( k ))
>> z= rand(1,12);
44
M A T L A B
45
M A T L A B
4
Aplicaciones II
Raíces de ecuaciones no lineales
Las soluciones de una ecuación escalar, f(x)=0, se llaman ceros o raíces de f(x).
Existen varios métodos numéricos para estimar la solución de dichas ecuaciones,
aquí veremos algunos de ellos.
Ejemplo: El factor de fricción f para los flujos turbulentos en una tubería está
dado por
1 e 9.35
. − 2 log10 +
= 114
f D Re f
METODO GRAFI CO
Supongamos que deseamos encontrar las raíces de la ecuación anterior, uno de los
métodos más rápidos pero menos precisos es el método gráfico.
Tenemos que escribir la ecuación de tal forma que esté igualada a cero es decir,
f(x)=0, donde x es la variable a buscar.
46
M A T L A B
>> D=0.1;
>> e=0.0025;
>> Re=30000;
>> x=0.01:.01:1;
>> plot(x,y)
>> grid
Este es un método sencillo pero muy versátil para encontrar una raiz en un
intervalo dado en el que se sabe existe una solución. Puede ser utilizado como
complemento del método gráfico.
Supongamos que existe una raíz de f(x)=0 en el intervalo entre x=a y x=c,
denotado por [a,c] o, de forma equivalente a ≤ x ≤ c . El método se basa en el
hecho de que cuando hay una raíz en el intervalo, el signo de la función a ambos
lados de la raíz tienen signos contrarios. El primer paso del método consiste en
encontrar el punto medio del intervalo dado:
a+c
b=
2
El siguiente programa ilustra los pasos a seguir, para ello es necesario escribir la
función a resolver en una función m-file y entonces correr el siguiente programa:
47
M A T L A B
M E T O D O D E N E W T O N
El algoritmo es el siguiente:
f ( xk − 1 )
xk = xk − 1 −
f ' ( xk − 1 )
Matlab tiene una función para la búsqueda de raíces de una función dada.
Investigar la función fzero.
48
M A T L A B
E C U A C I O N E S D E P R I M E R O R D E N
y ' (t ) = f ( y , t ) , y ( 0) = yo
dv ( t )
M = − Faire + gM
dt
dv (t ) ∆v ( t ) v ( t + ∆t ) − v ( t )
≈ =
dt ∆t ∆t
C 2
v (t + ∆t ) ≈ v (t ) + ∆t − v (t ) + g
M
Usemos ahora una de las funciones que tiene matlab para este mismo proceso:
ode23 y ode45.
49
M A T L A B
A P L I C A C I O N E S A L A O C E A N O G R A F I A
gT 2 2πd
λ= tanh
2π λ
function y=longonda(x )
global T d
g=9.81;
y= g*T*T/(2*pi)*tanh(2*pi*d/x)-x ;
Ahora supongamos que se nos pide hacer un diagrama T-S, muy común para los
datos de algún crucero oceanográfico. Lo que necesitamos primero es hacer el
diagrama T-S y después vaciar los datos en el diagrama, es decir, necesitamos una
función que calcule la densidad del agua de mar para diferentes temperaturas y
salinidades a una profundidad cero. Tenemos suerte porque esa función ya existe y
se llama sw-dens0, y se basa en el polinomio propuesto por la UNESCO.
50
M A T L A B
Procedimiento:
load datos.dat
To=datos(:,1);
So=datos(:,2);
S=30:.2:36;
T=5: .5 :35;
[SS,TT]=meshgrid (S, T);
DEN=sw_densi0(SS, TT)-1000;
[c,h]=contour(S, T, DEN);
clabel(c,h,’manual’ )
= ( a − bx − cy)x
dx
dt
dy
= ( − d + ex) y
dt
dx
dt a − bx − cx x
dy = ey
− d y
dt
function w=pobla( t, z )
a=10; b=1e-5; c=0.1; d=10; e=0.1;
w=[ (a-b.*z(1) , -c.*z(1) ; e.*z(2) , -d ]*[z(1) ; z(2) ];
Ahora podemos hacer el programa principal, que mande llamar a esta función.
51
M A T L A B
%Depredador Presa
to=[0,3];
N=[10, 5];
[t , y ]=ode45( ‘pobla ‘, to, N );
plot( t, y)
pause
plot ( y(:,1), y(:,2))
∇ 2ψ = 0
d 2 y y ( t + ∆t ) − 2 y ( t ) + y ( t − ∆t )
=
dt 2 ∆t 2
Si hacemos esto, podemos demostrar que la ecuación anterior nos quedará como:
ψ (i + 1, j ) + ψ (i , j + 1) + ψ (i − 1, j ) + ψ (i , j − 1) = 4ψ (i , j )
%
% programa para ver solucion de laplaciano=0
N=20; M=20;
phi=zeros(N,M);
ax=ones(N,1);
ay=ones(1,M);
% Condiciones de frontera
phi(:,M)=15.*ax(:,1);
phi(:,1)=20.*ax(:,1);
52
M A T L A B
phi(1,:)=5.*ay(1,:);
phi(N,:)=10.*ay(1,:);phin=phi;
% Graficado
h=imagesc(phi);colorbar; set(h,'erasemode','xor');
flag=1;
% Ciclo de solucion iterativa
while flag==1
phin(2:N-1,2:M-1)=0.25*(phi(3:N,2:M-1)+phi(1:N-
2,2:M-1)+...
phi(2:N-1,3:M)+phi(2:N-1,1:M-2));
% Condicion de terminacion de iteracion
if sum(sum(abs(phi-phin)))<0.1; flag=2;break;end
phi=phin;
set(h,'cdata',phi);drawnow
end
% Solucion es phi
53
M A T L A B
REFERENCIAS
54