热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用Sympy计算高次方程的判别式

经过一段时间的使用,笔者发现Sympy还是非常强大的存在!本次分享中,笔者将解决上一篇分享的结尾遗留的问题,那就是计算高次方

  经过一段时间的使用,笔者发现Sympy还是非常强大的存在!本次分享中,笔者将解决上一篇分享的结尾遗留的问题,那就是计算高次方程的判别式。
  高次方程的判别式在数学上是个困难的问题,一般数学书上最多就讲到3次方程的判别式,笔者搜索了一下午只有在Wikipedia和Wolfram MathWorld上找到了四次方程的判别式公式。本文将展示2,3,4,5,6次方程的判别式(7次方程计算时间过长,故暂不展示)。
  在数学中&#xff0c;n次方程f(x)&#61;anxn&#43;an1xn1&#43;...&#43;a1x&#43;a0&#61;0 的判别式定义为Δ&#61;a2n2ni,j,i<jn(xixj)2.因为5次及以上方程没有求根公式&#xff0c;故利用Sympy按照原始定义是无法求出判别式的&#xff01;
  但是&#xff01;我们可以幸运地通过结式来求&#xff0c;因为Δ&#61;(1)n(n1)2a1nR(f,f),其中R(f,f)f(x)f(x)的结式.(可以在http://www2.math.uu.se/~svante/papers/sjN5.pdf 上找到结式的定义与相关证明)。
  接下来&#xff0c;我们将利用Python代码来展示具体计算过程&#xff0c;其中最为关键的是结式矩阵的构建。

from sympy import *
from sympy.abc import a,b,c,d,e,f,g,h,x
init_printing()
def list_move(cof_lst,i): # cof_lst为系数列表&#xff0c;i为循环移动的位数moved_lst &#61; [cof_lst[(j-i)%len(cof_lst)] for j in range(len(cof_lst))]return moved_lstdef make_matrix(cof_a,cof_b,n): # a,b为列表&#xff0c;n为多项式次数matrix_lst &#61; []for i in range(n-1):matrix_lst.append(list_move(cof_a,i))for j in range(n):matrix_lst.append(list_move(cof_b,j))return matrix_lstif __name__ &#61;&#61; &#39;__main__&#39;:dict_a &#61; {}dict_b &#61; {}dict_a[&#39;2&#39;] &#61; [a,b,c]dict_b[&#39;2&#39;] &#61; [2*a,b,0]dict_a[&#39;3&#39;] &#61; [a,b,c,d,0]dict_b[&#39;3&#39;] &#61; [3*a,2*b,c,0,0]dict_a[&#39;4&#39;] &#61; [a,b,c,d,e,0,0]dict_b[&#39;4&#39;] &#61; [4*a,3*b,2*c,d,0,0,0]dict_a[&#39;5&#39;] &#61; [a,b,c,d,e,f,0,0,0]dict_b[&#39;5&#39;] &#61; [5*a,4*b,3*c,2*d,e,0,0,0,0]dict_a[&#39;6&#39;] &#61; [a,b,c,d,e,f,g,0,0,0,0]dict_b[&#39;6&#39;] &#61; [6*a,5*b,4*c,3*d,2*e,f,0,0,0,0,0]

  需要将该文件保存在.ipython文件夹下&#xff0c;并运行&#xff0c;这样便于我们后面公式的Latex化展示。其中的make_matrix为构建结式矩阵&#xff0c;而多项式f(x)f(x) 的系数分别放在dict_a与dict_b中。
  接着再编写一个程序&#xff0c;计算出2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6次方程的判别式。
  

from dis_of_poly import *
from sympy import *
from sympy.abc import a,b,c,d,e,f,g,h,x
import math
import datetimen &#61; eval(input("Enter degree(2-8):"))
d1 &#61; datetime.datetime.now()
#计算判别式
cof_a &#61; dict_a[str(n)]
cof_b &#61; dict_b[str(n)]
dis_matrix &#61; Matrix(make_matrix(cof_a, cof_b, n))
s &#61; n*(n-1)/2
if s%2 &#61;&#61; 0: result &#61; simplify(1/a*dis_matrix.det())
else:result &#61; simplify(-1/a*dis_matrix.det())
#输出
d2 &#61; datetime.datetime.now()
print("Run successfully!一共用时&#xff1a;",d2-d1)

这个文件的运行依赖于上一个Python文件&#xff0c;并将结果储存在result变量中。测试员只需输入方程次数&#xff0c;运行完后再输入result即可查看其判别式。
  2次方程的判别式&#xff1a;
  2次方程的判别式&#xff1a;
  
  3次方程判别式&#xff1a;
  3次方程的判别式&#xff1a;
  4次方程判别式&#xff1a;
  4次方程的判别式&#xff1a;
  可以看到4次方程的判别式已经非常复杂了&#xff0c;更不用说5&#xff0c;6次方程了&#xff0c;也不便在此展示&#xff0c;而7次方程的计算时间可能要很久&#xff0c;笔者正在测试中。
  以上运行的结果&#xff0c;笔者已经放在码云网站上&#xff0c;欢迎有兴趣的同学查阅&#xff01;当然&#xff0c;也希望大家能提出建设性意见。




  本次分享到此结束&#xff0c;欢迎交流与批评。具体代码及运行结果可查看&#xff1a;
http://git.oschina.net/Jclian91/PanBieShi . Have a nice dream tonight~~

推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 本文详细解析了如何使用Python语言在STM32硬件平台上实现高效的编程和快速的应用开发。通过具体的代码示例,展示了Python简洁而强大的特性。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍了如何在Python中使用join()方法将列表中的元素连接成一个字符串。join()方法允许用户指定分隔符,从而灵活地生成所需格式的字符串。此外,我们还将探讨一些实际应用中的注意事项和技巧。 ... [详细]
author-avatar
手机用户2502902903_601
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有