es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de interpolación de Lagrange depende del número de nodos.

Mi tarea es calcular una estimación del error en función del número de nodos (n). Como estimación de la norma del error tengo que calcular el máximo módulo de la diferencia en el conjunto de puntos t=j/M (j=1…M), donde M es un número relativamente grande. Escribí un programa, pero no estoy seguro de por qué esta estimación es correcta. ¿O tal vez no lo es?

(En el programa f(x)=sin(x), pero podría ser cualquier otra función)

“`c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double func(double x) {
return sin(x);
}

double lagr(double *x, double *f, double t, int n);

int main(void) {
int n, k, M=100000;
double *x, *f, t, maxr=0, L, a=0, b=1;

<pre><code> printf("n=");
scanf("%d", &n);
x = (double*)malloc(n*sizeof(double));
f = (double*)malloc(n*sizeof(double));

x[0] = a;
x[n-1] = b;

for(k=1;k<n-1;k++) {="" x[k]="a" +="" ((b-a)*k)/n;="" f[k]="func(x[k]);" }="" for(k="0" ;=""></n-1;k++)><m ;="" k++)="" {="" t="(double)" k/m;="" l="lagr(x,f,t,n);" if(fabs(l-func(t))=""> maxr)
maxr = fabs(L-func(t));
}

printf("Estimación del error= %le", maxr);

return 0;
</code></pre>

}

double lagr(double *x, double *f, double t, int n) {
int k, j;
double sum = 0, p;

for(k=0;k<n;k++) {="" p="1;" for(j="0;"></n;k++)><n; j++) {
if(j!=k) {
p <em>= (t-x[j]) / (x[k]-x[j]);
}<br />
}
sum += p</em>f[k];
}

<pre><code> return sum;
</code></pre>

}
“` j++)=”” {=”” if(j!=”k)” {=”” p=”” =”(t-x[j])” (x[k]-x[j]);=”” }=”” }=”” sum=”” +=”pf[k];” }=”” return=”” sum;=”” }=””></n; j++) {
if(j!=k) {
p = (t-x[j]) / (x[k]-x[j]);
}
}
sum += p
f[k];
}

 return sum; 

}
“`></math.h></stdlib.h></stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    La estimación del error en la dependencia del número de nodos (n) es un problema común en los métodos numéricos. En este programa, el objetivo es estimar el módulo máximo de la diferencia entre la aproximación del polinomio de Lagrange y la función original en un conjunto de puntos t = j/M (j = 1…M), donde M es un número grande.

    El programa utiliza el método del polinomio de Lagrange para aproximar la función. La función se define en el programa como double func(double x), que puede ser reemplazada por cualquier otra función. El programa luego utiliza la función lagr para calcular la aproximación del polinomio de Lagrange en un punto dado t. La función lagr utiliza los nodos x y los valores de la función f dados para calcular la aproximación del polinomio.

    Posteriormente, el programa recorre un conjunto de puntos t, calcula la aproximación del polinomio de Lagrange L en cada punto y encuentra el módulo máximo de la diferencia entre la aproximación y la función original func(t). Este valor se imprime como la estimación del error.

    La idea detrás de esta estimación del error es que, a medida que aumenta el número de nodos, mejora la precisión de la aproximación del polinomio de Lagrange y el error entre la aproximación y la función original disminuye. Al encontrar el error máximo en un conjunto de puntos, el programa puede estimar el error de la aproximación para un número dado de nodos n. Sin embargo, es importante tener en cuenta que esto es solo una estimación y puede no ser exacta.

Comments are closed.