如何提取SymPy平面方程的单独系数?
问题:如何单独提取Sympy平面方程的系数?
现有代码:
from sympy import Point3D, Plane p1 = Plane(Point3D(0, 0, 1), Point3D(0, 1, 0), Point3D(1, 0, 0)) p2 = p1.equation() print(p2)
程序输出结果:-10*x - 10*y - z + 10,对应平面方程标准形式 (ax + by + cz + d = 0) 的系数为a=-10、b=-10、c=-1、d=10。目前自行编写了解析器,但因输出格式不固定,解析器需大量优化甚至重写,请问是否有方法可直接单独输出这些系数?
解决方法
Sympy的Plane对象本身提供了直接获取系数的内置属性,完全无需自行编写解析器:
- 获取平面的法向量分量(对应a、b、c):使用
Plane.normal_vector属性,返回Point3D对象,可直接提取坐标值 - 获取常数项d:使用
Plane.d属性
示例代码:
from sympy import Point3D, Plane p1 = Plane(Point3D(0, 0, 1), Point3D(0, 1, 0), Point3D(1, 0, 0)) # 提取a、b、c(法向量的三个分量) a, b, c = p1.normal_vector.coordinates # 提取d d = p1.d print(f"a={a}, b={b}, c={c}, d={d}")
输出结果:
a=-10, b=-10, c=-1, d=10
如果已经持有方程表达式(比如示例中的p2),也可以通过表达式的as_coeff_Add、as_coeff_Mul方法拆分系数,但直接使用Plane的内置属性更简洁可靠,能完全规避输出格式变化带来的解析问题。
内容的提问来源于stack exchange,提问作者Pablo Picasso
相关产品推荐
相关产品推荐

