Subido por jamescele3

Practica1 MatEIE feb2019

Anuncio
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
Descargar