如何在mpmath函数中评估numpy数组?

4

当我试图在mpmath函数中使用numpy数组时,出现了错误,当代码执行到以下代码行时,程序出现错误:

C = (f*L/D) + 2*mp.log(P1/P2)

P1是一个数组。 出现了以下错误:

cannot create mpf from array([**P1_array**])

我了解与此相关的这篇文章这篇文章,但是我的代码无法正常工作。有人能帮我纠正错误吗?

import numpy as np
import mpmath as mp

mp.mp.dps = 20

# State equation --> pV = nZRT

P1 = np.linspace(101325,10*101325,100)
P2 = 101325
T  = 300
D = 0.0095
A = mp.power(D,2)*mp.pi/4
L = 300
R = 8.31446
f = 0.05
Z1 = 0.9992
Z2 = 0.9999
Zm = 0.5*(Z1+Z2)

C = (f*L/D) + 2*mp.log(P1/P2)
w2 = (mp.power(P1,2)-mp.power(P2,2))*mp.power(A,2)/(Zm*R*T*C)
w = mp.power(w2,0.5)
1个回答

6

您需要使用np.frompyfunc将您想要的函数(这里是log和power)广播到您的numpy数组上:

import numpy as np
import mpmath as mp

mp.mp.dps = 20

# State equation --> pV = nZRT

P1 = np.linspace(101325,10*101325,100)
P2 = 101325
T  = 300
D = 0.0095
A = mp.power(D,2)*mp.pi/4
L = 300
R = 8.31446
f = 0.05
Z1 = 0.9992
Z2 = 0.9999
Zm = 0.5*(Z1+Z2)

log_array = np.frompyfunc(mp.log, 1, 1) #to evaluate mpmath log function on a numpy array
pow_array = np.frompyfunc(mp.power, 2, 1) #to evaluate mpmath power function on a numpy array

C = (f*L/D) + 2*log_array(P1/P2)
w2 = (pow_array(P1,2)-pow_array(P2,2))*pow_array(A,2)/(Zm*R*T*C)
w = pow_array(w2,0.5)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接