python调用curve_fit拟合,函数参量可变(第一个传参是变量)

python拟合


菜鸟的笔记
函数curve_fit(f, x, y)

from scipy.optimize import curve_fit

def power_func(x, a, b):
	return x**a + b
popt, pcov = curve_fit(power_func, x, y)
print(*popt)
yvals = [power_func(i, *popt) for i in x]

参考此文
power_func 是用户自定义的拟合的函数形式(例子中是指数函数)
popt是返回的最优化的函数系数(a,b的值)
yvals是拟合后的值
x,y是原始数据
接下来我想通过自定义不同的func传入curve_fit来实现多种拟合形式。一开始尝试增加一个参数choice(通过控制choice取值“power”、“expotential”等等来实现传不同的参数)

import numpy as np
from scipy.optimize import curve_fit
def fitting(x, y, choice):
	def power(x, a, b):
		return x**a + b
	def expotential(x, a, b, c):
		return a * np.exp(-b * x) + c
	popt, pcov = curve_fit(choice, x, y)
	print(*popt)
	yvals = [choice(i, *popt) for i in x]

但是choice传入的时候只能以字符串形式,而curve_fit需要的参数是函数。突然想到if这个万能工具。

import numpy as np
from scipy.optimize import curve_fit
def fitting(x, y, choice):
	def power(x, a, b):
		return x**a + b
	def expotential(x, a, b, c):
		return a * np.exp(-b * x) + c
	if choice=='power':
		func = power
	elif choice=='expotential':
		func = expotential
	popt, pcov = curve_fit(func, x, y)
	print(*popt)
	yvals = [func(i, *popt) for i in x]

其实很简单的思路有时候就是想不到。。。
顺便提一句,自定义的power、expotential函数不能写到fitting函数外边,会报错,不知道有没有什么别的好方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值