python - 使用 SymPy 消除一个变量以在 Python 中关联两个函数
问题描述
我有两个由变量“t”参数化的方程。这些看起来像:
X = p(t)
Y = q(t)
其中 p 和 q 是 t 中的多项式。我想使用 Python 的 SymPy 库来消除 t 变量并为某些函数 X 表示 Y = F(X)。我曾尝试在 SymPy 中使用 solve() 但这不是很好。我知道 Maple 和 Mathematica 都具有可以完成此操作的消除()函数,但我想知道 Python 是否可能具有执行此操作的通用函数。
解决方案
这是一个经过轻微测试的简单例程
def eliminate(eqs, z):
"""return eqs with parameter z eliminated from each equation; the first
element in the returned list will be the definition of z that was used
to eliminate z from the other equations.
Examples
========
>>> eqs = [Eq(2*x + 3*y + 4*z, 1),
... Eq(9*x + 8*y + 7*z, 2)]
>>> eliminate(eqs, z)
[Eq(z, -x/2 - 3*y/4 + 1/4), Eq(11*x/2 + 11*y/4 + 7/4, 2)]
>>> Eq(y,solve(_[1], y)[0])
Eq(y, -2*x + 1/11)
"""
from sympy.solvers.solveset import linsolve
Z = Dummy()
rv = []
for i, e in enumerate(eqs):
if z not in e.free_symbols:
continue
e = e.subs(z, Z)
if z in e.free_symbols:
break
try:
s = linsolve([e], Z)
if s:
zi = list(s)[0][0]
rv.append(Eq(z, zi))
rv.extend([eqs[j].subs(z, zi)
for j in range(len(eqs)) if j != i])
return rv
except ValueError:
continue
raise ValueError('only a linear parameter can be eliminated')
在这个问题上有一个更复杂的例程。
推荐阅读
- python - 每个员工考勤模块odoo 13的员工每天第一次签到和最后一次签出
- c# - HttpWebResponse GetResponse 超时
- godot - 如何在 Godot 中使用脚本编辑标签的前一行
- uiview - 如何快速独立地增加和减少 UIView 的宽度和高度?
- python - 如何解决加载模型以获得新预测的问题?
- flutter - 当我从对话框或底部工作表导航到下一个屏幕时,为什么底部栏导航隐藏?
- python - 在三维 numpy 数组中切片如何工作?
- android - 如何使 Android BottomSheetDialogFragment 出现在系统/手势栏后面?
- sql - MS SQL Server LEFT JOIN 未产生预期结果
- r - 如何匹配来自 2 个数据框的列并在 r 中创建一个新的数据框