当前位置: 首页 > article >正文

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

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

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:

 

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


http://www.kler.cn/news/292983.html

相关文章:

  • C++模板(初识)
  • 赞奇科技与华为云共襄828 B2B企业节,激活数字内容“云”创作
  • 高级java每日一道面试题-2024年9月01日-基础篇-事务的四个特性(ACID)分别是什么?
  • iOS——GCD再学习
  • Kafka-基础
  • FPGA培训-第六次培训
  • SpringCloud之Sleuth(Micrometer)+ZipKin分布式链路追踪
  • 大数据平台规划与数据价值挖掘应用咨询项目解决方案(可编辑的73页PPT)
  • 2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建)
  • 【盖世汽车-注册安全分析报告】
  • 第二阶段:机器学习经典算法-02决策树与随机森林-1.决策树概述
  • 代码随想录算法训练营_day37
  • SprinBoot+Vue新生报到微信小程序的设计与实现
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十二)
  • ElasticSearch-聚合性能优化
  • 提交MR这个词儿您知道是什么意思吗?
  • 67-java 接口与抽象类的区别
  • 动态规划的解题思想
  • 黑马-Cloud21版-面试篇13:Sentinel源码分析
  • 【Oracle点滴积累】解决IMP-00017、ORA-20005、ORA-06512错误的方法
  • 黑神话悟空红孩儿怎么打 妖王红孩儿攻略
  • Vue2升级Vue3 --- 第三方库变化(基于gogocode)
  • Linux中Ubuntu系统安装Windows得字体
  • 利用实用规模量子计算模拟宇宙中最极端的环境
  • CSRF,SSRF和重放攻击的区别
  • 2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)
  • 从0开始深度学习(3)——概率
  • macos下的 sed命令安装与使用 gnu-sed
  • 【LeetCode】07.整数反转
  • IDEA启动项目(Gradle项目)