python:sympy 求解一元三次方程式
python sympy 用卡丹公式 求解一元三次方程式
·
pip install sympy 或者 Anaconda 3 自带 sympy 点击 【Jupyter Notebook】
卡丹公式,也称为卡尔达诺公式或卡尔丹公式,是用于求解一元三次方程的数学公式。这个公式是由意大利学者卡丹(Cardano G.,1501-1576年)在1545年提出的,并首次出现在他的著作《关于代数的大法》中。卡丹公式适用于形式为x³+px+q=0的一元三次方程,其中p和q是实数。这个公式的应用需要一定的数学推导和技巧,包括通过变量代换将一般形式的一元三次方程转化为适合应用卡丹公式的形式。
卡丹公式的应用涉及到复杂的数学运算和方程变换,包括但不限于立方根的计算和判别式的分析。根据判别式的不同值,卡丹公式可以求解出一元三次方程的不同数量的实根或复根。此外,卡丹公式的推导过程涉及到了高等代数的知识和技巧,包括方程的变换、代数式的操作等。
以下是用卡丹公式 巧妙 求解一元三次方程式的示例代码:
from IPython.display import Latex
Latex(r"$x^3 -3x +4 = 0$")
from sympy import *
# 用符号x代表变量
x = Symbol('x')
# 构造一元三次方程式 equation
expr = x**3 -3*x +4
# 用卡丹公式 尝试化简
a = symbols('a')
exp1 = expr.subs({x: a + 1/a})
exp1.expand()
# set y = a^3
y = symbols('y')
solve(y+4+1/y)
ret = solve(y+4+1/y)
solve(Eq(a**3,ret[0]), a)
solve(Eq(a**3,ret[1]), a)
t0 = solve(Eq(a**3,ret[0]), a)
t1 = solve(Eq(a**3,ret[1]), a)
x = a + 1/a
x.subs({a: t0[0]})
x.subs({a: t1[0]})
print(x.subs({a: t1[0]}))
from math import sqrt
-1/(2 - sqrt(3))**(1/3) - (2 - sqrt(3))**(1/3)
编写 test_sympy.py 如下
# -*- coding: utf-8 -*-
""" sympy 求解一元三次方程式 """
from sympy import Symbol, solve
# 定义符号变量
x = Symbol('x')
# 构造一元三次方程式
f = x**3 - 3*x**2 + 3*x + 1
# 调用solve函数求解方程
result = solve(f)
# solve函数的返回结果是一个列表
print(result)
运行 python test_sympy.py
[1 - 2**(1/3), 1 - 2**(1/3)*(-1/2 - sqrt(3)*I/2), 1 - 2**(1/3)*(-1/2 + sqrt(3)*I/2)]
请注意,这个例子中的解是在符号数被定义的情况下得到的。如果你需要得到实数解,你需要确保所有的计算都是实数的。如果方程没有实数解,上述代码可能会产生复数解。
from IPython.display import Latex
Latex(r"$x^3 +9x +6 = 0$")
from sympy import *
x = symbols('x')
expr = x**3 +9*x +6
a = symbols('a')
# 用卡丹公式 尝试化简
exp1 = expr.subs({x: a - 3/a})
exp1.expand()
# set y = a^3
y = symbols('y')
solve(y+6-27/y)
ret = solve(y+6-27/y)
solve(Eq(a**3,ret[0]), a)
solve(Eq(a**3,ret[1]), a)
t0 = solve(Eq(a**3,ret[0]), a)
t1 = solve(Eq(a**3,ret[1]), a)
x = a - 3/a
x.subs({a: t0[0]})
print(x.subs({a: t0[0]}))
-3**(2/3) + 3**(1/3)
更多推荐
已为社区贡献8条内容
所有评论(0)