proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
Cálculo Numérico Asistido con el Software Matemático MatLab.
1. Lima, Agosto del 2011.
Fundamentos de C´lculo Num´rico Asistido con el Software
a e
Matem´tico MatLab.
a
Jos´ Walter Ysique Quesqu´n 1
e e
jwysiqueq@pucp.edu.pe
Resumen
Se presenta una peque˜a gu´ orientada a encontrar la soluci´n num´rica de problemas
n ıa o e
matem´ticos usando el software MatLab.
a
Palabras clave: MatLab, polinomio, funci´n, interpolaci´n, derivada, integral, ecuaciones
o o
diferenciales.
Abstract
There is little guidance aimed at finding the numerical solution of mathematical problems
using the software MatLab.
Keywords: MatLab, polynomials, functions, interpolation, derivative, integral, differential
equations.
————————————————————————————————————————
1 Magister en Matem´ticas
a
3. 1 Introducci´n al Matlab:
o
MatLab es un paquete de software matem´tico basado en matrices, consiste de una extensa biblioteca
a
de rutinas num´ricas, con las cuales se puede realizar diferentes operaciones de c´lculo, adem´s de
e a a
gr´ficos en dos y tres dimensiones. Tambi´n consta de un formato de programaci´n de alto nivel
a e o
que nos permite elaborar programas con facilidad a fin de examinar y ejecutar los algoritmos que se
presentan en el an´lisis num´rico.
a e
1.1 Funciones Aritm´ticas:
e
Suma +
Sustracci´n
o -
Multiplicaci´n
o *
Divisi´n
o /
Potencia ˆ
Ejemplo 1. >> 4+2
ans = 6
>> 5^2
ans = 25
1.2 Funciones Predefinidas:
NOMBRE COMANDO SINTAXIS
funci´n signo
o sign sign(X)
Resto despu´s de dividir
e rem rem(x,y)
n´ mero entero pr´ximo hacia el infinito negativo
u o floor floor(A)
n´ mero entero pr´ximo hacia el infinito positivo
u o ceil ceil(A)
M´ximo com´ n divisor
a u gcd gcd(A,B)
M´ ınimo com´ n m´ ltiplo
u u lcm lcm(A,B)
Valor absoluto, magnitud compleja abs abs(x)
Suma de elementos de un vector sum sum(A)
M´ ınimo elemento de un vector min min(A)
M´ximo elemento de un vector
a max max(A)
Valor promedio de los elementos de un vector mean mean(A)
Producto de los elementos de un vector prod prod(A)
Traza de una matriz trace trace(A)
factorial de un n´ mero
u factorial factorial(N)
valores y vectores propios de la matriz A eig [V,D]=eig(A)
funci´n logaritmo natural
o log log(X)
funci´n ra´ cuadrada
o ız sqrt sqrt(x)
1
4. NOMBRE COMANDO SINTAXIS
funci´n seno
o sin sin(x)
funci´n coseno
o cos cos(x)
funci´n tangente
o tan tan(x)
funci´n cotangente
o cot cot(x)
funci´n secante
o sec sec(x)
funci´n cosecante
o csc csc(x)
inversa de la funci´n seno
o asin asin(x)
funci´n exponencial
o exp exp(x)
Ejemplo 2. Calcular M= sen2 (3π/4) + | − 5|.
>> M=sqrt((sin(3*pi/4))^2+abs(-5))
M =
2.3452
2 Polinomios.
Dado un polinomio en una variable P (x) = ax2 + bx + c, en matlab, este polinomio se puede
representar por el vector formado por sus coeficientes (considerando el polinomio completo), esto es,
P = [a b c] . Tal representaci´n vale cualquiera que fuera el grado del polinomio.
o
Ejemplo 3. Dados los polinomios p(x) = 8x3 + 5x + 3 y q(x) = x2 + 3x + 1 . Hallar:
a) El valor de p(x) en x = 20.
b) El producto de p(x) y q(x) .
c) El cociente y el resto que resulta de p(x) ÷ q(x) .
d) La derivada del polinomio p(x) .
Soluci´n:
o
Usando Matlab:
>> p=[8 0 5 3];
>> q=[1 3 1];
a) >> polyval(p,20)
ans = 64103
b) conv(p,q)
ans = 8 24 13 18 14 3
c) >> [c,r]=deconv(p,q)
c = 8 -24
r = 0 0 69 27
2
5. d) >> polyder(p)
ans = 24 0 5
Tambi´n puede usar el comando syms para declarar la variable o variables que se est´ usando,
e a
y proceder de la siguiente manera si queremos por ejemplo, hallar p(x) ∗ q(x) :
>> syms x y
>> p=8*x^3+5*x+3;
>> q=x^2+3*x+1;
>> expand(p*q)
ans = 8*x^5+24*x^4+13*x^3+18*x^2+14*x+3
>> pretty(ans)
5 4 3 2
8 x + 24 x + 13 x + 18 x + 14 x + 3
* El comando pretty lo que hace es presentar de forma usual, en este caso, el producto de dos
polinomios.
3 Busqueda de los Ceros de una Funci´n.
o
Para averiguar si una determinada funci´n tiene o no ceros (tambi´n llamadas raices) en un intervalo
o e
dado, se debe tener presente el Teorema de Bolzano. En MatLab para hallar los ceros de una funci´n
o
en un determinado intervalo se puede hacer con el comando fzero.
Ejemplo 4. Encontrar los ceros de la funci´n f (x) = (x2 + x − 1)sen(x) en el intervalo [0.5, 2] .
o
Soluci´n:
o
Se recomienda primero hacer un gr´fico de la funci´n y luego identificar el intervalo o los intervalos
a o
donde existe un cero y finalmente usar fzero.
>> x=-2:0.01:2;
>> y=(x.^2+x-1).*sin(x);
>> plot(x,y),grid
Figura 1:
3
6. >> fzero(’(x^2+x-1)*sin(x)’,[0.5,2])
ans = 0.6180
Cuando se trata de funciones polinomicas, los ceros se hallan usando el comando roots.
Ejemplo 5. Hallar los ceros de la funci´n p(x) = 5x4 + 6x2 + 8x − 4 .
o
Soluci´n:
o
>> x=-5:0.01:5;
>> p=[5 0 6 8 -4];
>> roots(p)
ans = 0.3300 + 1.3860i
0.3300 - 1.3860i
-1.0393
0.3792
Observe que dos de los ceros de p(x) son n´ meros complejos.
u
Usamos la siguiente sintaxis en Matlab para generar en un apropiado intervalo, el gr´fico de p(x),
a
en donde se visualiza la ubicaci´n de los dos ceros reales.
o
>> x=-2:0.01:2;
>> p=5*x.^4+6*x.^2+8*x-4;
>> plot(x,p),grid
Figura 2:
4 Matrices
2 4 1 6
Por ejemplo, si queremos ingresar en MatLab la matriz A = 3 5 0 1 , se procede de la
67 5 10 9
siguiente manera:
Se ingresa:
4
7. >> A=[2 4 1 6;3 5 0 1;67 5 10 9]
Se muestra:
A =
2 4 1 6
3 5 0 1
67 5 10 9
Al ingresar la matriz, cada espacio en las filas tambi´n se puede reemplazar por una coma.
e
4.1 Operaciones con Matrices:
Suma A+B
Resta A-B
Multiplicaci´n
o A*B
Donde A y B son matrices que deben cumplir las condiciones necesarias para que exista la operaci´n
o
matem´tica en cada caso.
a
4.2 Funciones Definidas que Involucran Matrices:
• transpose(A) transpuesta de la matriz A
• inv(A) inversa de la matriz A,
• eye(n) genera una matriz identidad de orden n,
• ones(n) genera una matriz de orden n con elementos todos 1,
• A(m,n) extrae de la matriz A el elemento ubicado en la fila m y en la columna n,
• [m, n]=size(A) se˜ ala el n´ mero de filas y columnas de la matriz A.
n u
5 Soluci´n de un Sistema de Dos Ecuaciones con Dos
o
variables.
5.1 Sistema de Ecuaciones Lineales.
Dado el sistema:
a11 x1 + a12 x2 = b11
a21 x1 + a22 x2 = b21
a11 a12
se puede representar de la forma AX = B, donde: A = es la matriz de los coeficientes,
a21 a22
x1 b11
X= la matriz de las variables, B = la matriz de los t´rminos independientes.
e
x2 b21
Usando Matlab, la matriz X se puede hallar como: X = inv(A) ∗ B o tambi´n por X = A B
e
( es el operador divisi´n izquierda y equivale a premultiplicar por la matriz inversa de A).
o
5
8. Ejemplo 6. Resolver el sistema:
3x + 5y = 7
−2x + 3y = 1
soluci´n:
o
• Forma 1:
>> A=[3 5;-2 3];
>> B=[7;1];
>> X=inv(A)*B
X =
0.8421
0.8947
• Forma 2
>> A=[3 5;-2 3];
>> B=[7;1];
>> X=AB
X =
0.8421
0.8947
• Forma 3
>> [x,y]=solve(’3*x+5*y=7’,’-2*x+3*y=1’)
x = 16/19
y = 17/19
5.2 Sistema de Ecuaciones No Lineales.
Para resolver sistema de ecuaciones no lineales, lo escribimos en la forma:
f1 = 0;
f2 = 0.
Usando matlab, hacemos un gr´fico para aproximar la ubicaci´n de la posible soluci´n o soluciones
a o o
del sistema dado, introduciendo la siguiente sintaxis:
>> ezplot(’f1’,[a,b],[c,d]),grid,hold on
>> ezplot(’f2’)
Donde [a,b] y [c,d] especifican los l´ımites para las cuadr´ ıculas en el eje X e Y respectivamente.
En principio no es necesario colocar estos intervalos para los ejes, pero si se cortara la gr´fica o se
a
necesita una mejor presentaci´n, estos intervalos se escogen a conveniencia .
o
Luego, guardar f1 y f2 en un M-file, le damos un nombre, por ejemplo sistema.m.
Como un siguiente paso ejecutamos la orden:
6
9. >> X=fsolve(’sistema’,[x0,y0])
Donde [x0,y0] es la aproximaci´ inicial de la soluci´n para x e y, esta informaci´n la obtenemos del
o o o
gr´fico realizado. La respuesta esperada es el vector de la forma X=[xsoluc ysoluc ].
a
Ejemplo 7. Resolver el sistema:
y − 2 = (x − 1)2 ;
y − x = 1.
soluci´n:
o
Creamos un M-file, el cual lo llamamos sistema.m, en donde la variable x la ingresamos como
x(1) y la variable y como x(2) tal como se muestra en la siguiente figura:
Figura 3:
Luego generamos un gr´fico para averiguar una aproximaci´n inicial de la soluci´n:
a o o
>> ezplot(’y-2-(x-1)^2’,[-1,3],[1,5]),grid,hold on
>> ezplot(’y-x-1’) .
En la gr´fica se observa que existen dos soluciones reales para el sistema. Para una soluci´n, una
a o
aproximaci´n inicial para x es 0.5 y una aproximaci´n inicial para y es 2.5. Para la otra soluci´n se
o o o
puede considerar la aproximaci´n inicial de x como 2.25 y de y como 3.25.
o
• Caso 1:
[X]=fsolve(’sistema’,[0.5,2.5])
Se muestra:
Optimization terminated: first-order optimality is less than options.TolFun.
X =
1.0000 2.0000
• Caso 2:
[X]=fsolve(’sistema’,[2.25,3.25])
Se muestra:
Optimization terminated: first-order optimality is less than options.TolFun.
X =
2.0000 3.0000
7
10. 6 Interpolaci´n.
o
Sea P = {(xi , yi = f (xi )) : i = 1, · · ·, n, n ∈ N} un conjunto de puntos dado. Se denomina “funci´n
o
interpolante” a una funci´n cuya gr´fica pasa por todos los puntos del conjunto P .
o a
Figura 4:
• Las funciones m´s usadas para interpolar son las polinomiales debido a que ´stas son m´s f´ciles
a e a a
de derivar e integrar.
6.1 Funci´n Spline
o
La interpolaci´n m´s frecuente es por medio de splines de grado 3, llamados “splines c´ bicos”.
o a u
MatLab tiene incorporado el interpolador “spline cubic”, se ejecuta siguiendo la siguiente sintaxis:
yi =spline(x,y,xi), donde los valores y representa los valores de la funci´n evaluada en los puntos
o
x y los puntos xi son los puntos a interpolar.
Ejemplo 8. Los datos de la siguiente tabla han sido obtenidos considerando la funci´n f (x) =
√ o
100 − x2 , para −10 ≤ x ≤ 10.
x -10 -8 -6 -4 -2 0 2 4 6 8 10
f(x) 0 6 8 9.1652 9.7980 10 9.7980 9.1652 8 6 0
Suponiendo que no se conoce la definici´n de f (x), mostrar la gr´fica de una funci´n interpolante
o a o
que pasa por todos los puntos (x, f (x)) dados en la tabla.
Soluci´n:
o
>> x=[-10 -8 -6 -4 -2 0 2 4 6 8 10 ];
>> y=[0 6 8 9.1652 9.7980 10 9.7980 9.1652 8 6 0];
>> xi=-10:0.5:10;
>> yi=spline(x,y,xi);
>> plot(x,y,’o’,xi,yi),grid
Se muestra:
8
11. Figura 5:
7 Derivada de una funci´n
o
Para derivar funciones se usa el comando diff.
Ejemplo 9. Dada la funci´n g(x) = xx sen(x), hallar g ′(x) .
o
Soluci´n:
o
>> syms x,
>> g=(x^x)*sin(x);
>> diff(g)
Se obtiene como respuesta:
ans = x^x*(log(x)+1)*sin(x)+x^x*cos(x) .
Si se quiere evaluar la funci´n derivada en x = 2, se ingresa la siguiente sintaxis:
o
>> f=inline(’x^x*(log(x)+1)*sin(x)+x^x*cos(x)’)
>> feval(f,2)
Respuesta:
ans =
4.4937
9
12. 8 Integraci´n
o
Para realizar el proceso de integraci´n, en matlab se puede usar los comandos: int (para hallar
o
la primitiva de una funci´n), trapz (usa la regla extendida del trapecio ), quad (usa cuadratura
o
gaussiana).
√
Ejemplo 10. Hallar 100 − x2 dx
Soluci´n:
o
>> syms x,
>> int(sqrt(100-x^2))
ans = 1/2*x*(100-x^2)^(1/2)+50*asin(1/10*x)
10 √
Ejemplo 11. Hallar 100 − x2 dx
−10
Soluci´n:
o
>> g=inline(’sqrt(100-x.^2)’); % no olvidar el punto antes del operador potencia.
>> quad(g,-10,10)
ans = 157.0796
Ejemplo 12. Considerando los datos de la siguiente tabla:
x -10 -8 -6 -4 -2 0 2 4 6 8 10
f(x) 0 6 8 9.1652 9.7980 10 9.7980 9.1652 8 6 0
10
Usar trapz para hallar h(z)dz, donde z = −10 : 0.5 : 10 y h = spline(x, y, z) .
−10
Soluci´n:
o
>> x=[-10 -8 -6 -4 -2 0 2 4 6 8 10];
>> y=[0 6 8 9.1652 9.7980 10 9.7980 9.1652 8 6 0];
>> z=-10:0.5:10;
>> h=spline(x,y,z);
>> I=trapz(z,h) % respuesta --->
I =
154.7611
9 Ecuaciones Diferenciales
En MatLab se usa los siguientes comandos: ode45, ode23, ode113, ode15s, ode23s, ode23t,
ode23tb, los cuales sirven para resolver problemas de valor inicial para ecuaciones diferenciales
ordinarias. Tambi´n podemos usar dsolve para resolver ecuaciones diferenciales ordinarias de primer
e
grado.
Ejemplo 13. Resolver y ′ = yx2 .
10
13. Soluci´n:
o
>> y = dsolve(’Dy=y*x^2’,’x’) % respuesta --->
y = C1*exp(1/3*x^3)
Ejemplo 14. Resolver y ′′′ − 3y ′′ + 3y ′ − y = 0, con condiciones iniciales y ′′(0) = 1, y ′ (0) = 0,
y(0) = 0.
Soluci´n:
o
>> y=dsolve(’D3y-3*D2y+3*Dy-y=0’,’D2y(0)=1’,’Dy(0)=0’,’y(0)=0’,’x’)
% respuesta --->
y = 1/2*exp(x)*x^2
Ejemplo 15 (Ley de Malthus). Supongamos que el n´mero de habitantes de un pa´ en el a˜ o
u ıs n
2007 fue de 26.4 millones. Y crece siguiendo la Ley (de Malthus) y = 0.05y, donde y(t) representa
′
el n´mero de habitantes en millones, en un instante t .
u
Estimar el n´mero de Habitantes en el a˜ o 2020.
u n
Soluci´n:
o
Datos: to=2007 ,yo=26.4,tf=2020. Ejecutamos la orden
>> f=inline(’0.05*y’,’t’,’y’)
>> ode23(f,[2007,2020],26.4),grid;
>> [t,y]=ode23(f,[2007,2020],26.4)
Obteniendo como respuesta que en el a˜ o 2020 el n´ mero de habitantes es aproximadamente 50.5699
n u
millones.
Figura 6:
11
14. t =
1.0e+003 *
2.0070
2.0083
2.0096
2.0109
2.0122
2.0135
2.0148
2.0161
2.0174
2.0187
2.0200
y =
26.4000
28.1730
30.0650
32.0841
34.2389
36.5383
38.9921
41.6108
44.4053
47.3875
50.5699
10 Bibliograf´
ıa
[1] Chainskaia, Liudmila - Doig, Elizabeth
Elementos de An´lisis Num´rico: algoritmos y aplicaciones, Fondo
a e
Editorial de la PUCP, 1999.
[2] Nakamura, Shoichiro,
Numerical analysis and graphic visualization with MATLAB Upper Saddle River,
NJ : Prentice-Hall, 1996.
[3] Ysique, Walter,
T´picos de MatLab: Aplicaciones a los M´todos Num´ricos,
o e e
http: www.slideshare.net/WALTERYSIQUE/tpicos-de-matlab-aplicacin-a-los-mtodos-numricos
12