Sei sulla pagina 1di 14

MA1006 - Introduccin al anlisis numrico o a e

UCR - II Ciclo 2010

Elementos de programacin en MatLab o


MatLab es un lenguaje de programacin de un alto nivel con estructuras de control, mecanismos o de entrada/salida de datos, herramientas grcas, funciones y las principales caracter a sticas de programacin orientada a objetos. Esto lo hace una herramienta muy util y poderosa en diversas reas, o a entre las cuales, el tema del curso: el anlisis numrico y ms generalmente la computacin cient a e a o ca. En esta seccin explicaremos brevemente las herramientas bsicas de programacin que necesitamos o a o para el curso1 .

Operadores y comandos bsicos a


La principal estructura de datos que utliza MatLab son los arreglos, por lo que al trabajar en l es e muy util pensar de manera matricial. El lugar donde se realizan los clculos y se ejecutan funciones a es la consola de comandos. Ah podemos crear nuevas variables de distintos tipos y ejecutar clculos a o mtodos. Por ejemplo para vectores la y columna: e >> v1=[1,2,3] v1 = 1 2 >> v2=[1;2;3] v2 = 1 2 3 >>

Los operadores aritmticos elementales: e Operador suma resta producto cociente exponenciacin o S mbolo + * / ^

A excepcin del cociente los operadores anteriores son compatibles con matrices y vectores siempre y o cuando tengan el tamao adecuado. Resultan muy ultiles los siguientes operadores: n Operador Transponer Producto entrada por entrada de dos matrices Cociente entrada por entrada de dos matrices Exponenciar entrada por entrada de dos matrices Con esto podemos hacer:
1

S mbolo .* ./ .^

Para un tratamiento ms extensivo el lector debe referirse al manual del programa a

MA1006 - Introduccin al anlisis numrico o a e >> v1.*v2 ans = 14 >> v1.*v2 ans = 1 4 >> v1.^v1 ans = 1 4

UCR - II Ciclo 2010

27

Si deseamos saber que variables hemos declarado usamos los comandos who o whos: >> who Your variables are: ans v1 v2 >> whos Name Size ans 1x3 v1 1x3 v2 3x1

Bytes 24 24 24

Class double double double

Attributes

Note que la ultima da una descripcin mas detallada de las variables en memoria. Para limpiar la o consola de comandos el comando es clc y para limpiar la memoria usamos clear. MatLab posee una gran cantidad de funciones predenidas que resultan de gran ayuda a la hora de resolver el tipo problemas de programacin que aparecen en el curso, conforme avancemos en la materia las iremos o empleando. Por el momento es conveniente tener presente las siguientes: Funcin o a:b:c length(v) ones(m,n) prod(v) rand(m,n) sum(v) zeros(m,n) Descripcin o Vector la con los nmeros desde a hasta c en saltos de b unidades u Tamao del vector v n Matriz de unos de tamao m n n Multiplica las entradas del vector v Matriz de numeros aleatorios entre 0 y 1 de tamao m n n Suma las entradas del vector v Matriz de ceros de tamao m n n

Archivos .m
Los archivos .m son aquellos que contienen el cdigo informtico. Existen dos tipos de archivos .m: o a Los scripts y las funciones. Los primeros slamente sirven para ejecutar una serie de instrucciones y o no reciben ni devuelven datos. Los segundos realizan la misma tarea pero estas si reciben parmetros a de entrada y pueden devolver datos. Para crear uh archivo .m busque en el menu New->M-File. Un ejemplo sencillo de un script es el siguiente: %Ejemplo scrpt1 x=0:0.5:2*pi; 2

MA1006 - Introduccin al anlisis numrico o a e y=sin(x); plot(x,y) grid

UCR - II Ciclo 2010

Si lo guardamos con el nombre scrpt1.m para ejecutarlo slo escribimos scrpt1 en la consola de coo mandos damos enter y obtendremos un grco de la funcin sin(x) para x [0, 2]. Para tal efecto se a o creo un vector con los nmeros desde cero hasta 2 en saltos de magnitud 0.5, luego se crea otro vector u con las imgenes de estos puntos bajo la funcin a gracar y posteriormente se llama al comando para a o gracar. Note que la l nea con % es un comentario y no forma parte de lo que se ejecuta. Un ejemplo de una funcion es el siguiente: %Ejemplo fun1 function [lasuma,laresta] = fun1(a,b) lasuma=a+b; laresta=a-b; end

Estructuras de control
for La sintxis es: a for contador=arreglo instrucciones end las intrucciones entre for y end son ejecutadas para cada uno de los valores que se encuentren en arreglo. Por ejemplo el siguiente cdigo sirve para almacenar los cuadrados de los nmeros del 1 al o u 12 en el vector x: >> for k=1:12 x(k)=k^2; end >> x x = 1 4 9 16 25

36

49

64

81

100

121

144

Es posible anidarlos, para un ejemplo programemos una funcin que construya la matriz de Hilbert o % Matriz de Hilbert % parametros n: tamano de la matriz function H=Hilb(n) H = zeros(n); for k=1:n for l=1:n H(k,l) = 1/(k+l-1); end 3

MA1006 - Introduccin al anlisis numrico o a e end end ahora la ejecutamos con n=4 >> Hilb(4) ans = 1.0000 0.5000 0.3333 0.2500 while La sintxis es: a while expresion instrucciones end

UCR - II Ciclo 2010

0.5000 0.3333 0.2500 0.2000

0.3333 0.2500 0.2000 0.1667

0.2500 0.2000 0.1667 0.1429

Este se utiliza cuando a priori no se conoce el nmero de repeticiones a realizar. Por ejemplo considere u el siguiente problema: Sea e el nmero de Euler, dividalo entre 2, el resultado vuelva a dividirlo entre u 2. Si continua este proceso, cual es el cociente ms grande que 0.01 que se puede obtener?. Con un a while es muy sencillo, veamos: >> e=exp(1) e = 2.7183 >> while e/2>0.01 e=e/2; end >> e e = 0.0106 if-else Se presenta en las siguientes formas: 1. if expr instr (ejecutada si expr is verdadera) end 2. if expr1 instr1 (ejecutada si expr1 is verdadera) else instr2 (ejecutada si expr1 es falsa) end 4

MA1006 - Introduccin al anlisis numrico o a e 3. if expr1 instr1 (ejecutada si expr1 is verdadera) elseif expr2 instr2 (ejecutada si expr2 es verdadera) elseif ... . . . else instr (ejecutada si todas las expr anteriores son falsas) end Por ejemplo, la siguiente funcin determina si un nmero es o no par o u function [res] = esPar(n) if mod(n,2)==0 res=Es par; else res=Es impar; end end switch-case La sintxis es: a switch expresion case valor1 instr1 (se ejecuta si expresion coincide con valor1) case valor2 instr2 (se ejecuta si expresion coincide con valor2) . . . otherwise instrs (se ejecuta si ninguna de las anteriores es ejecutada) end

UCR - II Ciclo 2010

A manera de ejemplo, programemos una funcin que reciba una letra y nos indique si es vocal, o semivocal o consonante: function [res] = esVocal(laLetra) switch laLetra 5

MA1006 - Introduccin al anlisis numrico o a e case {a,e,o} res=Vocal; case {i,u} res=Semivocal otherwise res=Consonante; end

UCR - II Ciclo 2010

Los comandos inline y feval


Tambin es posible denir funciones en la l e nea de comandos (llamadas inline functions), para ello MatLab cuenta con el comando inline. Para ver como se utiliza programemos en la linea de comandos la funcin vectorial f (x, y, z) = (4x + 6y 2z), veamos: o >> f = inline(4*x+2*y-2*z,x,y,z) f = Inline function: f(x,y,z) = 4*x+2*y-2*z >> f(1,-1,2) ans = -2 >> Una alternativa a inline esd utilizar el operador de manejo de funciones @, con este operador la funcin del ejemplo anterior se programar de la siguiente forma: o a >> f=@(x,y,z) 4*x+2*y-2*z f = @(x,y,z) 4*x+2*y-2*z >> f(1,-1,2) ans = -2 >> El comando feval es sumamente util, permite evaluar una funcin. La sintxis es como sigue: o a feval(nombreFuncion, parametros de la funcion) Ms adelante veremos que no es tan fcil evaluar una funcin conocida dentro de una estructura de a a o control, es por ello que necesitamos de este comando.

MA1006 - Introduccin al anlisis numrico o a e

UCR - II Ciclo 2010

Relaciones y operadores lgicos o


Las relaciones bsicas de comparacin en MatLab estan dadas por los siguientes operadores: a o Operador < <= > >= == ~= Y los operadores lgicos: o Operador & | ~ Descripcin o AND OR Not Descripcin o Menor que Menor o igual Mayor Mayor o igual Igual Distinto

Adems de los anteriores MatLab posee una gran cantidad de funciones que permiten realizar a comparaciones lgicas. Estos retornan 1 si la condicin a evaluar es cierta y 0 si no. La mayoria de o o ellas tienen en comn el prejo is. Dos de las ms utiles son ismember e isempty2 u a

Revisarlas en la ayuda del programa

MA1006 - Introduccin al anlisis numrico o a e

UCR - II Ciclo 2010

Ejercicios
1. Crear una funcin que reciba una matriz A y devuelva su transpuesta. o 2. Crear una funcin que reciba un entero positivo n y devuelva una matriz cuadrada B = (bij ) o con las siguientes caracteristicas: Debe tener unos en la diagonal principal bij = cos(i) sen(j) si i > j bij = 0 si i < j 3. Costruya una funcin en MatLab que reciba un entero positivo N y devuelva todos los nmeros o u primos menores o iguales a N . 4. Encontrar la suma de todos los nmeros menores que 10000 y que son divisibles por 3 o por 5. u 5. Costruir una funcin en MatLab que reciba una funcin f (x), un entero N y calcule la suma o o
N

f (k)
k=0

6. Hacer una funcin que construya la matriz de Hilbert pero utilizando slo un for. o o

MA1006 - Introduccin al anlisis numrico o a e

UCR - II Ciclo 2010

Aritmtica de punto otante e


En las computadoras los clculos aritmticos se realizan de manera distinta a los que usualmente a e har amos dentro del clculo tradicional. En una computadora, sin importar que tan grande sea su a capacidad de almacenamiento, slo es posible guardar una cantidad nita de datos, lo cual implica o que en la memoria de una mquina existen unicamente nmeros racionales de expansin nita. a u o A nivel terico los nmeros estn denidos de manera que cumplan ciertas reglas, por ello en la o u a artimtica tradicional operamos con ellos de manera abstracta, preocupndonos unicamente de que e a tales reglas se cumplan. Esto hace posible que podamos manipular nmeros con expansion innita y u no peridica, por ejemplo para hacer clculos con 2 no nos ocupa demasiado que sea un nmero o a u 2 irracional, slo que obedece la regla ( 2) = 2. o o Sin embargo en el computador, la representacin de 2 se hace mediante una aproximacin que o tiene una expansin decimal nita. Esto es que cuando en el computador multiplicamos 2 por o s mismo obtenemos una aproximacin del resultado que esperamos sea sucientemente cercana a 2, o para armar que el resultado es 2. Denicin 0.1. Un nmero real x se representa en forma de punto otante f l(x) si se escribe como: o u f l(x) = 0.d1 d2 . . . dk 10k donde 0 d1 9, y 0 di 9 para i = 2, 3, . . . , k Cuando el nmero real se expresa de esta forma se dice que est normalizado. El computador u a almacena la representacin de x mediante 2 partes principales: la parte decimal o fraccionaria que o se llama mantisa y la parte exponencial es llamada caracter stica. Adems guarda el signo de la a mantisa y el signo de la caracter stica. Nota 0.1. El computador trabaja en base 2 sin embargo para mayor comodidad en nuestros clculos a estamos suponiendo que la representacin en punto otante que maneja la mquina est en base 10. o a a Hay dos maneras usadas comnmente para traducir un nmero real x en su correspondiente repu u resentacin en punto otante f l(x) de longitud n, mediante corte o mediante redondeo. o 1. Corte o Truncamiento: Con el mtodo de corte o truncamiento a k d e gitos, se eliminan los d gitos dk+1 dk+2 ... por lo que se obtiene f l(x) = 0.d1 d2 ...dk 10n Es claro que entre ms grande sea k, mejor ser la aproximacin de f l(x), excepto en el caso en a a o que la expansin decimal del x sea cero antes de k d o gitos. 2. Redondeo: Para expresar x en forma normalizada con redondeo y corte, se sigue la regla Si dk+1 5 entonces se suma 1 a dk En otro caso se cortan los d gitos despus del k-simo d e e gito. 9

MA1006 - Introduccin al anlisis numrico o a e

UCR - II Ciclo 2010

IEEE 754
En 1985 el Instituto de ingenieros elctricos y electrnicos (IEEE) public el primer stndar para e o o a artimtica de punto otante IEEE 754-1985, la versin actual es la IEEE 754-2008. En este se detalla e o los formatos de almacenamiento y algoritmos para efectuar las operaciones en punto otante. Es el ms utilizado por la mayor de software y hardware, entre ellos MatLab, que utiliza la representacin a a o de punto otante IEEE de 64 bits que explicamos a continuacin. o Para representar el nmero x disponemos de 64 bits b63 , b62 , . . . , b0 distribuidos de la siguiente u forma: 1 bit b63 para el signo S S= 0 1 si x > 0 si x < 0

10 bits b62 , . . . , b52 para el exponente E, con la convencin de utilizar exceso 1023, esto quiere o decir que 1023 + 1 si |x| < 21022 E = 1022 1023 si 21022 |x| < 21024 +1024 x = 1 bit oculto bh que se utiliza para poder representar nmeros muy pequeos. u n 52 bits b51 , . . . , b0 para la mantisa M . Nota 0.2. Bajo este esquema el nmero ms pequeo que puede almacenar MatLab es 21074 y el u a n 1023 ms grande 2 a Ejemplo 0.1. Representar x = 14 en punto otante como la har MatLab. a Escribimos 1410 = 11102 = 1.112 23 = 1.112 210261023 Como 14 > 0 y 102610 = 100000000102 entonces MatLab almacenar lo siguiente: a S 0 E 10000000010 Bit oculto 1 M 1100000 . . . 0

Redondeo y propagacin del error o


Todas la operaciones que se realizan en punto otante con un nmero nito de d u gitos genera inevitablemente una propagacin del error de redondeo. Si hacemos varias operaciones elementales o con este tipo de nmeros arrastraremos un error que puede amplicarse indenidamente. El origen u del error se puede presentar por dos causas fundamentales: Error en los datos: Se presenta cuando los datos iniciales en la operacin son aproximaciones o de los datos reales. Error computacional: Internamente el computador podr utilizar funciones de clculo que a a no siempre son exactas, puesto que la forma exacta no es posible de representar en la memoria nita del computador. 10

MA1006 - Introduccin al anlisis numrico o a e

UCR - II Ciclo 2010

Cuando se tiene un error inicial y adems las funciones o algoritmos de la mquina ralizan los a a clculos con funciones aproximadas el error se propaga. Esto provoca que nal del clculo el error a a crece conforme los errores de datos y computacionales son ms grandes. a Denicin 0.2 (Error absoluto). Sea P una aproximacin de P , entonces el error absoluto se o o dene como := |P P | (1) Denicin 0.3 (Error relativo). Sea P una aproximacin de P , entonces el error relativo se dene o o como |P P | := = (2) |P | |P | Teorema 0.1. Sea x R con x = 0 entonces: 1. Si f l(x) se obtiene con k d gitos con truncamiento entonces: x f l(x) 10k x

2. Si f l(x) se obtiene con k d gitos con redondeo entonces: x f l(x) 0.5 10k+1 5 10k x

Demostracin. (1) o x f l(x) x 0.d1 d2 . . . 10n 0.d1 d2 . . . dk 10n 0.d1 d2 . . . 10n 0.dk+1 dk+2 . . . 10nk 0.d1 d2 . . . 10n 0.dk+1 dk+2 . . . 10k 0.d1 d2 . . . 1 10k 0.1

= = =

= 10k+1 (2) Ejercicio. Denicin 0.4 (Cifras signicativas). Sea P una aproximacin de P y t N. Entonces P aproxima o o a P con t cifras signicativas si t es el mayor entero positivo tal que P P 5 10t = 0.5 10t+1 P 11 (3)

MA1006 - Introduccin al anlisis numrico o a e Ejemplo 0.2. Sea x = = 0.314159265 . . . 101 y sea x =

UCR - II Ciclo 2010 22 = 0.31428571 101 . 7

xx = 0.402 103 0.5 104+1 x implica que x aproxima a x con 4 d gitos signicativos. Ejemplo 0.3. Determinar el conjunto de valores x que aproximan a x = 1000 con 4 cifras signicativas?.

1000 x 104 1000 999.5 x 1000.5 x [999.5 , 1000.5] Note que p = 0.9998 103 aproxima a x con 4 cifras signicativos, mientras que q = 0.1001 104 no lo hace. Esto ilustra que una aproximacin con k cifras signicativas no quiere decir que o necesariamente tenga k d gitos iguales despus del punto decimal. e

Problemas con la artimtica de punto otante e

Divisin con denominadores peque os: Suponga que x = x + es una aproximacin de x y sea o n o muy cercano a cero, entonces al calcular el cociente x x x = + note que

el nuevo error puede ser muy grande en comparacin con el error inicial . o

Resta de n meros muy parecidos: Sean f l(x) = 0.d1 d2 . . . dr r+1 r+2 . . . k 10n y f l(y) = u 0.d1 d2 . . . dr r+1 r+2 . . . k 10n . Calculemos x y f l(x) f l(y) = 0.r+1 r+2 . . . k 10nr donde los omegas pueden ser cualquier cosa, ya que el computador despus de r d e gitos no guarda informacin conable. o Elevar a potencia un n mero: Sea x = x + , entonces u (x)2 = (x + )2 = x2 + 2x + el nuevo error es 2x +
2, 2

que puede ser mayor al inicial.

Algunas de las tcnicas que se utilizan para minimizar el error en las operaciones con nmeros expree u sados en punto otante son: 12

MA1006 - Introduccin al anlisis numrico o a e 1. La racionalizacin. o

UCR - II Ciclo 2010

2. La descomposicin de factores: Por ejemplo en lugar de calcular x2 y 2 es preferible utilizar la o expresin (x y)(x + y). o 3. La utilizacin de expresiones equivalentes: Al calcular ln(x/y) con valores de y muy pequeos o n podr generar una propagacin del error grande, por tanto podemos utilizar la expresin equiva o o xy alente 2 tanh1 x+y 4. Para expresiones del tipo xy/z es conveniente efectuarlas (programarlas) de la siguiente forma: (xy)/z si x y y dieren mucho. x(y/z) si y y z estn cerca. a (x/z)y si x y z estn cerca. a Teorema 0.2 (Cotas de error absoluto y relativas para la suma). Considere x = x1 + x2 + . . . + xn y x la aproximacin x = x1 + x2 + . . . + xn . Si denotamos por x = |x x| y x = o , entonces |x| 1. x
i=1 n

xi

2. x max{x1 , . . . , xn }
n n n n

Demostracin. o (2) Ejercicio.

(1) x = |x x| =
i=1

xi
i=1

xi
i=1

|x xi | =
i=1

xi

13

MA1006 - Introduccin al anlisis numrico o a e

UCR - II Ciclo 2010

Ejercicios
1. Halle la ra de menor magnitud de la ecuacin z o x2 + 0.4002 100 x + 0.8 104 = 0 usando la frmula general y aritmtica de punto otante con corte a cuadro d o e gitos. 2. Repita el ejercicio anterior pero ahora utilice la siguiente frmula o x1 = b 2c b2 4ac

Que puede concluir comparando los resultados obtenidos en ambos ejercicios. 3. Suponga que x1 , x2 , . . . , xn son aproximaciones de x1 , x2 , . . . , xn y que en cada caso el mximo a error posible es . Demostrar que el error mximo posible de la suma x1 + x2 + + xn es n . a 4. Demostrar que si x x = entonces x x = 2 x 5. Demostrar que si x x = entonces ln x ln x x
1

(Sug. Use el desarrolo limitado de ln(1 + x))

6. Suponga que x1 y x2 son aproximaciones de x1 y x2 con sus errores respectivos que x1 x2 x1 x2 1 2 + x1 x2 x1 x2

2.

Demostrar

14

Potrebbero piacerti anche