CÁLCULO NUMÉRICO (521230)
LABORATORIO 4 - 2017-2
Interpolación
Contents
EJERCICIO 1
1.1 Calcule con ayuda del comando polyfit los polinomios que mejor ajustan por mínimos cuadrados los datos en la tabla.
clc; close all; clear all x = [-2;-1;0;1;2]; fx = [-25;-4;-1;8;47]; p_1 = polyfit(x,fx,1); p_2 = polyfit(x,fx,2); p_3 = polyfit(x,fx,3); p_4 = polyfit(x,fx,4); p_5 = polyfit(x,fx,5);
Warning: Polynomial is not unique; degree >= number of data points.
1.2 Por cada uno de los polinomios determinados antes, grafique, en una misma figura, al polinomio evaluado en 100 puntos entre -2 y 2 y los puntos en la tabla.
k = linspace(-2,2,100); figure hold on plot(x,fx,'bx','MarkerSize',15); plot(k,polyval(p_1,k),'r'); plot(k,polyval(p_2,k),'g'); plot(k,polyval(p_3,k),'b'); plot(k,polyval(p_4,k),'m'); plot(k,polyval(p_5,k),'y'); hold off legend('datos','$p_1$','$p_2$','$p_3$','$p_4$','$p_5$','location','Northwest');
1.3 Haga un nuevo gráfico con los puntos en la tabla y el polinomio q(x) evaluado en 100 puntos entre -2 y 2.
figure q = [1 0 -1 3 6 -1]; hold on plot(x,fx,'rx'); plot(k,polyval(q,k),'b'); hold off legend('datos','$q(x)$');
EJERCICIO 2
Considere f(x) = ln(x)
2.1 Determine, mediante el comando polyfit de MATLAB un polinomio que interpole a f en los puntos 1,2,3. Escoja el grado de este polinomio de forma que su existencia y unicidad estén aseguradas.
clc;clear all;close all x = [1; 2; 3]; fx = log(x); P = polyfit(x,fx,2);
2.2 Grafique, en un mismo gráfico, a la función f y al polinomio calculado, evaluados en 200 puntos entre 1 y 3. Recuerde que puede utilizar el comando polyval para evaluar al polinomio..
k = linspace(1,3,200); figure hold on plot(k,log(k),'r'); plot(k,polyval(P,k),'b'); plot(x,fx,'x'); hold off legend('$\log(x)$','$p(x)$');
2.3 Grafique, en un mismo gráfico, los valores y
con , . ¿Se cumple la cota?
h = (1/50); for i=0:100 x(i+1) = 1 + i*h; end err = abs(log(x) - polyval(P,x)); cot = (1/factorial(3)) * max( abs(2 ./(x.^3)) ) * abs((x-1).*(x-2).*(x-3)); figure hold on plot(x,err,'r'); plot(x,cot,'b'); hold off legend('Error','Cota');
EJERCICIO 3
3.1 Encuentre el polinomio que interpola a los datos en la tabla anterior, escoja el grado del mismo de forma que su existencia y unicidad estén garantizadas.
clc;clear all;close all x = [0.9;1.3;1.9;2.1;2.6;3;3.9;4.4;4.7;5;6;7;8;9.2;10.5;11.3;11.6;12;12.6;13;13.3]; y = [1.3;1.5;1.85;2.1;2.6;2.7;2.4;2.15;2.05;2.1;2.25;2.3;2.25;1.95;1.4;0.9;0.7;0.6;0.5;0.4;0.25]; P = polyfit(x,y,20);
Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the polynomial, or try centering and scaling as described in HELP POLYFIT.
3.2 Grafique, en un mismo gráfico, los puntos de interpolación y el polinomio antes determinado, evaluado en 100 puntos entre 0.9 y 13.3. ¿Cree usted que este polinomio proporcione una buena aproximación a la curva que se quiere aproximar?
k = linspace(0.9,13.3,100); figure hold on plot(x,y,'bx','MarkerSize',12); plot(k,polyval(P,k),'r'); title('Aproximaci\''on polinomial');
3.3 Determine, con ayuda del comando spline, un spline cúbico que interpole los pares de valores dados. Grafique nuevamente los valores en la tabla y el spline cúbico obtenido, evaluado en 100 puntos entre 0.9 y 13.3. ¿Se obtiene con éste una mejor aproximación al contorno superior del pato en la figura 1?
ss = spline(x,y,k); figure hold on plot(x,y,'bx','MarkerSize',12); plot(k,ss,'r'); hold off title('Spline c\''ubico');
EJERCICIO 4
4.1 Encuentre el polinomio de grado menor o igual a 20 que interpola los pares ordenados en la tabla 2. Grafique los puntos en la tabla y el polinomio obtenido, evaluado en 200 puntos entre 0 y 10. ¿Es este polinomio una buena aproximación a la frontera superior del jardín?
clc;clear all;close all x = (0:0.5:10)'; y = [2.5;2.8;3;3.3;3.8;4.8;4.8;5;4.8;4.7;4.7;4.5;4.5;4.4;4.3;4.4;4.2;4;4.1;4.3;3.5]; P = polyfit(x,y,20); k = linspace(0,10,200); figure hold on plot(x,y,'x','MarkerSize',12); plot(k,polyval(P,k),'r'); hold off
Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the polynomial, or try centering and scaling as described in HELP POLYFIT.
4.3 Llame a la función escrita antes para evaluar a un spline cúbico que interpole a la función en la tabla en 200 puntos entre 0 y 10. Añada al gráfico en 4.1 del spline calculado. ¿Describe esta función la frontera superior del jardín de mejor manera que el polinomio de interpolación?
hold on v = linspace(0,10,200); plot(v,lab3_ejer4_2(v),'g'); hold off legend({'Datos','Polinomio Interpolante','Spline'},'location','southwest');
4.2 Escriba una función en MATLAB que dado un vector v de entrada, determine un spline cúbico que interpole los pares en la tabla y devuelva .
function s = lab3_ejer4_2(v) x = (0:0.5:10)'; y = [2.5;2.8;3;3.3;3.8;4.8;4.8;5;4.8;4.7;4.7;4.5;4.5;4.4;4.3;4.4;4.2;4;4.1;4.3;3.5]; spl = spline(x,y); s = ppval(spl,v); end