python - 如何替换 SymPy 对象中的值?
问题描述
我有一个要解决的线性系统SymPy
,我将增强矩阵编写为 SymPy 对象。
a, b, c = sy.symbols('a, b, c', real = True)
A = sy.Matrix([[1, 2, -3, a], [4, -1, 8, b], [2, -6, -4, c]])
A
我明白了
现在我进行行缩减梯队形式,我对红框中的表达感兴趣:
A_rref = A.rref()
A_rref
我尝试使用a = sy.Interger(3), b = sy.Interger(6),c = sy.Interger(7)
,但是如何替换这些值来评估红框中的表达式?
我还检查了红色框中的表达式类型。这是一个什么样的物体?
In[13]: type(A_rref[0][0,3])
Out[13]: sympy.core.add.Add
解决方案
要替换值,您可以使用subs
将每个变量映射到其值的字典。
请注意,仅在使用常量的分数sy.Integer(1)
时才需要使用或类似的表达式,以避免 Python 在 sympy 掌握它之前将这些分数转换为浮点数。
import sympy as sy
a, b, c = sy.symbols('a, b, c', real = True)
A = sy.Matrix([[1, 2, -3, a], [4, -1, 8, b], [2, -6, -4, c]])
A_rref = A.rref()
print(A_rref[0].subs({a: 3, b: 6, c: 7}))
输出:
Matrix([[1, 0, 0, 31/14],
[0, 1, 0, -16/91],
[0, 0, 1, -69/182]])
要了解 sympy 表达式是如何构建的,srepr
可以派上用场:
print(sy.srepr(A_rref[0][0,3]))
这使:
Add(Mul(Rational(2, 7), Symbol('a', real=True)), Mul(Rational(1, 7), Symbol('b', real=True)), Mul(Rational(1, 14), Symbol('c', real=True)))
因此,表达式是子表达式的树。在最高级别,有一个总和,所以这就是打印type
. 这篇文章包含一些将表达式树绘制为文本图的代码:
+---> symbol Rational(1, 7)
|
+---> symbol Symbol('b', real=True)
|
+---+ function <class 'sympy.core.mul.Mul'> had 2 arguments
|
| +---> symbol Rational(1, 14)
| |
| +---> symbol Symbol('c', real=True)
| |
+---+ function <class 'sympy.core.mul.Mul'> had 2 arguments
|
| +---> symbol Rational(2, 7)
| |
| +---> symbol Symbol('a', real=True)
| |
+---+ function <class 'sympy.core.mul.Mul'> had 2 arguments
|
+ function <class 'sympy.core.add.Add'> had 3 arguments
推荐阅读
- javascript - 如何显示 sweetalert denied 消息?
- sql - 如何计算一个位置的属性并显示所有属性列表
- asp.net-mvc - Web API - 如何发布包含文件的对象
- javascript - 如果一个函数返回一个对象,它就不能在 JS 中充当构造函数。我的假设是否正确
- azure - 无法为分支策略选择正确的版本
- angular - 如何强制两个 observable 以我想要的角度顺序执行?
- c++ - C ++设置“空白”或重置ifstrean(ios)的异常掩码
- javascript - TextEncoder 和 TextDecoder 互为反?
- amazon-sagemaker - 使用 java sdk 连接 sagemaker
- mysql - 问题在 phpMyadmin 上为自动增量创建跳跳虎