Matemáticas de la especialidad Ingeniería Eléctrica Guion para la Práctica 1 Grácos bidimensionales, scripts y funciones en MatLab . Una introducción. Antes de empezar a trabajar con este guion se recomienda: MatLab 1. Inicie una sesión de trabajo en y cree una carpeta con el nombre número de matrícula con los cinco dígitos. 2. Una vez iniciada la sesión y situado en su directorio NmatP1 NmatP1, donde (compruébelo en la ventana Nmat es su Current folder), teclee en la línea de comandos las dos instrucciones siguientes: >> diary NmatP1MatEIE.txt >> format long 3. Entre en su cuenta de Moodle de la asignatura y bájese y copie en su directorio de trabajo cheros Grafica1.m, bisec.m Compruebe en la ventana 4. Al acabar teclee diary o y mifunbisec.m, Current folder NmatP1 los que se van a utilizar a lo largo de la Práctica. que los tres cheros están presentes. de esta forma tendrá guardado su trabajo y podrá consultarlo o reutilizarlo. 5. Estas instrucciones van dirigidas a los estudiantes que no estén familiarizados con Matlab, los que ya conozcan el programa pueden pasar deprisa por encima e ir al cuestionario de Moodle a responder los ejercicios. Observación: Se aconseja crear esta carpeta para uso personal, pero no es preciso hacerlo ya que dicho documento de trabajo no se entrega. Índice 1. Introducción 1 2. Las funciones elementales en MatLab. 2 2.1. Introducción a los grácos bidimensionales en 2.2. Ficheros Script en MatLab MatLab . . . . . . . . . . . . . . . . . . . . . . . . 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3. Ficheros Function de MatLab. 3.1. 1. 11 Cálculo de las raíces de una ecuación: Teorema de Bolzano y el método de la bisección. . . . . . . 13 Introducción Como se indica en su título, en esta práctica se trata de manejar los elementos básicos de los grácos bidimensionales y de las dos estructuras más importantes que deben utilizarse para programar en MatLab : los scripts y las funciones (no confundir con el concepto matemáticos de función). Para ello se propone un recorrido que requiere la lectura atenta y comprensiva de este guion, lo que a menudo exige que introduzca instrucciones en su sesión de MatLab cuyo resultado debe entender. 1 2. Las funciones elementales en MatLab MatLab. dispone de un gran número de funciones predenidas que se pueden utilizar desde la línea de comandos sin necesidad de programar nada. Por ejemplo: >> cos(5) ans = 0.283662185463226 >> log(pi) ans = 1.144729885849400 Algunas de ellas, entre la que por supuesto se incluyen las funciones elementales, son las siguientes: FUNCIONES EXPONENCIAL Y LOGARÍTMICA FUNCIONES TRIGONOMÉTRICAS FUNCIONES TRIGONOMÉTRICAS INVERSAS 2 FUNCIONES HIPERBÓLICAS FUNCIONES HIPERBÓLICAS INVERSAS Todas ellas están vectorizadas en el mismo sentido que las operaciones documento introduccion_MATLAB_ETSII); .* , ./ y . (puede consultarse el es decir, pueden evaluarse sobre una matriz (o vector) cualquiera y el resultado es la aplicación de la función a la matriz (vector) elemento a elemento. Recuerde que para MatLab 1 × 1. Por ejemplo: % vector fila de tres componentes un número es una matriz >> v=rand(1,3) v = 0.913375856139019 0.632359246225410 0.097540404999410 >> exp(v) % Vector fila. Cada componente es la exponencial de la componente de v. ans = 2.492723420976097 1.882045554478423 1.102455985396862 >> A=hilb(3); % Matriz 3x3. Recuerde el uso del punto y coma (;). Evita el display por pantalla. >> exp(A) % Matriz 3x3 con la exponencial de A componente a componente. ans = 2.718281828459046 1.648721270700128 1.395612425086090 1.648721270700128 1.395612425086090 1.284025416687741 1.395612425086090 1.284025416687741 1.221402758160170 Aclaración: MatLab está desarrollado en inglés, razón por la cual el nombre de muchas funciones se construye abreviando adecuadamente la palabra inglesa correspondiente. Por ejemplo, el seno de un ángulo es sin y no sen. Lo mismo ocurre con instrucciones como sqrt, rand o ceil y round. Teclee en la línea de comandos help MatLab (>> help ceil o >> help round). sobre las dos últimas y lea lo que responde la ayuda en línea de Veamos ahora algunos ejemplos sencillos que ilustran el uso de alguna de las funciones listadas. El resto de la división de 14 entre 4 se obtiene como sigue: >> rem(14,4) % de la palabra inglesa ''reminder'' ans = 2 >> A= ceil(25*rand(3)) % matriz 3x3 de numeros enteros aleatorios comprendidos entre 0 y 25 A = 24 13 12 6 23 1 16 20 21 >> B= rem(A,4) % matriz cuyos elementos son los restos de dividir los de A entre 4. B = 0 1 0 2 3 1 3 0 0 1 √ Para calcular la raíz cuadrada de un número positivo, >> sqrt(225) ans = 15 >> A=rand(3); >> B=sqrt(A); Por tanto, 144, se escribe % matriz 3x3 de numeros aleatorios asignada a la variable A (recuerde el ;) % asigna a B la ra\'{\i}z cuadrada de la matriz A, calculada elemento a elemento sqrt(A)*sqrt(A) es. Compruébelo en su sesión de no es A; pero MatLab : sqrt(A).*sqrt(A) (con un punto delante del producto) sí lo >> sqrt(A)*sqrt(A) - A % debe dar una matriz distinta de la matriz nula >> sqrt(A).*sqrt(A) - A % (con punto delate de *) debe dar la matriz nula Para calcular las razones trigonométricas de un ángulo expresado en radianes se emplean las funciones cos, tan. sin, Por ejemplo, >> sin(pi/6) ans = 0.500000000000000 Si el ángulo viene expresado en grados, se deben emplear las funciones sind, cosd, tand (la d del nal quiere representar la palabra inglesa degree). El ángulo cuyo coseno es -0.5 se calcula mediante la función arco coseno (acos en MatLab ), etc. PRACTIQUE. Dedique ahora cinco minutos a usar todas estas funciones. Hágalas actuar sobre escalares, vectores y matrices que debería generar sin necesidad de teclear elemento a elemento. Al hacerlo, observe los resultados que va obteniendo con atención. Esté pendiente de la coherencia de los mismos. Es importante que no se limite a teclear instrucciones y pulsar las tecla instrucciones como 2.1. nthroot(-16,4) o acos(25). enter. Por ejemplo, observe y entienda los resultados de Si surge alguna duda, use el comando help de Introducción a los grácos bidimensionales en MatLab. MatLab Se introducen a continuación varias características básicas de la función plot de MatLab, que le van a MatLab incorpora permitir generar de manera sencilla algunos grácos bidimensionales. Conviene decir que unas capacidades grácas (en dos y tres dimensiones) muy completas y a la vez complejas en las que no se va a profundizar. El comando plot(x,y) se utiliza para crear una representación gráca bidimensional, donde vectores (da igual que sean vectores la o columna). El vector y proporciona las ordenadas y el x x e y son las abscisas, por tanto ambos deben temer el mismo número de elementos. Si solamente se especica un vector, plot(y), MatLab entiende que el vector que se omite es el primer argumento, x, y lo considera igual al vector de los índices x=[1,2,3,...,lenght(y)] que pasan a ser las abscisas del gráco (aquí, length(y) es el número de componentes del vector y). Por ejemplo, >> x=linspace(-1,1,7) >> y = [0 0.73 >> plot(x,y) % vector de abscisas con 7 numeros equiespaciados entre -1 y 1 % ordenados de menor a mayor (observe el resultado en su pantalla) 1.10 1.29 1.40 1.46 1.50]b % vector de ordenadas con los datos 4 Observe que MatLab abre un nueva ventana, Figure 1 en la que se representa la gráca. En ella las abscisas son las componentes equiespaciados del vector >> plot(y) x. Si ahora introducimos % solamente un argumento Observe que, aunque el aspecto de la gráca es el mismo, ahora las abscisas son los enteros del 1 al 7 y no las componentes del vector x. Por otra parte, esta segunda gráca se ha generado en la misma ventana Figure 1, eliminando la gráca previa, a la que ya no se tiene acceso, que se ha borrado para mostrar la siguiente generada por el comando plot(y). Este comportamiento es el que MatLab presenta por defecto. Además, también por defecto, dibuja una línea recta entre cada par de puntos consecutivos, (x(i), y(i)), i = 1, · · · , length(y), En denitiva, hay un buen número de opciones por defecto que plot MatLab MatLab que representa. aplica cuando se usa el comando que pueden modicase a voluntad y hay otras muchas opciones que, sin activarse por defecto, se pueden especicar al ejecutarlo. Se comentan algunas a continuación. 5 ASPECTO DE LA GRÁFICA. Conviene entender que, como se ha dicho, lo que el comando plot dibuja (x(i), y(i)) que, por defecto, une por líneas rectas cuando construye la gura. El comando plot tiene parámetros adicionales que nos permiten especicar el color y tipo de línea (evitando, son los puntos por ejemplo, que una los puntos por rectas) o los símbolos utilizados como marcadores de los puntos que se representan. Por ejemplo, una forma típica de introducirlo podría ser: (copie la instrucción y péguela en la línea de comandos de su sesión de MatLab para ejecutarla) >> plot(x,y,'-mo','linewidth',2,'markersize',12,'markeredgecolor','b','markerfacecolor','y') En ella, los dos primeros parámetros son las coordenadas de los puntos (x(i), y(i)) (contenidos en los vectores x e y) que se van a representar. El tercer parámetro especica el tipo línea y puede contener tres datos entre Estilo de línea (el guión - signica sólido y es Color de línea (m signica magenta) y Símbolo para la forma de representar el punto (o signica círculo). Las comillas simples ('-mo' en el ejemplo) cuyo signicado es: la opción por defecto en la que se dibuja una recta entre cada par de puntos consecutivos), posibles opciones para estos tres parámetros (que pueden verse al teclear help plot) son: Símbolos para la forma de representar el punto Los restantes argumentos, 'linewidth',2,'markersize',12,'markeredgecolor','b','markerfacecolor','y', se explican por sí mismos a la vista del resultado que produce el comando: >> plot(x,y,'-mo','linewidth',2,'markersize',12,'markeredgecolor','b','markerfacecolor','y') 6 ETIQUETAS, TÍTULO Y LEYENDAS Las decoraciones del gráco (etiquetas en el eje X y en el eje Y, título, etc.) se pueden hacer mediante llamadas a comandos concretos como son xlabel, ylabel, title y legend entre otros. Por ejemplo, supongamos que en un experimento de carga de un condensador se ha medido la diferencia de potencial, V, entre las placas del condensador en función del tiempo, t, desde que se conecta la batería. El resultado de las medidas es t(seg) 0 10 20 30 40 50 60 70 80 V( volt) 0 0.73 1.10 1.29 1.40 1.46 1.50 1.52 1.53 Las siguientes instrucciones en >> >> >> >> >> >> >> MatLab (que no es necesario que ejecute en su sesión de trabajo) t= [0 10 20 30 40 50 60 70 80]; V=[0 0.73 1.10 1.29 1.40 1.46 1.50 1.52 1.53]; plot(t,V,'- -rv','linewidth',2,'markersize',8,'markeredgecolor','b','markerfacecolor','b') title('Carga de un condensador') xlabel('t(seg)') ylabel('d.d.p (volt)') legend('potencial de carga en función del tiempo','Location','SouthEast' ) Producen la siguiente gráca VARIAS GRÁFICAS EN UNA MISMA FIGURA: EL COMANDO hold Considere la función que representa una oscilación amortiguada remos representar grácamente a la vez el desplazamiento cambiada de signo −A(t), las tres en función del tiempo x(t), t. x(t) = 5,0 exp(−7t) sin(100t + 1,5). QueA(t) = 5exp(−7t) y la amplitud la amplitud Sin embargo y por defecto, cada vez que construye una gráca elimina la anterior. Para evitar este comportamiento se utiliza el comando hold on La instrucción le dice a MatLab que incluya en la misma ventana que se generen hasta que se encuentre con las instrucción hold off. Figure 1 todas las grácas Las siguientes instrucciones ilustran su funcionamiento. >> >> >> >> >> >> >> >> >> t=linspace(0,0.7,100) . % abscisas que se van a considerar x= 5*exp(-7*t) *sin(100*t+1.5) % recuerde que las funciones exp y sin están predenidas. A= 5*exp(-7*t); hold on % todas las grácas en la misma ventana hasta el próximo hold o plot(t,x,'r') plot(t,A,'b') plot(t,-A,'b') legend('desplazamiento','amplitud') title('Oscilaciones amortiguadas') 7 MatLab hold on/off. >> >> xlabel('t') ylabel('x,A') MatLab incluye las tres grácas generadas por los tres comandos plot en la misma ventana. Y seguirá incluyendo todas las que se generen hasta que se encuentre la instrucción hold off, en cuyo caso recuperará su comportamiento por defecto. Por ejemplo, si construimos otra gráca (sin introducir hold o antes): >> >> >> xx=linspace(0,0.7,25); yy=5*xx .2; plot(xx,yy,'k') % 'k' color negro para el estilo de línea El último plot se genera encima de lo que ya se ha representado, produciendo: Ahora la instrucción >> hold o recupera el comportamiento por defecto de MatLab, con lo que el próximo plot eliminará el contenido de la Figura anterior; es decir, ahora las instrucciones >> >> >> xx=linspace(0,0.7,25); yy=5*xx .2; plot(xx,yy,'k') generan la gráca 8 y la anterior ha sido eliminada. 2.2. Ficheros Script en MatLab Como se ha podido comprobar en lo que se ha hecho hasta ahora, cada vez que introducimos una instrucción en la línea de comandos y pulsamos enter se ejecuta el último comando y los comandos que hemos ejecutado anteriormente no se pueden cambiar. Un modo diferente de proceder al trabajar con MatLab es crear un chero de texto con la lista de comandos, guardarlos con un nombre acabado en .m y luego ejecutar el nombre del chero en la línea de comandos. Al hacerlo, los comandos guardados se ejecutan uno tras otro en orden consecutivo. Este tipo de cheros se llaman scripts. Pueden editarse para cambiar su contenido, guardarlos y volverlos a ejecutar para ver el efecto de los cambios. Otra ventaja, es que podemos reutilizar una parte o todo el código del chero, copiando líneas Edit/Copy (Ctrl+C) de un chero y pegándolas Edit/Paste (Ctrl+V) en el lugar apropiado de otro chero. O bien, guardándolo con otro nombre y usando el editor para modicarlo. Para escribir un chero script se abre el Editor seleccionando New Script en la parte izquierda del menu HOME (o New y después script en el desplegable). También se puede crear un script pulsando Ctrl+N. A continuación se escriben los comandos que queremos guardar, el chero debe llevar la extensión m. Al crear el script, este se abre automáticamente en el editor de una ventana encima de la Command Window, MatLab con el nombre untitled1, creando como se muestra en la gura siguiente. De esta manera se facilita la posibilidad de modicar el script y ejecutarlo sin tener que cambiar la conguración de las ventanas. 9 Abra ahora el script Current folder. Grafica1.m dando dos clicks encima del nombre del chero que gura en la ventana Este script contiene la lista de comandos: t=linspace(0,0.7,100) % abscisas que se van a considerar x= 5*exp(-7*t).*sin(100*t+1.5) % recuerde que las funciones exp y sin est\'{a}n predefinidas. A= 5*exp(-7*t); hold on % todas las gr\'{a}ficas en la misma ventana hasta el pr\'{o}ximo hold off plot(t,x,'r') plot(t,A,'b') plot(,t,-A,'b') legend('desplazamiento','amplitud') title('Oscilaciones amortiguadas') xlabel('t') ylabel('x,A') hold off Ahora, escriba al principio del chero en una línea nueva, el siguiente texto que da una idea de lo que hacen las instrucciones contenidas en el script. % Este script dibuja varias grácas en la misma gura. Grafica1.m. Para ello, seleccione Save del Menu principal Guardar. El script debe ser el que se muestra en la gura A continuación salve el script con el mismo nombre de MatLab, de nombre al chero y pulse el botón siguiente: Sitúese ahora en la línea de comandos y ejecute la instrucción: >> help Graca1 % muestra por pantalla el texto del script situado Este script dibuja varias gráficas en la misma figura. a la derecha de % Compruebe ahora que la instrucción >> Graca1 produce la misma gura que se ha generado anteriormente introduciendo los comandos uno por uno. hold off nal la instrucción grid on. Hágalo y pulse Save, para que el chero modicado sustituya al anterior, y vuélvalo a ejecutar desde la línea de comandos. Modicamos ahora el script para incluir antes del sobre Observe cómo este nuevo comando añade una cuadrícula en la gura. Esto se ha conseguido sin necesidad de introducir de nuevo todos los comandos uno a uno. Por otra parte, cuando se ejecuta un script las variables que en él se han asignado aparecen denidas en el Workspace; es decir, son globales . En el ejemplo considerado las variables t, x y A están en el Workspace y se pueden volver a utilizar desde la línea de comandos. Teclee, por ejemplo, >> plot(t,A) y compruebe que se genera la gura correspondiente (las variables son globales y se han guardado en el Workspace). Esta propiedad obliga a tener muy en cuenta cómo se nombran las variables de un script. Si el nombre de alguna de ellas coincide con el de una variable de interés previamente denida en el 10 Workspace, al ejecutar el script esta variable será borrada y su valor cambiado por el que se le asigna en el script. Es en este sentido en el que se usa la expresión variables globales. 3. Ficheros Function de MatLab. Estamos acostumbrados a trabajar con funciones del tipo en términos de la variable la expresión de f. x. Se calcula un valor de Como se ha visto anteriormente, y y = f (x) donde f (x) es una expresión matemática x (entrada) en (salida) cuando se proporciona un valor de MatLab tiene muchas funciones predenidas, como el seno, la raíz cuadrada, etc. Además, MatLab permite denir nuestras propias funciones, guardarlas en un chero y usarlas de un modo semejante a las funciones predenidas. En muchos casos las funciones son los componentes básicos dentro de un programa de ordenador. Habitualmente, un programa se subdivide en tareas y cada una de ellas es llevada a cabo por una función. A esta forma de resolver los problemas se denomina programación estructurada. Una de las principales ventajas de las funciones (ya puesta de maniesto con los scripts) es la posibilidad de reutilizar el código en otros programas distintos al cual fueron denidas. La entrada y la salida puede ser una o varias variables, cada una de ellas puede ser un escalar, un vector o una matriz de cualquier tamaño o también otras estructuras de datos más complicadas. Las funciones se crean del mismo modo que un script. En el menú seleccione Untitled Function. Home De forma análoga a como ocurre al crear un script, pulse en MatLab New y en el desplegable abre en el editor la ventana con un chero en el que, por defecto, aparece la estructura de una función. Como se ve, la estructura básica se puede resumir así: function variables_salida=nombre_funcion(variables_entrada) sentencias end (opcional) Se describe a continuación: La primera línea en el editor es la denición de la función que siempre debe comenzar con la palabra clave function. La sintaxis es: function variables_salida=nombre_funcion(variables_entrada) •nombre_funcion, es el nombre signicativo que se le asigna a la función, que debe coincidir con el nombre del chero de extensión .m en el que se guarda el código de dicha función. Observe que la extensión con que se guardan estos cheros es la misma que se utiliza para los scripts. Ambos se diferencian por el hecho, ya mencionado, de que la primera línea del código de una función lleva la palabra clave 11 function según se acaba de describir. Las reglas para nombrar un función son las mismas que para las variables, los nombres no deben de incluir espacios, ni se pueden utilizar palabras reservadas por MatLab. •variables_entrada, es el conjunto de parámetros que se le pasa a la función. Los nombres de las variables van entre paréntesis y separados por coma. •variables_salida, es el valor o conjunto de valores de las variables devueltos por la función. Las variables de salida van después de la palabra reservada function entre corchetes cuadrados y separados por comas si hay varias. sentencias, líneas de código que tomando los valores de los parámetros de entrada calculan mediante expresiones los valores que devuelve la función. end, marca el nal de la función. Es opcional (salvo en las funciones anidadas) pero es conveniente acos- tumbrarse a ponerlo al nalizar la función. Tenga en cuenta que en versiones anteriores de MatLab pueden aparece advertencias relacionadas con su inclusión. Opcionalmente, en la segunda línea (precedido de un %) se pone un comentario en el que se explica la tarea que realiza la función. Este texto aparece por pantalla (al igual que en los script) cuando se ejecuta el comando help sobre el nombre de la función. A continuación, se explican algunos detalles sobre las variables de entrada y de salida: Cuando una función no devuelve ningún valor, su primera línea es: function nombre_funcion(variables_entrada) Cuando una función no precisa de variables de entrada, su primera línea es: function variable_salida=nombre_funcion Cuando una función devuelve un solo resultado, su primera línea se puede escribir de dos maneras function [y]=nombre_funcion(a,b,c) o function y=nombre_funcion(a,b,c) En general, deniremos la primera línea de una función del siguiente modo: function [y1,y2]=nombre_funcion(a,b,c) si es que tiene tres argumentos a, b y c como variables de entrada y devuelve dos resultados en las variables y1 e y2. Una función se llama del mismo modo que las funciones predenidas. Las funciones se pueden llamar desde la ventana de comandos, desde un chero script o desde otra función. Atención. Al contrario de lo que ocurre con las variables asignadas en un script, todas las variables en una función son locales, incluyendo las de entrada y las de salida. Por tanto, al ejecutar una función las variables que asigna no aparecen en el Workspace y no borran variables globales preexistentes. Como ilustración, consideramos un ejemplo muy sencillo. Se trata de crear una función que sume dos números. Para ello, abra un chero function en el editor. Escriba el código function [z] = suma (x,y) % Esta función suma dos números x e y % y devuelve el resultado de la suma en z z=x+y; %efectúa la suma end A la función suma se le pasan dos datos en las variables x e y, y devuelve el resultado en la variable z. Guarde la función en un chero de nombre suma.m. Observe que la función se guarda en un chero .m que tiene el mismo nombre que la función. Ejecute ahora el comando: >> help suma % Esta función suma dos números x e y % y devuelve el resultado de la suma en z Desde la línea de comandos, la función se llama mediante la instrucción: >> suma(2,3) ans= 12 5 Observe que ninguna de las variables locales usadas por la función suma están en el Workspace. No son globales y, por tanto, no se puede acceder a ellas desde la ventana de comandos. Teclee, por ejemplo: >> z Undened function or variable 'z'. También se puede asignar una variable global al resultado: >> >> s = suma(2,3); % no muestra el resultado por pantalla, pero lo guarda en s s s= 5 3.1. Cálculo de las raíces de una ecuación: Teorema de Bolzano y el método de la bisección. Nos planteamos aquí abordar, utilizando siguiente: dada f : I ⊆ < → <, de construir una función en MatLab y los conocimientos matemáticos que poseemos, el problema continua en MatLab I, hallar un valor x∈I tal que f (x) = 0. En concreto, se trata que sea capaz de dar una aproximación aceptable a una raíz de f. El primer paso es diseñar un algoritmo que, posteriormente, se traducirá en el código que contendrá la función de MatLab. El algoritmo se va a basar en un procedimiento iterativo (basado en el teorema de Bolzano) en el que se avanza progresivamente hasta encontrar una aproximación satisfactoria de la solución. Este algoritmo se denomina Método de la bisección. Un algoritmo que puede deducirse a partir de estas ideas es: 13 El algoritmo garantiza que, si en el intervalo inicial de connamiento (bracket inicial) se produce un cambio de signo, todos los sucesivos intervalos que se van obteniendo iterativamente (también llamados brackets (palabra inglesa)) siempre contienen al menos una raíz de la función f. De hecho, para el error que se comete en cada iteración, se tiene Por tanto: De aquí se concluye que el algoritmo iterativo de la bisección es convergente. A la hora de utilizar este algoritmo en un ordenador (programándolo en MatLab o en cualquier lenguaje de programación), es obvio que no se puede hacer tender el número de iteraciones a innito. Esto obliga a encontrar un criterio de parada que debe cumplir dos condiciones básicas: 14 el número de pasos debe ser nito (y no demasiado grande por los errores de redondeo que se puedan acumular). Esto implica que la solución que dará el algoritmo será aproximada, el criterio que se utilice debe garantizar que la solución numérica calculada sea lo sucientemente buena; es decir, que aproxime sucientemente bien la solución exacta. En el problema que nos ocupa se pueden considerar, por ejemplo, los siguientes criterios: f (x) = 0. Por tanto, la solución xn aproximada que se considere, n-ésima iteración, debe cumplir una condición del tipo |f (xn )| < tol1 . Si esta desigualdad se cumple, se para el algoritmo, que continua efectuando más iteraciones en caso contrario. Aquí, tol1 es una tolerancia que debe ser un número sucientemente pequeño para que la aproximación xn pueda considerarse La solución que se busca lo es del problema calculada en la una solución aceptable. Evaluar si en cada iteración la mejora de la aproximación es signicativa; es decir, si se cumple una desigualdad del estilo |f (xn ) − f (xn−1 )| < tol2 en cuyo caso se paran las iteraciones, que continúan en caso contrario. Evaluar si en cada iteración la solución aproximada cambia signicativamente; es decir, si se cumple una desigualdad del estilo |xn − xn−1 | < tol3 en cuyo caso se paran las iteraciones, que continúan en caso contrario. Evaluar en cada iteración si el error es sucientemente pequeño usando la desigualdad que provoca la parada en las iteraciones. 15 (bn − an )/2 < tol4