当我运行代码时,收到错误“不支持**或pow()的操作数类型::”数字.ufunc'和'float''
代码是:
import numpy as np
import matplotlib.pyplot as plt
from numpy import sqrt,exp,log
from scipy import linalg
from scipy.optimize import curve_fit
data1 = np.loadtxt('decay1.txt', float,skiprows=1)
t = data1[:,0]
n = data1[:,1]
data2 = np.loadtxt('decay2.txt', float,skiprows=1)
T = data2[:,0]
N = data2[:,1]
def Radio(n,t,tao,b):
return (n*(exp**(-(t/tao)))) + b
guesses = (1,1,1)
guesses2 = (1,1,1)
(p0,p1,p2),cc = curve_fit(Radio,t,n,guesses)
(p02,p12,p22),cc2 = curve_fit(Radio,T,N,guesses2)
yfit = Radio(t,p0,p1,p2)
y2fit = Radio(T,p02,p12,p22)
我必须使函数适合放射性衰变数据,所以告诉我,如果我也弄乱了代码,使函数适合它。谢谢你的帮助!你知道吗
numpy.exp
是指数函数,**
是幂运算符,因此您试图将函数定义提升到幂(-(t/tao))
。我想你想关于优化函数的使用,有几个问题。首先,您使用
n
作为参数(在Radio
方法中)和因变量数据(来自问题语句),这会使事情变得混乱。我会把它改成a
(就像在the curve_fit doc中使用的那样)。这不是真的必要,但有助于可读性。你知道吗其次,更重要的是,要拟合的函数必须有自变量(在本例中是
t
)作为第一个参数。我认为导致平面拟合的原因是,实际拟合的是曲线n->Radio(n)
(将所有其他变量作为参数),而不是t->Radio(t)
。你知道吗相关问题 更多 >
编程相关推荐