You are on page 1of 20

Universidad Técnica Federico Santa María

Departamento de Matemática
Laboratorio de Computación para las Aplicaciones de la Matemática en Ingeniería

Laboratorio Mat 270 - Análisis Numérico


PRIMERA SESIÓN

Introducción y Arimética Flotante


Semana del Lunes 26 de Marzo al 30 de Marzo del 2018

Coordinador Académico del Laboratorio : Profesor Jaime Figueroa Nieto (jaime.gueroa@usm.cl)


Ayudante Coordinador y de Software : Hernán Caviedes (hernan.caviedes@alumnos.usm.cl)
Sitio web : http://lab.mat.utfsm.cl
Atención Alumnos : Vía e-mail a los ayudantes de sala y ayudante coordinador.

24 de marzo de 2018

1
Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Índice

1. Evaluación Laboratorio 3
2. Comandos Básicos 3
2.1. Utilización de ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Operaciones Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.1. Operaciones +, -, *, / y b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.2. Operaciones .*, ./ y b. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.3. Sentencias de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.4. Funciones en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.5. Denición de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.6. Grácos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.7. Solución de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.8. Derivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.9. Integración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Calculos numéricos 12
3.1. Como introducir números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2. Presición y exactitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Presición aumentada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4. Números de máquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5. Arimética de punto otante y errores de redondeo . . . . . . . . . . . . . . . . . . . . 14
3.6. Propagación de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.7. Problemas bien condicionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.7.1. Incidencia de los factores de condicionamiento en el error . . . . . . . . . . . 16
3.7.2. Buen Condicionamiento en una variable . . . . . . . . . . . . . . . . . . . . . 17
3.7.3. Raíces de un polinomio de grado elevado . . . . . . . . . . . . . . . . . . . . . 18
3.7.4. Buen condicionamiento en varias variables . . . . . . . . . . . . . . . . . . . . 19

Primer semestre 2018 - MATLAB 2


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

1. Evaluación Laboratorio

La nota nal del laboratorio NL se obtendrá según la siguiente fórmula:

N L = 0,1 ∗ N otaAsistencia + 0,4 ∗ N otaP reinf ormes + 0,5 ∗ N otaControles


Esta nota valdrá por la nota de tareas, esto es 40 % de la nota nal siempre y cuando el promedio
de certamenes sea mayor o igual a 55.

2. Comandos Básicos

2.1. Utilización de ayuda


Puede ver la ayuda de Matlab en el menú Help, entre las alternativas que allí encuentra le
podemos sugerir:
MATLAB Help
Demos
También puede ingresar el comando help en la línea de comandos de Matlab, como se muestra a
continuación:

clear
format long
help
El resultado es una lista de categorías de ayuda, las cuales se pueden elegir mediante el mismo
comando help, seguido del nombre de la coategoría. Por ejemplo:

help elmat
Esta vez, el resultado es la lista de comandos de esa categoría. Para ver la ayuda de un comando
especíco, se ingresa, por ejemplo:

help ones
Por supuesto que si usted conoce el nombre del comando del cual desea ver la ayuda, puede
ingresar directamente el comando help, seguido del nombre del comando en cuestión.
La versión actual de MATLAB instalada en el laboratorio, permite clickear en el nombre de la fun-
ción que aparece en pantalla. Esto despliega la ayuda de la función automáticamente.

2.2. Operaciones Básicas


2.2.1. Operaciones +, -, *, / y b
Las operaciones básicas son consideradas como operaciones matriciales. Existen varias formas de
introducir una matriz al software, mostraremos las más importantes:

Primer semestre 2018 - MATLAB 3


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Ejemplo 1: Denimos las las y las separamos ";"

clear
B=[1 3 5;2 4 6;3 6 7]
Ejemplo 2: Le damos un rango de numeros para la la.
clear
a=[2:7;3:8;4:9]
Ahora que sabe como ingresar de forma básica una matriz al programa, proceda a realizar las
operaciones tipicas:
NOTA: En algunos casos existe recursividad de ejemplos, por ende ud. debe ir revisando los ejemplos
de forma ordenada, sino el software le informará que existe un error de variable no denida.
Por ejemplo, para la resta (o suma):

clear
a=[2.4 5.4 5.3]
b=[1.6 4.6 8.7]
c=a-b

Una excepción es sumar (o restar) un escalar a un vector o matriz, en cuyo caso simplemente se
suma el escalar a cada elemento del vector o matriz.

A=[1:3;2:4;3:5]
A+4

NOTA: Al intentar realizar una suma o resta de vectores o matrices de distinto tamaño se
recibirá un mensaje de error, por ejemplo:
La multiplicación normal es interpretada como multiplicación matricial:
A=[1:3;2:4;3:5]
b=[1;2;3]
A*b
También se recibirá un error si se intenta multiplicar matrices de tamaño inapropiado.
La división es interpretada como la multiplicación matricial entre una matriz y la inversa de la otra:

B=[4 7 2; 78 23 8; 67 1 6];
A/B

La operacion "^çorresponde a la potencia y también es entendida matricialmente, por ejemplo:


A^2
Hemos multiplicado matricialmente la matriz A por si misma.

Primer semestre 2018 - MATLAB 4


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

2.2.2. Operaciones .*, ./ y .b


Estas operaciones se utilizan .elemento a elemento", es decir, cada elemento de una matriz o
vector es multiplicado por su correspondiente en la otra matriz.
Un ejemplo de ".*.es:
a=[1 4 7 2];
b=[1 3 2 2.5];
c=b.*a
La división es realizada de la misma forma que la multiplicación.
Para el caso del la potencia, el comando es entendido como .elevar cada elemento de la matriz o
vector al valor indicado".
Por ejemplo:
a.^2

2.2.3. Sentencias de Control


Las sentencias de control se utilizan para decidir si un comando debe ejecutarse o no. O bien
para repetir una serie de comandos tantas veces como sea necesario.

Sentencia If

La sentencia If sirve para decidir si realizar una acción o no, dependiendo de la veracidad de una
condición.

La sintaxis es la siguiente:

if condicion1,
comandos...
elseif condicion2
comandos...
else
comandos...
end

Un ejemplo del uso de If es el siguiente:


clear
a=2;
if a > 2,
b=1;
elseif a <= 2,
b=0;
else
b=-1;
end
b

Primer semestre 2018 - MATLAB 5


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Sentencia While

While realiza un conjunto de operaciones hasta que cierta condición sea falsa.

La sintaxis es la siguiente:

while condicion,
comandos...
end
Ejemplo de While: Fijarse que se dene un contador antes de la sentencia while

i=0
while i<=10,
i=i+1
end

Sentencia For

La sentencia For incrementa una variable desde un valor inicial hasta uno nal. En cada incremento
de la variable, se realiza un grupo de comandos.

La sintaxis es la siguiente:

for i=a:b:c,
comandos
end

Donde a es el valor inicial, c el nal, y b es la cantidad en que será incrementado i en cada repetición.

Ejemplo de For:
for i=1:2:10,
a(i)= i^2
end

2.2.4. Funciones en MATLAB


Existen muchisimas funciones implementadas en MATLAB. Un ejemplo es la funcion Seno:
clear
sin(2*pi/2)
Observese que la constante pi se encuentra denida en MATLAB:
pi
Funciones de uso común

Primer semestre 2018 - MATLAB 6


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

A continuación se muestran algunas de las funciones incluidas en MATLAB.

zeros Matriz de ceros


ones Matriz de unos
eye Matriz identidad
rand Matriz aleatoria con distribución uniforme
randn Matriz aleatoria con distribución normal (gaussiana)
linspace Vector espaciado linealmente
logspace Vector espaciado en forma logarítmica
hilb Matriz de Hilbert
magic Matriz cuya suma de elementos en las columnas, las y diagonal es igual
Tabla 2.2.1: Funciones para generación de matrices

sin Seno
cos Coseno
tan Tangente
asin Arco Seno
acos Arco Coseno
atan Arco Tangente
log Logaritmo natural
log10 Logaritmo en base 10
exp Exponencial
sinh Seno Hiperbólico
cosh Coseno Hiperbólico
tanh Tangente Hiperbólica
sqrt Raíz cuadrada
Tabla 2.2.2: Funciones matemáticas

inv Inversa de una matriz


det Determinante
eig Valores propios y vectores propios
norm Norma
rank Rango
orth Ortogonalización
inline Denición de una función algebraica
Tabla 2.2.3: Funciones para la manipulación de matrices

Si la función recibe más de un argumento, deben ingresarse separados por comas, por ejemplo:
r=rand(4,3)
Para obtener ayuda sobre el uso de alguna funcion puede utilizarse el comando "help":
help rand

Primer semestre 2018 - MATLAB 7


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

2.2.5. Denición de funciones


Existen varias formas de denir funciones en MATLAB.

Primera Forma
clear
f=inline('x.^2.*sin(x.^3)')

Evaluemos la función en algunos puntos:


a=f(1)
f([1 1.5 2.3])
De esta forma se resalta la variable que se usa (en este caso x), se presta bien para evaluar y
gracar.

Segunda Forma
syms x
g=x^2*sin(x)
En esta forma la variable usada queda implícita (simbólica) y se presta muy bien para derivar,
integrar, gracar pero no para evaluar.
Existe una tercera forma de denir funciones. Se utiliza cuando las funciones son denidas por
tramos, o para funciones que emplean uno o más comandos de MATLAB para obtener un resultado.
Esto se realiza almacenando el código de la función en un archivo.
function y=h(x)

if((x>=1)&(x<=2)),
y=x^2;
elseif((x>2)&(x<=3)),
y=x+1;
end

Las siguientes líneas crean esta función y la guardan en el directorio de trabajo.


cd d:
for conta=1:2
func='functiony=h(x)\n\nif ((x>=1)&(x<=2)),\n\ty=x^2;\nelseif ((x>2)&(x<=3)),\n\ty=x+1;\nend';
a='h.m';
if (~exist(a,'file')),
fid=fopen(a,'w');
func = strrep(func,'%','%%');
fprintf(fid,func);
fclose(fid);
disp('La funcion ha sido creada');
end
end

Primer semestre 2018 - MATLAB 8


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Para llamar a la función, simplemente se escribe su nombre y se le da un argumento:

h(2.5)

Su ayudante lo instruirá respecto a la creación de funciones.

2.2.6. Grácos
Es fundamental tanto para hacerse una idea de un problema como para contar con cálculos
aproximados (por observación).
Si la funcion esta denida a traves de:
clear
f=inline('x.^3.*sin(x.^2)','x')

y se quiere tener un gráco de ella en el intervalo [0,10] entonces conviene hacer:


figure(1); %abre una ventana de grafico
fplot(f,[0 10]); %grafica la función en el intervalo especificado
grid on; %muestra la malla del grafico

En cambio si la función esta denida simbólicamente:


syms x;
g = x^3*sin(x)

Se hace:
figure(1);
ezplot(g,[0 5]);
grid on;

También se puede gracar numéricamente. Esto es, evaluar la función en varios puntos seguidos
y gracar dichos puntos. Esto también es útil si no se cuenta con una expresión analítica de
lo que se quiere gracar. En este caso se utilza el comando plot:
x=0:0.001:5;
y=x.^2.*sin(x.^3);
figure(1);
plot(x,y);
grid on;

El comando plot permite gracar múltiples funciones en un solo graco:


y2=x.^2.*sin(x);
y3=x;
figure(1);
plot(x,y,x,y2,x,y3);
grid on;

Primer semestre 2018 - MATLAB 9


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Existen varias opciones para gracar. La ayuda del comando plot explica estas opciones:
help plot
Por ejemplo, un gráco en color rojo y con línea segmentada:
figure(1);
plot(x,y,'r--');
grid on;
También puede añadir los nombres de los ejes y un título al dibujo
figure(1);
plot(x,y,'r--');
grid on;
xlabel('X'); %añade etiqueta al eje horizontal
ylabel('Y'); %añade etiqueta al eje vertical
title('Grafico número uno');

2.2.7. Solución de ecuaciones


Este tema también es fundamental puesto que es frecuente tener que resolver una ecuación
complicada. Respecto de ecuaciones polinomiales, en la actualidad cualquier software da todas las
soluciones posibles. Pero para otro tipo de ecuaciones la situación es relativa. Si es posible, antes de
resolver una ecuación es bueno realizar un trazado de la función que la dene.

Ejemplo:

El siguiente ejemplo involucra funciones senoidales


clear
f=inline('sin(3*x) + cos(2*x)');
figure(1);
fplot(f,[0 2*pi]);
grid on;
El dibujo nos muestra que en el intervalo es posible encontrar dos soluciones para la ecuación: ,
una cerca de y otra cerca de .¾Cómo encontrarlas?
Una alternativa es usar el comando Solve, pero es probable que no sea útil, por cuanto se trata de
una ecuación trigonométrica y eso sea difícil aún para el computador. La alternativa directa, donde
se usa la información salida del gráco, esto es usando el hecho que una raíz esté cerca de 1 y otra
cerca de 2.5:
g=inline('sin(3*x) + cos(2*x)-0.5');
fzero(g,1)
NOTA: Fijese en el comando fzero!!! ¾Qué nos entrega?

Primer semestre 2018 - MATLAB 10


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

2.2.8. Derivación
El comando para derivar opera sobre variables denidas simbólicamente:
clear
syms x z;
g=sin(x^3)

El comando para derivar es di(f), donde f es la función a derivar, denida simbólicamente.

Veamos qué sucede al utilizarlo con g:


diff(g,4)
Para la derivada n-ésima, se utiliza di(f,n).
diff(2*z^3*x^2,x,2)
diff(2*z^3*x^2,z,2)

2.2.9. Integración
Para integrar una expresión, se utiliza el comando int().
Para obtener la antiderivada de f con respecto a la variable x: int(f,x)
Para obtener la integral denidade f desde a hasta b con respecto a la variable x: int(f,x,a,b)

Ejemplos:
clear
syms x y;
int(1/x)
Note que no fue necesario pasar la variable independiente como segundo argumento. Si la función
tiene un solo argumento, MATLAB efectúa la integración con respecto a esa variable.
Si hay más de una variable en la función, debe especicarse la variable de integración.
También puede efectuarse la integral de varias funciones al mismo tiempo.
int([1/x x^3/3 cos(x)*sin(y)])
int([1/x x^3/3 cos(x)*sin(y)],x,pi,4.5*pi)
Considere el siguiente ejemplo:
int(sin(x)/x,x,pi/4,pi/2)
Utilicemos el método de integración numérica quadl incluído en Matlab:
f=inline('sin(x)./x');
quadl(f,pi/4,pi/2)
¾Que hizo el comando quadl?
help quadl

Primer semestre 2018 - MATLAB 11


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

3. Calculos numéricos

3.1. Como introducir números


Números aproximados con 200 decimales de precision:
digits(200);
vpa(pi)
vpa(0.5*pi)

Problema: √
Experimentar con e o con 2 en vez de π

3.2. Presición y exactitud


Primero veamos lo que nos dice el help en línea de Matlab:
http://www.mathworks.com/access/helpdesk/help/toolbox/daq/c1_int15.html
RESUMEN:
Presición : Es el número de dígitos signicativos y se relaciona con el error relativo.
Exactitud : Es el número de dígitos a la derecha del punto decimal en el número y se relaciona con el
error absoluto.
Necesidad de Precisión extra
No se presenta ningún problema en realizar el siguiente cálculo por que el software aumenta la
precisión usando los comandos digits y vpa y puede mostrar los 30 dígitos que se piden.
clear
digits(30);
vpa(sin(10^40))
Pero hay inconveniente con lo siguiente:
digits(30);
vpa(sin(10^400))
El software no es capaz de obtener el resultado, necesita más precisión.

3.3. Presición aumentada


La cantidad de dígitos, usando el Symbolic Math Toolbox de MATLAB, se puede aumentar hasta
524280. Estos se pueden aumentar hasta un millón. Sin embargo, acorde con ello los datos deben
ingresarse con esa precisión. El software descuenta la precisión a medida que la va perdiendo.

Veamos las grácas:

Primer semestre 2018 - MATLAB 12


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

clear
x = 0:(2*pi/10000):(2*pi);
y = sin(10^10+x);
figure(1);
plot(x,y);
grid on

clear
x = 0:(2*pi/10000):(2*pi);
y = sin(10^15+x);
figure(1);
plot(x,y);
grid on

clear
x = 0:(2*pi/10000):(2*pi);
y = sin(10^16+x);
figure(1);
plot(x,y);
grid on

x = 0:(2*pi/70):(2*pi);
y = sin(10^16+x);
plot(x,y,'b.')
grid on

Podemos concluir que al calcular y = sin(10k + x) para k grande, el argumento de la función


sin() es muy grande para la precisión de la máquina, con lo cual se pierde precisión en el resultado.

3.4. Números de máquina


Es conocido el siguiente test para averiguar el numero de máquina que se esta usando. El dato
n es el número de maquina máximo probable. Para cuando encuentra el número de máquina el test
aborta.
function nmaq(n)

a=1;
for k=1:n
if (1+0.5*10^(-k)) <= 1,
disp(sprintf('El EPS en uso es %d',k));
a=0;
break;
end

Primer semestre 2018 - MATLAB 13


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

end

if a,
disp(sprintf('El EPS en uso es al menos %d',k));
end

Si ingresamos n=20 como máximo número de máquina probable:


nmaq(20)

3.5. Arimética de punto otante y errores de redondeo


Denición. CERO DE UNA FUNCIÓN
Sea f : x ∈ D ⊂ < → <
Se dirá que x = s es un çero de f "si: f (s) = 0
Ejemplo:
1. El conjunto de ceros de f (x) = ex+2 − 1 es E = {−2}
2. El conjunto de ceros de la función f (x) = sin(x) es E = {k · π; k ∈ Z}
Teorema
Sea f (x) una función real continua denida para x ∈ [a, b] .
Sea  > 0 una medida del error absoluto y sea x = z ∈ [a, b].
Si el producto f (z − ) · f (z + ) < 0 entonces existe cero x = s de f de modo que:
|z − s| < 

OBS.
Del teorema resulta que Z es una aproximación de s con error absoluto a lo menos de  . Este
teorema es importante para probar la precisión.
Denición.
Si s = ±0.a1 a2 . . . · 10b se dirá que Z es un aproximación de s con a lo menos m dígitos signicativos
si:
|z − s| < 0,5 · 10b−m
Ejemplo
La función que da la longitud del arco y = x(x + 1) entre ( 1 , 1 ) y ( t , t2 ):
Z tp
f (t) = 1 + (1 + 2x)2 dx, t ∈ [1, 2]
1

Una solución aproximada de la ecuación f (t) = 2, es t = 1,543106501046570011. Determinar el


número de dígitos signicativos que tiene esa aproximación.

Primer semestre 2018 - MATLAB 14


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Nota. La idea no consiste en idear un algoritmo que calcule otra aproximación para compararla.
Se supone simplemente que no se dispone de otra y lo que importa es establecer la precisión.
Solución
Comprobemos primero que se trata efectivamente de una aproximación:
clear
z=1.543106501046570011;
digits(40);
syms x t
a=vpa(eval(int(sqrt(1+2*x)^2,1,z)))

Efectivamente es una aproximación de la ecuación:


Ahora veamos si al menos el segundo decimal es signicativo, para ello, hacemos z = 1.54 y pertur-
bamos el tercer decimal.
clear
z=1.54;
digits(40);
syms x t
a=eval(int(sqrt(1+(1+2*x)^2),1,z));
w=1.54-0.005;
q=1.54+0.005;
t=eval(int(sqrt(1+(1+2*x)^2),1,w)-2)*eval(int(sqrt(1+(1+2*x)^2),1,q)-2)
Los signos opuestos indican que sí lo es.
Trate Ud. de vericar si al menos el quinto dígito es signicativo. ¾Cómo lo haría?, ¾Se podrá pro-
gramar Matlab para que arroje la cantidad de cifras signicativas que tiene una aproximación?.

Se sabe que la aproximación tiene 12 DS.

Problema

Una aproximación del único cero de f (x) = 3 − ex−1 , es z = 1.54930614443405487 Calcule la
precisión de dicha aproximación usando para ello el teorema descrito.
Nota: La idea no consiste en idear un algoritmo que calcule otra aproximación para compararla. Se
supone simplemente que no se dispone de nada más y lo que importa es establecer la precisión.

3.6. Propagación de errores


Ejemplo
Conveniencia de lograr una forma anidada de modo de evaluar correctamente polinomios.
En el libro de Burden aparece el siguiente polinomio:
f (x) = x3 − 6,1x2 + 3,2x + 1,5

Primer semestre 2018 - MATLAB 15


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

y piden evaluar en x = 4.71 con la aritmética de 3 dígitos, esto es, redondeando todas las operaciones
a 3 dígitos.
Solución:

Matlab, es capaz de desarrollar este problema con solo ingresar el comando digits y vpa, el
primero le dirá al software con cuantos dígitos debe trabajar, y el segundo nos entregara todas los
cálculos de variables bajo las condiciones dadas por digits.
Primero, ingresemos la función de forma que podamos evaluarla en los puntos que sea necesario:
clear
syms x
f=inline('x^3-6.1*x^2+3.2*x+1.5','x')
digits(3);
vpa(f(4.71))
Burden señala que si hacemos x = 4,71, x3 = 105, veamos si es asi:
syms x
digits(20);
a=inline('x^3','x');
vpa(a(4.71))
ceil(a(4.71))
Vemos que el software nos entrega un valor que esta redondeado pero al entero más próximo
y que se encuentra por sobre el valor original, ahora esa es una función de Matlab, por lo que se
provocan diferencias al trabajar con números redondeados.

Evaluemos f (x) en 4.71, primero veamos lo que da el software. Después se hace con 3 D.S
f(4.71)
digits(3);
vpa(f(4.71))
Vemos que matlab nos entrega el mismo valor, solo que redondeado a 3 D.S, por lo que no
existe problema al trabajar con los comandos precisos, así evitamos los errores, que principalmente
se deben a una mala programación del usuario.
Ejercicio
Considere el polinomio siguiente:
q = 1 − 8x + 28x2 − 56x3 + 70x4 − 56x5 + 28x6 − 8x7 + x8

Evalue el polinomio con la aritmética de 3 D.S. en x = 1.01

3.7. Problemas bien condicionados.


3.7.1. Incidencia de los factores de condicionamiento en el error
Denición.

Primer semestre 2018 - MATLAB 16


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Un problema z = f (x1 , . . . , xn ) se dice bien condicionado si pequeños errores en los datos tiene por
efecto pequeños errores en el resultado.
Denición.
NÚMEROS DE CONDICIONAMIENTO.
Suponga que z = f (x1 , . . . , xn ) en que f es continuamente diferenciable
Se llaman números de condicionamiento de f con respecto a xi para i = 1, . . . , n
xi ∂z
ci = para i == 1, . . . , n (3.7.1)
z ∂xi
Observación. Un problema se dirá bien condicionado si los números de condicionamiento son, en
valor absoluto, pequeños del orden de 1

Se tiene en este caso que la relación entre los errores relativos es aproximadamente:
ez ' c1 ex1 + . . . + cn exn
Observación. Un problema se dirá bien condicionado si los números de condicionamiento son acota-
dos.

3.7.2. Buen Condicionamiento en una variable


Ejemplo.
Consideremos la derivada de la función f (x) = 1
3−x2
, esto es:
4x
y=
(3 − 2x2 )2
Calcular el valor de y en x=1.22 con aritmética de 3 dígitos. Estudiar el tamaño del factor de con-
dicionamiento en x= 1.22 y explicar lo que pasa.
Análisis:

Haremos los cálculos con el software que usa aritmética hasta 50 dígitos, en forma simultánea
con la aritmética de 3 dígitos para ver la diferencia. Usaremos un comando que nos redondeará a 3
dígitos.
Calculemos al numerador y denominador separadamente:
clear
digits(50);
z=1.22;
n=vpa(4*z)
d=vpa((3-2*z^2)^2)

clear
digits(3)
z=1.22;
n=vpa(4*z)
d=vpa((3-2*z^2)^2)

Primer semestre 2018 - MATLAB 17


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Calculemos ahora el valor de la función


syms x
digits(50)
y=inline('4*x/(3-2*x^2)^2','x')
vpa(y(1.22))
t=n/d
Evidentemente existe una diferencia, pero ¾Cómo se explica?. Veamos el factor de condiciona-
miento de un problema de una sola variable.
clear
syms x
f=4*x/(3-2*x^2)^2
d=diff(f,1)
fc=(x/f)*d

Evaluamos el factor de condicionamiento en el punto x = 1.22


clear
syms x
f=inline('1/4*(3-2*x^2)^2*(4/(3-2*x^2)^2+32*x^2/(3-2*x^2)^3)','x')
f(1.22)
Y resulta que es enorme. Eso explica que el error relativo del resultado es aproximadamente
EPS*factor:
er=5*10^-3*f(1.22)
Lo cual explica la diferencia entre los valores calculados. Si se utilizara en cambio la aritmética
de 6 dígitos, teóricamente el error disminuiria al 0.2 % lográndose un decimal por lo menos.
er1=5*10^-6*f(1.22)

Con la aritmética de 8 dígitos disminuye el error al 0.002


er2=5*10^-8*f(1.22)

3.7.3. Raíces de un polinomio de grado elevado


Ejemplo.
No es simple lograr raíces de la ecuación polinomial de grado 10:
3628800˘10628640x+12753576x2 ˘8409500x3 +3416930x4 ˘902055x5 +157773x6 ˘18150x7 +1320x8 ˘55x9 +x1 0 = 0

Análisis:

Consideremos el siguiente polinomio de grado 10. Por construcción sus diez raices son reales, y
son los 10 primeros números naturales.

Primer semestre 2018 - MATLAB 18


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

clear
syms x
f=solve('3628800-10628640*x+12753576*x^2-8409500*x^3+3416930*x^4
-902055*x^5+157773*x^6-18150*x^7+1320*x^8-55*x^9+x^10=0')
Obtengamos la aproximación de una raiz, usando fzero.
clear
syms x
digits(3)
f=inline('3628800-10628640*x+12753576*x^2-8409500*x^3+3416930*x^4
-902055*x^5+157773*x^6-18150*x^7+1320*x^8-55*x^9+x^10')
vpa(fzero(f,4.2))
Pero ahora modiquemos en una centésima el coeciente de x9 :
syms x
digits(10);
q=vpa(solve('3628800-10628640*x+12753576*x^2-8409500*x^3
+3416930*x^4-902055*x^5+157773*x^6-18150*x^7+1320*x^8
-55.01*x^9+x^10=0'))
Vemos que obtuvimos 6 raíces complejas. Eso revela un comportamiento inusual.
Ejercicio:
Calcular el factor de condicionamiento del polinomio con respecto a x para explicar el fenómeno.
Una gráca de este factor ilustra todo.

3.7.4. Buen condicionamiento en varias variables


Ejemplo.

Consideremos el problema de evaluar a·sin b para las medidas instrumentales de a y b. Las medidas
se aproximan a = 5 y b = 3,1 ¾será correcto esto?.
Análisis.
Los factores o números de condicionamiento para este caso son respectivamente:
dy
ca = ay da = 12 , lo cual dice que no hay problema con a.

sin(a) = b cot(b), lo cual dice que habrá problemas con b cerca de 0 y de π .


= b cos(b)
b dy
cb = y db

Veamos que signica eso en la práctica. Si usted evalua para a = 5, b = 2 no debería haber problemas.
Para verlo comparemos con el valor para b = 2.01 y estimemos el error relativo
clear
format long
f=inline('a.^2.*sin(b)','a','b');
y0=f(5,2);
y1=f(5,2.01);
ErrorRelativo=abs(y0-y1)/y0

Primer semestre 2018 - MATLAB 19


Departamento de Matemáticas U.T.F.S.M Análisis Numerico Mat-270

Por lo que se tiene tal error relativo al equivocarse en una centésima en la medida de b. Pero
veamos que pasa si se equivoca en una centésima cuando b = 2.6.
y0=f(5,2.6);
y1=f(5,2.61);
ErrorRelativo=abs(y0-y1)/y0
Ahora nos deberá quedar claro que es peligroso equivocarse una centésima si b = 3.1. Eso es en
concreto lo que decía el análisis del factor de condicionamiento respecto de b.
y0=f(5,3.1);
y1=f(5,3.11);
ErrorRelativo=abs(y0-y1)/y0
Concluyamos trazando la curva del error relativo por variaciones de una centésima de b en el
intervalo [2, 3,12], cona = 5.
errorrel=inline('abs(5.^2.*sin(b)-5.^2.*sin(b+0.01))/(5.^2.*sin(b))')
figure(1);fplot(errorrel,[2 3.12]);grid on

Tracemos en paralelo la curva del factor de condicionamiento.


figure(1);fplot('b.*cot(b)', [2 3.12]);grid on
Ejercicio.

1) Obtener los factores de condicionamiento de las fórmulas para las raíces de la ecuación ax2 +
bx + c = 0 en el caso a = 1 , b = -26 , c = 1
2) Obtener los factores de condicionamiento para el determinante de una matriz cuadrada de orden
2.
Ejercicio ( Tarea 1 Ej. 2 2o. Sem. 2004)

Una medida de la Eciencia Lateral en la captación de aguas lluvias urbanas de alta pendiente,
como por ejemplo calle Cumming en Valparaíso, queda determinado por la siguiente ley:
q
2a 5i a2 5i
q= +
L−B (L − B)2

donde:
L: Ancho de escurrimiento del ujo de agua.
0 ≤ a ≤ 0,5corresponde al largo del sumidero.
B ≤ L: Ancho del sumidero.
0,02 ≤ s ≤ 0,06: Pendiente transversal de la calle.
0 ≤ 0,3: Pendiente longitudinal de la calle.

Suponiendo que s = 0,04 e i = 0,15 establezca los factores de condicionamiento de q = q(a, B, L)


con respecto a cada una de las variables.

Primer semestre 2018 - MATLAB 20