python:sympy 求解一元三次方程式

8 篇文章 0 订阅

pip install sympy 或者  Anaconda 3 自带 sympy 点击 【Jupyter Notebook】

卡丹公式,也称为卡尔达诺公式或卡尔丹公式,是用于求解一元三次方程的数学公式。这个公式是由意大利学者卡丹(Cardano G.,1501-1576年)在1545年提出的,并首次出现在他的著作《关于代数的大法》中。卡丹公式适用于形式为x³+px+q=0的一元三次方程,其中p和q是实数。这个公式的应用需要一定的数学推导和技巧,包括通过变量代换将一般形式的一元三次方程转化为适合应用卡丹公式的形式。

卡丹公式的应用涉及到复杂的数学运算和方程变换,包括但不限于立方根的计算和判别式的分析。根据判别式的不同值,卡丹公式可以求解出一元三次方程的不同数量的实根或复根。此外,卡丹公式的推导过程涉及到了高等代数的知识和技巧,包括方程的变换、代数式的操作等。

请看:python:绘制一元三次函数的曲线

以下是用卡丹公式 巧妙 求解一元三次方程式的示例代码:

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)

  • 31
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值