a + b*sqrt(c) 形式的数的平方根
square root of number of the form a + b*sqrt(c)
我们如何在 sympy 中计算数字 a + b*sqrt(c)
的平方根?
例如,我们期望 sqrt(3 + 2*sqrt(2))
为 1 + sqrt(2)
。
我不确定这是否回答了你的问题,因为它不是很详细,但这里有一个 link
https://docs.sympy.org/latest/modules/simplify/simplify.html\
例如
>>> from sympy import simplify, cos, sin
>>> from sympy.abc import x, y
>>> a = (x + x**2)/(x*sin(y)**2 + x*cos(y)**2)
>>> a
(x**2 + x)/(x*sin(y)**2 + x*cos(y)**2)
>>> simplify(a)
x + 1
执行此操作的特定函数称为 sqrtdenest
:
In [19]: from sympy import sqrt, sqrtdenest
In [20]: e = sqrt(3 + 2*sqrt(2))
In [21]: e
Out[21]:
__________
╲╱ 2⋅√2 + 3
In [22]: sqrtdenest(e)
Out[22]: 1 + √2
https://docs.sympy.org/latest/modules/simplify/simplify.html#sqrtdenest
sqrtdenest
函数也被 simplify
使用,在 SymPy 教程中有说明:
https://docs.sympy.org/latest/tutorial/index.html
正如@oscar-enjamin 所指出的,sqrtdenest
是一个很好的第一站。我还要补充一点,如果你有一个你认为可以用其他数字表示的数字,nsimplify
可能会有所帮助:
>>> from sympy import nsimplify, sqrt, divisors
>>> eq=sqrt(3 + 2*sqrt(2))
>>> nsimplify(eq,[sqrt(2)])
1 + sqrt(2)
>>> eq = sqrt(19 + 3*sqrt(2) + 6*sqrt(3) - sqrt(10))
>>> nsimplify(eq, [sqrt(i) for i in divisors(int(eq**2)) if i - 1])
-sqrt(2) - sqrt(6)/2 + sqrt(3)/2 + sqrt(5)/2 + 3/2 + sqrt(15)/2 + sqrt(30)/2
我们如何在 sympy 中计算数字 a + b*sqrt(c)
的平方根?
例如,我们期望 sqrt(3 + 2*sqrt(2))
为 1 + sqrt(2)
。
我不确定这是否回答了你的问题,因为它不是很详细,但这里有一个 link
https://docs.sympy.org/latest/modules/simplify/simplify.html\
例如
>>> from sympy import simplify, cos, sin
>>> from sympy.abc import x, y
>>> a = (x + x**2)/(x*sin(y)**2 + x*cos(y)**2)
>>> a
(x**2 + x)/(x*sin(y)**2 + x*cos(y)**2)
>>> simplify(a)
x + 1
执行此操作的特定函数称为 sqrtdenest
:
In [19]: from sympy import sqrt, sqrtdenest
In [20]: e = sqrt(3 + 2*sqrt(2))
In [21]: e
Out[21]:
__________
╲╱ 2⋅√2 + 3
In [22]: sqrtdenest(e)
Out[22]: 1 + √2
https://docs.sympy.org/latest/modules/simplify/simplify.html#sqrtdenest
sqrtdenest
函数也被 simplify
使用,在 SymPy 教程中有说明:
https://docs.sympy.org/latest/tutorial/index.html
正如@oscar-enjamin 所指出的,sqrtdenest
是一个很好的第一站。我还要补充一点,如果你有一个你认为可以用其他数字表示的数字,nsimplify
可能会有所帮助:
>>> from sympy import nsimplify, sqrt, divisors
>>> eq=sqrt(3 + 2*sqrt(2))
>>> nsimplify(eq,[sqrt(2)])
1 + sqrt(2)
>>> eq = sqrt(19 + 3*sqrt(2) + 6*sqrt(3) - sqrt(10))
>>> nsimplify(eq, [sqrt(i) for i in divisors(int(eq**2)) if i - 1])
-sqrt(2) - sqrt(6)/2 + sqrt(3)/2 + sqrt(5)/2 + 3/2 + sqrt(15)/2 + sqrt(30)/2