数值分析中插值法和拟合法的对比

插值法和拟合法是数值分析中常用的两种方法,它们用于处理数据和函数的近似问题。

1 插值法


概念:

插值法是一种通过已知数据点来构造一个新的函数,以便在这些数据点之间进行估算的方法。插值的目标是找到一个函数,该函数在给定的数据点上与实际数据完全一致。

用法:

线性插值:在两个已知数据点之间用一条直线连接,适用于数据变化较平稳的情况。

多项式插值:使用多项式函数通过所有已知数据点,常用的有拉格朗日插值和牛顿插值。
样条插值:使用分段多项式(如三次样条)来提高插值的平滑性,适合于数据变化较复杂的情况。

2 拟合法


概念:

拟合法是一种通过已知数据点来寻找一个函数模型,使得该模型尽可能地接近这些数据点的方法。与插值法不同,拟合并不要求模型在所有数据点上都通过,而是通过最小化误差来找到最佳的函数形式。

用法:

最小二乘法:通过最小化观测值与拟合值之间的平方差来确定模型参数,广泛应用于线性回归和非线性回归。

多项式拟合:使用多项式函数来拟合数据,适用于数据呈现一定的趋势。

曲线拟合:可以使用各种函数(如指数、对数、幂函数等)来拟合数据,选择合适的模型以达到最佳拟合效果。

3 总结


插值法:用于在已知数据点之间精确估算,适合于数据点较少且变化平稳的情况。
拟合法:用于寻找一个函数模型来近似描述数据,适合于数据点较多且存在噪声的情况。

下面举个例子进行分析:

%首先,创建原始的离散点集 (x, f(x))
% 原始离散点集

x = linspace(-1, 1, 100); 
y = abs(x);

% 绘制原始数据点

figure;
scatter(x, y, 'filled');
hold on;

%接下来,使用插值方法计算并绘制拟合曲线。用 interp1 函数执行线性插值:

x_dense = linspace(-1, 1, 1000); % 创建一个更密集的x值集合用于插值
y_interp = interp1(x, y, x_dense, 'linear'); % 线性插值

% 绘制插值曲线

plot(x_dense, y_interp, 'r-', 'LineWidth', 2);

%然后,使用拟合方法计算并绘制拟合曲线。我们可以采用 fit函数配合 polyfit 多项式拟合或其他拟合方法:

fit_poly = polyfit(x, y, 2); % 多项式拟合,这里选择了2次多项式
y_poly = polyval(fit_poly, x_dense); % 计算多项式拟合值

% 绘制拟合曲线

plot(x_dense, y_poly, 'b--', 'LineWidth', 2);

%给图形添加一些标签和图例,然后显示图形:
% 添加标题,标签和图例

title('插值和拟合 |x|');
xlabel('x');
ylabel('f(x)');
legend('Discrete Points', 'Linear Interpolation', 'Polynomial Fit');
hold off;

最终对于样本的选取上,有不同的结果:

样本选取10:


样本选取100:

 

样本选取1000:

 

可以看到,样本数理越多,插值的结果越准确,而对拟合的影响并没有那么大,所以对于插值来说,样本数量很重要。 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值