20

Laboratorio Mat 270 - Análisis NuméricoPRIMERA …³n_1_mat_270_Introducción... · Laboratorio de Computación para las Aplicaciones de la Matemática en Ingeniería Laboratorio

Embed Size (px)

Citation preview

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.�[email protected])

Ayudante Coordinador y de Software : Hernán Caviedes ([email protected])

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