Uploaded by Roberto García

2016 Julio

advertisement
ALGORÍTMICA NUMÉRICA
-
Julio 2016
La duración del examen será de 1h 30m
Todos los problemas tienen el mismo peso en la nota final del examen.
Las notas y el procedimiento para la revisión del examen se comunicará a través de Moodle.
La fecha estimada para la publicación de las notas es el lunes, 11 de julio.
Prob 1: Se quiere simular una función f(x) por un polinomio de grado dos atendiendo a
las siguientes consideraciones:
a) Caso 1: Se considera el polinomio p(x) de grado 2 que interpola los
siguientes datos de la función f(x):
p(0)=f(0)= 0, p(1)=f(1)=10.5 y p’(0)= f’(0)=0.5.
Se pide:
- Dar la expresión de Newton generalizada del polinomio p(x).
- Si la función f(x) tienen la expresión f ( x )  10  x  0.5  0.5  e , dar una
cota del error cometido al simular f(x) por p(x) en el intervalo [0,1].
2
x
b) Caso 2: Se han registrado los valores de la función f(x) en varios puntos
según figura en la siguiente tabla:
xk
f(xk)
1
10.5
2
43
3
99.5
- Calcular el polinomio q(x) de grado dos que pasa por (0,0) (q(0)=0) y con la
restricción adicional de q’(0)= 0.5, que mejor ajusta los datos de la tabla
(en
sentido de mínimos cuadrados).
el
- Utilizando el polinomio q(x) ¿cuál es el valor aproximado de f(1)? ¿Cuántas cifras
decimales significativas garantiza dicha estimación?
SOLUCIÓN
a) Caso 1: La función pedida es un polinomio p(x) de grado dos, que tiene que verificar:
p (0)  0, p '(0)  0.5, p(1)  10.5. Para dar la Fórmula de Newton generalizada de dicho
polinomio, construimos la tabla de diferencias divididas generalizada con los datos:
xk
x0  0
p( xk )
0
x0  0
x1  1
0
10.5
p .,.
p  0,0  p '(0)  0.5
p  0,1  10.5
p .,.,.
p  0,0,1  10
Por tanto, la Fórmula Newton generalizada del polinomio pedido es:
p ( x)  p  0  p  0, 0 x  p  0, 0,1 x 2  0.5 x  10 x 2 .
ALGORÍTMICA NUMÉRICA
Julio 2016
Atendiendo a los resultados vistos en teoría, el error de interpolación E(x) tiene la
siguiente expresión: en el intervalo [0,1]:
E ( x)  f ( x)  p ( x)  f  0, 0,1, x  x 2 ( x  1) 
1
f '''( x ) x 2 ( x  1),  x  [0,1].
3!
Acotamos ahora los términos que aparecen en la expresión anterior:
 f '''( x)  0.5e x  0.5e, x  [0,1] (1).
 x 2 ( x  1) 
22 1
, x  [0,1] (2).
32 3
De (1) y (2), volviendo a la expresión de E(x), se obtiene la cota del error
E ( x) 
0.5e 22 1
 0.0335,
3! 32 3
x  [0,1].
b) Caso 2:
La función pedida es un polinomio q(x) de grado dos, que tiene que verificar
q (0)  0 y q '(0)  0.5. Imponiendo estas restricciones en un polinomio general de grados
2 q ( x )  ax 2  bx  c , se obtienen c=0 y b=0.5. Por tanto la forma general de la función
aproximante es
q ( x)  0.5 x  ax 2 .
Se trata ahora de calcular el parámetro a de forma que q ( x)  0.5 x  ax 2 ajuste los mejor
posible los datos de la tabla (en el sentido mínimos cuadrados). Esto es, calcular a tal
que minimice la función
F ( a )    p ( xk )  f ( xk )    0.5 xk  axk 2  f ( xk )  .
3
2
k 1
3
2
k 1
Derivando dicha expresión respecto de a, igualando a cero y sustituyendo los valores de
xk y f ( xk ) dados, se obtiene:
F ( a )  0    0.5 xk  axk 2  f ( xk )  xk 2  0  a  10.816
3
k 1
Por tanto el polinomio pedido es q ( x )  0.5 x  10.816 x 2 .
Se aproxima f (1)  q (1)  0.5  10.816 =11.3163. Por tanto el error relativo es
error _ rel 
f (1)  q (1) 10.5  11.3163

 0.0777
f (1)
10.5
De lo que se concluye que dicha aproximación garantiza 1 cifra decimal significativa
log10(err_rel)=1).
(-
ALGORÍTMICA NUMÉRICA
Julio 2016
Prob 2: Dada la ecuación
sen ( x )  1  2 x ,
se pide:
a) Demostrar que la ecuación anterior tiene al menos una raíz en [0,
/2].
b) Si empleamos el método de Newton para calcular la raíz, demostrar que el método es
convergente para cualquier
x0  [0,  / 2] .
6
c) Si se quiere aproximar la raíz con un error menor que 10 calcular el número de
iteraciones que hay que hacer con el método de Newton si partimos de un x0 dentro del
intervalo [0, /2].
d) Si partimos de x0=(3·
/2 demostrad calculando x1 que el método de Newton sigue
convergiendo en ese caso. ¿Contradice este resultado lo demostrado en el apartado b)?
Solución:
a) La ecuación dada es equivalente a la ecuación
que está en la
, siendo
forma
La función
, es continua en
y cumple:
por teorema de Bolzano sabemos que existe al menos un
, es decir, existe al menos una raíz
tal que
de la ecuación:
en
b) El método de Newton converge siempre que
Si
siendo:
se cumple que
Por otro lado,
y
Para x en el intervalo [0,/2] se cumple que:
Sustituyendo, se obtiene:
Hemos demostrado que el método de Newton converge para cualquier
ALGORÍTMICA NUMÉRICA
Julio 2016
c) Cota del error en el método de Newton:
Para calcular el número de iteraciones n que hay que hacer para aproximar la raíz
s con un error menor que
, se debe cumplir:
que se cumple para n>=5.
Es decir, con 5 o más iteraciones aproximamos la raíz de la ecuación usando el
método de Newton, con un error menor que
Nota: dependiendo del valor de M encontrado en el apartado anterior, el número
de iteraciones podría variar ligeramente.
d) Si
e iniciamos el método con este valor, obtenemos:
A partir de
estamos en el intervalo
donde tenemos asegurada la
convergencia como se ha demostrado en el apartado b)
No existe contradicción porque el teorema afirma que si
es seguro que
hay convergencia pero si no se cumple no podemos afirmar nada.
ALGORÍTMICA NUMÉRICA
Julio 2016
Prob 3: Sea el sistema
 x  1.18885...
0.001x  1.23 y  1.23
, cuya solución exacta es 

x  1.19 y  0.
 y  0.99903...

a) Resolved el sistema dado usando eliminación de Gauss SIN pivotaje usando 3 CIFRAS
SIGNIFICATIVAS en todos los cálculos. Indicad los pasos dados y los resultados
intermedios del proceso de eliminación, así como los resultados finales tal como se
guardarían en la máquina con la precisión especificada.
SIN PIVOTAR:
m = 1/0.001 = 1000
y hacemos Fila2 = Fila2 - m· Fila1:
-1.19 - 1000·1.23 = -1.19 - 1230 = -1231.19 -> -1230 ( con 3 cifras)
0
- 1000·1.23 = 0 - 1230
= -1230
El sistema triangular resultante queda:
 0.001

 0
1.23
 1230



1.23 

 1230 
que equivale a
0.001x  1.23 y  1.23

  1230 y  1230.
Despejando y en la 2ª ecuación => y = 1.
La 1ª ecuación queda 0.001x + 1.23 = 1.23 --> 0.001x = 0
La solución de la y es aceptable pero la de la x es muy mala.
--> x=0
b) Volver a resolver el sistema (con la misma precisión) pero ahora usando eliminación
de Gauss con PIVOTAJE PARCIAL. ¿Son ahora correctos los resultados (para la precisión
usada)? ¿Creéis que este comportamiento es debido al mal condicionamiento de la
matriz del sistema? Justificar.
PIVOTANDO: el sistema a resolver queda
 1

 0.0010
 1.19
1.23



0 

1.23 
m = 0.001/1 = 0.001 y hacemos ahora Fila2 = Fila2 - 0.001· Fila1:
1.23 + 0.00119 = 1.23119 -> 1.23 (con tres cifras)
1.23 - 0.001·0
= 1.23
El sistema triangular resultante queda:
1

0
1.19
1.23



0 

1.23 
La 2ª ecuación nos da y = 1.
que equivale a
 x  1.19 y  0

 1.23 y  1.23
De la 1ª ecuación sale x =1.19·y = 1.19
Ambas soluciones son ahora correctas para la precisión usada (3 cifras).
ALGORÍTMICA NUMÉRICA
Julio 2016
La razón de este comportamiento no es el mal condicionamiento de la matriz.
Una matriz mal condicionamiento no nos permitiría eludir el problema
cambiando el orden en la resolución de las ecuaciones.
c) En este ejercicio se han realizado los cálculos con 3 cifras decimales significativas.
Si nuestra máquina usa una representación en coma flotante en base 2, ¿cuántos bits
tendríamos que dedicar a la mantisa para tener una precisión similar?
3 cifras decimales significativas corresponden a una precisión del orden de 10
3
3
10
Como 10  2 =1/1024, necesitaríamos usar 10 bits de mantisa para una
precisión similar.
De forma similar podemos ver que una cifra decimal equivale a log2(10)=3.33
cifras binarias (bits). Las 3 cifras decimales corresponden a 3 x 3.33
10 bits
En dicha representación, ¿con qué exponente y mantisa se codificaría el número 0.001?
Expresar la mantisa primero en decimal y luego dar su expresión binaria.
Multiplicamos por 2 el numero hasta hacerlo >=1.
0.001 x 2 = 0.002 < 1
...
0.001 x 512 = 0.512 < 1
0.001 x 1024 = 1.024 >1,
por lo tanto
0.001 = 1.024 · 2^-10
=> mantisa = 1.024 , en el intervalo [1,2) como debe ser
=> exponente e=-10
La mantisa en decimal es 1.024.
1.024 =
Escrita en binario:
1 + 2^-6 + 2^-7 + 2^-11 + ...
Con los bits (10) de los que disponemos para la mantisa 1.024 se guardaría
como 1.0000011000
ALGORÍTMICA NUMÉRICA. EXAMEN COMPUTATIONAL
Julio 2016
-
La duración del examen será de 1h 30m
Todos los problemas tienen el mismo peso en la nota final del examen.
Las notas y el procedimiento para la revisión del examen se comunicará a través de Moodle.
La fecha estimada para la publicación de las notas es el lunes, 11 de julio.
Ejercicio 1
Matlab dispone de la función log1p(x) (“valor bueno”) que, teóricamente, es igual a log(1+x).
Se van a comparar los resultados de ambas cuando x ≈ 0.
a) Evaluar ambas expresiones para unos valores x=10-1, 10-2,…, 10-16
b) Calcular el error relativo entre ambas expresiones y el número de cifras
decimales/significativas en las que coinciden.
c) Dibujar una gráfica con los valores de x en el eje horizontal y las cifras en el vertical con la
escala más adecuada
(−1) n +1 a n
y el valor obtenido compararlo con log(1+a) y con
d) Sea a = 10 evaluar ∑
n
n =1
log1p(a). Hacerlo volcando los resultados con la función fprintf usando notación científica
con 10 decimales (%.10e).
100
-8
Ejercicio 2
Dada la función f ( x) = a ln x + b cos x + ce y la tabla de datos:
xi
0.24 0.95 1.73 2.23 2.99
f(xi) 0.23 -1.10 0.27 -0.29 1.00
x
a) Plantear un problema de interpolación eligiendo un número de nodos mínimo para resolver
dicho problema y que use obligatoriamente los nodos xi=0.24 y xi=2.99. Dar la expresión de
la matriz H del sistema resultante y los valores de los coeficientes a, b y c.
b) Dibujar en una misma gráfica en el intervalo [0.2:0.01:3], la función interpoladora f(x) (‘b’)
obtenida en el apartado anterior y los datos usados en el problema de interpolación (‘rs’).
c) Calcular la mejor aproximación a todos los datos de la tabla en el sentido de mínimos
cuadrados usando la forma de la función f(x). Construir la matriz H del sistema
sobredeterminado. Resolver el sistema y dar los valores de los coeficientes a, b y c.
d) Calcular el vector residuo y el error del ajuste del aparatado anterior (suma de los residuos
al cuadrado).
ALGORÍTMICA NUMÉRICA. EXAMEN COMPUTATIONAL
Julio 2016
Ejercicio 3
a) Implementar un script o una function de Matlab (utilizando el comando for o el comando
while) que realice la siguiente iteración:
1
1

n = 0,1, 2,....
 xn +1 = 1 + x + x 2
n
n

x = 7
 0
4
hasta calcular x100 . Asignar a una variable s este valor. Guardar los valores xn en un vector
llamado aprox_x. Dibujar la gráfica de aprox_x. (con el atributo ‘.’). ¿El método converge o
diverge? En su caso, ¿a qué valor converge?
b) A partir del vector aprox_x calcular los errores relativos de xn con respecto a s . Dibujar la
gráfica de los errores relativos.
c) ¿Cuántas iteraciones son necesarias para que xn alcance 15 cifras significativas de
precisión? ¿Cuántas iteraciones son necesarias por cada cifra significativa de precisión?
Dibujar la gráfica que muestre estos resultados.
SOLUCIONES
Ejercicio 1
x = 10.^-[1:16];
ok = log1p(x);
apr = log(1+x);
e_r = abs( (apr-ok) ./ ok );
cifras = -log10(e_r);
semilogx(x,cifras)
a = 1e-8; n = 1:100; vector = (-1).^(n+1) .* a.^n ./n;
valortercero = sum(vector);
valorbueno = log1p(a)
valorsegunod = log(1+a)
fprintf('valor bueno %.10e\n',valorbueno)
fprintf('valor segundo %.10e\n',valorsegundo)
fprintf('valor tercero %.10e\n',valortercero)
Ejercicio 2
a) y b) Se da la solución de los tres posibles problemas a plantear y su solución
xadicional(1)=0.95
xadicional(2)=1.73
xadicional(3)=2.23
yadicional(1)=-1.10
yadicional(2)=0.27
yadicional(3)=-0.29
ALGORÍTMICA NUMÉRICA. EXAMEN COMPUTATIONAL
Julio 2016
for i=1:1:3
i
xi = [0.24 xadicional(i) 2.99]';
fi= [0.23 yadicional(i) 1.00]';
H=[log(xi), cos(xi), exp(xi)]
C=inv(H)*fi;
a=C(1)
b=C(2)
c=C(3)
x=[0.2:0.01:3];
b_x=[log(x);cos(x);exp(x)];
f_x=C'*b_x;
subplot(2,2,i)
plot(xi,fi,'rs',x,f_x,'b')
str = sprintf(' Nodo adicional %d %f',i,xadicional(i));
title (str)
end
c) y d)
xi = [0.24 0.95 1.73 2.23 2.99]';
fi= [0.23 -1.10 0.27 -0.29 1.00]';
H=[log(xi), cos(xi), exp(xi)]
C=H\fi;
a=C(1)
b=C(2)
c=C(3)
residuo=fi - (H*C)
Error = sum (residuo.^2)
f_x=C'*b_x;
subplot(2,2,4)
plot(xi,fi,'rs',x,f_x,'b')
str = sprintf(' Ajuste todos nodos');
title (str)
Gráficas del problema
ALGORÍTMICA NUMÉRICA. EXAMEN COMPUTATIONAL
Julio 2016
Nodo adicional 1 0.950000
Nodo adicional 2 1.730000
2
1.5
1
1
0
0.5
-1
-2
0
1
2
3
0
0
Nodo adicional 3 2.230000
1
0
0
-5
-1
0
1
2
3
-2
0
1
Ejercicio 3
clear all
aprox_x=zeros(1,101);
aprox_x(1)=7/4;
for k=1:100
aprox_x(k+1)=1+1/aprox_x(k)+1/(aprox_x(k)^2);
end
s=aprox_x(101), plot(aprox_x,'b.')
s=
1.8393
Como se puede observar en la gráfica, el método converge al valor s= 1.8393
Erel=abs(aprox_x-s)/abs(s); semilogy(Erel,'b.')
2
3
Ajuste todos nodos
5
-10
1
2
3
ALGORÍTMICA NUMÉRICA. EXAMEN COMPUTATIONAL
Julio 2016
Como se puede observar en la gráfica, son necesarias unas 65 iteraciones para alcanzar las 15 cifras significativas de
precisión.
Ncifras=floor(-log10(Erel)); plot(Ncifras,'b.')
Como se puede observar en la gráfica, cada 5 iteraciones se alcanza una cifra más de precisión.
Download