如何解决sympy 两个变量,一个已知,一个未知,使用subs,不返回任何答案
这里是 sympy 的新手,我真的看不出我做错了什么。我正在求解具有已知高度的三角形区域,但要求定义两个符号。
def solve_math_problem():
from sympy import symbols,Eq,solve
from fractions import Fraction
base,height = symbols('base,height')
eq1 = Eq(Fraction(1,2) * base * height,24)
eq2 = eq1.subs(height,8)
result = solve([eq1,eq2],base)
print(result)
这每次都会导致一个空数组。当我打印 eq2 时,我得到 Eq(4*base,24),为什么没有足够的信息来求解 base?
我不确定我遗漏了哪些信息。
解决方法
您要求为一个未知数解两个方程:
In [18]: eq1
Out[18]:
base⋅height
─────────── = 24
2
In [19]: eq2
Out[19]: 4⋅base = 24
In [20]: solve([eq1,eq2],base)
Out[20]: []
solve
函数认为这是一个由两个方程组成的系统,其中一个未知数(底数)和一个符号参数(高度)。这是一个超定方程组,可能没有任何解。特别是,仅当 base
等于 height
但您没有告诉 8
高度等于 solve
时,才存在两个方程的 8
解它不会假设。相反,solve
返回空列表,因为对于 height
的几乎所有可能值,这个方程组都没有解。
您可以通过多种方式解决此问题,例如只需为一个未知数求解一个方程:
In [21]: solve([eq2],base)
Out[21]: {base: 6}
您还可以通过将高度视为未知数来求解两个未知数的两个方程:
In [24]: solve([eq1,[base,height],dict=True)
Out[24]: [{base: 6,height: 8}]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。