
希望帮我解答,是直接用拉格朗日多项式来求吗,还是可以用二次插值多项式啊
1.具体推导过程参考文章链接:https://www.cnblogs.com/fanlumaster/p/14790769.html#:~:text=%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%EF%BC%88Lagrange%EF%BC%89%E6%8F%92%E5%80%BC%E5%A4%9A%E9%A1%B9%E5%BC%8F%E7%9A%84%E5%9F%BA%E5%87%BD%E6%95%B0%E6%9E%84%E9%80%A0%E6%B3%95%20%28%E8%AF%A6%E7%BB%86%E6%8E%A8%E5%AF%BC%29%20%E5%85%88%E4%BB%8E%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E4%B8%80%E6%AC%A1%E6%8F%92%E5%80%BC%20%28n%20%3D%201%29%20%E5%BC%80%E5%A7%8B%2C%20%E6%B1%82%E4%BD%9C%E4%B8%80%E6%AC%A1%E5%BC%8F,%E5%92%8C%20%28x%201%2C%20y%201%29%20%E7%9A%84%E7%9B%B4%E7%BA%BF%2C%20%E7%94%B1%E8%A7%A3%E6%9E%90%E5%87%A0%E4%BD%95%E7%9F%A5%E9%81%93%2C%20%E8%BF%99%E6%9D%A1%E7%9B%B4%E7%BA%BF%E5%8F%AF%E7%94%A8%E7%82%B9%E6%96%9C%E5%BC%8F%E8%A1%A8%E7%A4%BA%E4%B8%BA
2.拉格朗日插值法我也写了代码,有8个基函数手算太麻烦了,所以根据原理写了代码,然后根据求出的函数将3.5代入求得函数预测值为6.8120。

L=
@(x)(39523590329803473031x^2)/12970366926827028480 - (883x)/420 + (227
x^3)/360 - (382805968326492151x^4)/648518346341351424 - (17
x^5)/720 + (2233785415175766061x^6)/51881467707308113920 - (23*x^7)/5040 + 1;
L(3.5)

求得结果
因为matlab中有自带的三次样条插值函数spline,故拿它来做代码并绘图


因为步长为0.1所以y1中第65列就是x=3.5的预测值为对应图中的7.0951。
下面是具体代码:
拉格朗日插值法代码:
clc,clear all
X=[-3 -2 -1 0 1 2 3 4];
Y=[17 7 5 1 2 6 7 8];
m = length(X);
L = ones(m,m);
for k = 1 : m
V = 1;for i = 1 : mif k ~= iV = conv(V,poly(X(i))) / (X(k) - X(i));endendL1(k, :) = V;l(k, :) = poly2sym(V);end
fprintf('基函数为:\n');
for k=1:m
fprintf('q%d(x)=%s\n',k,l(k));end
L = Y * l;
fprintf('拉格朗日多项式为:\nP(x)=%s\n',L);
L=
@(x)(39523590329803473031x^2)/12970366926827028480 - (883x)/420 + (227
x^3)/360 - (382805968326492151x^4)/648518346341351424 - (17
x^5)/720 + (2233785415175766061x^6)/51881467707308113920 - (23*x^7)/5040 + 1;
L(3.5)
三次样条插值法代码
clear all;clc
%导入xy的值
x0=[-3 -2 -1 0 1 2 3 4];
y0=[17 7 5 1 2 6 7 8];
x=-3:0.1:4;%取步长为0.1
y1=spline(x0,y0,x);%三次样条插值
plot(x0,y0,'+',x,y1)
title('Spline1')
y1