首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SYMPY:如何简化平方比?

SYMPY:如何简化平方比?
EN

Stack Overflow用户
提问于 2021-03-04 00:01:26
回答 1查看 49关注 0票数 0

我想简化平方米的比率。例如:

代码语言:javascript
复制
import sympy as sp
a,b=sp.symbols("a b", real=True)
myExpr=sp.sqrt(b/a)*sp.sqrt(a/b)

为什么myExpr不简化为1

我尝试过许多不起作用的东西:

代码语言:javascript
复制
myExpr.simplify()
...
myExpr.refine(sp.Q.positive(a)&sp.Q.positive(b)&sp.Q.real(a)&sp.Q.real(b))

我怎样才能简化这些表达?

我的表达式比这个简单的例子要复杂得多。它是术语的乘积之和。例如,之和的一个术语是:

代码语言:javascript
复制
myExpr=sp.sqrt((2*a**2+1-2*a*sp.sqrt(a**2+1))/(a**2+1-a*sp.sqrt(a**2+1)))/sp.sqrt(a**2+1-a*sp.sqrt(a**2+1))*sp.sqrt((2*b**2+1-2*b*sp.sqrt(b**2+1))/(b**2+1-b*sp.sqrt(b**2+1)))/sp.sqrt(b**2+1-b*sp.sqrt(b**2+1))

它的简化(手工完成)是

代码语言:javascript
复制
mySimplif=sp.sqrt((2*a**2+1-2*a*sp.sqrt(a**2+1)))/(a**2-a*sp.sqrt(a**2+1)+1)+sp.sqrt((2*b**2+1-2*b*sp.sqrt(b**2+1)))/(b**2-b*sp.sqrt(b**2+1)+1)

为了完整,我使用了这个解决方法(不太方便):

代码语言:javascript
复制
c=sp.symbols("c",positive=True)
myExpr.subs(sp.sqrt(a**2+1-a*sp.sqrt(a**2+1)),c).subs(c,sp.sqrt(a**2+1-a*sp.sqrt(a**2+1))).subs(sp.sqrt(b**2+1-b*sp.sqrt(b**2+1)),c).subs(c,sp.sqrt(b**2+1-b*sp.sqrt(b**2+1)))

谢谢你的回答。

EN

回答 1

Stack Overflow用户

发布于 2021-03-04 00:51:43

你需要ab是积极的,而不仅仅是真实的:

代码语言:javascript
复制
In [15]: a, b = symbols('a, b', positive=True)

In [16]: sqrt(b/a)*sqrt(a/b)
Out[16]: 1

否则,如果它们可以是负的,那么您可以使用例如a = -1b = 1,在这种情况下,简化是无效的:

代码语言:javascript
复制
In [21]: a = sympify(-1)

In [22]: b = sympify(1)

In [23]: sqrt(a/b)*sqrt(b/a)
Out[23]: -1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66466697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档