在函数中使用数组

2024-04-24 00:46:42 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行代码时,收到错误“不支持**或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)

我必须使函数适合放射性衰变数据,所以告诉我,如果我也弄乱了代码,使函数适合它。谢谢你的帮助!你知道吗


Tags: 代码fromimportnumpytxtasnpscipy
1条回答
网友
1楼 · 发布于 2024-04-24 00:46:42

numpy.exp是指数函数,**是幂运算符,因此您试图将函数定义提升到幂(-(t/tao))。我想你想

def Radio(n,t,tao,b):
    return (n*(exp(-(t/tao)))) + b

关于优化函数的使用,有几个问题。首先,您使用n作为参数(在Radio方法中)和因变量数据(来自问题语句),这会使事情变得混乱。我会把它改成a(就像在the curve_fit doc中使用的那样)。这不是真的必要,但有助于可读性。你知道吗

其次,更重要的是,要拟合的函数必须有自变量(在本例中是t)作为第一个参数。我认为导致平面拟合的原因是,实际拟合的是曲线n->Radio(n)(将所有其他变量作为参数),而不是t->Radio(t)。你知道吗

相关问题 更多 >