【问题标题】:How to avoid sym.symbols all the time如何一直避免使用 sym.symbols
【发布时间】:2021-09-08 23:07:43
【问题描述】:

我正在尝试使用 python Symp 的符号库。我收到很多错误。如何克服这一点。每次我不想输入 sym.symobls 来定义新事物时。

from sympy import *
from math  import *

W1, W2, W3,z1, z2, b, a,g,l = symbols('W1  W2  W3 z1 z2  b a g l')


l = b**2(g/sqrt(a));

#Beam Functions
W1 = simplify(c1*cos(b*x) + c2*sin(b*x) + c3*cosh(b*x) + c4*sinh(b*x));

【问题讨论】:

  • 使用import * 被认为是错误的形式;在同一个文件中多次使用它绝对是一场灾难。在您的情况下,您正在用math 中的那些(仅适用于具体数字)覆盖来自sympy 的三角函数(那些实际上与您定义的符号一起工作的函数) .此外,在b**2(g/sqrt(a)) 中,您尝试调用2,就好像它是一个函数一样——那里可能缺少*
  • 好的,怎么写。你能推荐点什么吗
  • 如果你正在使用 sympy,我建议永远不要导入math(至少在这个阶段),如果你不想写sym.symbols,我也建议from sympy import symbols
  • @jasonharper,isympy 脚本确实使用了from sympy import *,但没有使用任何其他*。我习惯于将numpy 导入为np,但是对于专用的sympy 会话,这个* 导入似乎不是问题。我同意导入math 是不必要的。如果需要,sympy 使用 mpmath 进行数值计算。

标签: python python-3.x sympy symbols


【解决方案1】:

表达式l = b**2(g/sqrt(a)) 无效。你需要例如2 和左括号之间的 *。另请注意,赋值后,l 不再是符号,而是符号表达式。

您可以使用sympify() 避免声明许多变量。该函数获取一个字符串作为输入并动态创建符号变量。通过sympify,许多标准函数也得到了正确的符号版本。

正如 cmets 中所述,from sympy import * 可能会出现问题,尤其是在您还使用其他库的情况下。为方便起见,文档中的许多示例确实使用了import *,但仅适用于不使用其他库的短程序。

这是一个简单的独立示例,它将符号表达式分配给 l 并显示内部表示(注意表达式被放在引号中):

from sympy import sympify, srepr
l = sympify("b**2*(g/sqrt(a))")
print(srepr(l))
W1 = sympify("simplify(c1*cos(b*x) + c2*sin(b*x) + c3*cosh(b*x) + c4*sinh(b*x))")
print(srepr(W1))

输出:

Mul(Pow(Symbol('a'), Rational(-1, 2)), Pow(Symbol('b'), Integer(2)), Symbol('g'))

Add(Mul(Symbol('c1'), cos(Mul(Symbol('b'), Symbol('x')))), Mul(Symbol('c2'), sin(Mul(Symbol('b'), Symbol('x')))), Mul(Symbol('c3'), cosh(Mul(Symbol('b'), Symbol('x')))), Mul(Symbol('c4'), sinh(Mul(Symbol('b'), Symbol('x')))))

【讨论】:

  • 您的问题现在得到解答了吗?还是还开着?
【解决方案2】:

通常,例程允许输入字符串,因此您可以只引用通过sympify使用字符串表达式自动创建的变量:

>>> from sympy import S
>>> S('x')
x
>>> _.subs('x',42)
42
>>> S('2*x').coeff('x')
2

如果您所做的只是使用单字母符号和 SymPy 函数(而不是其他库),那么您可以(这就是我开始会话的方式):

>>> from sympy.abc import *
>>> from sympy import *

我把第二个导入放在那里,所以我得到S 作为sympify 的快捷方式,而不是符号S

【讨论】:

    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2017-07-09
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多