首页 > 编程语言 >Python实战训练(方程与拟合曲线)

Python实战训练(方程与拟合曲线)

时间:2024-07-09 14:30:05浏览次数:11  
标签:实战 plt alcohol Python 拟合 tup np time 68

1.方程

求e^x-派(3.14)的解

用二分法来求解,先简单算出解所在的区间,然后用迭代法求逼近解,一般不能得到精准的解,所以设置一个能满足自己进度的标准来判断解是否满足

这里打印出解x0是因为在递归过程中没有变量去接收返回值,所以返回x0,再打印x0得到的是None,再用numpy自带的log(pi)就查看解的相似度

import numpy as np

def f(x):
    return np.e**x-np.pi

resolution=0.00000001
global x
x=0
def search_x(x1,x2):
    x0=(x1+x2)/2
    if np.abs(f(x0)-0)<=resolution:
        print(x0)
    elif f(x1)*f(x0)<0:
        search_x(x0,x1)
    elif f(x2)*f(x0)<0:
        search_x(x0,x2)


search_x(0,10)
print("方程的解",np.log(np.pi))

2.拟合曲线 

有俩组数据,通过这俩组数据可以得到一个图像

import matplotlib.pyplot as plt
import numpy as np
from numpy import polyfit
from matplotlib.pylab import mpl

mpl.rcParams['font.sans-serif']=['SimHei']#仅有这俩行 可以显示中文  但是减号为定义
mpl.rcParams['axes.unicode_minus']=False



time=[0.25, 0.5, 0.75, 1 ,1.5 , 2 ,2.5 ,3 ,3.5 ,4 ,4.5 ,5,6,7,8,9,10,11,12,13,14,15,16]
alcohol=[30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4]
# print(len(time),len(alcohol))
plt.scatter(time,alcohol)
plt.title("project")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

 

接下来就是对数据进行操作,是线性关系明显

time=[0.25, 0.5, 0.75, 1 ,1.5 , 2 ,2.5 ,3 ,3.5 ,4 ,4.5 ,5,6,7,8,9,10,11,12,13,14,15,16]
alcohol=[30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4]
y=[np.log(a) for a in alcohol]#把alcohol里面的数据取对数  根据原数据对象做出操作
# print(len(time),len(alcohol))
plt.scatter(time,y)
plt.title("project")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

这个代码执行的是把alcohol的每个数据取出来在取对数,最后赋给y 

 

y=[np.log(a) for a in alcohol]

图像可以知道存在峰值,而峰值后的数据关系联系强,而峰值前的数据也同样,所以可以分段函数的办法来表现图像关系

.index 可以得到里面数据的索引

.max 可以得到数据中最大值

[alcohol.index(max(alcohol)):] 表示从最大值开始到最后一个数据

alcohol_tup=alcohol[alcohol.index(max(alcohol)):]

 polyfit(x,y,z)  x与y是俩个数据集  z表示是几次的函数 这里是y=kx+b 为一次,所以z=1

这里会返回俩个值,一个是k,一个是b

from numpy import polyfit
k,b=polyfit(time_tup,y_tup,1)#1表示次数为1次  2为2次

 

把数据都进行分段 

time=[0.25, 0.5, 0.75, 1 ,1.5 , 2 ,2.5 ,3 ,3.5 ,4 ,4.5 ,5,6,7,8,9,10,11,12,13,14,15,16]
alcohol=[30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4]
y=[np.log(a) for a in alcohol]#把alcohol里面的数据取对数  根据原数据对象做出操作
alcohol_tup=alcohol[alcohol.index(max(alcohol)):]#找到alcohol的最大数并返回索引  把最大值以及从最大值后面的数据索引 重新改造数据
time_tup=time[alcohol.index(max(alcohol)):]
y_tup=y[alcohol.index(max(alcohol)):]
k,b=polyfit(time_tup,y_tup,1)#1表示次数为1次  2为2次
#1次  是y=kx+b
print(k,b)

建立一个model函数来进行拟合

predy是在拟合函数中得到的y值 

time=[0.25, 0.5, 0.75, 1 ,1.5 , 2 ,2.5 ,3 ,3.5 ,4 ,4.5 ,5,6,7,8,9,10,11,12,13,14,15,16]
alcohol=[30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4]
y=[np.log(a) for a in alcohol]#把alcohol里面的数据取对数  根据原数据对象做出操作
alcohol_tup=alcohol[alcohol.index(max(alcohol)):]#找到alcohol的最大数并返回索引  把最大值以及从最大值后面的数据索引 重新改造数据
time_tup=time[alcohol.index(max(alcohol)):]
y_tup=y[alcohol.index(max(alcohol)):]
k,b=polyfit(time_tup,y_tup,1)#1表示次数为1次  2为2次
#1次  是y=kx+b
print(k,b)

def model(t):
    a=np.e**(k*t+b)
    return a

time0=np.linspace(time_tup[0],16,1000)
predy=model(time0)
plt.scatter(time,alcohol,label="原曲线")
plt.plot(time0,predy,label="拟合曲线")
plt.title("result")
plt.xlabel("alcohol")
plt.ylabel("time[h]")
plt.legend()
plt.show()


 可以看到峰值后的拟合曲线基本贴合原数据

标签:实战,plt,alcohol,Python,拟合,tup,np,time,68
From: https://blog.csdn.net/2302_80378107/article/details/140233401

相关文章

  • 爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传
    Python (发音:['paiθ(ə)n;(US)'paiθɔn]n.蟒蛇,巨蛇),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。Python语言的特点......
  • c++实战-多子棋
    自创的游戏,可以控制棋盘大小之类的核心在于控制胜利条件,需要每次扫描代码如下:#include<iostream>#include<vector>usingnamespacestd;#defineMAX_SIZE9//定义棋盘为MAX_SIZExMAX_SIZE的二维向量vector<vector<char>>board(MAX_SIZE,vector<char>(MAX_SIZE......
  • c语言实战-极简扫雷
    C语言/c++写的C语言实战项目扫雷结构比较清晰,仅供参考:核心是扫雷的递归算法实现上代码:#include<stdio.h>#include<stdlib.h>#include<time.h>#defineSIZE10#defineMINES15charboard[SIZE][SIZE];//游戏棋盘//初始化棋盘,'-'表示未揭示的区域voidinit......
  • C#将文件以byte[]形式传给python的sanic接口
    C#如何将文件以byte[]形式传给python的sanic接口?C#调用的部分你可以按照以下步骤进行:1)读取文件,将文件转换成byte[];2)定义类,将byte[]内容转成json格式传输;3)使用post请求将content传输到接口,返回结果;C#调用部分代码:/*将文件转换成byte[]格式*/protectedstaticbyte[]GetFileD......
  • 【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统
    【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统一、OrangeHRM介绍1.1OrangeHRM简介1.2OrangeHRM特点1.3OrangeHRM使用场景二、相关知识介绍2.1本次实践存储介绍2.2k8s存储介绍三、本次实践介绍3.1本次实践简介3.2本次......
  • Holder模式(Holder Pattern):公司员工权限管理系统实战案例分析
    肖哥弹架构跟大家“弹弹”业务中设计模式的使用,需要代码关注欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取更多精彩内容在一个大型公司中,员工根据其职位和部门被赋予不同的权限。这些权限可能包括访问敏感数据、审批财务报告、提交报销等。随着公司规模的增长......
  • Python函数进阶:高阶函数与函数式编程实战
    前言大家好!今天我们来探讨一个非常有趣且实用的话题——Python函数进阶,特别是高阶函数与函数式编程。记得上次我在一个项目中需要处理复杂的数据流,通过高阶函数和函数式编程,我不仅简化了代码,还提高了运行效率。说到这里,大家是否也想掌握这门技术呢?让我们一起深入了解Pytho......
  • Python多线程与多进程编程:提升程序性能的实用技巧
    前言大家好!今天我们要深入探讨Python中的多线程与多进程编程,这可是提升程序并发性能的关键技能之一。记得我在处理大量数据时,通过多线程和多进程技术,大大提高了程序的执行效率。为了让大家也能掌握这些实用技巧,我将通过多个具体案例,详细讲解如何在Python中实现多线程和多......
  • 用Python1000多行代码实现ATM操作系统
    基于Python实现ATM操作系统概要基于Python语言,实现ATM的基本功能,包括查询余额、存款、取款、转账、注册等基本功能。能够实现用户和管理员两种身份识别,管理员有权限对系统做出修改,包括提升用户级别、关闭系统等操作。用户信息保存于user_data.txt文件中,也可自行接入数据库......
  • AES-CBC模式加解密(Python)
    importbase64try:fromCrypto.CipherimportAESfromCrypto.Util.Paddingimportpad,unpadexceptImportError:print('请安装加解密库pycryptodome')classAesSample(object):def__init__(self):self.key='MbQeThWmZq4t6w9......