数学建模——曲线拟合

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 数学建模——曲线拟合

一、曲线拟合简介

1、曲线拟合问题的提法

已知一组数据(二维),即平面上n个点       (xi,yi)(i=1,2,…,n), xi互不相同。寻求一个函数y=f(x),使得f(x)在某种准则下与所有的数据点最为接近,即拟合得最好。

2、线性最小二乘法

线性最小二乘法是解决曲线拟合最常用的方法,基本思路是,令

                     

其中,r1(x),…,rm(x)是一组预先选定得一组线性无关的函数,a1,a2,…,am是待定系数.

涉及到的问题有二,一是系数确定;二是函数选取

2.1 系数确定

拟合准则:使得yi与f(xi)距离(称为残差)平方和最小,称为最小二乘法。,即

即求a1,…,am,转化为求J函数的最小值。

2.2 拟合函数的选取

拟合的前提是:

(1)通过机理分析,得到y和x的函数关系,这是r1(x),…, rm(x)也就好选取;

(2)若无法判断y和x的机理关系,绘制(xi,yi)的散点图,直观判断用什么曲线取拟合。

常用的曲线有

(1)线性

(2)多项式(一般m=2,3)

(3)双曲函数(一支)

(4)指数曲线

一般需要几种曲线分别拟合,选最好的那个!


二、曲线拟合Matlab工具箱

1、多项式拟合(polyfit)

调用格式:a=polyfit(x0,y0,m)

x0,y0是数据向量,m表示多项式的阶数,返回的是多项式的降幂系数a=[a1,a2,…,am,am+1]。

polyfit 函数会根据给定的数据点 (x0, y0)使用最小二乘方法进行拟合,得到一个多项式模型,并返回其中的系数 a。拟合多项式的阶数由参数 m 指定,表示拟合多项式的次数。

返回的系数 a 是一个向量,其中的元素表示多项式中各项的系数,从高次项到低次项排列。例如,如果拟合多项式的阶数为 3,则 a 向量对应的是多项式 a(1)*x^3 + a(2)*x^2 + a(3)*x + a(4) 的系数。

需要注意的是,polyfit 函数会对数据进行拟合,尽可能地找到一个最佳的多项式模型来逼近数据点。选择适当的多项式阶数是重要的,过高的阶数可能导致过拟合,而过低的阶数可能导致欠拟合。因此,在选择阶数时需要进行合理的权衡

要计算x处对应的多项式取值,需调用y=polyval(a,x)

例如:

x0=1990:1:1996;
x1=x0-1989;
y0=[70,122,144,152,174,196,202];
a=polyfit(x1,y0,3)
0.7778  -11.7381   71.6270   12.5714

2、最小二乘曲线拟合

在 MATLAB 中,lsqcurvefit 函数用于非线性最小二乘曲线拟合,可以通过拟合函数 fun 对给定的数据 (xdata, ydata) 进行拟合,并返回拟合后的参数 x

调用格式:x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

参数介绍:

  • fun:拟合函数,可以是自定义函数或 MATLAB 内置函数。该函数应接受待拟合参数 x 和自变量 xdata 作为输入,并返回拟合函数对应的因变量值。
  • x0:拟合参数的初始猜测值。这应该是一个向量。
  • xdata:自变量数据,表示用于拟合的输入数据。这可以是一个向量、矩阵或多维数组。
  • ydata:因变量数据,表示用于拟合的输出数据。这应该与 xdata 大小相同。
  • lb:参数 x 的下界(可选)。这应该是一个向量。
  • ub:参数 x 的上界(可选)。这应该是一个向量。
  • options:优化选项(可选),用于控制拟合过程的参数和行为。

lsqcurvefit 函数基于最小二乘法,寻求使拟合函数的输出与实际数据之间的残差平方和最小化的最优参数 x。它通过反复调整参数 x 的值,以改善拟合函数与数据之间的拟合效果。

在使用 lsqcurvefit 函数时,应提供适当的初始猜测参数 x0,并根据需要设置参数的下界 lb 和上界 ub。还可以通过 options 参数进一步控制拟合过程的行为,例如迭代次数、显示输出等。

举例理解lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options):

假设你有一组实验数据,表示物体从起始位置到时间的运动距离。你想要拟合一个非线性函数来描述物体的运动,具体为 y = a * exp(-b * x) + c * sin(d * x),其中 a、b、c、d是需要拟合的参数。

1. 拟合函数的定义:

function yfit = myFunction(x, p)
    a = p(1);
    b = p(2);
    c = p(3);
    d = p(4);
    yfit = a * exp(-b * x) + c * sin(d * x);
end

2. 定义初始猜测参数和参数范围:

x0 = [1, 0.1, 0.5, 2];       % 初始猜测参数
lb = [0, 0, 0, 0];           % 参数下界
ub = [Inf, Inf, Inf, Inf];   % 参数上界

3. 加载实验数据:

load 'data.mat';    % 加载实验数据文件,假设包含 xdata 和 ydata

4. 定义优化选项(可选):

options = optimoptions('lsqcurvefit', 'Display', 'iter');

此处设置了优化选项,其中 `'Display', 'iter'` 表示在每次迭代中显示优化过程的详细信息。

5. 进行参数拟合:

x = lsqcurvefit(@myFunction, x0, xdata, ydata, lb, ub, options);

这里使用 `lsqcurvefit` 函数进行参数拟合,传入参数拟合函数 `@myFunction`、初始猜测参数 `x0`、自变量数据 `xdata`、因变量数据 `ydata`,以及参数下界 `lb` 和上界 `ub`。`x` 将包含拟合后的参数值。

在这个例子中,你可以根据实际情况修改函数的形式、初始猜测参数、参数范围等,以适应你的数据和拟合需求。你也可以根据具体情况进一步控制优化选项,例如设置不同的显示模式、设置最大迭代次数等。

3、区别

`lsqcurvefit` 函数与之前提到的 `polyfit` 和 `polyval` 函数有以下几个主要区别:

1. 功能不同:`polyfit` 和 `polyval` 主要用于多项式拟合和求值,适用于已知数据点遵循多项式模型的情况。而 `lsqcurvefit` 用于非线性最小二乘曲线拟合,适用于更一般的非线性函数拟合问题。

2. 参数个数:`polyfit` 和 `polyval` 方法中只涉及到多项式的阶数和系数,而 `lsqcurvefit` 方法需要提供更多的参数,包括拟合函数、初始猜测参数、数据点、参数界限等。

3. 拟合函数的选择:`polyfit` 和 `polyval` 只能用于多项式模型的拟合,而 `lsqcurvefit` 可以适应更广泛的非线性模型。你可以自定义拟合函数 `fun`,只要它能够接受待拟合参数和自变量作为输入,并返回拟合函数对应的因变量值。

4. 非线性优化:`lsqcurvefit` 使用非线性优化算法来拟合数据,它基于最小二乘法和迭代的思想,通过调整参数的值来改善拟合效果。相比之下,`polyfit` 使用最小二乘法来拟合多项式模型,但不涉及非线性优化过程。

总之,`lsqcurvefit` 提供了更灵活、更通用的拟合功能,适用于更广泛的曲线拟合问题,尤其在遇到非线性模型时更有优势。而对于已知数据点遵循多项式模型的情况,使用 `polyfit` 和 `polyval` 更为简便。

4、选择

选择使用 `polyfit`、`polyval` 还是 `lsqcurvefit` 取决于你的具体需求和数据特征。下面是一些建议来帮助你做出选择:

1. 数据特征:观察你的数据是否符合多项式模型。如果你的数据显示出明显的多项式关系,即使你不知道多项式的阶数,`polyfit` 和 `polyval` 可能是较好的选择,因为它们是最专门用于多项式拟合和求值的函数。

2. 拟合模型:确定你需要拟合的函数是否是一个多项式以外的非线性函数。如果你的函数不属于多项式模型,或者你需要对不同类型的非线性函数进行拟合,那么 `lsqcurvefit` 是更通用和灵活的选择,因为它允许你自定义拟合函数。

3. 参数估计:如果你已经确定你的函数是一个多项式模型,并且你希望直接估计多项式的系数,在不考虑其他模型的情况下,`polyfit` 可以提供简单且高效的多项式拟合。

4. 参数范围和约束:如果你对估计的参数有范围或约束条件,或者你面临的问题需要一种更灵活的非线性拟合方法,那么 `lsqcurvefit` 可能更适合你。它提供了对参数范围的设置,以及更高级的非线性优化算法,使得拟合过程更加灵活和精确。

综上所述,如果你的数据适用于多项式模型并且你想估计多项式的系数,可以选择 `polyfit` 和 `polyval`。如果你面临更一般的非线性函数拟合问题,或者需要参数范围和约束,那么 `lsqcurvefit` 是更适合的选择。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
数据可视化 数据挖掘 Python
数学建模——线性回归模型
数学建模——线性回归模型
|
数据可视化 数据建模 算法框架/工具
【数学建模】常微分方程
【数学建模】常微分方程
190 0
|
机器学习/深度学习 移动开发 算法
【数学建模】 非线性规划+二次规划(下)
【数学建模】 非线性规划+二次规划(下)
134 0
|
存储 机器学习/深度学习 算法
【数学建模】 非线性规划+二次规划(上)
【数学建模】 非线性规划+二次规划(上)
132 0
|
存储 机器学习/深度学习 数据可视化
【MATLAB 数学建模】 插值方法 数据拟合
【MATLAB 数学建模】 插值方法 数据拟合
263 0
|
机器学习/深度学习 算法 数据挖掘
使用 LSSVM 的 Matlab 演示求解反常微分方程问题(Matlab代码实现)
使用 LSSVM 的 Matlab 演示求解反常微分方程问题(Matlab代码实现)
|
算法 算法框架/工具
数值分析算法 MATLAB 实践 常微分方程求解
数值分析算法 MATLAB 实践 常微分方程求解
129 0
|
机器学习/深度学习 数据采集 算法
数学建模(三):预测
在数学建模比赛中,预测也是我们最常见的问题之一,特别是每年的国赛C题,C题不出意外都为统计题。博主在去年的国赛C题和今年的长三角数学建模中都有遇到预测类的题目,在预测类问题中时间预测和多指标预测最为常见,接下来就详细讲一下如何利用BP神经网络去解决该类问题
数学建模(三):预测
《数学建模:基于R》——2.3 判别分析
本节书摘来自华章计算机《数学建模:基于R》一书中的第2章,第2.3节,作者 薛毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1552 0
《数学建模:基于R》——2.1 回归分析
本节书摘来自华章计算机《数学建模:基于R》一书中的第2章,第2.1节,作者 薛毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1592 0