当我尝试在 mpmath 函数中使用 numpy 数组时出现错误,此示例在到达以下行时失败:
C = (f*L/D) + 2*mp.log(P1/P2)
Run Code Online (Sandbox Code Playgroud)
其中 P1 是一个数组。出现错误:
cannot create mpf from array([**P1_array**])
Run Code Online (Sandbox Code Playgroud)
我知道这个和这个步骤是相关的。但我无法让我的代码工作。有人可以帮我纠正这个错误吗?
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 …Run Code Online (Sandbox Code Playgroud) 我有一个与多项式表达式对应的系数列表,即:[1,2,0]对应于x^2 + 2x + 0.我想将这些系数的任意长度数组放入lambda函数中.
具体来说,我使用的是mpmath,我有一个用于polyval模块的列表:
polyval(ctx, coeffs, x, derivative=False)
Run Code Online (Sandbox Code Playgroud)
给定系数和数字,polyval()评估多项式.
我需要使用 带有一维函数的findroot模块,即:
findroot(lambda x: x**3 + 2*x + 1, 2)
Run Code Online (Sandbox Code Playgroud)
如何从系数列表中构造lambda函数?
我有一个numpy数组A,其mpf元素具有十进制精度100.如果我决定采用A的numpy dot产品,这个精度是否会被抛弃?
如果是这种情况,有没有办法将numpy数组转换为mpmath矩阵,所以我可以保持精度?
我知道
import mpmath as mp
print mp.libmp.BACKEND
Run Code Online (Sandbox Code Playgroud)
但如果我没弄错的话,我不会说我是用gmpy还是gmpy2.
另外,我每次你使用更新版本的东西时都不会得到它旁边的版本号,但是因为我可以import gmpy而且gmpy2分别让我有点担心我可能会使用旧版本的gmpy.
谢谢
更新:
我也试过以下让我困惑/担心的事情.
import mpmath as mp
import gmpy as gm
import gmpy2 as gm2
print mp.mpf('1') == gm.mpf('1')
# Result is FALSE
print mp.mpf('1') == gm2.mpfr('1')
# Result is FALSE
print gm.mpf('1') == gm2.mpfr('1')
# Result is FALSE
print mp.mpf('1') == 1
# Result is TRUE
print gm.mpf('1') == 1
# Result is TRUE
print gm2.mpfr('1') == 1
# Result is TRUE
Run Code Online (Sandbox Code Playgroud)
有没有搞错?
我有4个输入变量(浮点数):
我想为s解决以下(相当长的)等式:
> (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage == 0
Run Code Online (Sandbox Code Playgroud)
我想用mpmath和sympy来解决这个等式,但它给了我以下错误信息:
TypeError:无法从0.707106781186547*( - s**2 - 0.287682072451781)/ s创建mpf
我的代码如下:
from mpmath import erf, log, sqrt
from sympy import Symbol, solveset, S
percentage = 0.95
mode = 2
Xmin = 1.
Xmax = 1.5
s = Symbol('s')
eqn = (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage)
solveset(eqn, s, domain=S.Reals)
Run Code Online (Sandbox Code Playgroud)
mpf是mpmath创建的float类型.
我想我把问题缩小到erf()函数,它返回
EmptySet()
Run Code Online (Sandbox Code Playgroud)
当我跑
solveset(log(Xmax) - (log(mode) + s ** 2), s, domain=S.Reals)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚下一步该尝试什么,任何帮助将不胜感激!
我最初认为这是数学问题,但是方程式在matlab中成功解决,所以问题可能来自于sympy或者mpmath.
我试图使用来自 的 Jacobi 椭圆函数mpmath,但得到下面给出的简单代码的错误:
import numpy as np
import scipy.integrate as spi
from scipy import special as sp
import matplotlib.pyplot as plt
from math import sqrt, pow, log
from mpmath import ellipfun
sn = ellipfun('sn')
y=sn(0.5,-1)
print y
y1=y.real
print y1, np.arcsin(y), np.arcsin(y1)
Run Code Online (Sandbox Code Playgroud)
即使我只传递函数的实部,我也会收到错误消息sn(0.5,-1)。我不知道我是不是弄错了。请帮忙。提前致谢。