Práctica 1: Resolución de ecuaciones no lineales mediante métodos iterativos wMétodo de Newton wMétodo de Laguerre Matemáticas para la Computación Emiliano Torres Martínez Características básicas de Matlab w w w w w w w w w w w w No tiene en cuenta los espacios. El punto y coma al final de una expresión no visualiza su valor en la pantalla. Los nombres de variables difieren con mayúsculas y minúsculas. Si la evaluación de una expresión no se asigna a ninguna variable, la recibe Ans. Para obtener la lista de variables: who y whos Para borrar borrarlas: clear, clear nom_var Recuperar órdenes previas con las teclas de cursor del teclado Para guardar el espacio de trabajo: save [nombre.mat] o File -> Save Workspace as... Para recuperar el espacio de trabajo: load [nombre.mat] o File -> Load Workspace as... % comentarios help [comando] help[toolbox] Operadores relacionales ==, ~=, <, >, <=, >= Ficheros *.m w Son ficheros ASCII. Tipos n Ficheros de comandos (scripts): conjunto de comandos que se ejecutan sucesivamente. l l l n Las variables pertenecen al espacio de trabajo base. echo on, echo off, echo file on, echo file off, echo file, echo on all, echo off all what, dir/ls, type test, delete test, cd path, cd/pwd, which test Funciones: funciones análogas a las de Matlab con su nombre, argumentos y valores de retorno (toolkits) function [val_ret, ...] = nom_función (arg, ...) l l El espacio de trabajo de una función es independiente al espacio de trabajo base y de las demás funciones. Los argumentos se pasan por valor. Control de flujo w if expresión órdenes [ else órdenes ] end w if expresión1 órdenes elseif expresión2 órdenes else órdenes end w switch expresión case exp1, órdenes case {exp2, exp3, ...} órdenes ... otherwisse, órdenes end Control de flujo w for i=valor_inicial[:incremento]:valor_final w Gestionar órdenes errores en end tiempo de ejecución w for i=vectoromatriz_valores try órdenes órdenes end catch w while expresión órdenes órdenes end end w lasterr, w break, continue, lasterr(‘’) Lectura y escritura interactiva de variables w >>n=input(‘Teclee el número de ecuaciones’) la expresión introducida es evaluada con los valores actuales de las variables de Matlab y el resultado se devuelve como valor de retorno w >>nombre=input(‘Introduce tu nombre’,’s’) el texto se almacena sin evaluar en la cadena nombre w >>disp(‘Matriz de 16 números aleatorios’) >>A=rand(4,4) w >>disp(A) %muestra texto de salida o vectores sin mostrar su nombre Gráficos bidimensionales w plot() crea un gráfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos ejes n x=[1 6 5 2 1]; y=[1 0 4 3 1]; plot(x); plot(x, y); n for i=1:101 %los índices de los vectores comienzan en 1 x(i)=(i-1)/100; y(i)=x(i)+1; %organiza en vectores la función y=x+1 end; plot(x,y); n x=0:pi/25:6*pi; y=sin(x); z=cos(x); plot(x,y,x,z) %superpone gráficas n plot(A), plot(A,x), plot(x,A), plot(A,B), plot(A,B,C,D), help plot w title(’título’) xlabel(‘tal’) / xlabel off ylabel(‘tal’) / ylabel off w grid cuadrícula legend() leyendas w text(x, y, ‘texto’) añade ‘texto’ en el lugar (pueden ser vectores) w gtext(‘texto’) introduce texto con ayuda del ratón Gráficos bidimensionales w fplot() admite como argumento el nombre de una función o un fichero *.m n fplot(‘función’, límites, ‘cadena’, tol) l ‘función’ nombre de la función o fichero *.m l límites es un vector de 2 ó 4 elementos, cuyos valores son [xmin, xmax] o [xmin, xmax, ymin, ymax] l ‘cadena’ permite controlar el color, los marckers y el tipo de línea l tol tolerancia de error relativo. Por defecto 2e-03 l >>f=‘2*exp(-x).*sin(x)’; >>fplot(f,[0,8]) >>title(f), xlabel(‘x’) n [x,y]=fplot(‘función’,límites,’cadena’,tol) no se dibuja nada, se devuelven los vectores x e y l Crear en un fichero mifunc.m function y=mifunc(x) y(:,1)=200*sin(x)./x; y(:,2)=x.^2; l >>fplot(‘mifunc(x)’,[-20,20],’g’] Funciones: eval y feval w eval(‘cadena de caracteres’) evalúa como expresión de Matlab el texto entre comas n n eval(‘sin(x)’) for n=1:10 eval([‘A’, num2str(n), ‘=magic(n)’] end w eval(‘tryString’, ‘catchString’) se evalúa tryString y si se produce algún error se ejecuta catchString w feval(nombre_función, argumentos) n feval(calcular, a, b, c) equivale a calcular(a,b,c) Método gráfico w Se usa para localizar un intervalo donde la función f(x)=sen(x)-ex tiene alguna raíz. w Para calcular la raíz de f(x) hacemos f(x)=0, de donde sen(x)=ex. Por lo tanto, el problema equivale a encontrar el punto de intersección de las funciones g(x)=sen(x) y h(x)=ex De lo cual concluimos que el intervalo en el que se encuentra la única raíz es [-4, -3] Inicio Método de la bisección w Pasos: 1. Encontrar los valores iniciales x0, x1 tales que f(x0) y f(x1) tienen signos opuestos f(x0) f(x1)<0 La primera aproximación xm= x0 +(x1- x0)/2 Evaluar f(xm), pudiendo estar en uno de los siguientes casos: 2. 3. n n n 4. f(x0)f(xm)<0 la raíz está en [x0, xm] f(xm)f(x1)>0 la raíz está en [xm, x1] f(x0)=0 la raíz es x0 El proceso se repite hasta que < =ä Leer f, x0, x1, max_iter, ä f(x0)f(x1) <0 No Si iter = 1 xm = x0+(x1-x0)/2 Si No f(x0)f(x1) <= 0 = abs(x1-x0)/x1) x1 = xm Si < =ä x0 = xm No Devuelve x1 iter = iter + 1 No Fin Si Si iter < max_iter Método de Newton w 1. 2. 3. Pasos: Se parte de una aproximación xi a la raíz xi+1 Trazamos la recta tangente a la curva en el punto (xi,f(xi)), esta cruza el eje X en un punto xi+1 que será la siguiente aproximación a la raíz. Para calcular la siguiente aproximación se utiliza la fórmula de Newton-Raphson f ( xi ) si f’(xi)~=0 Devuelve x =x − i +1 4. i f ' ( xi ) El proceso se repite hasta que < =ä Inicio Leer f, x0, max_iter, ä iter = 1 x1 = x 0 − f ( x0 ) f ' ( x0 ) x0 = x1 f(x0) = f(x1) = abs(x1-x0) iter = iter + 1 Si Si Si < = ä x1 No Si iter < max_iter No Fin Método de Laguerre w Pasos: 1. 2. 3. 4. 5. Se parte de una aproximación xi a la raíz xi+1 Se calcula p(x), p'(x) y p''(x) mediante el algoritmo de Horner Calcula los términos A, B y C de Laguerre Calcula el nuevo valor de x corregido El método de laguerre converge muy rápidamente, para evitar posibles divisiones por cero, lo mejor es salir tan pronto como hayamos convergido. Para eso volvemos a calcular el valor del polinomio en el nuevo valor x. El proceso se repite hasta que < = ä 6.