MATLAB拟合算法

MATLAB拟合算法与插值问题不同 在拟合问题中不需要曲线一定经过给定的点 拟合问题的目标是寻求一个函数 曲线 使得该曲线在某种准则下与所有的数据点最为接近 即曲线拟合的最好 最小化损失函数 插值算法中 得到的多项式 f x 要经过所有样本点 但是如果样本点太多 那么这个多项式次数过高 会造成龙格现象 尽管我们可以选择分段的方法避免这种现象 但是更多时候我们更倾向于得到一个确定的曲线 尽管这条曲线不能经过每一个样本点 但只要保证误差足够小即可 这就是拟合的思想 拟合的结果是得到一个确定的曲线 先给出一组例子

与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。

插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的曲线)

先给出一组例子:MATLAB拟合算法

clear;clc; x = 0.1:0.1:1; y = [1.978,2.45,3.28,6.16,7.34,7.66,9.58,9.48,9.3,11.2]; plot(x,y,'o') xlabel('x的值'); ylabel('y的值');

MATLAB拟合算法

设这些样本点为(xi,yi),i=1,2,…,n,我们可以设置拟合曲线为y = k*x+b

利用最小二乘法:MATLAB拟合算法

n = size(x,1); k = (n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x)) b = (sum(x.*x)*sum(y)-sum(x).*sum(x.*y))/(n*sum(x.*x)-sum(x).*sum(x)) hold on grid on f=@(x) k*x+b; fplot(f,[0,1]); legend('样本数据','拟合函数','location','SouthEast') hold off 

利用一元线性函数,得到拟合出来的图像 :MATLAB拟合算法

得出结果后,如何知道自己拟合数据图形的好坏呢?

这里需要用到拟合优度R²,与R²有关的三个系数SSR、SSE、SST:MATLAB拟合算法

可以证明:SST = SSE + SSR 

 R² =SSR/SST(R²越接近1,说明误差平方和越接近0,误差越小说明拟合的越好。注意:R2只能用于拟合函数是线性函数时,拟合结果的评价,线性函数和其他函数(例如复杂的指数函数〉比较拟合的好坏,直接看SSE即可,假如R2是个负数,说明拟合效果不好)

(我们这里说的线性函数是指对参数为线性(线性于参数)。)

因此引入一个概念:

1、对变量为线性

对线性的第一种并且也许是更“自然”的一种解释是,¥的条件期望值是X;的线性函数。从几何意义上说,这时回归曲线是一条直线。按照这种解释,诸如 E(Y|X)=β1+β2*X²的回归函数,由于变量X以幂或指数⒉出现,就不是线性的。

2、对参数为线性

对线性的第二种解释是,Y的条件期望E(Y│X)是参数β的一个线性函数;它可以是或不是变量X的线性函数。2对于这种解释,E(Y |X)=β1+β2*X²就是一个线性(于参数〉回归模型。为了看出这-一点,让我们假设X取值为3。因此,E(Y |X=3)=β1+9β2,显然它是β和的线性函数。

计算拟合优度的代码:

y_hat = k *x+b; % y的拟合值 SSR = sum ( (y _hat-mean (y) ) .^2) %回归平方和 SSE = sum( (y _hat-y).^2) %误差平方和 SST = sum ( (y-mean(y) ).^2) %总体平方和 R_2 = SSR / SST

以上是利用最小二乘法的思想对数据进行拟合,matlab中也有自带的“拟合工具箱”:cftool

(5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:

general model: f(x) = a*x*x+b*x Coefficients (with 95% confidence bounds): a = 0.009194 (0.009019, 0.00937) b = 1.78e-011 (fixed at bound) Goodness of fit: SSE: 6.146 R-square: 0.997 Adjusted R-square: 0.997 RMSE: 0.8263

同时,也会在工具箱窗口中显示拟合曲线。

如果在正式数模比赛中,利用拟合工具箱拟合出来的曲线,可以通过以下步骤将拟合出曲线的代码导出:Curve Fitting Tool ->文件 ->Generate Code ->再使用保存快捷键Ctrl+S即可

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227929.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午8:11
下一篇 2026年3月16日 下午8:12


相关推荐

  • vs2013安装教程详解_visual studio怎么注册账户

    vs2013安装教程详解_visual studio怎么注册账户1.下载好安装包,解压文件2.选中如图exe文件,右键选择管理员方式打开3更改一下安装路径,这里尽量避免在c盘上安装,我装在自己电脑d盘:4安装完后的结果如下,不用在意,继续点击启动->以后再说:5,然后弹出下面的界面,默认设置常规环境,启动vs即可,6,启动后,选择帮助任务栏下方的注册产品,打开后选择->使用产品密钥获得许可7,输入安装文件里有效的密钥,然后得到以下结果(许可证,密钥已应用),即安装成功…

    2025年10月19日
    4
  • pycharm导入外部包

    pycharm导入外部包没有详细安装 主要是一些思路之类的 就是一个大体安装方向

    2026年3月18日
    2
  • 赛门铁克symantec的安装与卸载-附下载地址(本人亲测)

    赛门铁克symantec的安装与卸载-附下载地址(本人亲测)赛门铁克symantec的安装与卸载下载地址1:英文版下载地址https://www.jb51.net/softs/398259.html2:中文版下载地址(包含卸载工具)链接:https://pan.baidu.com/s/1Naes0tUtnJRwAhI5GZ_eYw提取码:7r2h一:安装二:赛门铁克的卸载1:window卸载和更改程序是无法进行卸载的,程序还在运行中,并且无法关闭程序,导致…

    2022年6月7日
    36
  • UFT12.02安装

    UFT12.02安装1.打开安装程序 2.选择语言3.选择插件4.UFT配置5.安装6.安装完成7.自述文件8.启动UFT9.进入UFT后的界面

    2022年5月8日
    38
  • LSD_SLAM编译之一气呵成法

    LSD_SLAM编译之一气呵成法LSD_SLAM编译之平台信息本LSD_SLAM编译平台信息:ubuntu16.04LSopencv3.XROS—kinetic其他的都不重要…ROS_kinetic的安装参考点击此处准备及安装注意:一定要下载此处的LSD_SLAM官方的lsd_slam一直没有编译成功,此LSD_SLAM已经被该作者fixedbugs.所以我们直接下载该git。…

    2022年5月7日
    48
  • 讯飞星火API KEY申请教程:3分钟完成配置,软件效率提升10倍(2026最新)

    讯飞星火API KEY申请教程:3分钟完成配置,软件效率提升10倍(2026最新)

    2026年3月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号