matlab复杂函数多元函数拟合

news2024/9/19 17:07:39

简介

本文介绍了基于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倍,但这大部分也只是因为实验值太小,拟合值和实验值的绝对偏差除以很小的实验值,会得到很大的相对值。

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

总结

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AVL树:高度平衡的二叉搜索树

AVL树 AVL树和BST树的联系   答:BST树(二叉排序树)当节点的数据key有序时是一棵单支树,查找时效率直接降低到O(N)而不是树高,为了使树尽量两边均匀,设计出了AVL树,AVL树的左右高度差不超过1。…

sql语句练习题1

1、选择部门30中的所有员工; 要注意到查的是所有员工 代码如下: mysql> select * from emp where deptno 30;2、列出所有办事员(CLERK)的姓名,编号和部门编号; 注意的是要查的是姓名,编号和部门编号 范围限定的是…

并发编程的原子性 != 事务ACID的原子性

△Hollis, 一个对Coding有着独特追求的人△这是Hollis的第 412 篇原创分享作者 l Hollis来源 l Hollis(ID:hollischuang)关于原子性,很多人在多个地方都听说过,大家也都背的很熟悉。在事务的ACID中,有原子性…

儒家思想和道家思想的三个主要差异

孔子、孟子、老子、庄子,这四位古代思想家被称为“中国四哲”,他们分别代表了儒家和道家思想。这两大思想流派,是数千年来中国人智慧的结晶和文化的瑰宝。01先秦儒家思想的发展,经过了三个阶段,第一阶段是孔子&#xf…

CHAPTER 7 Ansible playbook(四)

ansible-playbook7.1 roles(角色)7.1.1 Ansible Roles 介绍7.1.2 Roles结构7.1.3 存储和查找角色7.1.4 制作一个Role7.1.5 使用角色7.1.5.1 经典方法7.1.5.2 import_role7.1.6 如何使用Galaxy7.1 roles(角色) 7.1.1 Ansible Role…

windows docker安装prometheus和grafana

文章目录docker安装prometheusdocker安装grafanawindows安装windows_exporterprometheus配置新增windows_exporter的job,配置grafana导入windows模板即可出现酷炫大屏出现酷炫画面完成docker安装prometheus 拉取镜像,在D盘下创建prometheus.yml配置文件,映射到docker里面d:/se…

【pandas】教程:8-如何组合多个表格的数据

Pandas 组合多个表格的数据 本节使用的数据为 data/air_quality_no2_long.csv,链接为 pandas案例和教程所使用的数据-机器学习文档类资源-CSDN文库 导入数据 NO2NO_2NO2​ import pandas as pd air_quality_no2 pd.read_csv("data/air_quality_no2_long.cs…

二、python编程进阶02:模块和包

目录 1. python中的模块是什么 2. 导入模块: 学习import语句 2.1 import语句介绍 2.2 import导入模块的语法 2.3 导入自己的模块 2.4 导入数字开头或者带空格的模块 3. 编写自定义模块 3.1 给自定义模块编写测试代码 3.2 给自定义模块模块编写说明文档 4. 模块的搜索…

1215. 小朋友排队(树状数组应用 -- 逆序对个数)

题目如下: 思路 or 题解 我们可以得出交换的次数 > 逆序对个数 kkk 我们可以发现 所有 位置 左边大于它的个数 右边小于它的个数和 kik_iki​ 等于 k∗2k*2k∗2 我们可以简单证明出(感觉出):答案就是 ∑1n(1ki)∗ki2\sum^n_1 \frac{(1 k_i) * k_i}…

JavaScript 错误

文章目录JavaScript 错误 - throw、try 和 catchJavaScript 错误JavaScript 抛出(throw)错误JavaScript try 和 catchThrow 语句实例实例JavaScript 错误 - throw、try 和 catch try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错…

string的使用介绍

目录 标准库中的string类 string类(了解) 编码介绍 string类的常用接口说明 Member functions 测试一:创建对象 测试二:遍历字符串 Iterators 测试三:反向迭代器(Iterators) Capacity 测试四:容器相关(Capacity) 测试…

Redis企业云如何通过缓存轻松扩展到亿级请求?

你是否在春运抢票过程中遇到12306 APP瘫痪? 你是否在双十一抢好物的时候显示系统繁忙? 你是否在微博刷某个爆了的娱乐新闻时显示页面走丢了? 前几天热搜上好像又说小红书又崩溃了? 当用户请求量过高,数据库无法支撑时&…

Annotation(注解)

一、注解概述1.从 JDK 5.0 开始,Java 增加了对元数据(MetaData) 的支持,也就是Annotation(注解)2.Annotation 其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用 Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些…

Go第 6 章:函数、包和错误处理

Go第 6 章:函数、包和错误处理 6.1 为什么需要函数 6.1.1请大家完成这样一个需求: 输入两个数,再输入一个运算符(,-,*,/),得到结果.。 6.1.2使用传统的方法解决 分析一下上面代码问题 上面的写法是可以完成功能, 但是代码冗余同时不利于代码维护函数…

SAP FICO 成本对象控制解析

成本对象控制(Cost Object Cotrol)是指对不同的成本对象,比如成本收集器、生产订单、销售订单等进行成本的期末结算。基于这些不同的成本对象,SAP在成本对象控制菜单下面细分了相应的操作(SAP 菜单 →会计核算 →控制 …

JavaScript篇.day10-面向对象,对象,构造函数,this关键字,原型

目录面向对象对象构造函数this关键字原型面向对象面向过程: 在开发过程中,关注过程的开发方式. 在开发时关注每一个细节,步骤和顺序.面向对象: 在开发过程中,只需要找一个对象来完成事情的开发思想对象: 在生活中,万物皆对象 封装: 将完成步骤封装在对象内部属性: 对象的特征核…

Java泛型上界与泛型方法的应用 | 如何通过泛型类获取任意类型的三个数的最大值?

目录 一、引言 二、泛型上界 1、什么是泛型的上界 2、泛型上界的语法 三、泛型方法 1、泛型方法的语法 2、泛型方法的类型推导 三、编程分析 1、MyCompare泛型类 2、泛型方法实现 四、总结 一、引言 初学Java时,同学们基本都会遇到这样一个基础编程题&am…

平面设计师去哪里找素材?

5个平面设计素材网站,赶紧收藏! 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx ​ 站内平面海报、UI设计、电商淘宝、免抠、高清图片、样机模板等素材非常齐全。还有在线抠图、CDR版本转换功能,能有效的为设计师节省找素材时间&#x…

MySQL查询训练题1

表信息: dept表和emp表 bonus表和salgrade表 练习题: 1、选择部门30中的所有员工; select * from Emp where DEPTNO30;2、列出所有办事员(CLERK)的姓名,编号和部门编号; select ENAME 姓名,EMPNO 编号,DEPTNO 部门…

【vue2中使用axios和插槽】一.组件的生命周期;二.vue2中使用axios;三.插槽

目录 一.组件的生命周期 1.组件的生命周期经历的阶段: (1)创建阶段:beforeCreate、created、beforeMount、mounted (2)运行阶段:beforeUpdate、update (3)销毁阶段&a…