在Eq(lhs,rhs)中,我们可以实例化一个方程。然而,我真的真的很好奇它的行为,并想问一下这个方程类型是如何使用的!
我问这个问题的原因是,在Maple中,一个人使用公式(lhs == rhs)作为标准工具。但是,我在x= y+z中看到了许多使用python的脚本,其中x是python变量,因此是代码,只有表达式y+z是实际的数学表达式。这会对以下示例产生影响:
MWE:
t = S('t')
f = Function('f')(t)
g = Function('g')(t)
equation = Eq(f,g+1)
equation2 = equation-1
equation3 = equation.diff(t)
equation4 = equation.subs(equation) # this I can do with subs(*equation.args)以上所有结果都产生了意想不到的结果:第一个结果是括号中的方程式是- 1,这真的很奇怪。这种区别只作用于lhs,这是非常误导imho的。替换会产生一个错误,只有注释行可以工作。最后一个对我来说是可以的,因为我知道我可以让它工作。但是,除了手动完成所有工作之外,是否还有其他更有用的符号用于1和2,例如:
eq2 = Eq( equation.lhs.difft(t), equation.rhs.diff(t) )相比之下,Maple可以在数学意义上替换、推导和添加方程(双方都需要解决)。
我很高兴有任何关于如何在渐变中“正确”工作的意见。目前看来,使用rhs-expressions似乎只是一种方式,而Eq只是一个“辅助项目”。感谢你在这篇文章中的每一次投入!
发布于 2019-04-30 00:24:06
在isympy会话中:
In [3]: t = S('t')
...: f = Function('f')(t)
...: g = Function('g')(t)
In [4]: equation = Eq(f, g+1)
In [5]: equation
Out[5]: f(t) = g(t) + 1type(equation)为sympy.core.relational.Equality。
Out[5]中的=与In[4]行中的python =无关。
In [6]: equation2 = equation-1
In [7]: equation2
Out[7]: -1 + (f(t) = g(t) + 1)这里的type是不同的:sympy.core.add.Add
In [8]: equation3 = equation.diff(t)
In [9]: equation3
Out[9]:
d
──(f(t) = g(t) + 1)
dt 这是一个sympy.core.function.Derivative。它看起来像是一个未计算的派生函数,应用于整个equation对象。
subs表达式中的错误只是对subs的误用。为什么要尝试使用equation作为该方法的参数?
In [10]: equation4 = equation.subs(equation)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-b6a4334b7078> in <module>
----> 1 equation4 = equation.subs(equation)
/usr/local/lib/python3.6/dist-packages/sympy/core/basic.py in subs(self, *args, **kwargs)
865 When a single argument is passed to subs
866 it should be a dictionary of old: new pairs or an iterable
--> 867 of (old, new) tuples."""))
868 elif len(args) == 2:
869 sequence = [args]
ValueError:
When a single argument is passed to subs it should be a dictionary of
old: new pairs or an iterable of (old, new) tuples.正确使用subs
In [15]: equation4 = equation.subs([(t,t*2)])
In [16]: equation4
Out[16]: f(2⋅t) = g(2⋅t) + 1====
Eq参考
https://docs.sympy.org/latest/modules/core.html?highlight=eq#sympy.core.relational.Equality
我仍在研究sympy文档,但在我看来,Eq不像是从通常的代数意义上创建equation的。它更像是两个对象之间的测试,计算结果为True或False,或者保持未计算。
通过用g替换f,我们得到了可以计算的关系:
In [26]: equation.subs([(f,g)]) # or subs(f,g)
Out[26]: Falseequation2和equation3中相同的subs会产生一个错误(不能将数字和False相加)或False的派生结果。也就是说,替换是在equation部分完成的,计算结果为False,表达式的重置执行(或不执行)。
您对*equation.args的使用符合以下模式:
In [43]: equation.args
Out[43]: (f(t), g(t) + 1)
In [44]: equation.subs(*equation.args)
Out[44]: True===
https://docs.sympy.org/latest/gotchas.html建议Eq(x,y)的替代方案是x-y
In [31]: eq1 = f - (g+1)
In [32]: eq1-1
Out[32]: f(t) - g(t) - 2
In [33]: eq1.diff(t)
Out[33]:
d d
──(f(t)) - ──(g(t))
dt dt
In [41]: equation.subs([(f,g)])
Out[41]: False
In [42]: equation.subs([(f,g+1)])
Out[42]: Truehttps://stackoverflow.com/questions/55900497
复制相似问题