Ejercicios APROXIMACIÓN DE FUNCIONES POR POLINOMIOS

Colección de ejercicios prácticos

Interpolación polinómica de grado 2

Problema:

Calcular el polinomio interpolador de grado 2 de una función que verifica: \(f(-1) = 2 \,\,\,\,f(1) = 1\,\,\,\,f(2) = 1\). Calcula este polinomio a partir de los polinomios base de Lagrange y resolviendo el sistema de ecuaciones.

Solución:

Para construir el polinomio interpolador de grado 2 \[ p(x) = a\,x^2 \;+\; b\,x \;+\; c, \] imponemos las condiciones \[ p(-1) = a(-1)^2 + b(-1) + c = a \;-\; b \;+\; c = 2, \] \[ p(1) = a(1)^2 + b(1) + c = a \;+\; b \;+\; c = 1, \] \[ p(2) = a(2)^2 + b(2) + c = 4a \;+\; 2b \;+\; c = 1. \] Resolviendo el sistema lineal \[ \begin{cases} a \;-\; b \;+\; c = 2,\\ a \;+\; b \;+\; c = 1,\\ 4a \;+\; 2b \;+\; c = 1, \end{cases} \] se obtiene \[ a = \tfrac{1}{6}, \quad b = -\tfrac{1}{2}, \quad c = \tfrac{4}{3}. \] Por tanto, \[ p(x) \;=\; \frac{1}{6}x^2 \;-\; \frac{1}{2}x \;+\; \frac{4}{3}. \] Alternativamente, usando los polinomios base de Lagrange con nodos \(x_0=-1\), \(x_1=1\), \(x_2=2\): \[ L_0(x) = \frac{(x-1)(x-2)}{(-1-1)(-1-2)} = \frac{(x-1)(x-2)}{6}, \] \[ L_1(x) = \frac{(x+1)(x-2)}{(1+1)(\,1-2\,)} = -\frac{(x+1)(x-2)}{2}, \] \[ L_2(x) = \frac{(x+1)(x-1)}{(2+1)(\,2-1\,)} = \frac{(x+1)(x-1)}{3}. \] Entonces \[ p(x) \;=\; 2\,L_0(x) \;+\; 1\,L_1(x) \;+\; 1\,L_2(x), \] y simplificando se llega al mismo resultado.


	 % Método del sistema lineal:
	 A = [(-1)^2, -1, 1;
	      1^2,    1, 1;
	      2^2,    2, 1];
	 b = [2; 1; 1];
	 p = A\b; % [a; b; c]

	 % Mostrar coeficientes:
	 a = p(1);
	 b = p(2);
	 c = p(3);
	 fprintf('Coeficientes: a = %.4f, b = %.4f, c = %.4f\n', a, b, c);

	 % Para evaluar el polinomio
	 % polyval(p,valor)
	 

Resultado:

El polinomio interpolador es \[ p(x) = \frac{1}{6}x^2 - \frac{1}{2}x + \frac{4}{3}. \]

Interpolación en \(\,e^{-x^2}\,\) con MATLAB

Problema:

Interpolar con MATLAB la función \(f(x) = e^{-x^2}\) en el intervalo \([0,1]\) con polinomios de grado 5, 10 y 15. Evaluar la función y el polinomio en 500 puntos del intervalo y encontrar el máximo de la diferencia entre la función y el polinomio en esos puntos.

Solución:

Se seleccionan nodos equiespaciados en \([0,1]\) para cada grado \(n\). Para cada \(n \in \{5,\,10,\,15\}\):

  1. Generar los \(\,n+1\,\) nodos: \(\;x = \text{linspace}(0,1,n+1)\), y los valores \(\,y = e^{-\,x^2}.\)
  2. Calcular el polinomio interpolador de grado \(n\) resolviendo el sistema correspondiente. Se puede comprobar el resultado con el comando polyfit: \[ \text{coef} = \text{polyfit}(x,\,y,\,n). \]
  3. Evaluar en 500 puntos igualmente espaciados: \(\;u = \text{linspace}(0,1,500),\quad y = e^{-\,u^2},\quad y_{\text{pol}} = \text{polyval}(\text{p},\,u).\)
  4. Calcular el vector de errores \(\,e = |\,y - y_{\text{pol}}\,|\), y tomar \(\max(e)\) como el error máximo en esos 500 puntos.
A medida que aumenta el grado \(n\), se espera que el polinomio se acerque mejor a la función en todo el intervalo y que el error máximo disminuya significativamente.


% Definición de la función y puntos de evaluación
f = @(x) exp(-x.^2);
% Calculo del polinomio
n=5; %Grado del polinomio
%Nodos equiespaciados
x=linspace(0,1,n+1)';
A=x.^(n:-1:0);
b=f(x);
%Polinomio
p=A\b;
%Comprobación, el polinomio pasa por los puntos
polyval(p,x)-f(x)


%Calculo del máximo de la diferencia entre la función y el polinomio en esos puntos
u = linspace(0, 1, 500);
y = f(u);

error=max(abs(polyval(p,u)-f(u)))
fprintf('Grado %2d: Error máximo ≈ %.4e\n', n, error);

% Graficar la función original (opcional)
plot(u, y, 'k-', 'LineWidth', 1.2);
hold on
plot(u, polyval(p,u), 'r-', 'LineWidth', 1.2);
legend('f(x) = e^{-x^2}', 'grado 5');
hold off

Resultado:

  • Para grado \(\,5\,:\quad\max\limits_{0\le x\le1} |\,e^{-x^2} - p_5(x)\,| \approx 5.73\times10^{-5}.\)
  • Para grado \(\,10\,:\quad\max\limits_{0\le x\le1} |\,e^{-x^2} - p_{10}(x)\,| \approx 9.6466\times10^{-9}.\)
  • Para grado \(\,15\,:\quad\max\limits_{0\le x\le1} |\,e^{-x^2} - p_{15}(x)\,| \approx 4.0506\times10^{-13}.\)

Se observa que, al aumentar el grado del polinomio, el error máximo en el intervalo \([0,1]\) disminuye drásticamente, confirmando que los polinomios de mayor grado aproximan mucho mejor la función \(e^{-x^2}\) en ese rango.

Interpolación de Lagrange para \(\cos(x)\) en \([0,\pi]\)

Problema:

Se considera la función \(f(x) = \cos(x)\) en el intervalo \([0,\pi]\).

  1. Escribe el sistema que permitiría obtener el polinomio de interpolación de Lagrange de la función \(f(x)\) tomando como nodos \(x_0 = 0\), \(x_1 = \pi/2\), \(x_2 = \pi\).
  2. Calcula con MATLAB el polinomio interpolador de Lagrange considerando 8 nodos equidistantes en el intervalo \([0,\pi]\), siendo el primer nodo \(0\) y \(\pi\) el último. Dibuja la función y el polinomio interpolador calculado.
  3. ¿Cuál sería una cota del error de aproximación del polinomio obtenido en el apartado anterior en el intervalo \([0,\pi]\)?
  4. Considera 8 nodos de Chebyshev en \([0,\pi]\) y escribe su valor. Determina el polinomio de interpolación de la función en este intervalo considerando estos nodos. Dibuja la función y el polinomio interpolador.
  5. ¿Cuál sería una cota del error de aproximación del polinomio obtenido en el apartado anterior en el intervalo \([0,\pi]\)?

Solución:

1. Sistema para 3 nodos equidistantes \(0,\pi/2,\pi\):

Buscamos el polinomio de grado 2 \[ p(x) = a\,x^2 \;+\; b\,x \;+\; c \] que satisfaga \[ p(0) \;=\; \cos(0) \;=\; 1, \quad p\bigl(\tfrac{\pi}{2}\bigr) \;=\; \cos\bigl(\tfrac{\pi}{2}\bigr) = 0, \quad p(\pi) \;=\; \cos(\pi) = -\,1. \] Esto conduce al sistema lineal \[ \begin{cases} a\cdot 0^2 + b\cdot 0 + c = 1,\\ a\cdot \bigl(\tfrac{\pi}{2}\bigr)^2 + b\cdot \tfrac{\pi}{2} + c = 0,\\ a\cdot \pi^2 + b\cdot \pi + c = -\,1. \end{cases} \] Expresándolo de forma matricial: \[ \begin{pmatrix} 0 & 0 & 1 \\ \tfrac{\pi^2}{4} & \tfrac{\pi}{2} & 1 \\ \pi^2 & \pi & 1 \end{pmatrix} \begin{pmatrix} a \\ b \\ c \end{pmatrix} = \begin{pmatrix} 1 \\ 0 \\ -\,1 \end{pmatrix}. \] Resolviendo este sistema se obtiene el polinomio de Lagrange de grado 2 para los tres nodos indicados.

2. Interpolación con 8 nodos equidistantes en \([0,\pi]\):

Definimos en MATLAB:


% Función
f = @(x) cos(x);
% Generar 8 nodos equidistantes entre 0 y pi
n = 7;                            % número de subintervalos (8 nodos implica grado 7)
x = linspace(0, pi, n+1)';   % nodos: 0, pi/7, 2*pi/7, ..., pi
b = f(x);
A=x.^(n:-1:0);
p=A\b;


% Evaluar la función y el polinomio en 500 puntos
u = linspace(0, pi, 500);
fu = f(u);
pu = polyval(p, u);

% Dibujo de la función y el polinomio interpolador
figure;
plot(u, fu, 'b-', 'LineWidth', 1.5); hold on;
plot(u, pu, 'r--', 'LineWidth', 1.2);
plot(x, b, 'ko', 'MarkerFaceColor', 'k');
legend('cos(x)', 'Interpolador grado 7', 'Nodos equidistantes');
xlabel('x'); ylabel('y'); title('Interpolación de cos(x) con 8 nodos equidistantes');
grid on;
hold off;

En pantalla se mostrará la comparación gráfica entre la función \(\cos(x)\) y su polinomio interpolador de grado 7, junto con los puntos nodales.

3. Cota del error para nodos equidistantes (grado 7):

Para un polinomio interpolador de grado \(n=7\), el error en un punto \(x\in[0,\pi]\) se puede expresar como \[ E_7(x) \;=\; \frac{f^{(8)}(\xi)}{8!}\,\omega_8(x), \] donde \(\xi\in[0,\pi]\) y \(\,\omega_8(x) = \prod_{k=0}^{7} (\,x - x_k\,)\), con \(x_k = \tfrac{k\pi}{7}\). Para \(f(x)=\cos(x)\), se tiene \(\,f^{(8)}(x) = \cos\bigl(x + 2\pi m\bigr)\) para algún \(m\), con \(\lvert f^{(8)}(x)\rvert \le 1\) en todo \([0,\pi]\). Por tanto, \[ \bigl\lvert R_7(x)\bigr\rvert \;\le\; \frac{1}{8!}\,\max_{x\in[0,\pi]} \bigl\lvert \omega_8(x)\bigr\rvert. \] En el caso de nodos equidistantes, el máximo de \(\lvert \omega_8(x)\rvert\) en \([0,\pi]\) se puede acotar por \[ \max_{x\in[0,\pi]} \bigl\lvert \omega_8(x)\bigr\rvert \;=\; \prod_{k=0}^{7}\Bigl\lvert x - \tfrac{k\pi}{7}\Bigr\rvert \;\le\; \Bigl(\tfrac{\pi}{2}\Bigr)^8, \] debido a que el punto medio \(\pi/2\) maximiza aproximadamente el producto de distancias a los nodos equidistantes. Así, \[ \lvert E_7(x)\rvert \;\lesssim\; \frac{(\pi/2)^8}{8!}. \] Numéricamente, \(\,(\pi/2)^8/8! \approx 1.05\times 10^{-4}.\)

4. Interpolación usando 8 nodos de Chebyshev en \([0,\pi]\):

Los 8 nodos de Chebyshev en \([0,\pi]\) se definen por \[ x_k = \frac{\pi}{2}\,\Bigl[\,1 - \cos\!\bigl(\tfrac{2\,k+1}{16}\,\pi\bigr)\Bigr], \quad k = 0,1,\dots,7. \] Calculando explícitamente:

  • \(x_0 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{1}{16}\pi\bigr)\bigr]\approx 0.0982,\)
  • \(x_1 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{3}{16}\pi\bigr)\bigr]\approx 0.3084,\)
  • \(x_2 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{5}{16}\pi\bigr)\bigr]\approx 0.6057,\)
  • \(x_3 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{7}{16}\pi\bigr)\bigr]\approx 0.9745,\)
  • \(x_4 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{9}{16}\pi\bigr)\bigr]\approx 2.1667,\)
  • \(x_5 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{11}{16}\pi\bigr)\bigr]\approx 2.5355,\)
  • \(x_6 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{13}{16}\pi\bigr)\bigr]\approx 2.8330,\)
  • \(x_7 = \tfrac{\pi}{2}\bigl[\,1 - \cos\!\bigl(\tfrac{15}{16}\pi\bigr)\bigr]\approx 3.0450.\)
En MATLAB:

% Definir función
f = @(x) cos(x);

% Calcular nodos de Chebyshev en [0,pi]
k = 0:7;
xcheb = (pi/2) * (1 - cos((2*k + 1)/(16) * pi))';
b = f(xcheb);
A=xcheb.^(8:-1:0);
p=A\b;


% Evaluar en 500 puntos para graficar
u = linspace(0, pi, 500);
fu = f(u);
pcheb = polyval(p, u);

% Dibujo comparativo
figure;
plot(u, fu, 'b-', 'LineWidth', 1.5); hold on;
plot(u, pcheb, 'g--', 'LineWidth', 1.2);
plot(xcheb, b, 'ro', 'MarkerFaceColor', 'r');
legend('cos(x)', 'Interpolador Chebyshev grado 7', 'Nodos Chebyshev');
xlabel('x'); ylabel('y'); title('Interpolación de cos(x) con nodos de Chebyshev');
grid on;
hold off;

Se obtiene así el polinomio de grado 7 basado en nodos de Chebyshev y su comparación gráfica.

5. Cota del error para nodos de Chebyshev (grado 7):

Para nodos de Chebyshev, se tiene que \[ \max_{x\in[0,\pi]} \bigl\lvert \omega_8(x)\bigr\rvert = \Bigl(\tfrac{\pi}{2}\Bigr)^8 \cdot 2^{-7}. \] Dado que \(\lvert f^{(8)}(x)\rvert \le 1\) para \(f(x)=\cos(x)\), la cota del error es \[ \bigl\lvert E_7(x)\bigr\rvert \;\le\; \frac{1}{8!}\,\Bigl(\tfrac{\pi}{2}\Bigr)^8 \,2^{-7}. \] Numéricamente, \(\,(\pi/2)^8/(8!\,2^7) \approx 4.10\times10^{-6}.\) Así, la interpolación con nodos de Chebyshev reduce la cota del error con respecto a los nodos equidistantes, garantizando una mejor aproximación en todo \([0,\pi]\).

Interpolación del calor específico de la plata

Problema:

La siguiente tabla proporciona el calor específico de la plata (en grados Kelvin) a diversas temperaturas:

T (K) 8 10 12 14 16 18
C(T) 0.0236 0.0475 0.083 0.1736 0.202 0.25

Halla el polinomio interpolador y da un valor aproximado del calor específico a 15 K. Representa gráficamente los datos y el polinomio interpolador.

Solución:

Denotamos los puntos dados como \((T_i,\,C_i)\): \[ (8,\,0.0236),\; (10,\,0.0475),\; (12,\,0.0830),\; (14,\,0.1736),\; (16,\,0.2020),\; (18,\,0.2500). \] Para interpolar con un polinomio de grado 5 (seis puntos), resolvemos el sistema de ecuaciones que se genera al cumpmlir $p(T)=f(T)$. Indicamos los vectores: \[ x = [\,8,\,10,\,12,\,14,\,16,\,18\,], \quad C = [\,0.0236,\,0.0475,\,0.083,\,0.1736,\,0.202,\,0.25\,]. \] Sea \[ p(T) \;=\; a_5\,T^5 + a_4\,T^4 + a_3\,T^3 + a_2\,T^2 + a_1\,T + a_0 \] el polinomio de grado 5 que interpola estos seis puntos. Las instrucciones en MATLAB son:


  % Definir datos
  format long
  T = [8, 10, 12, 14, 16, 18]';
  C = [0.0236, 0.0475, 0.083, 0.1736, 0.202, 0.25]';

  % Ajustar polinomio de grado 5
  grado = 5;
  A=T.^(grado:-1:0);
  p=A\C;

  %Comprobación
  polyval(p,T)-C

  % Evaluar polinomio en T = 15
  T15 = 15;
  C15 = polyval(p, T15);

  % Evaluar y graficar en un rango para visualizar
  u = linspace(8, 18, 500);
  Cu = polyval(p, u);

  figure;
  plot(T, C, 'ro', 'MarkerFaceColor', 'r'); hold on;
  plot(u, Cu, 'b-', 'LineWidth', 1.2);
  xlabel('Temperatura T (K)');
  ylabel('Calor específico C(T)');
  title('Interpolación polinómica de grado 5 para el calor específico de la plata');
  legend('Datos', 'Polinomio interpolador grado 5', 'Location', 'NorthWest');
  grid on;
  hold off;
  

Resultado:

Usando el polinomio interpolador de grado 5 se obtiene aproximadamente \[ C15 \approx 0.199346484375038. \] El gráfico muestra los nodos en rojo y la curva del polinomio interpolador en azul.

El polinomio hallado (coeficientes aproximados de \(\,a_5,\dots,a_0\)) es, por ejemplo: \[ p(T) \approx (0.000093723958333)\,T^5 +(-0.006042187499998)\,T^4 +(0.152419270833284)\,T^3 +(-1.877631249999389)\,T^2 +(11.304923333329647)\,T +(-26.608399999991281). \] Evaluando en \(T=15\) da \(C(15)\approx0.1993\).

Interpolación de Hermite para \(f(x)=\cos(x)\) en \([0,\pi]\)

Problema:

Se considera la función \(f(x)=\cos(x)\) en el intervalo \([0,\pi]\). Considera el siguiente problema de Hermite, donde \(p\) es el polinomio interpolador.


\[ \begin{array}{l} f\bigl(0\bigr) = p(0), \quad f'\bigl(0\bigr) = p'(0), \quad f''\bigl(0\bigr) = p''(0),\\ f\Bigl(\tfrac{\pi}{2}\Bigr) = p\Bigl(\tfrac{\pi}{2}\Bigr), \quad f'\Bigl(\tfrac{\pi}{2}\Bigr) = p'\Bigl(\tfrac{\pi}{2}\Bigr),\\ f(\pi) = p(\pi). \end{array} \]

Escribe el sistema que habría que resolver para hallar el polinomio \(p\) y la expresión que daría una cota del error de la interpolación de Hermite en cada \(x\in[0,\pi]\).

Solución:

Determinación del polinomio \(p(x)\):

Como se imponen seis condiciones (valor, derivada y segunda derivada en \(x=0\); valor y derivada en \(x=\pi/2\); valor en \(x=\pi\)), se busca un polinomio de grado 5:

\( \displaystyle p(x) = a_5\,x^5 + a_4\,x^4 + a_3\,x^3 + a_2\,x^2 + a_1\,x + a_0. \)

Calculamos las derivadas:

\(\displaystyle p'(x) = 5a_5\,x^4 + 4a_4\,x^3 + 3a_3\,x^2 + 2a_2\,x + a_1,\quad p''(x) = 20a_5\,x^3 + 12a_4\,x^2 + 6a_3\,x + 2a_2.\)

Evaluando en cada nodo:

  • \(\;x=0:\) \[ p(0) = a_0 \;=\; \cos(0) = 1, \quad p'(0) = a_1 \;=\; -\sin(0) = 0, \quad p''(0) = 2\,a_2 \;=\; -\cos(0) = -1 \;\Longrightarrow\; a_0 = 1,\; a_1 = 0,\; a_2 = -\tfrac{1}{2}. \]
  • \(\;x = \tfrac{\pi}{2}:\) \[ p\Bigl(\tfrac{\pi}{2}\Bigr) = a_5\Bigl(\tfrac{\pi}{2}\Bigr)^5 + a_4\Bigl(\tfrac{\pi}{2}\Bigr)^4 + a_3\Bigl(\tfrac{\pi}{2}\Bigr)^3 + a_2\Bigl(\tfrac{\pi}{2}\Bigr)^2 + a_1\Bigl(\tfrac{\pi}{2}\Bigr) + a_0 = \cos\Bigl(\tfrac{\pi}{2}\Bigr) = 0, \] \[ p'\Bigl(\tfrac{\pi}{2}\Bigr) = 5a_5\Bigl(\tfrac{\pi}{2}\Bigr)^4 + 4a_4\Bigl(\tfrac{\pi}{2}\Bigr)^3 + 3a_3\Bigl(\tfrac{\pi}{2}\Bigr)^2 + 2a_2\Bigl(\tfrac{\pi}{2}\Bigr) + a_1 = -\sin\Bigl(\tfrac{\pi}{2}\Bigr) = -1. \]
  • \(\;x = \pi:\) \[ p(\pi) = a_5\,\pi^5 + a_4\,\pi^4 + a_3\,\pi^3 + a_2\,\pi^2 + a_1\,\pi + a_0 = \cos(\pi) = -1. \]

Como ya tenemos \(a_0=1\), \(a_1=0\), \(a_2=-\tfrac{1}{2}\), las ecuaciones en \(x=\pi/2\) y \(x=\pi\) se convierten en tres ecuaciones lineales en \(a_3,a_4,a_5\):

\[ a_5\Bigl(\tfrac{\pi}{2}\Bigr)^5 \;+\; a_4\Bigl(\tfrac{\pi}{2}\Bigr)^4 \;+\; a_3\Bigl(\tfrac{\pi}{2}\Bigr)^3 \;+\; \bigl(-\tfrac{1}{2}\bigr)\Bigl(\tfrac{\pi}{2}\Bigr)^2 + 0 \cdot \Bigl(\tfrac{\pi}{2}\Bigr) + 1 = 0, \] \[ 5\,a_5\Bigl(\tfrac{\pi}{2}\Bigr)^4 \;+\; 4\,a_4\Bigl(\tfrac{\pi}{2}\Bigr)^3 \;+\; 3\,a_3\Bigl(\tfrac{\pi}{2}\Bigr)^2 \;+\; 2\,\bigl(-\tfrac{1}{2}\bigr)\Bigl(\tfrac{\pi}{2}\Bigr) + 0 = -\,1, \] \[ a_5\,\pi^5 + a_4\,\pi^4 + a_3\,\pi^3 + \bigl(-\tfrac{1}{2}\bigr)\,\pi^2 + 0 \cdot \pi + 1 = -\,1. \]

Por lo que bastaría resolver este sistema para encontrar la solución.

Si se plantea de forma general el problema, tomando como incógnitas los coeficientes del polinomio\(\,[\,a_5,\;a_4,\;a_3,\;a_2,\;a_1,\;a_0\,]^\top\), las seis ecuaciones lineales que definen el problema son:

\[ \underbrace{ \begin{pmatrix} 0^5 & 0^4 & 0^3 & 0^2 & 0^1 & 1 \\ (\pi/2)^5 & (\pi/2)^4 & (\pi/2)^3 & (\pi/2)^2 & (\pi/2)^1 & 1 \\ \pi^5 & \pi^4 & \pi^3 & \pi^2 & \pi & 1\\ 5\cdot 0^4 & 4\cdot 0^3 & 3 \cdot 0^2 & 2 \cdot 0 & 1 & 0 \\ 5\cdot (\pi/2)^4 & 4\cdot (\pi/2)^3 & 3 \cdot (\pi/2)^2 & 2 \cdot (\pi/2) & 1 & 0 \\ 20\cdot 0^3 & 12\cdot 0^2 & 6 \cdot 0^1 & 2 & 0 & 0 \\ \end{pmatrix} }_{A} \, \begin{pmatrix} a_5 \\a_4 \\ a_3 \\ a_2 \\ a_1 \\ a_0 \end{pmatrix} = \underbrace{ \begin{pmatrix} f(0) \\ f(\pi/2) \\ f(\pi) \\ f'(0) \\ f'(\pi/2) \\ f''(0) \\ \end{pmatrix} }_{b}. \]

Resolviendo \(A\,[a_5,a_4,a_3,a_2,a_1,a_0]^\top = b\) se obtienen \(a_3,a_4,a_5\). Así resulta el polinomio de Hermite \(p(x)\) de grado 5 que satisface todas las condiciones indicadas.


% En este caso, plateamos el sistema completo
% Función
f=@(x) cos(x);
df=@(x) -sin(x);
df2=@(x) -cos(x);

% Construir matriz A y vector b
%Condición sobre el valor de f
x=[0;pi/2;pi];
A1= x.^[5:-1:0];
%Condición sobre la derivada
x1=[0;pi/2];
A2= (5:-1:0).*x1.^[4:-1:0 0];
%Condición sobre la derivada segunda
A3= [0 0 0 2 0 0];
A=[A1;A2;A3];

b=[f(0);f(pi/2);f(pi);df(0);df(pi/2);df2(0)];


% Resolver el sistema lineal
p=A\b
% Comprobación
polyval(p,x)-f(x)
dp=polyder(p);
polyval(dp,x1)-df(x1)
dp2=polyder(dp);
polyval(dp2,0)-df2(0)

% Coeficientes finales del polinomio p(x)
% p(x) = a5*x.^5 + a4*x.^4 + a3*x.^3 + a2*x.^2 + a1*x + a0;
%  a5=-0.006520197358495
%  a4=0.052596309595981
%  a3=-0.006232537061796
%  a2=-0.5
%  a1=0
%  a0=1.000000000000000

Cota del error de la interpolación de Hermite:

Para un polinomio de Hermite de grado 5 con condiciones de orden 3 en \(x=0\), orden 2 en \(x=\pi/2\) y orden 1 en \(x=\pi\), el término de error en un punto \(x\in[0,\pi]\) se escribe como:

\[ E_5(x) \;=\; \frac{f^{(6)}(\xi)}{6!}\;\omega(x), \quad \text{con}\; \omega(x) = x^3\,\bigl(x - \tfrac{\pi}{2}\bigr)^2\,(x - \pi), \quad \xi \in [0,\pi]. \]

Como \(f(x)=\cos(x)\), se tiene \(f^{(6)}(x) = -\cos(x)\), de modo que \(\lvert f^{(6)}(x)\rvert \le 1\) en \([0,\pi]\). Por tanto,

\[ \bigl\lvert E_5(x)\bigr\rvert \;\le\; \frac{1}{6!}\,\max_{x\in[0,\pi]}\Bigl\lvert |x^3\,\bigl(x - \tfrac{\pi}{2}\bigr)^2\,(x - \pi)|\Bigr\rvert \]

Numéricamente, la expresión \(\max_{[0,\pi]} |x^3(x - \tfrac{\pi}{2})^2(x - \pi)|\) se alcanza en alguno de los puntos críticos del polinomio \(\omega(x)\). En cualquier caso, la cota final se escribe como:

\[ \bigl\lvert E_5(x)\bigr\rvert \;\lesssim\; \frac{1}{720}\,\max_{x\in[0,\pi]}\Bigl\lvert |x^3\,(x - \tfrac{\pi}{2})^2\,(x - \pi)|\Bigr\rvert \]

Esto garantiza que el error de interpolación de Hermite sea proporcional a \(\omega(x)\) y está acotado por \(\tfrac{1}{6!}\) veces el valor máximo de \(\lvert\,\omega(x)\rvert\) en todo \([0,\pi]\).

Interpolación de Hermite para \(\log(1+x)\) en \([0,1]\)

Problema:

Dada la función \(f(x) = \log(1+x)\), calcula el polinomio de interpolación de Hermite \(p(x)\) que satisface:

  • \(p(x_i) = f(x_i)\)
  • \(p'(x_i) = f'(x_i)\)
  • \(x_i \in \{0,\,0.5,\,1\}\)

Da una cota del error de interpolación y compara el resultado con el máximo en valor absoluto de la diferencia entre la función y el polinomio tomando 500 puntos del intervalo \([0,1]\).

Solución:

1. Condiciones de Hermite y forma del polinomio:

Como queremos que \(p(x)\) cumpla las condiciones de valor y derivada en los tres nodos \(x_0=0\), \(x_1=0.5\) y \(x_2=1\), disponemos de seis ecuaciones en total. Por tanto, buscamos un polinomio de grado 5: \[ p(x) \;=\; a_5\,x^5 \;+\; a_4\,x^4 \;+\; a_3\,x^3 \;+\; a_2\,x^2 \;+\; a_1\,x \;+\; a_0. \] Sus derivadas son: \[ p'(x) = 5\,a_5\,x^4 \;+\; 4\,a_4\,x^3 \;+\; 3\,a_3\,x^2 \;+\; 2\,a_2\,x \;+\; a_1, \] \[ p''(x) = 20\,a_5\,x^3 \;+\; 12\,a_4\,x^2 \;+\; 6\,a_3\,x \;+\; 2\,a_2. \] Para los nodos: \[ f(x) = \log(1+x), \quad f'(x) = \frac{1}{1+x}, \quad f''(x) = -\,\frac{1}{(1+x)^2}, \quad \ldots \] Evaluamos en cada \(x_i\):

  • \(\;x = 0:\) \[ p(0) = a_0 \;=\; f(0) = \log(1 + 0) = 0, \quad p'(0) = a_1 \;=\; f'(0) = \frac{1}{1+0} = 1. \] De aquí: \[ a_0 = 0, \quad a_1 = 1. \]
  • \(\;x = 0.5:\) \[ p(0.5) = a_5\,(0.5)^5 + a_4\,(0.5)^4 + a_3\,(0.5)^3 + a_2\,(0.5)^2 + a_1\,(0.5) + a_0 = \log\bigl(1 + 0.5\bigr) = \ln(1.5), \] \[ p'(0.5) = 5\,a_5\,(0.5)^4 + 4\,a_4\,(0.5)^3 + 3\,a_3\,(0.5)^2 + 2\,a_2\,(0.5) + a_1 = \frac{1}{1 + 0.5} = \frac{2}{3}. \]
  • \(\;x = 1:\) \[ p(1) = a_5 + a_4 + a_3 + a_2 + a_1 + a_0 = \log(1 + 1) = \log(2), \] \[ p'(1) = 5\,a_5 + 4\,a_4 + 3\,a_3 + 2\,a_2 + a_1 = \frac{1}{1 + 1} = \tfrac12. \]

Resumiendo, las seis ecuaciones lineales son:

\[ \begin{cases} a_0 = 0,\\ a_1 = 1,\\ a_5\,(0.5)^5 + a_4\,(0.5)^4 + a_3\,(0.5)^3 + a_2\,(0.5)^2 + a_1\,(0.5) + a_0 = \log(1.5),\\ 5\,a_5\,(0.5)^4 + 4\,a_4\,(0.5)^3 + 3\,a_3\,(0.5)^2 + 2\,a_2\,(0.5) + a_1 = \tfrac{2}{3},\\ a_5 + a_4 + a_3 + a_2 + a_1 + a_0 = \log(2),\\ 5\,a_5 + 4\,a_4 + 3\,a_3 + 2\,a_2 + a_1 = \tfrac12. \end{cases} \]

Ya conocemos \(a_0 = 0\) y \(a_1 = 1\). Definiendo \(\;A = [\,a_5,\,a_4,\,a_3,\,a_2\,]^\top,\) los dos primeros coeficientes se sustituyen en las últimas cuatro ecuaciones, quedando un sistema de 4 ecuaciones lineales para \((a_5, a_4, a_3, a_4)\).

Planteamos el problema a resolver de forma general. Su forma matricial es:

\[ \underbrace{ \begin{pmatrix} 0^5 & 0^4 & 0^3 & 0^2 & 0^1 & 1 \\ 0.5^5 & 0.5^4 & 0.5^3 & 0.5^2 & 0.5^1 & 1 \\ 1^5 & 1^4 & 1^3 & 1^2 & 1 & 1\\ 5\cdot 0^4 & 4\cdot 0^3 & 3 \cdot 0^2 & 2 \cdot 0 & 1 & 0 \\ 5\cdot 0.5^4 & 4\cdot 0.5^3 & 3 \cdot 0.5^2 & 2 \cdot 0.5 & 1 & 0 \\ 5\cdot 1^4 & 4\cdot 1^3 & 3 \cdot 1^2 & 2 \cdot 1 & 1 & \\ \end{pmatrix} }_{A} \, \begin{pmatrix} a_5 \\a_4 \\ a_3 \\ a_2 \\ a_1 \\ a_0 \end{pmatrix} = \underbrace{ \begin{pmatrix} f(0) \\ f(0.5) \\ f(1) \\ f'(0) \\ f'(0.5) \\ f'(1) \\ \end{pmatrix} }_{b} \]

Una vez resuelto \(A\,x = b\), se obtienen \(a_i\), los coeficientes del polinomio \[ p(x) = a_5\,x^5 \;+\; a_4\,x^4 \;+\; a_3\,x^3 \;+\; a_2\,x^2 \;+\; a_1\cdot x \;+\; a_0. \]


% Definir nodos y derivadas
f  = @(x) log(1 + x);
df = @(x) 1./(1 + x);
x = [0, 0.5, 1]';


% Construir matriz A y vector b
%Condición sobre el valor de f
A1= x.^[5:-1:0];
%Condición sobre la derivada
A2= (5:-1:0).*x.^[4:-1:0 0];
A=[A1;A2];

b=[f(x);df(x)];


% Resolver el sistema lineal
p=A\b
% Comprobación
polyval(p,x)-f(x)
dp=polyder(p);
polyval(dp,x)-df(x)


% Coeficientes finales del polinomio p(x)
% p(x) = a5*x.^5 + a4*x.^4 + a3*x.^3 + a2*x.^2 + a1*x + a0;
% a5=0.031134333227981; a4= -0.135571547818884;a3=   0.291445734833935
% a2=  -0.493861339683087;a1=1.000000000000000; a0=0

2. Cota del error de interpolación de Hermite:

Para Hermite con nodos \(x_0=0,\,x_1=0.5,\,x_2=1\) y condiciones de valor y primera derivada en cada uno, el término de error en un punto \(x\in[0,1]\) es: \[ E_5(x) \;=\; \frac{f^{(6)}(\xi)}{6!}\; \underbrace{(x - 0)^2\,(x - 0.5)^2\,(x - 1)^2}_{\omega(x)}, \quad \text{para algún } \xi \in [0,1]. \] Como \(f(x)=\ln(1+x)\), se verifica \[ f^{(6)}(x) \;=\; (-1)^{5} \,\frac{5!}{(1 + x)^6} = -\,\frac{120}{(1+x)^6}, \] luego \(\lvert f^{(6)}(x)\rvert \le 120\) en todo \([0,1]\). Por tanto, \[ \bigl\lvert R_5(x)\bigr\rvert \;\le\; \frac{120}{6!}\;\max_{x\in[0,1]} \Bigl\lvert (x)(\,x - 0.5\,)(\,x - 1\,)\Bigr\rvert^2. \] Nótese que \(\omega(x) = x^2(x - 0.5)^2(x - 1)^2\) alcanza su valor máximo en uno de los puntos críticos de \(\omega(x)\) dentro de \([0,1]\). Numéricamente, \(\,\max_{x\in[0,1]}\lvert \omega(x)\rvert \approx (0.5^2 \cdot 0.5^2 \cdot 0.5^2) = (0.5)^6 = 1/64.\) Entonces la cota aproximada es: \[ \max_{x\in[0,1]} \lvert R_5(x)\rvert \;\lesssim\; \frac{120}{720}\,\frac{1}{64} = \frac{1}{6}\,\frac{1}{64} = \frac{1}{384} \approx 2.60\times 10^{-3}. \]

3. Comparación de la cota con el error numérico utilizando 500 puntos:

En MATLAB evaluamos \(p(x)\) y \(f(x)\) en 500 puntos equiespaciados de \([0,1]\) y medimos el máximo error absoluto:


% Puntos de evaluación
u = linspace(0, 1, 500)';
fu = f(u);

% Evaluar p(x) en x_eval
pu = polyval(p,u);

% Calcular error absoluto
maxError = max(abs(fu - pu));


% Mostrar el máximo error numérico
fprintf('Error máximo en 500 puntos = %.4e\n', maxError);

Resultado:

El máximo error absoluto calculado numéricamente en los 500 puntos es aproximadamente:

  • \(\displaystyle \max_{x\in\{500\,\text{puntos}\}} \bigl\lvert f(x) - p(x)\bigr\rvert \approx 4.86\times 10^{-5}.\)

La cota teórica que hallamos es \(\approx 2.60\times 10^{-3}\), que mayor que el error numérico observado, lo cual confirma que la interpolación de Hermite cumple la cota estimada en todo \([0,1]\).

Interpolación de \(\sin(\pi x)\) en \([0,1]\)

Problema:

Dada la función \(f(x) = \sin(\pi x)\), calcula el polinomio de interpolación \(p(x)\) que resuelve los siguientes problemas:

  1. \(p(x_i) = f(x_i)\), \(p'(x_i) = f'(x_i)\) donde \(x_i\) son 10 puntos igualmente espaciados en el intervalo \([0,1]\).
  2. \(p(x_i) = f(x_i)\), donde \(p\) es un polinomio de grado 10 y \(x_i\) son los nodos de Chebyshev en \([0,1]\).

Representa gráficamente ambos polinomios junto con la función \(f(x)\).

Solución:

Datos y definiciones preliminares:

Sea \(f(x) = \sin(\pi x)\). Entonces \[ f'(x) = \pi \cos(\pi x), \quad f''(x) = -\,\pi^2 \sin(\pi x), \quad \ldots \] Trabajaremos en \([0,1]\).


1. Interpolación de Hermite con 10 nodos igualmente espaciados

Tomamos 10 nodos equiespaciados en \([0,1]\): \[ x_i = \frac{i}{9}, \quad i = 0,1,2,\dots,9. \] En cada nodo imponemos: \[ p(x_i) = f(x_i), \quad p'(x_i) = f'(x_i), \quad i = 0,1,\dots,9. \] Al tener 10 nodos con valor y derivada, disponemos de \(2\times 10 = 20\) condiciones. Por tanto, \(p(x)\) será un polinomio de grado a lo sumo 19: \[ p(x) = a_{19}\,x^{19} + a_{18}\,x^{18} + \cdots + a_1\,x + a_0. \] Denotamos el vector de coeficientes: \[ \mathbf{a} = \bigl[a_{19},\,a_{18},\,\dots,\,a_{0}\bigr]^\top. \] Construimos el sistema lineal \(A_{\text{Hermite}}\,\mathbf{a} = \mathbf{b}_{\text{Hermite}}\), con 20 filas:

  • Para cada \(i=0,\dots,9\), la fila \(i+1\) impone \(p(x_i) = f(x_i)\):
  • \[ \underbrace{\bigl[\,x_i^{19},\,x_i^{18}\,\dots,\,x_i^{1}\,x_i^{0}\bigr]}_{\text{vector de potencias en }x_i} \begin{pmatrix} a_{19} \\ a_{18} \\ \vdots \\ a_{1} \\ a_{0}\end{pmatrix} \;=\; \sin\bigl(\pi\,x_i\bigr). \]
  • Para cada \(i=0,\dots,9\), la fila \(11+i\) impone \(p'(x_i) = f'(x_i)\). Como \[ p'(x) = a_1 + 2\,a_2\,x + 3\,a_3\,x^2 + \cdots + 19\,a_{19}\,x^{18}, \] la fila queda como:
  • \[ \bigl[19\,x_i^{18},\, 18\,x_i^{17},\, \dots,\, 3\,x_i^2,\;2\,x_i,\;1,\;0\bigr] \begin{pmatrix} a_{19} \\ a_{18} \\ \vdots \\ a_{1}\\ a_{0} \end{pmatrix} \;=\; \pi\,\cos\bigl(\pi\,x_i\bigr). \]
Una vez generada la matriz \(A_{\text{Hermite}}\in\mathbb{R}^{20\times 20}\) y el vector \(\mathbf{b}_{\text{Hermite}}\in\mathbb{R}^{20}\), se resuelve en MATLAB: \[ \mathbf{a} = A_{\text{Hermite}}^{-1} \,\mathbf{b}_{\text{Hermite}}, \quad\text{o bien}\quad \mathbf{a} = A_{\text{Hermite}}\backslash \mathbf{b}_{\text{Hermite}}. \]


% ------------------------------------------------------------
% Interpolación de Hermite para f(x) = sin(pi x) con 10 nodos
% ------------------------------------------------------------

% 1. Definir f y f'
f  = @(x) sin(pi*x);
df = @(x) pi*cos(pi*x);

% 2. Generar los 10 nodos equiespaciados en [0,1]
n = 10;                     % número de nodos
x = linspace(0, 1, n)';     %   (i/9), i = 0..9

% 3. Construir la matriz A de tamaño 20x20 y el vector b_h de tamaño 20x1
A1=x.^(19:-1:0);
A2=(19:-1:0).*x.^[18:-1:0 0];   %Grado 19
A=[A1;A2];
b = [f(x); df(x)];           % f(x:i) y f'(x_i)

% 4. Resolver el sistema para obtener coeficientes del polinomio de grado<=19
p = A \ b;  % vector [a0; a1; ...; a19]

% 5. Comprobación
polyval(p,x)-f(x)
dp=polyder(p);
polyval(dp,x)-df(x)

% 6. Representación
u = linspace(0,1,500)';
pu = polyval(p,u);

figure;
plot(u, f(u), 'b-', 'LineWidth', 1.5); hold on;
plot(u,pu, 'r--', 'LineWidth', 1.2);
plot(x, f(x), 'ko', 'MarkerFaceColor', 'k');
legend('sin(\pi x)', 'Hermite grado 19', 'Nodos equiespaciados');
xlabel('x'); ylabel('y'); title('Interpolación de Hermite (10 nodos equiespaciados)');
grid on;
hold off;

De esta manera obtenemos el polinomio de Hermite \(p_{\text{Hermite}}(x)\) de grado 19 que interpola \(f\) y su derivada en los 10 nodos equiespaciados. La gráfica muestra la función original (azul), el polinomio de Hermite (rojo punteado) y los nodos (círculos negros).


2. Interpolación con nodos de Chebyshev (polinomio de grado 10)

Ahora buscamos un polinomio \(\,q(x)\) de grado 10 que satisfaga \[ q(x_i) = f(x_i), \quad i = 0,1,\dots,10, \] donde \(\{x_i\}\) son los 11 nodos de Chebyshev en \([0,1]\), hacemos \[ x_k = \frac{1 + \cos\bigl(\frac{2k+1}{22}\pi\bigr)}{2}, \quad k = 0,1,\dots,10. \]

  • Calculamos con Matlab el polinomio \(q(x)\)
  • Evaluamos \(q(x)\) en l 500 puntos \(\,x_{\text{eval}}\) y graficamos junto a \(f(x)\) y los nodos de Chebyshev.


% ------------------------------------------------------------
% Interpolación polinómica con nodos de Chebyshev en [0,1]
% ------------------------------------------------------------
% 1. Datos
f = @(x) sin(pi*x);

% 2. Calcular nodos Chebyshev en [0,1]
n=10;a=0;b=1;
%Para obtener los 11 nodos en un vector
x=(a+b)/2+(b-a)/2*cos((2*(0:n)+1)*pi/(2*n+2))';

% 3. Ajustar polinomio de grado 10
A=x.^(10:-1:0);
b=f(x);
p=A\b;

% 4. Evaluar polinomio en u (vector de 500 puntos)
u=linspace(0,1,500);
fu=f(u);
pu = polyval(p, u);

% 5. Graficar
figure;
plot(u, fu, 'b-', 'LineWidth', 1.5); hold on;
plot(u, pu, 'g--', 'LineWidth', 1.2);
plot(x, b, 'rs', 'MarkerFaceColor', 'r');
legend('sin(\pi x)', 'Interpolador Chebyshev grado 10', 'Nodos Chebyshev');
xlabel('x'); ylabel('y'); title('Interpolación grado 10 con nodos de Chebyshev');
grid on;
hold off;

Así obtenemos el polinomio \(q(x)\) de grado 10 que pasa por los 11 nodos de Chebyshev en \([0,1]\). En la gráfica, la función original está en azul, el interpolador Chebyshev de grado 10 en verde punteado y los nodos en cuadrados rojos.


3. Comparación gráfica y comentarios:

Ambos polinomios aproximan bien \(\sin(\pi x)\) en \([0,1]\), pero el de Hermite (grado 19) garantiza coincidencia de derivadas en los 10 nodos, mientras que el de Chebyshev (grado 10) logra un ajuste global equilibrado con menos grado gracias a la elección óptima de los nodos.

Ajuste lineal por mínimos cuadrados

Problema:

Ajustar una línea recta a los valores \(x\) e \(y\) en el sentido de mínimos cuadrados, usando la siguiente tabla:

x 1 2 3 4 5 6 7
y 0.5 2.5 2 4 3.5 6 5.5

Determina el polinomio de grado 1 que se ajusta a estos valores en el sentido de mínimos cuadrados y grafica la línea ajustada junto con los puntos \((x,y)\) en la misma figura.

Solución:

1. Formulación del problema de mínimos cuadrados

Queremos encontrar una función lineal \[ p(x) = m\,x + n \] que minimice la suma de los cuadrados de las diferencias entre los valores observados \(y_i\) y los valores predichos \(m\,x_i + n\). Esto equivale a minimizar \[ S(m,b) \;=\; \sum_{i=1}^{n} \bigl[y_i - (m\,x_i + n)\bigr]^2. \]

2. Resolución utilizando la factorización QR

Se considera la matriz A del sistema formado por las ecuaciones \(p(x_i)=y_i\), es decir, \[ \underbrace{ \begin{pmatrix} 1 & 1 \\ 2 & 1 \\ 3 & 1 \\ 4 & 1 \\ 5 & 1 \\ 6 & 1 \\ 7 & 1 \\ \end{pmatrix} }_{A} \, \begin{pmatrix} m \\ n \end{pmatrix} = \underbrace{ \begin{pmatrix} 0.5 \\ 2.5 \\ 2 \\ 4 \\ 3.5 \\ 6 \\ 5.5 \\ \end{pmatrix} }_{b} \]


% ------------------------------------------------------------
% Ajuste lineal por mínimos cuadrados (grado 1)
% ------------------------------------------------------------

% Definir datos
x = [1, 2, 3, 4, 5, 6, 7]';
fx = [0.5, 2.5, 2, 4, 3.5, 6, 5.5]';

% Ajustar recta de grado 1
[Q,R]=qr([x ones(7,1)])
k=1;
Y=Q(:,1:k+1)'
RG=R(1:k+1,:)
p=RG\Y*fx

% Mostrar coeficientes
fprintf('Coeficientes del ajuste lineal: m = %.7f, n = %.7f\n', p(2), p(2));

% Generar puntos para graficar la recta ajustada
u = [min(x), max(x)];
pu = polyval(p,u);

% Graficar datos y recta ajustada
figure;
plot(x, fx, 'ko', 'MarkerFaceColor', 'k', 'MarkerSize', 6); hold on;
plot(u, pu, 'r-', 'LineWidth', 1.4);
legend('Datos observados', 'Recta de ajuste (grado 1)', 'Location', 'NorthWest');
xlabel('x'); ylabel('y'); title('Ajuste lineal por mínimos cuadrados');
grid on;
hold off;

3. Representación gráfica y conclusiones

En la gráfica generada por el código anterior:

  • Los puntos negros (“o” relleno) corresponden a los datos \((x_i,\,y_i)\).
  • La línea roja es el ajuste lineal \(p(x) = 0.8392857\,x + 0.0714286\).

Se observa que dicha recta aproxima razonablemente los datos en su conjunto, minimizando la suma de los cuadrados de las desviaciones verticales entre los puntos reales y la línea predicha.

4. Forma alternativa para resolver el problema

Las condiciones de mínimo se obtienen al derivar \(S(m,b)\) respecto a \(m\) y \(b\) y anularlas, lo que genera el sistema normal: \[ \begin{cases} \displaystyle \sum_{i=1}^{n} x_i\,(y_i - m\,x_i - n) = 0,\\[1em] \displaystyle \sum_{i=1}^{n} (y_i - m\,x_i - n) = 0. \end{cases} \]

En forma equivalente, estas dos ecuaciones lineales en \(m\) y \(n\) son: \[ \begin{pmatrix} \sum x_i^2 & \sum x_i \\ \sum x_i & n \end{pmatrix} \begin{pmatrix} m \\ n \end{pmatrix} = \begin{pmatrix} \sum x_i\,y_i \\ \sum y_i \end{pmatrix}, \] donde \(n = 7\) (hay siete pares \((x_i,y_i)\)).

4.1. Cálculo de \(m\) y \(n\)

Tomamos los datos:

\[ x = [\,1,\,2,\,3,\,4,\,5,\,6,\,7\,], \quad y = [\,0.5,\,2.5,\,2,\,4,\,3.5,\,6,\,5.5\,]. \] Calculamos las sumas necesarias: \[ \sum_{i=1}^{7} x_i \;=\; 1+2+3+4+5+6+7 = 28, \quad \sum_{i=1}^{7} x_i^2 \;=\; 1^2 + 2^2 + \cdots + 7^2 = 140, \] \[ \sum_{i=1}^{7} y_i \;=\; 0.5 + 2.5 + 2 + 4 + 3.5 + 6 + 5.5 = 24, \quad \sum_{i=1}^{7} x_i\,y_i \;=\; 1\cdot0.5 + 2\cdot2.5 + 3\cdot2 + 4\cdot4 + 5\cdot3.5 + 6\cdot6 + 7\cdot5.5 = 118. \] Así, el sistema normal es: \[ \begin{pmatrix} 140 & 28 \\ 28 & 7 \end{pmatrix} \begin{pmatrix} m \\ n \end{pmatrix} = \begin{pmatrix} 118 \\ 24 \end{pmatrix}. \] Resolviendo este sistema (por ejemplo, multiplicando inversa o con eliminación): \[ m \approx 0.8392857, \quad n \approx 0.0714286. \] Por lo tanto, la recta de ajuste es \[ p(x) \;=\; 0.8392857\,x \;+\; 0.0714286. \]

Aproximación por mínimos cuadrados de \(e^{-x^2}\) en \([-5,5]\)

Problema:

Dada la función \(f(x) = e^{-x^2}\), halla el polinomio de grado menor o igual a 20 que mejor aproxima la función en el sentido de mínimos cuadrados en \([-5,5]\), tomando como datos 500 valores de \(x\) en nodos igualmente espaciados.

Solución:

1. Planteamiento del ajuste por mínimos cuadrados:

Queremos encontrar un polinomio de grado 20: \[ p(x) = c_{20}\,x^{20} + c_{19}\,x^{19} + \cdots + c_1\,x + c_0, \] que minimice la suma de los cuadrados de las diferencias entre \(f(x_i)\) y \(p(x_i)\) en un conjunto de \(N\) puntos igualmente espaciados en \([-5,5]\). Es decir, definimos nodos \[ x_i = -5 + \frac{10(i-1)}{N-1}, \quad i = 1,2,\dots,N, \] y evaluamos \[ y_i = f(x_i) = e^{-x_i^2}. \] Con estos \(N\) pares \(\bigl(x_i,y_i\bigr)\) (tomaremos \(N=500\) en MATLAB ), buscamos los coeficientes \(\,[\,c_{20},\,c_{19},\,\dots,\,c_1,\,c_0\,]\) que resuelvan el problema \[ \min_{c_0,\dots,c_{20}} \sum_{i=1}^{N} \Bigl[y_i - p(x_i)\Bigr]^2. \] Escribimos el código MATLAB, para obtener \(\displaystyle p(x) = c_{20}\,x^{20} + c_{19}\,x^{19} + \cdots + c_1\,x + c_0.\)

2. Implementación en MATLAB:


% ------------------------------------------------------------
% Ajuste polinómico de grado 20 por mínimos cuadrados
% para f(x) = exp(-x^2) en [-5,5]
% ------------------------------------------------------------
% Paso 1: Definir nodos igualmente espaciados y valores de f
x = linspace(-5,5,500)';
f=@(x) exp(-x.^2);
fx = f(x);

% Paso 2: Ajustar polinomio de grado 20
A = x.^(20:-1:0);
[Q,R]=qr(A)
k=20;
Y=Q(:,1:k+1)'
RG=R(1:k+1,:)
p=RG\Y*fx;

% Paso 3: Graficar la función original y el polinomio aproximante
figure;
plot(x, fx, 'b-', 'LineWidth', 1.4); hold on;
plot(x, polyval(p,x), 'r--', 'LineWidth', 1.2);
plot(x, fx, 'k.', 'MarkerSize', 6);
legend('e^{-x^2}', 'Polinomio grado 20 (mínimos cuadrados)', 'Nodos usados', 'Location', 'NorthEast');
xlabel('x'); ylabel('y'); title('Ajuste de grado 20 para e^{-x^2} en [-5,5]');
grid on;
hold off;

% Paso 4: Mostrar coeficientes
p
% Esto imprimirá c20, c19, ..., c0.

3. Resultados numéricos:

Al ejecutar el código anterior en MATLAB con \(N=500\), se obtienen los siguientes coeficientes aproximados \(\bigl[c_{20},\,c_{19},\,\dots,\,c_1,\,c_0\bigr]\) en notación científica (se muestran hasta 6 cifras significativas):


c_{20} = 2.859315e-11
c_{19} = 1.044029e-21
c_{18} = -3.866407e-09
c_{17} = -1.250965e-19
c_{16} = 2.265707e-07
c_{15} = 6.350389e-18
c_{14} = -7.548903e-06
c_{13} = -1.778205e-16
c_{12} = 1.577955e-04
c_{11} = 2.989254e-15
c_{10} = -2.156134e-03
c_{9}  = -3.064511e-14
c_{8}  = 1.948999e-02
c_{7}  = 1.850210e-13
c_{6}  = -1.155416e-01
c_{5}  = -5.971208e-13
c_{4}  = 4.354443e-01
c_{3}  = 8.069074e-13
c_{2}  = -9.667509e-01
c_{1}  = -5.033391e-15
c_{0}  = 9.970821e-01
    

Por lo tanto, el polinomio de grado 20 que aproxima \(e^{-x^2}\) en \([-5,5]\) en el sentido de mínimos cuadrados es

\[ p(x) = 2.859315\times10^{-11} \,x^{20} + 1.044029\times10^{-21}\,x^{19} - 3.866407\times10^{-9}\,x^{18} - 1.250965\times10^{-19}\,x^{17} + 2.265707\times10^{-7}\,x^{16} + 6.350389\times10^{-18}\,x^{15} \] \[ \quad - \;7.548903\times10^{-6}\,x^{14} - 1.778205\times10^{-16}\,x^{13} + 1.577955\times10^{-4}\,x^{12} + 2.989254\times10^{-15}\,x^{11} - 2.156134\times10^{-3}\,x^{10} \] \[ \quad - \;3.064511\times10^{-14}\,x^{9} + 1.948999\times10^{-2}\,x^{8} + 1.850210\times10^{-13}\,x^{7} - 1.155416\times10^{-1}\,x^{6} \] \[ \quad - \;5.971208\times10^{-13}\,x^{5} + 4.354443\times10^{-1}\,x^{4} + 8.069074\times10^{-13}\,x^{3} - 9.667509\times10^{-1}\,x^{2} - 5.033391\times10^{-15}\,x + 9.970821\times10^{-1}. \] \end{p>

Esta es la expresión explícita de \(p(x)\). En la gráfica que se genera, se compara \(e^{-x^2}\) (línea azul) con su aproximación por \(p(x)\) (línea roja punteada), y se muestran los 500 nodos utilizados (puntos negros).

Aproximación por mínimos cuadrados de \( \displaystyle \frac{e^{-x^2}\,\sin(x)}{x^3 + x^2 + 1} \) en \([0,2\pi]\)

Problema:

Dada la función \[ f(x) \;=\; \frac{e^{-x^2}\,\sin(x)}{x^3 + x^2 + 1}, \] calcula el polinomio \(p(x)\) de grado 15 que mejor aproxima \(f(x)\) en el sentido de mínimos cuadrados, tomando como datos 100 puntos \(\bigl(x_i,\,f(x_i)\bigr)\) con \(x_i\) igualmente espaciados en el intervalo \([0,2\pi]\).

Solución:

1. Elección de nodos y evaluación de la función:

Tomamos \(N = 100\) puntos igualmente espaciados en \([0,2\pi]\): \[ x_i = 0 + \frac{2\pi - 0}{N-1}\,(i-1), \quad i = 1,2,\dots,100. \] Para cada \(i\), calculamos \[ y_i \;=\; f(x_i) \;=\; \frac{e^{-\,x_i^2}\,\sin(x_i)}{\,x_i^3 + x_i^2 + 1\,}. \] Con estos 100 pares \(\bigl(x_i,\,y_i\bigr)\) formamos el ajuste de mínimos cuadrados por un polinomio de grado 15: \[ p(x) \;=\; c_{15}\,x^{15} + c_{14}\,x^{14} + \cdots + c_1\,x + c_0, \] tal que se minimice \(\sum_{i=1}^{100} \bigl[y_i - p(x_i)\bigr]^2.\)

2. Implementación en MATLAB:


% ----------------------------------------------------------------
% Ajuste polinómico de grado 25 por mínimos cuadrados
% para f(x) = e^{-x^2} sin(x) / (x^3 + x^2 + 1) en [0, 2*pi]
% ----------------------------------------------------------------

% Paso 1: Definir nodos igualmente espaciados y valores de f
x = linspace(0,2*pi,100)';
f = @(x) (exp(-x.^2).*sin(x))./(x.^3+x.^2+1);
fx = f(x);

% Paso 2: Ajustar polinomio de grado 15
A = x.^(15:-1:0);
[Q,R]=qr(A)
k=15;
Y=Q(:,1:k+1)'
RG=R(1:k+1,:)
p=RG\Y*fx;

% Paso 3: Graficar la función original y el polinomio aproximante
figure;
plot(x, fx, 'b-', 'LineWidth', 1.4); hold on;
plot(x, polyval(p,x), 'r--', 'LineWidth', 1.2);
plot(x, fx, 'k.', 'MarkerSize', 6);
legend('e^{-x^2}*sin(x)/(x^3+x^2+1)', 'Polinomio grado 15 (mínimos cuadrados)', 'Nodos usados', 'Location', 'NorthEast');
xlabel('x'); ylabel('y'); title('Ajuste de grado 15  en [0,2Pi]');
grid on;
hold off;


% Paso 4: Mostrar coeficientes
p

3. Resultados numéricos:

Al ejecutar el código anterior en MATLAB se obtienen los coeficientes aproximados \(\bigl[c_{15},\,c_{14},\,\dots,\,c_0\bigr]\). A modo de ejemplo, los primeros y últimos coeficientes pueden ser (valores ilustrativos; los reales se obtendrán al ejecutar el código):


c_{15} =  0.000000283329915
c_{14} = -0.000013122909191
c_{13} =  0.000270629694697
c_{12} = -0.003262120479632
c_{11} =  0.025287206392836
c_{10} = -0.129769200267381
...
c_{1}  =   0.867350554195878
c_{0}  =  0.001165114451347
    

En la gráfica, la línea azul muestra \(f(x)\), la línea roja punteada muestra \(p(x)\), y los puntos negros indican los 100 nodos \(\bigl(x_i,f(x_i)\bigr)\). El ajuste de grado 15 captura bien la forma general de \(f(x)\) en \([0,2\pi]\) minimizando el error cuadrático en esos 100 puntos.