【发布时间】:2019-12-09 03:35:28
【问题描述】:
我收到标题中所述的错误。完全错误:
MaxD = Cone*np.sqrt(SymsX/np.pi)*np.exp((-SymsX/(k*T))) #Define Maxwellian distribution function
AttributeError: 'Mul' object has no attribute 'sqrt'
代码如下:
from sympy.interactive import printing
printing.init_printing(use_latex = True)
import numpy as np
from sympy import Eq, dsolve, Function, Symbol, symbols
import sympy as sp
EpNaut = 8.854187E-12
u0 = 1.256E-6
k = 1/(4*np.pi*EpNaut)
NumGen = 1000 #How many solution points user wants to generate between 0 and maxen (Higher # the more accurate)
T = 1000 #Temperature in (K)
MaxEn = 7*T*k #Max energy in system
Cone = 2/((k*T)**(3/2)) #Constant infront of the Maxwellian distribution function
SymsX = sp.Symbol('SymsX')
MaxD = Function('MaxD')
PFunction = Function('PFunction')
MaxD = Cone*np.sqrt(SymsX/np.pi)*np.exp((-SymsX/(k*T))) #Define Maxwellian distribution function
PFunction = sp.integrate(MaxD) #Integrate function to get probability-error function
print(PFunction)
我还有一个问题。我有时会看到使用“from ... import ...”的示例。为什么是这样?不应该只导入整个库就足够了吗?是不是因为使用 import 命令实际上并没有导入整个库,而只是导入了最基本的函数?
【问题讨论】:
-
我添加了一些相关的标签。问题源于在
numpy函数中使用sympy对象。初学者不应该尝试混合sympy和numpy;这不是一项微不足道的任务。我可以解释为什么它在这种情况下会产生错误,但现在说起来更简单 - 不要这样做! -
(at)Hung Nguyen 在发布我的帖子之前我已经看过那个帖子,我可以看到它在那个例子中是如何工作的,但我不认为它是一个通用的解决方案,因为.. . @hpaulj 如果我希望使用仅在某些库中的运算符/常量怎么办?在某些时候,我需要在相同的定义中混合使用库。示例: sqrt() 运算符仅存在于 np 和 math 库中,定义函数和符号只能由 sp 库中的函数处理。
-
sympy可以做sqrt,以及所有的超验。 -
@hpaulj 好吧,我无法在文档中找到它们。我会仔细看看。我认为至少只要定义本身不使用正确的两个库,仍然可以为同一个脚本导入多个库?因为在某些时候,我希望在同一个脚本中同时使用符号数学(使用 sympy)和数值积分(使用 numpy),因为这两件事都没有。