我在Python 2.7中编写一个代码来计算二次方程的根。但是输出的形式为1.41421356237 ....有没有办法生成平方根形式(sqrt(2))?
这是我的代码:
from __future__ import division
import matplotlib.pyplot as plt
import numpy as np
import scipy
import scipy.special as sp
import scipy.integrate as integrate
import pylab as pylab
import math
import cmath
alpha = input('Enter alpha: ')
c = 1/alpha
a = 1
b = 1
d = b**2 - 4*a*c
if d<0:
s1 = (-b+cmath.sqrt(d)) / (2*a)
s2 = (-b-cmath.sqrt(d)) / (2*a)
print "Two Complex Solutions: ",s1, " and",s2
elif d==0:
s = (-b+math.sqrt(d))/ (2*a)
print "One real solution: ",s
else:
s1 = (-b+math.sqrt(d)) / 2*a
s2 = (-b-math.sqrt(d)) / 2*a
print "Two real solutions: ",s1," and",s2
这是我需要的平方根形式的输出示例:
Enter alpha: 6
Two real solutions: -0.211324865405 and -0.788675134595
答案 0 :(得分:1)
请查看https://en.wikipedia.org/wiki/SymPy的符号计算。
答案 1 :(得分:1)
您可以使用Sympy
模块!这是为了这样的事情。
对于您的情况,您可以使用sympy.sqrt
代替cmath.sqrt
来获取平方根表示。例如:
import sympy
sympy.sqrt(8) # Output: 2*sqrt(2)
sympy.sqrt(8) * sympy.sqrt(3) # Output: 2*sqrt(6)
Here您可以找到该模块的介绍。
答案 2 :(得分:0)
默认情况下,Python是急切的评估。 这意味着您现在将sqrt应用于数字,例如。 SQRT(2)。 它已经失去了它的象征意义,取而代之的是实数。
为了得到你需要的东西,你可以重新定义你的功能来代替字符串 这样python解释器就不会尝试将它评估为数字。
s1 = "-{b}+sqrt({d})/2*{a}".format(b=b,d=d,a=a)
s2 = "-{b}-sqrt({d})/2*{a}".format(b=b,d=d,a=a)
上面的代码部分将生成一个符号而不是数字的字符串。