Post on 01-Oct-2018
transcript
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éricoPRIMERA SESIÓN
Introducción y Arimética FlotanteSemana 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 32.1. Utilización de ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2. Operaciones Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.1. Operaciones +, -, *, / y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2.2. Operaciones .*, ./ y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2.3. Sentencias de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2.4. Funciones en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.5. De�nición de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.2.6. Grá�cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.7. Solución de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.8. Derivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2.9. Integración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Calculos numéricos 123.1. Como introducir números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2. Presición y exactitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3. Presición aumentada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.4. Números de máquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.5. Arimética de punto �otante y errores de redondeo . . . . . . . . . . . . . . . . . . . . 143.6. Propagación de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.7. Problemas bien condicionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.7.1. Incidencia de los factores de condicionamiento en el error . . . . . . . . . . . 163.7.2. Buen Condicionamiento en una variable . . . . . . . . . . . . . . . . . . . . . 173.7.3. Raíces de un polinomio de grado elevado . . . . . . . . . . . . . . . . . . . . . 183.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:
NL = 0,1 ∗NotaAsistencia+ 0,4 ∗NotaPreinformes+ 0,5 ∗NotaControles
Esta nota valdrá por la nota de tareas, esto es 40% de la nota �nal siempre y cuando el promediode 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 lepodemos sugerir:
MATLAB Help
Demos
También puede ingresar el comando help en la línea de comandos de Matlab, como se muestra acontinuación:
clear
format long
help
El resultado es una lista de categorías de ayuda, las cuales se pueden elegir mediante el mismocomando 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 comandoespecí�co, se ingresa, por ejemplo:
help ones
Por supuesto que si usted conoce el nombre del comando del cual desea ver la ayuda, puedeingresar 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 +, -, *, / yLas 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: De�nimos 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 lasoperaciones tipicas:NOTA: En algunos casos existe recursividad de ejemplos, por ende ud. debe ir revisando los ejemplosde forma ordenada, sino el software le informará que existe un error de variable no de�nida.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 sesuma 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 serecibirá 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 .
Estas operaciones se utilizan .elemento a elemento", es decir, cada elemento de una matriz ovector 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 ovector 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 bienpara 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 unacondición.
La sintaxis es la siguiente:
if condicion1,comandos...elseif condicion2comandos...elsecomandos...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...endEjemplo de While: Fijarse que se de�ne 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 incrementode la variable, se realiza un grupo de comandos.
La sintaxis es la siguiente:
for i=a:b:c,comandosend
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 de�nida 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 cerosones Matriz de unoseye Matriz identidadrand Matriz aleatoria con distribución uniformerandn Matriz aleatoria con distribución normal (gaussiana)linspace Vector espaciado linealmentelogspace Vector espaciado en forma logarítmicahilb Matriz de Hilbertmagic Matriz cuya suma de elementos en las columnas, �las y diagonal es igual
Tabla 2.2.1: Funciones para generación de matrices
sin Senocos Cosenotan Tangenteasin Arco Senoacos Arco Cosenoatan Arco Tangentelog Logaritmo naturallog10 Logaritmo en base 10exp Exponencialsinh Seno Hiperbólicocosh Coseno Hiperbólicotanh Tangente Hiperbólicasqrt Raíz cuadrada
Tabla 2.2.2: Funciones matemáticas
inv Inversa de una matrizdet Determinanteeig Valores propios y vectores propiosnorm Normarank Rangoorth Ortogonalizacióninline De�nició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. De�nición de funciones
Existen varias formas de de�nir 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 ygra�car.
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, gra�car pero no para evaluar.Existe una tercera forma de de�nir funciones. Se utiliza cuando las funciones son de�nidas portramos, 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álculosaproximados (por observación).
Si la funcion esta de�nida 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 de�nida simbólicamente:
syms x;
g = x^3*sin(x)
Se hace:
figure(1);
ezplot(g,[0 5]);
grid on;
También se puede gra�car numéricamente. Esto es, evaluar la función en varios puntos seguidosy gra�car dichos puntos. Esto también es útil si no se cuenta con una expresión analítica delo que se quiere gra�car. 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 gra�car múltiples funciones en un solo gra�co:
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 gra�car. 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óncomplicada. Respecto de ecuaciones polinomiales, en la actualidad cualquier software da todas lassoluciones posibles. Pero para otro tipo de ecuaciones la situación es relativa. Si es posible, antes deresolver una ecuación es bueno realizar un trazado de la función que la de�ne.
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 deuna ecuación trigonométrica y eso sea difícil aún para el computador. La alternativa directa, dondese usa la información salida del grá�co, esto es usando el hecho que una raíz esté cerca de 1 y otracerca 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 de�nidas 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, de�nida 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 de�nidade 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óntiene 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 especi�carse 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 signi�cativos 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 elerror absoluto.
Necesidad de Precisión extra
No se presenta ningún problema en realizar el siguiente cálculo por que el software aumenta laprecisió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 hasta524280. Estos se pueden aumentar hasta un millón. Sin embargo, acorde con ello los datos debeningresarse 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ónsin() 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 daton es el número de maquina máximo probable. Para cuando encuentra el número de máquina el testaborta.
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
De�nició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 de�nida 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 ε . Esteteorema es importante para probar la precisión.
De�nición.
Si s = ±0.a1a2 . . . · 10b se dirá que Z es un aproximación de s con a lo menos m dígitos signi�cativossi:
|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 ):
f(t) =
∫ t
1
√1 + (1 + 2x)2dx, t ∈ [1, 2]
Una solución aproximada de la ecuación f(t) = 2, es t = 1,543106501046570011. Determinar elnúmero de dígitos signi�cativos 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 signi�cativo, 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 veri�car si al menos el quinto dígito es signi�cativo. ¾Cómo lo haría?, ¾Se podrá pro-gramar Matlab para que arroje la cantidad de cifras signi�cativas 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 laprecisió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. Sesupone 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 operacionesa 3 dígitos.
Solución:
Matlab, es capaz de desarrollar este problema con solo ingresar el comando digits y vpa, elprimero le dirá al software con cuantos dígitos debe trabajar, y el segundo nos entregara todas loscá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óximoy que se encuentra por sobre el valor original, ahora esa es una función de Matlab, por lo que seprovocan 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 noexiste problema al trabajar con los comandos precisos, así evitamos los errores, que principalmentese 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
De�nició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 porefecto pequeños errores en el resultado.
De�nición.NÚMEROS DE CONDICIONAMIENTO.
Suponga que z = f(x1, . . . , xn) en que f es continuamente diferenciableSe llaman números de condicionamiento de f con respecto a xi para i = 1, . . . , n
ci =xiz
∂z
∂xipara i == 1, . . . , n (3.7.1)
Observación. Un problema se dirá bien condicionado si los números de condicionamiento son, envalor absoluto, pequeños del orden de 1
Se tiene en este caso que la relación entre los errores relativos es aproximadamente:
ez ' c1ex1 + . . .+ cnexn
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) = 13−x2 , esto es:
y =4x
(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áneacon la aritmética de 3 dígitos para ver la diferencia. Usaremos un comando que nos redondeará a 3dí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 aproximadamenteEPS*factor:
er=5*10^-3*f(1.22)
Lo cual explica la diferencia entre los valores calculados. Si se utilizara en cambio la aritméticade 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+x10 = 0
Análisis:
Consideremos el siguiente polinomio de grado 10. Por construcción sus diez raices son reales, yson 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 modi�quemos en una centésima el coe�ciente 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:
ca = aydyda = 1
2 , lo cual dice que no hay problema con a.
cb = bydydb = b cos(b)sin(a) = b cot(b), lo cual dice que habrá problemas con b cerca de 0 y de π.
Veamos que signi�ca 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. Peroveamos 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 enconcreto 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 elintervalo [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 = 12) Obtener los factores de condicionamiento para el determinante de una matriz cuadrada de orden2.
Ejercicio ( Tarea 1 Ej. 2 2o. Sem. 2004)
Una medida de la E�ciencia 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
L−B+
a2 5i(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