【发布时间】:2015-06-09 19:46:55
【问题描述】:
我正在尝试整合数组的值。函数中使用的数组是“H”,积分的积分限制是“surf”和“base”。这些值是从 .txt 文件中读取的。 'def flow_pramB(z)' 定义要积分的函数,'def integrand(a,b)' 执行积分。然后我想调用函数“integrand”来生成一个新的已集成的单个值数组。
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_line_num9.txt的链接,否则很难判断发生了什么。代码看起来不错,您只需对flow_pramB进行一点矢量化以使用numpy 数组而不是循环(如果可能的话),否则当quad调用时这将非常慢。 -
这是指向“flow_line_num9.txt”的链接drive.google.com/file/d/0B2L-Ia8P-GX6U1p2VTJCS0x3QTQ/…如果它不起作用请告诉我。该程序不起作用。当我调用“被积分”时,它似乎在最后一个循环中失败了。当我尝试运行它时,我收到一条错误消息“错误:提供的函数没有返回有效的浮点数”
标签: function for-loop numpy scipy integrate