Function 为Python中的函数定义的数组中的每个元素求解定积分
我正在尝试集成数组的值。函数中使用的数组为“H”,积分的积分极限为“surf”和“base”。这些值是从.txt文件中读取的。”def flow_pramB(z)'定义要集成的函数,'def被积函数(a,b)'执行积分。然后我想调用函数“integrand”来生成一个新的已集成的单个值数组Function 为Python中的函数定义的数组中的每个元素求解定积分,function,for-loop,numpy,scipy,integrate,Function,For Loop,Numpy,Scipy,Integrate,我正在尝试集成数组的值。函数中使用的数组为“H”,积分的积分极限为“surf”和“base”。这些值是从.txt文件中读取的。”def flow_pramB(z)'定义要集成的函数,'def被积函数(a,b)'执行积分。然后我想调用函数“integrand”来生成一个新的已集成的单个值数组 import numpy as np from scipy import integrate datafile = np.genfromtxt(" filename/flow_line_num9.txt",
import numpy as np
from scipy import integrate
datafile = np.genfromtxt(" filename/flow_line_num9.txt",delimiter='\t',skiprows=1, dtype=float)
#The first four parameters are all arrays of numbers
ptID = datafile[:,0]
surf = datafile[:,9] #m
base = datafile[:,10] #m
H = surf - base #m
Bo = 2.207 #Pa yr^1/3
Ct = .16612 #K^k
Tr = 273.39 #K
k = 1.17
Ts = -19.0 #celsius
Tb = -2.0 #celsius
@np.vectorize
def integrand(a,b):
def flow_pramB(z):
temp = []
for i in range(0,len(ptID)):
tempA = ((Ts-Tb)*pow((z/H[i]),.333333))+Tb
temp.append(tempA)
B = []
for i in range(0,len(ptID)):
Bpram = (Bo*np.exp((3155/temp[i]) - (Ct/(pow((Tr-temp[i]),k)))))
B.append(Bpram)
return B
return integrate.quad(flow_pramB, a, b)
B = integrand(surf, base)
这段代码只是许多尝试使其工作的一个例子。一个解决方案或只是让我知道,我需要尝试其他模块,使这项工作将不胜感激 功能
flow\u pramB
定义不正确。它应该接受一个float并返回一个float,而不是像现在这样的列表。例如,这里有一种可能的方法(注意我们使用numpy数组而不是For循环)
这会运行,但会产生一些nan
和警告,因为flow\u param
不会产生正确的结果(因为我不确定它应该产生什么)。但这给了你一个想法,如何让它工作
flow_paramB
是否接受浮点并返回正确的浮点结果integrate.quad(flow_paramB,a_float,b_float)
是否运行并生成正确的结果np.vecorize
decorator包装它李>
函数
flow\u pramB
的定义不正确。它应该接受一个float并返回一个float,而不是像现在这样的列表。例如,这里有一种可能的方法(注意我们使用numpy数组而不是For循环)
这会运行,但会产生一些nan
和警告,因为flow\u param
不会产生正确的结果(因为我不确定它应该产生什么)。但这给了你一个想法,如何让它工作
flow_paramB
是否接受浮点并返回正确的浮点结果integrate.quad(flow_paramB,a_float,b_float)
是否运行并生成正确的结果np.vecorize
decorator包装它李>
那么这个代码有什么问题?正在工作/不工作、太慢等?你也可以提供一个链接到
flow\u line\u num9.txt
,否则很难知道发生了什么。代码看起来不错,您只需要将flow\u pramB
矢量化一点,就可以使用numpy数组而不是循环(如果可能的话),否则在被quad
调用时速度会非常慢。这是指向“flow\u line\u num9.txt”的链接,如果不起作用,请告诉我。这个程序不起作用。当我调用“被积函数”时,它似乎在最后一个循环中失败了。当我尝试运行它时,我得到一条错误消息“error:Supplied function不返回有效的float”,那么这段代码有什么问题?正在工作/不工作、太慢等?你也可以提供一个链接到flow\u line\u num9.txt
,否则很难知道发生了什么。代码看起来不错,您只需要将flow\u pramB
矢量化一点,就可以使用numpy数组而不是循环(如果可能的话),否则在被quad
调用时速度会非常慢。这是指向“flow\u line\u num9.txt”的链接,如果不起作用,请告诉我。这个程序不起作用。当我调用“被积函数”时,它似乎在最后一个循环中失败了。当我尝试运行它时,我得到一条错误消息“error:Supplied function不返回有效的float”,那么这段代码有什么问题?正在工作/不工作、太慢等?你也可以提供一个链接到flow\u line\u num9.txt
,否则很难知道发生了什么。代码看起来不错,您只需要将flow\u pramB
矢量化一点,就可以使用numpy数组而不是循环(如果可能的话),否则在被quad
调用时速度会非常慢。这是指向“flow\u line\u num9.txt”的链接,如果不起作用,请告诉我。这个程序不起作用。当我调用“被积函数”时,它似乎在最后一个循环中失败了。当我尝试运行它时,我收到一条错误消息“error:Supplied function not return a valid float”(错误:提供的函数不返回有效的浮点值),为您的帮助干杯!现在看起来flow_pramB只返回一个值,我这样想对吗?如果是这样,是否可以让函数(flow_pramB)创建一个包含一个未定义变量的数学函数数组,然后数组中的每个元素都将单独集成?为您的帮助干杯!现在看起来flow_pramB只返回一个值,我这样想对吗?如果是这样,是否可以让函数(flow_pramB)创建一个包含一个未定义变量的数学函数数组,然后数组中的每个元素都将单独集成?为您的帮助干杯!现在看起来flow_pramB只返回一个值,我这样想对吗?如果是这样,是否可以让函数(flow_pramB)创建一个包含一个未定义变量的数学函数数组,其中数组的每个元素将分别集成?
def flow_pramB(z):
temp = ((Ts-Tb)*pow((z/H[:]),.333333))+Tb
B = (Bo*np.exp((3155/temp[:]) - (Ct/(pow((Tr-temp[:]),k)))))
return B.sum() # suming all the elements of B (probably not the right thing to do)
@np.vectorize
def integrand(a,b):
return integrate.quad(flow_pramB, a, b)
B = integrand(surf, base)