【发布时间】:2011-02-15 01:02:04
【问题描述】:
既然我脑子里刚刚发生了一次因式分解,并且自从我学会了它就这样做了——我将如何开始在 Python 中编写一个二次因式分解器?
【问题讨论】:
标签: python math quadratic factorization
既然我脑子里刚刚发生了一次因式分解,并且自从我学会了它就这样做了——我将如何开始在 Python 中编写一个二次因式分解器?
【问题讨论】:
标签: python math quadratic factorization
改进基思的回答:
从多项式 P(x) = a*x^2 + b*x + c 开始。
使用二次公式(或您选择的其他其他方法)找到 r1 和 r2 到 P(x) = 0 的根。
您现在可以将 P(x) 分解为 a*(x-r1)(x-r2)。
如果您的因数 (3x - 4)(x - 9),则解将是 3*(x - 4/3)(x - 9)。 您可能想找到一种方法将 3 乘以因子以消除分数/看起来很漂亮。在这种情况下,使用分数算术而不是双精度数可能会有所帮助,这样您就可以更好地了解分母。
【讨论】:
【讨论】:
(x-3)(x-5) :D
我尝试实施hugomg 的方法。我从网上偷了“gcd”和“简化分数”功能。这是我草率的做法:
from math import sqrt
def gcd(a, b):
while b:
a, b = b, a % b
return a
def simplify_fraction(numer, denom):
if denom == 0:
return "Division by 0 - result undefined"
# Remove greatest common divisor:
common_divisor = gcd(numer, denom)
(reduced_num, reduced_den) = (numer / common_divisor, denom / common_divisor)
# Note that reduced_den > 0 as documented in the gcd function.
if common_divisor == 1:
return (numer, denom)
else:
# Bunch of nonsense to make sure denominator is negative if possible
if (reduced_den > denom):
if (reduced_den * reduced_num < 0):
return(-reduced_num, -reduced_den)
else:
return (reduced_num, reduced_den)
else:
return (reduced_num, reduced_den)
def quadratic_function(a,b,c):
if (b**2-4*a*c >= 0):
x1 = (-b+sqrt(b**2-4*a*c))/(2*a)
x2 = (-b-sqrt(b**2-4*a*c))/(2*a)
# Added a "-" to these next 2 values because they would be moved to the other side of the equation
mult1 = -x1 * a
mult2 = -x2 * a
(num1,den1) = simplify_fraction(a,mult1)
(num2,den2) = simplify_fraction(a,mult2)
if ((num1 > a) or (num2 > a)):
# simplify fraction will make too large of num and denom to try to make a sqrt work
print("No factorization")
else:
# Getting ready to make the print look nice
if (den1 > 0):
sign1 = "+"
else:
sign1 = ""
if (den2 > 0):
sign2 = "+"
else:
sign2 = ""
print("({}x{}{})({}x{}{})".format(int(num1),sign1,int(den1),int(num2),sign2,int(den2)))
else:
# if the part under the sqrt is negative, you have a solution with i
print("Solutions are imaginary")
return
# This function takes in a, b, and c from the equation:
# ax^2 + bx + c
# and prints out the factorization if there is one
quadratic_function(7,27,-4)
如果我运行它,我会得到输出:
(7x-1)(1x+4)
【讨论】:
−8x^2 −15x+2 时,您应该得到(−8x+1)(x+2)。 quadratic_function(-8, -15, 2) 来自您的代码输出 No factorization。错误在哪里?