当前位置: 首页 > news >正文

由实验数据进行函数拟合的python实现

0.引言

已知公式求参的过程,对工程而言,一般是一个线性拟合或者非线性拟合的过程。我们现在来以代码片段为例,来描述如何求参。一般这个过程会涉及超定方程的计算。这个过程,原本需要使用matlab,现在python照样可以做到。

1. 示例1,问题描述

假定我们有一个确定的方程,比如

y = k*x1 + g*x2 /v(x1+x2)

1.1首先我们构建公式本身:

def func(x, k, g, v):(x1, x2) = xseg1 = k*x1;seg2 = g*x2/v*(x1+x2);y = seg1 + seg2;return y;

1.2 然后进行实验,采集相关参数:

三个参数,原本三组数据就可以出结果,这就是超定方程的含义。数据点比需要的更多。

#data.csv

14,1 ,3

20,5 ,9

11,7,13

100,9,4

120,8,10

1.3 求解

注意这里的x1,x2组合成一个x参数的过程。它涉及多参数求解的处理。

def CalcParamsOfFun(file_name):# 设置初始参数猜测initial_guess = (1,1,1);# 准备数据filename = "data.csv"  # 文件名y = load_csv_data(filename, 0); #yx1 = load_csv_data(filename, 1);  #x1x2 = load_csv_data(filename, 2); #x2y_ar = [];for item in y:y_ar.append(item);y = y_ar;x1_data = x1;x2_data = x2;data = (x1_data, x2_data)# 使用curve_fit函数进行拟合popt, pcov = curve_fit(func, data, y_ar, p0=initial_guess)# 显示拟合参数和拟合误差print(popt)print(pcov)return popt;

1.4 求解结果识读:

最终popt就是求解出的参数,而剩余的部分pcov是一个协方差矩阵,它反映了整个运算出的参数的不确定度:

[[ 1.55391864e-01 4.35894622e-04 -1.01903114e-03]

 [ 4.35894622e-04 4.97531727e-06 2.31409704e-05]

 [-1.01903114e-03 2.31409704e-05 3.43718230e-04]]

它的对角线的每一个值,是验算出的参数的可能误差。这里计算出的k的误差有15.5%这是一个比较大的误差,可能对运算精度产生较大影响。矩阵中对角线以外的元素是元素之间的关联关系,较大的值表示两个元素之间可能存在相关性。这里可以看出它们各自的相关性是很小的。

注意,这里的协方差具体数值与公式不符,因为我没有实际制作一笔数据和公式精确匹配。只是用来举例说明。

1.5校验

你可以直观看出公式计算得到的量和实际的数据之间的误差。

def ReCalcCurr_inByCalc(file_name, params):# 准备数据filename = "data.csv"  # 文件名y = load_csv_data(filename, 0); #yx1 = load_csv_data(filename, 1);  #x1x2 = load_csv_data(filename, 2); #x2y_ar = [];for item in y:y_ar.append(item);y = y_ar;x1_data = x1;x2_data = x2;data = (x1_data, x2_data)for i in np.arange(len(x1_data)):data = (x1_data[i], x2_data[i]);print(func(data, params[0], params[1], params[2]), y[i])

http://www.lryc.cn/news/265627.html

相关文章:

  • <JavaEE> 基于 UDP 的 Socket 通信模型
  • Golang 链表的基础知识
  • webpack 常见面试题
  • three.js实战模拟VR全景视图
  • 聊聊Spring Boot配置文件:优先级顺序、bootstrap.yml与application.yml区别详解
  • Milvus向量数据库基础用法及注意细节
  • 虚拟机多开怎么设置不同IP?虚拟机设置独立IP的技巧
  • 使用Docker-镜像命令
  • 4.3 C++对象模型和this指针
  • 计算机网络——计算机网络的概述(一)
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)ChannelMap 模块的实现
  • 微信小程序实现一个音乐播放器的功能
  • 算法基础之表达整数的奇怪方式
  • WEB 3D技术 three.js 设置图像随窗口大小变化而变化
  • 实战案例:缓存不一致问题的解决(redis+本地缓存caffine)
  • 【开源CDP】市场增长未来的探索,开源CDP带来的技术崛起与变革
  • 第11章 GUI Page423~424 步骤六 支持文字,使用菜单,对话框输入文字
  • 【Qt】Qt Creator 警告: Unused parameter ‘xxx‘
  • 「Vue3面试系列」Vue3.0性能提升主要是通过哪几方面体现的?
  • 网络结构模式
  • IIC及OLED实验
  • day6 力扣公共前缀--go实现---对字符串的一些思考
  • 27.Java程序设计-基于Springboot的在线考试系统小程序设计与实现
  • Redis可视化工具Redis Desktop Manager mac功能特色
  • 【C++】揭开运算符重载的神秘面纱
  • 竞赛保研 基于LSTM的天气预测 - 时间序列预测
  • 前端常用的开发工具
  • 鸿蒙开发语言介绍--ArkTS
  • 关于“Python”的核心知识点整理大全36
  • 安装nodejs,配置环境变量并将npm设置淘宝镜像源