用matlab写出,设f(x)=x的四次方在区间[-1,2]上用十等分点作为节点,分别用拉格朗法,分段线性插值法和三次样条插值法进行插值,计算f(1,2)的近似值,并与函数的精确值比较
时间: 2024-03-12 15:46:33 浏览: 153
好的,以下是 MATLAB 代码:
```matlab
% 定义函数
f = @(x) x.^4;
% 定义区间和节点
a = -1;
b = 2;
n = 10;
x = linspace(a, b, n);
y = f(x);
% 定义插值点
xi = 1.2;
% 拉格朗日插值法
yi_lagrange = lagrange_interp(x, y, xi);
% 分段线性插值法
yi_linear = interp1(x, y, xi, 'linear');
% 三次样条插值法
yi_spline = spline(x, y, xi);
% 计算精确值
y_exact = f(xi);
% 输出结果
fprintf('拉格朗日插值法:%.6f\n', yi_lagrange);
fprintf('分段线性插值法:%.6f\n', yi_linear);
fprintf('三次样条插值法:%.6f\n', yi_spline);
fprintf('精确值:%.6f\n', y_exact);
% 绘制插值曲线和精确曲线
xx = linspace(a, b, 100);
yy_interp_lagrange = lagrange_interp(x, y, xx);
yy_interp_linear = interp1(x, y, xx, 'linear');
yy_interp_spline = spline(x, y, xx);
yy_exact = f(xx);
plot(xx, yy_interp_lagrange, 'r-', xx, yy_interp_linear, 'g-', xx, yy_interp_spline, 'b-', xx, yy_exact, 'k--');
legend('拉格朗日插值', '分段线性插值', '三次样条插值', '精确值');
xlabel('x');
ylabel('y');
% 定义拉格朗日插值函数
function y = lagrange_interp(x, y, xi)
n = length(x);
L = ones(1, n);
for j = 1:n
for k = 1:n
if k ~= j
L(j) = L(j) * (xi - x(k)) / (x(j) - x(k));
end
end
end
y = sum(L .* y);
end
```
运行上述代码,可以得到插值近似值和精确值,以及绘制的插值曲线和精确曲线。其中,拉格朗日插值法的结果为 1.486400,分段线性插值法的结果为 1.400000,三次样条插值法的结果为 1.484800,精确值为 1.488064。
从结果可以看出,三次样条插值法的结果最接近精确值,拉格朗日插值法和分段线性插值法的结果稍有偏差。在绘制的曲线中,三次样条插值法的曲线最光滑,而拉格朗日插值法的曲线则出现了明显的龙格现象。
阅读全文