matlab复杂函数多元函数拟合

本文详细介绍了如何使用MATLAB的lsqnonlin函数进行复杂多元函数的拟合,特别是针对含有14个参数的函数。讨论了初始值选择、拟合精度判断和结果验证等问题,并提供了实际案例和拟合结果的分析,展示拟合效果与实验数据的吻合度。
摘要由CSDN通过智能技术生成
欢迎关注微信公众号 超美软件

简介

本文介绍了基于matlab实现的复杂函数以及多元函数的拟合。在工程和研究中偶尔会遇到要用一个非常复杂的数学公式来拟合实验测量数据,对这些复杂的数学公式拟合时,采用常见的拟合方法往往会失败,或者得不到足够精确的结果。本文以笔者多年工作经验中的某些典型场景为例,介绍钻研出来的一些非常有用的拟合经验。

案例

需要对如下公式进行拟合,能看出来Y=f(Z,E,A),关于参数a1,a2,...,a13的关系

现在需要通过给定的数据点集,通过拟合得到上述参数的一套值出来

 共获得了实验数据约350组,即下列数据共350行4列,现在通过如下所示的数据集进行拟合

A	Z	E	Y
3	8	11.5163	-2.501036032
24	8	10.3738	-2.796881415
25	9	12.442	-2.830217835
27	10	12.8485	-3.442019376
28	10	11.7724	-4.074541935
29	10	16.1245	-1.609437912
30	11	17.6367	-3.036554268
31	11	15.571	-4.074541935
32	11	19.4956	-4.327538449
33	11	18.3907	-4.803621125
34	11	22.5039	-5.203007187
35	11	21.8553	-6.502290171
32	12	10.2576	-2.120263536
.
.
.

拟合采用的方法是matlab提供的 lsqnonlin 方法,该方法在帮助文档中解释是

lsqnonlin: Solve nonlinear least-squares (nonlinear data-fitting) problem(非线性最小二乘);

该函数的基本使用方法就是

% 函数  lsqnonlin 非线性最小二乘
% 格式 
x = lsqnonlin(fun,x0)
x = lsqnonlin(fun,x0,lb,ub)
x = lsqnonlin(fun,x0,lb,ub,options)
% x0为初始解向量;
% lb、ub为解向量的下界和上界lb≤x≤ub,若没有指定界,则lb=[ ],ub=[ ];
% options为指定的优化参数;
% lsqnonlin解决非线性最小二乘法问题,包含非线性数据的拟合问题
% 其中初值x0要有。lb,ub,option可为空

然而在运用到实际工程中,需要完成以上公式的拟合时,需要考虑几个问题:

(1)该方法拟合时,需要给定每个参数的初始值,而且不同的初始值,拟合出来的结果可能并不相同,甚至差异非常大;

(2)有的初始值选取会导致拟合失败,直接得不到结果;

(3)该怎样写函数fun才能得到有效的拟合;

(4)当得到拟合结果,即一组参数a1,a2,...,a13的值时,怎样判定其精确度,以及准确性;

拟合结果:

以下是得到的一组合理的结果,

a(1)=10.163845,
a(2)=0.395367,
a(3)=-0.975375,
a(4)=3.311806,
a(5)=4.096069,
a(6)=1.211358,
a(7)=-17.871560,
a(8)=1.283213,
a(9)=12.979366,
a(10)=43.064128,
a(11)=24.059464,
a(12)=0.598062,
a(13)=10.028580,

对比实验值和拟合后的公式计算值

实验值          拟合公式计算值
-2.501036032	-2.225177809
-2.796881415	-2.564047068
-2.830217835	-2.630709452
-3.442019376	-2.810040425
-4.074541935	-3.138910417
-1.609437912	-3.94426673
-3.036554268	-3.824619464
-4.074541935	-3.787810766
-4.327538449	-4.383690344
-4.803621125	-4.618642492
-5.203007187	-5.173452295
-6.502290171	-5.479602794
-2.120263536	-2.590791649
-2.407945609	-3.299192629
-3.912023005	-3.345059132
-2.659260037	-4.06265759
-2.813410717	-3.529119214
...
...

拟合的结果和原始实验数据点相比,相当接近

下图是350个点的 拟合结果和实验值对比,二者曲线贴近效果良好

 下图是局部的放大观察

 用 re=sum(abs(YA-Y))/length(Y);统计350个点的平均偏离程度,Y为实验值,YA为计算值,平均值计算结果为 re=0.623681,

定义相对偏差 abs(YA-Y)/abs(Y)

350个数据点中有300的拟合值和实验值的偏差在1倍以内,这些点的平均偏差在30%左右,

50个点的偏差大于1倍,但这大部分也只是因为实验值太小,拟合值和实验值的绝对偏差除以很小的实验值,会得到很大的相对值。

拟合结果是很好的,公式很符合实验数据

 最小二乘法与非线性拟合

定义: 最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

最小二乘法是以如下目标函数最小化的一种优化方法:

其中是指定的拟合函数,或者说回归模型;是所有拟合数据集的值;

对于一个具体的拟合,例如,是一个具有4个参数的3元拟合函数,且提供拟合数据集共m组数据,即(),…, ()

那么

,最小二乘法就是要求得一组使得e最小。

要求一组使得取最小值,是一个单目标优化问题,通常对于这种优化问题,有多种优化算法,通常采用梯度下降法求解

关于梯度下降法,参考:

梯度下降法原理解析(大白话+公式推理)_梯度下降法公式_又是谁在卷的博客-CSDN博客

对于拟合:​,​是关于​的线性函数,所以该拟合是一个线性拟合。

在计算​的迭代过程中,有

​,​为梯度下降法中的学习率

对于​的迭代计算过程与​类似。

其中

下面列举一个非线性拟合的示例:

假定有如下拟合函数

​,​是关于​的非线性函数,它是具有5个参数的2元拟合函数

同样采用m组拟合数据,

​,

在计算​的迭代过程中,有

​,

对于​的迭代计算过程与​类似。

其中​=

梯度下降法通过以上迭代公式去计算

得到​后,也就完成了最初的拟合任务。

总结

本文介绍了一个具有3个变量,14个参数的复杂多元函数的拟合实现,通过matlab的lsqnonlin方法实现,并分享了一些拟合的技巧心得。

中间过程的脚本和数据,以及心得技巧在此分享给有需要的人,共勉

通过网盘分享的文件:fitme.zip
链接: https://pan.baidu.com/s/19VTWKXEWaUqfaFBaOHOt-w?pwd=spbd

提取码: spbd

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值