python - 将三次方程公式导出到 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 个数学公式的图片:
解决方案
一些评论开始:
/3*a
在你的第一行末尾没有做你认为它做的事情。用括号!!括号很重要。/ (3 * a)
改为写。- 这主要是风格问题,但我个人认为 A**B 比 pow(A, B) 更容易阅读(它们是等价的,正如您在文档中看到的那样)。
- 请注意,您的代码将要求
b
、a
、d
和是具有已给定值的已存在变量Delta
。k
解决这个问题的一种方法是将代码封装到一个函数中,将这四个变量作为函数的参数。另一种解决方法是使用符号表达式库 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
推荐阅读
- css - 如何在不更改边框的情况下进行css更改以显示所有表格内容?
- javascript - 你可以在 React-Native 中的组件之间传递函数(在不同的文件中)吗?
- javascript - core.js:6406 错误类型错误:无法读取未定义的属性“id”
- java - 从 Restful 服务返回时的最佳实践 - 返回 Java 对象与返回手动构造的 JSON
- php - 运行工匠命令时出现 Guzzle ConnectException,而它在应用程序中运行良好
- reactjs - 我如何知道用户是否已向自适应卡提供了一些输入?就像在选择的情况下设置用户是否选择了一个选项
- python - 如何使用 python 在网页的 HTML 中搜索包含特定单词的 URL?
- c# - Mongo DB - 多租户环境,使用 MongoDB.Driver 和 Asp.Net Core 的连接池
- list - 使用数据类型列表的 SML
- c# - Entity Framework Core 3.0 - 创建一个自引用的多对多关系