matlab复杂函数多元函数拟合

2023-05-16

简介

本文介绍了基于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方法实现,并分享了一些拟合的技巧心得。

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

链接:https://pan.baidu.com/s/1JO2DFQ5b1AP0GGtFErn19w?pwd=ptty 
提取码:ptty

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab复杂函数多元函数拟合 的相关文章

随机推荐

  • 【分享】5G+北斗RTK高精度人员定位解决方案

    5G 43 北斗RTK高精度定位系统旨在通过5G网络实时提供亚米级 厘米级 毫米级高精度定位服务 xff0c 构建全天候 全天时 全地理的精准时空服务体系 伴随着信息技术日新月异的发展 xff0c 各类 智慧 顺势而出 xff0c 智慧城市
  • 5G+北斗RTK定位:高精度定位技术发展更进一步

    5G 43 北斗RTK定位采用5G定位与北斗RTK定位技术 xff0c 在信号 信息 设施 应用等层面深度融合 xff0c 5G自身可实现亚米级的定位能力与北斗形成信号覆盖互补 xff0c 实现从室内到室外无缝隙衔接与定位 5G通信技术的到
  • 室外定位:高精度北斗RTK定位技术

    北斗RTK定位技术 xff0c 也称北斗差分定位技术 xff0c 利用我国自主研发的北斗卫星定位系统实现精确定位功能 定位精度可根据需要 xff0c 通过选择不同精度的人员定位终端来实现 在科技强国的战略驱动下 xff0c 北斗RTK定位技
  • 【高精度定位】RTK定位与RTD定位知识科普

    高精度定位一般指亚米级别或厘米级别的定位 xff0c 常见的室内有蓝牙AoA和UWB两种技术 xff0c 室外有北斗地基增强技术 xff0c 这些技术都是采用算法进行定位 工业4 0时代 xff0c 在资源和环境约束不断强化的背景下 xff
  • curl http或https上传下载

    curl的使用 注意如果是https请求需要带上ssl的库和curl库如下图 上传文件 回调函数 span class token keyword static span size t span class token function h
  • 层次遍历构建二叉树

    span class hljs keyword struct span TreeNode span class hljs keyword int span val span class hljs keyword struct span Tr
  • Jetson tx2 使用 jetpack 4.3刷机全过程

    1 首先准备一台安装有ubuntu 18 04 ubuntu16 04 系统的主机 xff08 host也就是笔记本 xff09 2 在nvidia官网注册一个nvidia的账号用于下载jetpack 4 3时使用 xff08 刷机过程中需
  • 2020/2/21 Linux Socket编程 高级篇——广播

    广播 xff1a 实现一对多的通信 SO BROADCAST选项 它控制了UDP套接字是否能发广播数据报 xff0c 选项类型是int xff0c 非零表示 是 只有UDP能用 xff0c TCP不能 如果是一个广播地址 xff0c 但SO
  • 大小端字节序(Big Endian和Little Endian)

    那么何为字节序 xff08 Endia xff09 呢 xff1f Big Endian是指低地址存放最高有效字节 xff08 MSB xff09 xff0c 而Little Endian则是低地址存放最低有效字节 xff08 LSB xf
  • GPS定位及通信协议解析

    1 简介 上图为某公司的GPS定位模块 xff0c 自己在使用其进行GPS定位过程中学习到的知识分享给大家 主要参数如下 半双工 UART 3 3V TTL 电平 RS232 IIC CAN 接口输出 xff0c 更快速的应用 xff1b
  • JVM系列(八):堆(Heap)的相关知识介绍

    目录 1 JVM堆的概念 2 JVM堆的特点 3 JVM堆的内部结构 3 1 组成 3 2 堆内存内部空间所占比例 3 3 永久代和元空间区别 4 堆空间的大小设置 5 堆空间垃圾回收 1 JVM堆的概念 JVM中的堆是用来存放对象的内存空
  • C++读写TIF格式

    参考文章 xff1a xff08 1 xff09 https www cnblogs com gywei p 3393816 html xff08 2 xff09 https blog csdn net han jiang xue arti
  • matlab Fourier变换--方波信号的分解与重建

    N 61 200 采用的数据点数 dt 61 4 N 采样的间隔 for n 61 1 N 生成一个方波 if n dt gt 61 2 x n 61 0 8 else x n 61 0 8 end end figure subplot 2
  • matlab 小波分析--高通滤波器和低通滤波器

    xff08 一 xff09 加载一个尺度滤波器 load db8 w 61 db8 figure subplot 4 2 1 stem w title 39 原尺度滤波器 39 计算4个滤波器 Lo D Hi D Lo R Hi R 61
  • C/C++中rand() 函数产生随机数与srand()设置随机数种子

    xff08 1 xff09 rand 产生随机数 xff0c 输出的随机数序列是确定的 xff0c 即每次运行结果一致 include lt iostream gt int main int i j for i 61 0 i lt 10 i
  • matlab与数字图像处理--膨胀和腐蚀

    对于初学者 xff0c 参考一篇很好的说明 xff1a https blog csdn net alw 123 article details 83868878 左边是一个二值化的测试图像 xff0c 白色为图像元素 xff0c 黑色为背景
  • Emmet语法

    Emmet语法 1 1 快速生成HTML结构语法1 2 快速生成CSS样式语法1 3 快速格式化代码 Emmet语法的前身是Zen coding 它使用缩写 来提高html css的编写速度 Vscode内部已经集成该语法 快速生成HTML
  • CString,int,string,char*之间的转换

    C 43 43 标准函数库 中说的 有三个函数可以将字符串的内容转换为字符数组和C string 1 data 返回没有 0 的字符串数组 2 c str xff0c 返回有 0 的字符串数组 3 xff0c copy int 转 CStr
  • C++ TCP网络编程--服务器端多线程处理会话连接

    客户端程序 xff1a include lt winsock h gt include lt iostream gt pragma comment lib 34 ws2 32 lib 34 include lt Windows h gt i
  • matlab复杂函数多元函数拟合

    简介 本文介绍了基于matlab实现的复杂函数以及多元函数的拟合 在工程和研究中偶尔会遇到要用一个非常复杂的数学公式来拟合实验测量数据 xff0c 对这些复杂的数学公式拟合时 xff0c 采用常见的拟合方法往往会失败 xff0c 或者得不到