如何从`sympy.solve`结果中消除负面解决方案? [英] How to eliminate negative solutions from `sympy.solve` result?

查看:32
本文介绍了如何从`sympy.solve`结果中消除负面解决方案?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何让 sympy.solve 不返回负解?

How can I make sympy.solve not return negative solutions?

这似乎与向我正在求解的符号添加像 positive=True 这样的约束不同.虽然

This seems to be a different task than adding a constraint like positive=True to the symbol I'm solving for. While

import sympy

x = sympy.symbols("x")
print(sympy.solve(x**2-4, x))

x = sympy.symbols("x", positive=True)
print(sympy.solve(x**2-4, x))

印刷品

[-2, 2]
[2]

正如预期的那样 - 对于 omega

as expected - I still get a negative solve result for omega with

import sympy

omega, omega_0, gamma = sympy.symbols("omega, omega_0, gamma", real=True, positive=True)
zeta = 1/((omega_0**2 - omega**2)**2 + gamma**2*omega**2)

omega_R = sympy.solve(sympy.diff(zeta, omega), omega)
print(omega_R)

哪个返回

[-sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2, sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2]

即使 -sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2 对于实数和正符号 omega_0 永远不会是正数code> 和 gamma.

even though -sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2 will never be positive for real and positive symbols omega_0 and gamma.

或者,事后消除负面解决方案的最佳方法是什么?

Alternatively, whats's the best way to eliminate the negative solutions afterwards?

推荐答案

SymPy 的假设系统不够聪明,无法知道 -sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2 不能肯定给 realpositive 假设 omega_0gamma (我为它打开了一个问题).为安全起见,SymPy 仅在知道它们不能具有给定假设时才过滤解决方案.如果假设系统给出 None,意味着它不知道,它无论如何都会包含它.现在最好的办法是手动过滤这个解决方案.

SymPy's assumptions system isn't smart enough to know that -sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2 cannot be positive give the real and positive assumptions on omega_0 and gamma (I opened an issue for it). To be on the safe side, SymPy only filters solutions if it knows they cannot have the given assumptions. If the assumptions system gives None, meaning it doesn't know, it includes it anyway. For now your best bet is to just filter this solution manually.

这篇关于如何从`sympy.solve`结果中消除负面解决方案?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆