El primer día de la primera interpolación de segmento

Parte de interpolación

Uno: surge la pregunta

Inserte la descripción de la imagen aquí

Dos: existencia y singularidad

Inserte la descripción de la imagen aquí

Tres: interpolación de Lagrange

(1) El polinomio se puede expresar como:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

(2) Estimación del error de interpolación

Inserte la descripción de la imagen aquí

Análisis de ejemplo

Inserte la descripción de la imagen aquí

Análisis: Hay cinco puntos en total. Obviamente use (xi, yi) para representar cada punto, y luego escriba cada l (x), y luego escriba p (x);

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

function yi=lagrcz(x,y,xi)
n=length(x);
m=length(xi);
for s=1:m
yi(s)=0;
	for i=i:n
	 w(i)=1;
	 dw(i)=1;
	 for j=1:n
	 if(j~=i)
	 w(i)=(xi(s)-x(j))*w(i);
	 dw(i)=(x(i)-x(j))*dw(i);
	 end
	end
	yi(s)=y(i)*w(i)/dw(i)+yi(s);
	end
end

Explicación: lagrcz (x, y, xi) es una función de interpolación, que se llama directamente.

Por ejemplo: p punto (1,0) q punto (0,2)

Estos dos puntos determinan una línea recta, por lo que cuando x = 2, y debería ser -2

El código es usar estos dos puntos para interpolar, y luego xi como x = 2 llamar a la verificación de la función.

Por ejemplo: (1,2) (3,5) (5,9) estos tres puntos deben escribirse como la entrada de la función:

x = [1,3,5]

y =[2, 5, 9]

a=lagrange(x,y)

interpolación de newton

(1) Definición de cociente de diferencias

Inserte la descripción de la imagen aquí

(2) Fórmula de interpolación

Inserte la descripción de la imagen aquí

(3) Tabla de cocientes de diferencias

Inserte la descripción de la imagen aquí

ejemplo:

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Código

%newton.m
%求牛顿插值多项式、差商、插值及其误差估计的MATLAB主程序
%输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量,
%x是以向量形式输入的m个插值点,M在[a,b]上满足|f~(n+1)(x)|≤M
%注:f~(n+1)(x)表示f(x)的n+1阶导数
%输出的量:向量y是向量x处的插值,误差限R,n次牛顿插值多项式L及其系数向量C,
%差商的矩阵A
function[y,R,A,C,L] = newton(X,Y,x,M)
n = length(X);
m = length(x);
for t = 1 : m
    z = x(t);
    A = zeros(n,n);
    A(:,1) = Y';
    s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;
        for j = 2 : n
            for i = j : n
                A(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));
            end
            q1 = abs(q1*(z-X(j-1)));
            c1 = c1 * j;
        end
        C = A(n, n); q1 = abs(q1*(z-X(n)));
        for k = (n-1):-1:1
            C = conv(C, poly(X(k)));
            d = length(C);
            C(d) = C(d) + A(k,k);%在最后一维,也就是常数项加上新的差商
        end
        y(t) = polyval(C,z);
        R(t) = M * q1 / c1;
end
L = poly2sym(C)

ejemplo:

Ejemplo: Utilice la interpolación de Lagrange para encontrar el valor de sinx en un punto determinado y estimar su error. Se sabe que sin0 ° = 0, sin30 ° = 0.5, sin45 ° = 0.7071, sin60 ° = 0.8660, sin90 ° = 1.

Inserte la descripción de la imagen aquí

Código

>> X = [0 pi/6 pi/4 pi/3 pi/2];  
>> Y = [0 0.5 0.7071 0.8660 1];  
>> x = linspace(0,pi,50);  
>> M = 1;  
>> [y,R,A,C,L] = newton(X, Y, x, M);  
>> y1 = sin(x);  
>> errorbar(x,y,R,'.g')  
>> hold on  
>> plot(X, Y, 'or', x, y, '.k', x, y1, '-b');  
>> legend('误差','样本点','牛顿插值估算','sin(x)');  

resultado:

Inserte la descripción de la imagen aquí

Interpolación de Hermite

Caso:

img

img

img

img

img

img

img

%求埃尔米特多项式和误差估计的MATLAB主程序
%输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量,
%以f'(x_i)=y'_i(i = 1,2,...,n+1)为元素的向量Y1;
%x是以向量形式输入的m个插值点,M在[a,b]上满足|f~(2n+2)(x)|≤M
%注:f~(2n+2)(x)表示f(x)的2n+2阶导数
%输出的量:向量y是向量x处的插值,误差限R,2n+1阶埃尔米特插值多项式H_k及其系数向量
%H_c,误差公式wcgs及其系数向量Cw.
function[y,R,Hc,Hk,wcgs,Cw] = hermite(X,Y,Y1,x,M)
n = length(X);
m = length(x);


for t = 1 : m    
z = x(t);
H = 0;
q = 1;
c1 = 1;

for k = 1 : n
    s = 0;
    V = 1;
    for i = 1 : n
        if k ~= i
            s = s + (1/(X(k)-X(i)));
            V = conv(V,poly(X(i)))/(X(k)-X(i));
        end
    end
    h = poly(X(k));
    g = ([0 1]-2 * h * s);%注意不要写成1-2*h*s,因为是多项式减法,低阶多项式前面必须用零填补,书上的错误,浪费我一晚上时间
    G = g * Y(k) + h * Y1(k);
    H = H + conv(G,conv(V,V));%hermite插值多项式
    b = poly(X(k));
    b2 = conv(b,b);
    q = conv(q,b2);
end
Hc = H;
Hk = poly2sym(H);
Q = poly2sym(q);
for i = 1 : 2*n 
    c1 = c1 * i;
end
wcgs = M * Q / c1;
Cw = M * q / c1;
y(t) = polyval(Hc,x(t));
R(t) = polyval(Cw,x(t));
end

Inserte la descripción de la imagen aquí

%hermite.m
%求埃尔米特多项式和误差估计的MATLAB主程序
%输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量,
%以f'(x_i)=y'_i(i = 1,2,...,n+1)为元素的向量Y1;
%x是以向量形式输入的m个插值点,M在[a,b]上满足|f~(2n+2)(x)|≤M
%注:f~(2n+2)(x)表示f(x)的2n+2阶导数
%输出的量:向量y是向量x处的插值,误差限R,2n+1阶埃尔米特插值多项式H_k及其系数向量
%H_c,误差公式wcgs及其系数向量Cw.
function[y,R,Hc,Hk,wcgs,Cw] = hermite(X,Y,Y1,x,M)
n = length(X);
m = length(x);


for t = 1 : m    
z = x(t);
H = 0;
q = 1;
c1 = 1;

for k = 1 : n
    s = 0;
    V = 1;
    for i = 1 : n
        if k ~= i
            s = s + (1/(X(k)-X(i)));
            V = conv(V,poly(X(i)))/(X(k)-X(i));
        end
    end
    h = poly(X(k));
    g = ([0 1]-2 * h * s);%注意不要写成1-2*h*s,因为是多项式减法,低阶多项式前面必须用零填补,书上的错误,浪费我一晚上时间
    G = g * Y(k) + h * Y1(k);
    H = H + conv(G,conv(V,V));%hermite插值多项式
    b = poly(X(k));
    b2 = conv(b,b);
    q = conv(q,b2);
end
Hc = H;
Hk = poly2sym(H);
Q = poly2sym(q);
for i = 1 : 2*n 
    c1 = c1 * i;
end
wcgs = M * Q / c1;
Cw = M * q / c1;
y(t) = polyval(Hc,x(t));
R(t) = polyval(Cw,x(t));
end

Inserte la descripción de la imagen aquí

A partir de esta imagen, es mejor que la interpolación de Lagrangiana y Newton, pero cuando la interpolación es mayor, es decir, el grado del polinomio de Hermite es mayor, el error será muy grande. Si no me cree, intentemos.

Seguimos usando sinx, pero esta vez usamos 5 puntos.

Inserte la descripción de la imagen aquí

>> X = [0 pi/6 pi/4 pi/3 pi/2];Y = [0 0.5 0.7071 0.8660 1];Y1 = [1 0.8660 0.7071 0.5 0];
>> M = 1;
>> x = linspace(0, pi, 50);
>> [y,R,Hc,Hk,wcgs,Cw] = hermite(X,Y,Y1,x,M)
>> y1 = sin(x);  
>> errorbar(x,y,R,'.g')  
>> hold on  
>> plot(X, Y, 'or', x, y, '.k', x, y1, '-b');  
>> legend('误差','样本点','埃尔米特插值估算','sin(x)'); 

Inserte la descripción de la imagen aquí

Principio de spline cúbico

Inserte la descripción de la imagen aquí

Varios usos de interpolación

Inserte la descripción de la imagen aquí

根据过去10年的中国人口数据,预测接下来三年的人口数据:
population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
year = 2009:2018;
p1 = pchip(year, population, 2019:2021) %分段三次埃尔米特插值预测
p2 = spline(year, population, 2019:2021) %三次样条插值预测
plot(year, population,‘o’,2019:2021,p1,‘r*-’,2019:2021,p2,‘bx-’)
legend(‘样本点’,‘三次埃尔米特插值预测’,‘三次样条插值预测’,‘Location’,‘SouthEast’)

Inserte la descripción de la imagen aquí

¿Cómo usar matlab para el cálculo de interpolación?

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

x=1:12;
y=[5 8 9 15 25 29 31 30 22 25 27 24];
xi=1:0.1:12;
yi=interp1(x,y,xi,'spline');
plot(x,y,'+',xi,yi,'r')

Predicción de interpolación Mitte ',' predicción de interpolación spline cúbica ',' Ubicación ',' Sureste ')


[外链图片转存中...(img-lCsEVomy-1600091241625)]

# 如何使用matlab进行插值计算?

[外链图片转存中...(img-Lpictl7h-1600091241626)]

[外链图片转存中...(img-mE7XSMIS-1600091241627)]

x = 1:12 ;
y = [5 8 9 15 25 29 31 30 22 25 27 24];
xi = 1: 0.1: 12;
yi = interp1 (x, y, xi, 'spline');
plot (x, y, '+', xi, yi, 'r')


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200914215843231.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTgyMjYzOA==,size_16,color_FFFFFF,t_70#pic_center)

Supongo que te gusta

Origin blog.csdn.net/weixin_45822638/article/details/108588960
Recomendado
Clasificación