Sympy学习日记
🍗在sympy库中,符号、未知数等都需要提前定义,使用symbols
:x = symbols('x')
像这样:
Symbols接受由空格或逗号分隔的变量名字符串:x, y, z = symbols('x y z')
Symbol的名称和它所赋值的变量的名称之间不需要有任何关系~
🐽前置知识:
- 单词“Symbol”指的是SymPy符号,单词“variable”指的是Python变量。
- 所有的Python程序都是这样工作的:如果一个变量被改变了,已经用这个变量创建的表达式不会自动改变。
>> x = 'abc'
>> expr = x + 'def'
>> expr
abcdef
>> x = 'ABC'
>> expr
abcdef
🚙易混辨析:
>> x = symbols('x')
>> expr = x + 1
>> x = 2
>> print(expr)
x + 1
💎计算表达式的值:
用sub
(substitute:替代,指的是用数值替代变量符号):
>> x = symbols('x')
>> expr = x + 1
>> expr.subs(x, 2)
3
🟩关于等于号
在SymPy中,==表示精确的结构相等性测试。
有一个单独的对象叫做Eq,它可以用来创建符号等式
Eq(x + 1, 4)
事实证明,当使用SymPy作为库时,使用==测试来表示精确的结构相等比使用它表示符号相等或使用它来测试数学相等要有用得多。
为了检验两个事物是否相等:
如果a = b
,则a - b = 0
。因此,最好的检查方法是取a - b
化简一下,看它是否趋于0。
可以使用simplify
:绝大多数情况正确
>> a = (x + 1)**2
>> b = x**2 + 2*x + 1
>> simplify(a - b)
0
>> c = x**2 - 2*x + 1
>> simplify(a - c)
4*x
也可以使用equals
:在随机点对进行数值计算。
>> a = cos(x)**2 - sin(x)**2
>> b = cos(2*x)
>> a.equals(b)
True
1.13更新——————————————————————————————
🐤关于用sympy求雅克比矩阵:
import sympy
a,b,x,y = sympy.symbols("a b x y")
a = 2*x**3-y**2-1
b = x*y**3-y-4
funcs = sympy.Matrix([a,b])
args = sympy.Matrix([x,y])
res = funcs.jacobian(args)
>>> res
Matrix([
[6*x**2, -2*y],
[ y**3, 3*x*y**2 - 1]])