Método de cálculo numérico-interpolación lagrangiana

Requisitos:
Escriba la función de interpolación lagrangiana, la entrada es (x, f, order1)
donde x representa los datos del nodo, n * 2 matriz
f representa si segmentar o no
order1: si está segmentado, order1 representa el orden de la función, que solo puede be
Si 1 o 2 no están segmentados, el orden de la función es n-1 y
debe escribirse estrictamente de acuerdo con los requisitos y se dibuja el gráfico de la función de interpolación.
Teoría:
Para muchos problemas prácticos ahora, no conocemos la forma específica de f (x), el valor de la función correspondiente puede ser leído directamente por instrumentos de medición u otro equipo, f (x) es solo un concepto matemático Función en el significado . (Por ejemplo: procesamiento de imágenes, pronóstico del tiempo, procesamiento de máquinas herramienta, etc.) El método para responder a estas preguntas es la interpolación.
La interpolación de Taylor requiere que se proporcionen los valores de la derivada de f (x) en el punto x 0. Este requisito es muy estricto y la expresión de la función f (x) debe ser bastante simple. Si solo se da el valor de la función f (xi) = yi (i = 0,1,2…, n) en una serie de nodos, entonces el problema de interpolación se puede expresar de la siguiente manera: Encuentre un polinomio de grado n (x) para satisfacer la condición (x) =, i = 0, 1,…, n Esta es la llamada interpolación de Lagrange.
Sea la función y = f (x) continua en el intervalo de interpolación [a, b], y tome valores,,…, en n + 1 nodos de interpolación diferentes a≤, ..., ≤b. El propósito es encontrar una función simple P (x) en una función de interpolación clase Φ con excelentes propiedades y fácil cálculo, que satisfaga la condición de interpolación P () = yi (i = 0,1, ..., n), y en otros puntos x ≠ arriba, como una aproximación de f (x). El método para calcular la función de interpolación P (x) se llama interpolación. En este experimento, se utiliza la interpolación lagrangiana.
Cuando se dan n + 1 puntos <<… <valores de función,,…, si desea calcular el valor aproximado del valor de la función f (x) en x ≠, primero puede seleccionar dos nodos -1 y dejar x∈ [-1,], y luego realizar una interpolación lineal en las celdas [-1,], es decir,
Inserte la descripción de la imagen aquí
este tipo de interpolación de orden bajo por partes se llama interpolación lineal por partes, también llamada interpolación de línea discontinua.
De manera similar, podemos seleccionar los tres nodos más cercanos ax, -1 y +1, y luego realizar una interpolación cuadrática.Este tipo de interpolación
Inserte la descripción de la imagen aquí
de bajo orden por partes se llama interpolación cuadrática por partes o interpolación parabólica por partes.
código de matlab:

function u = lagrange(x,f,order1)
syms fx; %fx表示需要估算的f(x)的x的值
[m,n] = size(x); 
P = 0;
t=x(1,1):0.1:x(m,1); 

if f==0 %不分段
    for i = 1 : m
        L1 = 1;
        for j = 1 : m
            if j ~=i
               L1 = L1*(fx-x(j,1))/(x(i,1)-x(j,1));
            end
        end
        sum = sum + L1*x(i,2);
    end
    u = subs(sum,fx,t);
    plot(t,u);hold on;
    plot(x(:,1),x(:,2),'*')
  
elseif f==1  %分段
    if order1==1 %一阶线性插值
        for i = 1:m-1 %分成n-1段
            L1(i) = x(i,2)*(fx-x(i+1,1))/(x(i,1) - x(i+1,1)) + x(i+1,2)*(fx-x(i,1))/(x(i+1,1) - x(i,1));
        end
        for i = 1 : m-1
            u = subs(L1(i),fx,t);
            plot(t,u);hold on;
        end
        hold on;
        plot(x(:,1),x(:,2),'*')
    elseif order1==2 %二阶线性插值
        for i = 1:m – 2  
            P = 0;
            for k = i:i+2
                L1 = 1;
                for j =i:i+2
                    if j~=k
                        L1 = L1*(fx-x(j,1))/(x(k,1)-x(j,1));
                    end
                end
                sum = sum + L1*x(k,2);
            end
            L2(i) = P
        end
        L2(1) = x(1,1);
        for i = 2: m-2  
            L2(i) =0.5*(x(i,1)+x(i+1,1));
        end
        i = i+1;
        L2(i) = x(m,1);
        
        for i = 1:m-2
            t=L2(i):0.1:L2(i+1);
            u = subs(L2(i),fx,t);
            plot(t,u);hold on;
        end
        hold on;
        plot(x(:,1),x(:,2),'*') 
    end
end

Resultado de ejecución del programa:
entrada: x = [3,6; 4,8; 5,60; 8,10; 11,100; 13,20]; ①Sin
segmentación: f = 0; order1 = 1; ②Segmento
Inserte la descripción de la imagen aquí
1 Interpolación lineal de primer orden : f = 1; order1 = 1;
Inserte la descripción de la imagen aquí
③ Interpolación lineal de segundo orden por partes: f = 1; order1 = 2;
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_46837674/article/details/113031820
Recomendado
Clasificación