gpt4 book ai didi

python - 函数类型 : y =10^((a-x)/10*b) 的曲线拟合

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:57 29 4
gpt4 key购买 nike

下面是根据传感器(x 列)的值计算出的距离(y 列)。

test.txt - 内容

x   y   
----------


-51.61 ,1.5
-51.61 ,1.5
-51.7 ,1.53
-51.91 ,1.55
-52.28 ,1.62
-52.35 ,1.63
-52.49 ,1.66
-52.78 ,1.71
-52.84 ,1.73
-52.90 ,1.74
-53.21 ,1.8
-53.43 ,1.85
-53.55 ,1.87
-53.71 ,1.91
-53.99 ,1.97
-54.13 ,2
-54.26 ,2.03
-54.37 ,2.06
-54.46 ,2.08
-54.59 ,2.11
-54.89 ,2.19
-54.94 ,2.2
-55.05 ,2.23
-55.11 ,2.24
-55.17 ,2.26

我想根据这个函数进行曲线拟合,为 test.txt 中的数据找到常量 ab:

Function y = 10^((a-x)/10*b) 

我使用以下代码:

import math

from numpy import genfromtxt
from scipy.optimize import curve_fit

inData = genfromtxt('test.txt',delimiter=',')

rssi_data = inData[:,0]
dist_data= inData[:,1]

print rssi_data
print dist_data

def func(x, a,b):
exp_val = (x-a)/(10.0*b)
return math.pow(10,exp_val)

coeffs, matcov = curve_fit(func,rssi_data,dist_data)

print(coeffs)
print(matcov)

代码没有成功执行。此外,我不确定是否将正确的参数传递给 curve_fit()

最佳答案

该函数需要处理 numpy 数组,但目前不能,因为 math.pow 需要一个标量值。如果我执行你的代码,我会得到这个异常:

TypeError: only length-1 arrays can be converted to Python scalars

如果您将函数更改为:

def func(x, a, b):
return 10 ** ((a - x) / (10 * b)) # ** is the power operator

它应该毫无异常(exception)地工作:

>>> print(coeffs)
[-48.07485338 2.00667587]
>>> print(matcov)
[[ 3.59154631e-04 1.21357926e-04]
[ 1.21357926e-04 4.25732516e-05]]

完整代码如下:

def func(x, a, b):
return 10 ** ((a - x) / (10 * b))

coeffs, matcov = curve_fit(func, rssi_data, dist_data)

# And some plotting for visualization

import matplotlib.pyplot as plt
%matplotlib notebook # only works in IPython notebooks

plt.figure()
plt.scatter(rssi_data, dist_data, label='measured')
x = np.linspace(rssi_data.min(), rssi_data.max(), 1000)
plt.plot(x, func(x, coeffs[0], coeffs[1]), label='fitted')
plt.legend()

enter image description here

关于python - 函数类型 : y =10^((a-x)/10*b) 的曲线拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43768466/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com