首页 > 解决方案 > 将三次方程公式导出到 Python 中的代码

问题描述

我正在为求解这个三次方程的方法编写代码。我使用 python 的数学库。

(float)(-b+pow(pow(b,3)-27*pow(a,2)*d,1/3))/3*a;
 
(float)((math.sqrt(delta))/(3*a))*((pow(abs(k)+math.sqrt(pow(k,2)+1),1/3))+(pow(abs(k)-math.sqrt(pow(k,2)+1),1/3)))-(b/(3*a));

下面是我需要解决的 2 个数学公式的图片:

公式1

公式二

标签: pythonpython-3.xmath

解决方案


一些评论开始:

  • /3*a在你的第一行末尾没有做你认为它做的事情。用括号!!括号很重要。/ (3 * a)改为写。
  • 这主要是风格问题,但我个人认为 A**B 比 pow(A, B) 更容易阅读(它们是等价的,正如您在文档中看到的那样)。
  • 请注意,您的代码将要求bad和是具有已给定值的已存在变量Deltak解决这个问题的一种方法是将代码封装到一个函数中,将这四个变量作为函数的参数。另一种解决方法是使用符号表达式库 sympy

考虑到这些注释,这里有两种方法可以重写您的第一个表达式并在 python 代码中使用它。我会让你自己调整第二种表达方式。

第一种方式:用参数封装在函数中

def expr1(a,b,d):
  numerator   = - b + (b**3 - 27*a*a*d)**(1/3)
  denominator = 3 * a
  return numerator / denominator

print(expr1(2,7,3))
# -0.7219330585463425

第二种方式:使用 sympy

Sympy 是一个符号微积分库。这意味着我们可以使用它来定义符号,它们基本上是没有值的变量,然后要求它记住使用这些符号的表达式。我们将使用该函数sympy.symbols来定义我们的符号,并通过为这些符号expr.subs赋值来评估表达式。expr我鼓励您阅读sympy 的文档

import sympy

a, b, d = sympy.symbols('a b d')
numerator = - b + (b**3 - 27*a*a*d) ** (1/3)
denominator = 3 * a
expr1 = numerator / denominator

print(expr1)
# (-b + (-27*a**2*d + b**3)**0.333333333333333)/(3*a)

print(expr1.subs([(a,2), (b,7), (d,3)]))
# -0.721933058546343

推荐阅读