python拟合曲线_用python做曲线拟合

大家好?我是Kepler哎学习,最近在工程中用到曲线拟合。一般我们都是用matlab来做,方便快捷。我们也可以尝试用python编写脚本来拟合数据,方便数据自动化处理。

曲线拟合分为一般多项式拟合和指定函数拟合。4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

准备工作:

1.建立python环境(https://www.jianshu.com/p/daf5d33ae62e)

2.安装模块numpy、matplotlib、scipy(自行百度)4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

代码编写:

多项式拟合

1.创建文件mult.py

import numpy as np      # 导入模块

from sys import argv

import matplotlib.pyplot as plt

script,x_data,y_data,order = argv    # 参数变量

x_data = x_data.split(",")        # 将字符串拆分成字符列表

x_data = [float(i) for i in x_data] # 将字符列表转换为数字列表

y_data = y_data.split(",")

y_data = [float(i) for i in y_data]

x = np.array(x_data)

print("x is: \n",x)

y = np.array(y_data)

print("y is:\n",y)

f1 = np.polyfit(x,y,int(order))    #  获取拟合函数的系数

print("f1 is:\n",f1)

p1 = np.poly1d(f1)

print("p1 is:\n",p1)

yvals = p1(x)

print('yvals is:\n',yvals)

plot1 = plt.plot(x,y,'s',label = 'original values')

plot2 = plt.plot(x,yvals,'r',label = 'polyfit values')

plt.xlabel('x')

plt.ylabel('y')

plt.legend(loc=4)

plt.title('polyfitting')

plt.show()

2.进行测试:

在文件所在文件夹shift+鼠标右键打开Powershellc75146f37c558a172cb8070c98a2dcbbaeca02cb.pngShift+鼠标右键

在Powershell中输入程序执行命令05169db74c8c7572d88b4ac57abc8d073a4a7134.png两个点1阶多项式拟合

进行二阶拟合cdd98cb22445ab77f82fae76bfd31bb183911845.png10个点 2阶拟合

进行八阶拟合a0cad23dee2c4d6eaff3f65a8181aa9e193a35c4.png8个点 8阶拟合

指定函数拟合

1.创建fxgiven.py:

import matplotlib.pyplot as plt

import numpy as np

from scipy.optimize import curve_fit    # 导入拟合函数

from sys import argv

script,x_data,y_data = argv   # 参数变量

x_data = x_data.split(",")        # 将字符串拆分成字符列表

x_data = [float(i) for i in x_data] # 将字符列表转换为数字列表

y_data = y_data.split(",")

y_data = [float(i) for i in y_data]

x = np.array(x_data)

y = np.array(y_data)

def fx(x,a,b):

return a*np.exp(b/x)

popt, pcov = curve_fit(fx, x, y)  # pcov 估计的popt的协方差

print(popt)                  # popt满足函数参数最佳值

yvals=fx(x,popt[0] ,popt[1]) # 求出拟合后对应点

print(yvals)

p1=plt.plot(x, y, '*',label='original values')

p2=plt.plot(x, yvals, 'r',label='curve_fit values')

plt.xlabel('x axis')

plt.ylabel('y axis')

plt.legend(loc=4)               # 指定legend的位置,读者可以自己help它的用法

plt.title('curve_fit')

plt.savefig('p2.png')

plt.show()

2.进行测试:

在Powershell中输入程序执行命令1f5aa66f6f9b5557468b02fb23105777450d0f3a.png6个点拟合y=a*exp(b/x)

4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

专栏文章仅作个人学习记录,如有错误,欢迎批评指正。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值