Académique Documents
Professionnel Documents
Culture Documents
Captulo 1: Fundamentos
Clculo Numrico Cristian G. Prez Toledo
Departamento de Ciencias Bsicas Campus Los ngeles Universidad de Concepcin
1 / 65
Captulo 1: Fundamentos
1 Introduccin
2 Octave
2 / 65
El anlisis numrico o clculo numrico es el estudio de los mtodos que utilizan aproximacin numrica para la resolucin de los problemas de la matemtica aplicada. Algunos problemas de la matemtica aplicada son: resolucin de ecuaciones no lineales resolucin de sistemas lineales interpolacin de funciones aproximacin de funciones derivacin de funciones integracin de funciones resolucin de ecuaciones diferenciales ordinarias
3 / 65
Un mtodo numrico es un procedimiento mediante el cual es posible transformar un problema matemtico en un problema numrico.
Un mtodo numrico tambin es un procedimiento mediante el cual un problema numrico se puede resolver utilizando un nmero nito de clculos puramente aritmticos y lgicos.
4 / 65
Un problema numrico es una descripcin precisa de la relacin funcional entre un conjunto nito de datos numricos de entrada, y un conjunto nito de datos numricos de salida.
Un algoritmo es un conjunto de instrucciones o reglas bien denidas y ordenadas, que transforman los datos de entrada de un problema numrico en los datos de salida, para obtener la as llamada solucin numrica de un problema matemtico.
5 / 65
Resolver el sistema lineal Ax = b, donde A Rnn , x Rn y b Rn . Este es un problema tanto matemtico como numrico. Los datos de entrada son los elementos de la matriz (aij ) y los elementos del vector (bi ). Los datos de salida son los elementos del vector (xi ). Un forma de resolver este problema puede ser utilizando el mtodo de eliminacin de Gauss.
6 / 65
Este es un problema esencialmente matemtico, pues el dato de salida es la funcin y (t) la cual no se puede especicar completamente por medio de un nmero nito de valores.
7 / 65
El problema matemtico anterior se puede aproximar por un problema numrico si consideran como datos de salida los valores y (ti ), con ti = ih, i = 1 : n, h = 1/n, y y (ti ) = De donde yi+1 = yi + yi h, y0 = 1. i = 0 : n, () y (ti+1 ) y (ti ) yi+1 yi = . h h
El mtodo de aproximacin utilizado para obtener el problema numrico () se llama mtodo de Euler.
8 / 65
Captulo 1: Fundamentos Introduccin Pasos a seguir para la resolucin de un problema de clculo numrico
El clculo numrico se utiliza cuando no se puede resolver de manera exacta o analtica un problema matemtico. Los pasos a seguir son: 1 Estudio terico del problema
Existencia y unicidad de solucin
2
Aproximacin
Eleccin del mtodo numrico Existencia y unicidad de solucin Estabilidad y convergencia
Resolucin
Eleccin del algoritmo Costo y estabilidad numrica Codicacin del algoritmo (lenguaje de programacin) Ejecucin del programa en el computador
9 / 65
Octave es un lenguaje interpretado de alto nivel, orientado al clculo numrico. Tambin es un programa capaz de interpretar este lenguaje y realizar los clculos. Octave ofrece una interfaz de usuario interactiva, orientada a la lnea de comandos (terminal). En este modo acta como una calculadora. Tambin se puede utilizar en modo no interactivo, leyendo los comandos desde un archivo (guin). A la gran cantidad de funciones que tiene Octave, se le pueden agregar aqullas denidas por el usuario. Octave es en su mayor parte compatible con Matlab. Se distribuye libremente bajo los trminos de la Licencia Pblica General de GNU.
10 / 65
Diferentes secciones
1
En el terminal se pueden ejecutar comandos de Octave y ver, en una ventana, la salida correspondiente. En el editor se pueden crear guiones y funciones que se guardan como archivos con extensin m. En el navegador se puede crear o elegir la carpeta de trabajo en curso. En la lista de variables se muestran la variables creadas en la sesin de trabajo. En el historial se tiene un registro de los comandos ingresados a travs del terminal.
12 / 65
Otras utilidades Ejecuta un guin Detiene un proceso Borra los contenidos del terminal Abre una matriz en una hoja de clculo Abre la ayuda de Octave Ayuda dinmica de comandos segn se van escribiendo Busca comandos similares al que se haya escrito
13 / 65
Tras pulsar la tecla Intro, todo lo que se escribe despus del prompt >>, Octave lo interpreta comprobando si corresponde con el nombre de una variable o instruccin (guin, comando, funcin) previamente denida. Cuando lo que se escribe coincide con uno de los tipos de datos, o clases, de Octave (double, char, logical), stos son devueltos como salida en la variable por defecto ans. Por ejemplo, >> casa ans = casa Es posible escribir varias instrucciones en la misma lnea, separndolas con una coma o con un punto y coma. Las instrucciones que terminan con un punto y coma no producen salida de resultados por pantalla.
14 / 65
Octave conserva un historial de lo ingresado en la lnea de comandos, lo cual se puede recuperar usando las teclas de echas arriba y abajo. Con las teclas de echas izquierda y derecha es posible desplazarse horizontalmente sobre la lnea de comandos para hacer modicaciones. El comando help muestra una lista de todos los comandos y funciones disponibles en Octave. Para obtener la descripcin de uno de estos comandos y funciones, basta escribir help seguido por el nombre del comando o funcin. Por ejemplo, >> help abs Octave distingue entre maysculas y minsculas.
15 / 65
Mediante el comando save todas las variables de la sesin de trabajo se guardan en un archivo especicado. Por ejemplo, >> save variables.mat El comando load restaura en la sesin en curso todas las variables almacenadas en variables.mat Para guardar en un archivo todo lo ingresado en la lnea de comandos y la salida de resultados de una sesin de trabajo, basta escribir >> diary sesion.txt Para cerrar una sesin de Octave se debe ingresar el comando quit (o exit) y pulsar la tecla Intro. Lo anterior no cierra el programa QtOctave.
16 / 65
Otros tipos de datos, formados a partir de los anteriores, son los nmeros complejos, las matrices (en el sentido matemtico usual), las clulas, las clases Java, etc. >> z = 1+3i, class(z) z = 1 + 3i ans = double Los objetos bsicos de trabajo en Octave/Matlab son las matrices bidimensionales cuyos elementos son nmeros reales o complejos. Escalares y vectores son considerados casos particulares de matrices. Tambin se pueden manipular matrices de cadenas de caracteres y valores lgicos.
18 / 65
En Octave las variables nunca se declaran, y se crean automticamente al asignarles un valor. El tipo y tamao de una variable se puede cambiar en forma dinmica segn los valores que le son asignados. >> x = 2; size(x) ans = 1 1 >> x = [3,5]; size(x) ans = 1 2 Para conocer en cualquier momento el valor guardado en una variable, basta con escribir su nombre. >> x x = 3 5
19 / 65
Algunos comandos relacionados con la inspeccin y eliminacin de variables son: who whos class(a) size(a) isvarname a iskeyword a which a clear clear a b lista todas las variables en uso como el anterior, pero ms detallado devuelve la clase de la variable a devuelve el tamao de la variable a devuelve 1 si a es un nombre vlido devuelve 1 si a es un nombre reservado muestra el tipo de a elimina todas las variables elimina las variables a y b
20 / 65
Algunas variables predenidas, que no conviene cambiar, son las siguientes: pi 3.1416 e 2 .7183 ioj 1 eps 2.2204 1016 inf NaN Not a Number
>> warning off % Sin mensajes de advertencia >> 5/0 ans = Inf >> 0/0 ans = NaN >> NaN == NaN % NaNs no son iguales ans = 0 >> eps ans = 2.2204e-016
21 / 65
Por defecto, los nmeros se muestran en el formato de punto jo con 5 dgitos. Esto se puede modicar con el comando format. Por ejemplo, para el nmero 1/7, algunos posibles formatos de salida son: format format format format format format format devuelve short short e long long e bank rat 0.14286 0.14286 1.4286e-001 0.142857142857143 1.42857142857143e-001 0.14 1/7
format short g elige entre los formatos short o short e dependiendo de la magnitud del nmero. Anlogamente, para format long g.
22 / 65
Operadores aritmticos: +, -, *, /, ^. >> 1+2*1.25 ans = 3.5000 Parntesis para modicar la prioridad. >> (1+2)*1.25 ans = 3.7500 El resultado se guarda en la variable ans. >> ans/2^3 ans = 0.46875 Tres puntos para continuacin de lnea. >> 1+2+... 3 ans = 6
23 / 65
Los nombres de las funciones elementales son prcticamente los habituales. Los argumentos pueden ser reales o complejos, y el resultado de devuelve en el tipo apropiado. Funciones exponenciales exp log log10 log2 sqrt exponencial logaritmo natural logaritmo decimal logaritmo en base 2 raz cuadrada
24 / 65
Funciones trigonomtricas sin csc asin acsc cos sec acos asec tan cot atan acot Funciones hiperblicas sinh csch asinh acsch cosh sech acosh asech tanh coth atanh acoth
25 / 65
Funciones aritmticas lcm(n,m,...) gcd(n,m,...) factor(n) nchoosek(n,k) factorial(n) sign(x) round(x) fix(x) ceil(x) floor(x) rem(x,y) mod(x,y) mnimo comn mltiplo de n, m, . . . mximo comn divisor de n, m, . . . factores primos de n coeciente binomial n sobre k factorial de n signo de x redondeo de x al entero ms prximo redondeo de x hacia 0 redondeo de x hacia + redondeo de x hacia resto de x/y usando x-y*fix(x/y) resto de x/y usando x-y*floor(x/y)
26 / 65
Funciones complejas abs(z) angle(z) conj(z) real(z) imag(z) compass(z) mdulo o valor absoluto de z argumento de z (en radianes) complejo conjugado de z parte real de z parte imaginaria de z representacin polar de z
27 / 65
La forma ms elemental de crear matrices es elemento por elemento, por las y entre corchetes. Los elementos de una misma la se separan por comas (o un espacio en blanco), y una la de la siguiente se separa por un punto y coma. >> A = [1,2,3,4;5,6,7,8] A = 1 2 3 4 5 6 7 8
28 / 65
Se pueden modicar algunos de los elementos de la matriz, accediendo a cualquiera de sus posiciones. >> A = [1 2 3 4; 5 6 7 8]; A(2,4) = -1 A = 1 2 3 4 5 6 7 -1 Se pueden crear nuevos elementos y el tamao de la matriz cambia automticamente. >> A = [1 2 3 4; 5 6 7 8]; A(3,3) = 9 A = 1 2 3 4 5 6 7 8 0 0 9 0
29 / 65
Un vector la >> v = [1 -1 pi] v = 1.0000 -1.0000 3.1416 Un vector columna >> v = [1; -1; pi] v = 1.0000 -1.0000 3.1416 Un vector de caracteres >> a = [Cmo ,ests?] a = Cmo ests?
30 / 65
El operador : (dos puntos) permite crear un vector la especicando su primera componente, un incremento y una cota superior para la ltima componente. v = a:h:b Vector la de nmeros desde a hasta c b tal que c + h > b, con incremento h. >> v = 2:0.25:2.8 v = 2.0000 2.2500 2.5000 2.7500 v = a:b Como el anterior, con h = 1. >> v = 3.5:6.9 v = 3.5000 4.5000 5.5000 6.5000
31 / 65
Las funciones linspace y logspace crean un vector la especicando las primera y ltima componentes, y el nmero de componentes. v = linspace(a,b,n) Vector la de n nmeros uniformemente espaciados desde a hasta b. Es decir, v = [a a+h a+2h a+3h ... b] ba donde h = . n1 >> v = linspace(1,4,3) v = 1.0000 2.5000 4.0000 v = linspace(a,b) Como el anterior, con n = 100.
32 / 65
v = logspace(a,b,n) Vector la de n nmeros logartmicamente espaciados desde 10a hasta 10b . Es decir, v = [10a 10a+h 10a+2h 10a+3h . . . 10b ] ba . n1 >> v = logspace(1,4,3) v = 1.0000e+001 3.1623e+002 donde h =
1.0000e+004
33 / 65
Se pueden tambin utilizar vectores y matrices como objetos para construir otros vectores y matrices. >> v = 1:4; A = [v 5; 6 7:2:13] A = 1 2 3 4 5 6 7 9 11 13 >> A = [1:5; 6:10]; B = [A; 11:15; 16:20] B = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
34 / 65
Existe un buen nmero de funciones especiales para la creacin de matrices y vectores. A = diag(v) >> v = 1:3; A = diag(v) A = 1 0 0 0 2 0 0 0 3 >> v = 1:3; A = diag(v,-1) A = 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0
35 / 65
36 / 65
37 / 65
38 / 65
39 / 65
40 / 65
Los operadores aritmticos representan las correspondientes operaciones matriciales (siempre que tengan sentido). Sean A = (aij ) y B = (bij ) matrices y c un escalar. A+B es la matriz de elementos aij + bij A-B es la matriz de elementos aij bij A*B es la matriz de elementos
n k=1
aik bkj
A+c es la matriz de elementos aij + c A-c es la matriz de elementos aij c c*A es la matriz de elementos caij A/c es la matriz de elementos aij /c
41 / 65
A^c si c > 0 es un entero, es la matriz Ac si c < 0 es un entero, es la matriz (A1 )c A es la matriz transpuesta de elementos aji Precedidos de . (un punto) se deben entender en el sentido de que la operacin se efecta elemento a elemento. c./A es la matriz de elementos c/aij A.^c es la matriz de elementos ac ij c.^A es la matriz de elementos caij A.*B es la matriz de elementos aij bij A./B es la matriz de elementos aij /bij
ij A.^B es la matriz de elementos aij 42 / 65
La mayora de las funciones de Octave estn diseadas de forma tal que admiten matrices como argumentos. Esto se aplica en particular a las funciones matemticas elementales, y su utilizacin se debe entender en el sentido de elemento a elemento. >> u = [0 pi/2 pi 3*pi/2 2*pi]; >> v = sin(u) v = 0.00000 1.00000 0.00000 -1.00000 >> w = log(u) w = -Inf 0.45158 1.14473 1.55019
-0.00000
1.83788
43 / 65
n = sum(v) Suma de las componentes de v. >> v = [1 2 3 4]; n = sum(v) n = 10 v = sum(A,1) Vector la cuyas componentes son las sumas de los elementos de cada columna de A. >> A = [1 2; 3 4]; v = sum(A,1) v = 4 6 v = sum(A,2) Vector columna cuyas componentes son las sumas de los elementos de cada la de A. >> A = [1 2; 3 4]; v = sum(A,2) v = 3 7
44 / 65
n = prod(v) Producto de las componentes de v. >> v = [1 2 3 4]; n = prod(v) n = 24 v = prod(A,1) Vector la cuyas componentes son los productos de los elementos de cada columna de A. >> A = [1 2; 3 4]; v = prod(A,1) v = 3 8 v = prod(A,2) Vector columna cuyas componentes son los productos de los elementos de cada la de A. >> A = [1 2; 3 4]; v = prod(A,2) v = 2 12
45 / 65
n = trace(A) Traza de A, es decir, sum(diag(A)). >> A = [1 2; 3 4]; n = trace(A) n = 5 n = min(v) Mnimo de las componentes de v. >> v = [1 2 3 4]; n = min(v) n = 1 n = max(v) Mximo de las componentes de v. >> v = [1 2 3 4]; n = max(v) n = 4 n = mean(v) Promedio de las componentes de v. >> v = [1 2 3 4]; n = mean(v) n = 2.5000
46 / 65
v = min(A) Vector la cuyas componentes son el mnimo elemento de cada columna de A. A = [1 2; 3 4]; v = min(A) v = 1 2 v = max(A) Vector la cuyas componentes son el mximo elemento de cada columna de A. >> A = [1 2; 3 4]; v = max(A) v = 3 4 v = mean(A) Vector la cuyas componentes son el promedio de los elemento de cada columna de A. >> A = [1 2; 3 4]; v = max(A) v = 2 3
47 / 65
n = norm(v) Norma euclidiana de v. >> v = [1 2 3 4]; n = norm(v) n = 5.4772 n = norm(A,p) Norma p, sum(abs(v).^p)^(1/p) >> v = [1 2 3 4]; n = norm(v,3) n = 4.6416 n = norm(v,inf) Norma , max(abs(v)) >> v = [1 2 3 4]; n = norm(v,inf) n = 4 n = norm(v,-inf) Norma , min(abs(v)) >> v = [1 2 3 4]; n = norm(v,-inf) n = 1
48 / 65
n = norm(A) Mximo valor propio de A. >> A = [1 2; 3 4]; n = norm(A) n = 5.4650 n = norm(A,1) Norma 1, max(sum(abs(A),1)) >> A = [1 2; 3 4]; n = norm(A,1) n = 6 n = norm(A,inf) Norma , max(sum(abs(A),2)) >> A = [1 2; 3 4]; n = norm(A,inf) n = 7
49 / 65
v = size(A) Tamao de A. >> A = [1 2; 3 4; 5 6]; v = size(A) v = 3 2 >> [m n] = size(A) m = 3 n = 2 >> m = size(A,1), m = size(A,2) m = 3 m = 2 n = length(A) Mayor dimensin de A, max(size(A)) >> A = [1 2; 3 4; 5 6]; n = length(A) n = 3
50 / 65
Para extraer los elementos de una matriz o vector, se utiliza la sintaxis siguiente: v(i) Si v es un vector, se obtiene vi . A(i,j) Si A es un matriz, se obtiene aij . A(k) Si A es un matriz, se obtiene el k-simo elemento de A, en el orden en que est guardada en memoria (es decir, por columnas). >> A = [1 2; 3 4; 5 6]; A(2,1), A(4), A(end) ans = 3 ans = 2 ans = 6 Los subndices siempre comienzan en 1.
51 / 65
Existe un buen nmero de facilidades para extraer globalmente un conjunto de elementos de una matriz o vector, sean estos consecutivos o no. >> v = [11 12 13 14 15 16 17 18 19 20]; >> ind = [2 5 1 8]; >> u = v(ind) u = 12 15 11 18 >> ind = [2 5; 1 8]; >> u = v(ind) u = 12 15 11 18
52 / 65
Utilizando la sintaxis A(v) o A(M), donde v es un vector de ndices y M es una matriz de ndices, se obtiene un vector o una matriz con los elementos de A indicados en los ndices. >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> v = [1 3 5 8]; u = A(v) u = 1 7 5 6 >> M = [1 3; 5 8]; B = A(M) B = 1 7 5 6
53 / 65
Utilizando la sintaxis A(i:j,k:l) se obtiene la submatriz de A que contiene las las i hasta j y las columnas k hasta l. >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> B = A(2:3,1:2) B = 4 5 7 8
54 / 65
Utilizando la sintaxis A(u,v), donde u y v son vectores, se obtiene la submatriz de A que contiene las las indicadas en u y las columnas indicadas en v. >> A = [1 2 3 4; 5 6 7 8; 9 10 11 12] A = 1 2 3 4 5 6 7 8 9 10 11 12 >> u = [1 3]; v = [1 4]; B = A(u,v) B = 1 4 9 12
55 / 65
Se pueden combinar los mtodos de extraccin anteriores. >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> B = A(1:2,[2 2 2 2]) B = 2 2 2 2 5 5 5 5
56 / 65
El operador : (dos puntos) en el lugar de un ndice indica que se toman todos. >> A = [1 2 3; v = 2 5 8 >> A = [1 2 3; B = 4 5 6 7 8 9 >> A = [1 2 3; v = 1 4 7 4 5 6; 7 8 9]; v = A(:,2)
4 5 6; 7 8 9]; B = A(2:end,:)
4 5 6; 7 8 9]; v = A(:) 2 5 8 3 6 9
57 / 65
Si v es un vector con valores lgicos (sus elementos son true y false, que Octave muestra como 1 y 0), entonces A(v) es un vector que se obtiene considerando o no cada elemento de A en funcin del valor verdadero o falso en el vector v. >> A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> v = [true true false true false true] v = 1 1 0 1 0 1 >> u = A(v); w = u w = 1 4 5 6
58 / 65
Captulo 1: Fundamentos Octave Manipulacin de los elementos de una matriz Insercin y eliminacin
Se pueden insertar valores determinados a partes de una matriz, lo cual a veces modica el tamao de la matriz. >> A = [1 2 3; 4 5 6]; A(2,2) = -1 A = 1 2 3 4 -1 6 >> A(3,2) = -2 A = 1 2 3 4 -1 6 0 -2 0
59 / 65
Captulo 1: Fundamentos Octave Manipulacin de los elementos de una matriz Insercin y eliminacin
>> A = [1 2 3; 4 5 6; 7 8 9]; A(1:2,2:3) = 0 A = 1 0 0 4 0 0 7 8 9 >> A(3,:) = [] % Se elimina la fila 3 A = 1 0 0 4 0 0 >> A = [A [1 2]] % Se agrega una columna A = 1 0 0 1 4 0 0 2
60 / 65
Un guin es un conjunto de comandos, guardados en un archivo de texto, que son ejecutados por un interprete. Un guin es til para automatizar algunas tareas y puede hacer las veces de un programa principal al desarrollar una aplicacin. En Octave los guiones se deben guardar en un archivo con extensin m para ser reconocidos. Un guin que est en la carpeta de trabajo en curso, se ejecuta escribiendo su nombre (sin la extensin) en la lnea de comandos del terminal. Todas las variables usadas en un guin son tambin las variables de la sesin de trabajo (variables globales).
61 / 65
Una funcin es un programa con una interfaz de entrada y salida bien denida. Una funcin debe tener el siguiente formato: function [y_1,...,y_n] = nombre(x_1,...,x_m) % documentacin y comentarios comandos; end La funcin se debe guardar en un archivo con su mismo nombre y la extensin m, es decir, nombre.m Los comandos dentro de una funcin no se pueden referir a las variables globales. Las variables creadas por una funcin son locales.
62 / 65
63 / 65
El comando fplot(fun,lims) dibuja la grca de la funcin fun (que se almacena como una cadena de caracteres) en el intervalo [lims(1),lims(2)]. Por ejemplo, fun = 1/(1+x^2); lims = [-5 5]; fplot(fun,lims); o, ms directamente, fplot(1/(1+x^2),[-5 5]); Octave obtiene la grca muestreando la funcin sobre un conjunto de abscisas no equiespaciadas con una tolerancia de 0.2 %. Para mejorar la precisin se puede usar fplot(fun,lims,tol) Al escribir grid on se obtiene una grilla de fondo.
64 / 65
Una funcin se pude denir de varias maneras. 1 Como una cadena de caracteres. fun = 1/(1+x^2); 2 Mediante el comando inline fun = inline(1/(1+x^2),x); 3 Como una funcin annima. fun = @(x) 1/(1+x^2); 4 Como un archivo con extensin m. function y = fun(x) y = 1/(1+x^2); end En los tres ltimos casos la funcin se evala como y = fun(x)
65 / 65