用Sympy计算高次方程的判别式
来源:互联网 发布:maya 2018 mac arnold 编辑:程序博客网 时间:2024/04/29 03:51
经过一段时间的使用,笔者发现Sympy还是非常强大的存在!本次分享中,笔者将解决上一篇分享的结尾遗留的问题,那就是计算高次方程的判别式。
高次方程的判别式在数学上是个困难的问题,一般数学书上最多就讲到3次方程的判别式,笔者搜索了一下午只有在Wikipedia和Wolfram MathWorld上找到了四次方程的判别式公式。本文将展示2,3,4,5,6次方程的判别式(7次方程计算时间过长,故暂不展示)。
在数学中,n次方程
但是!我们可以幸运地通过结式来求,因为
接下来,我们将利用Python代码来展示具体计算过程,其中最为关键的是结式矩阵的构建。
from sympy import *from sympy.abc import a,b,c,d,e,f,g,h,xinit_printing()def list_move(cof_lst,i): # cof_lst为系数列表,i为循环移动的位数 moved_lst = [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为列表,n为多项式次数 matrix_lst = [] 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__ == '__main__': dict_a = {} dict_b = {} dict_a['2'] = [a,b,c] dict_b['2'] = [2*a,b,0] dict_a['3'] = [a,b,c,d,0] dict_b['3'] = [3*a,2*b,c,0,0] dict_a['4'] = [a,b,c,d,e,0,0] dict_b['4'] = [4*a,3*b,2*c,d,0,0,0] dict_a['5'] = [a,b,c,d,e,f,0,0,0] dict_b['5'] = [5*a,4*b,3*c,2*d,e,0,0,0,0] dict_a['6'] = [a,b,c,d,e,f,g,0,0,0,0] dict_b['6'] = [6*a,5*b,4*c,3*d,2*e,f,0,0,0,0,0]
需要将该文件保存在.ipython文件夹下,并运行,这样便于我们后面公式的Latex化展示。其中的make_matrix为构建结式矩阵,而多项式
接着再编写一个程序,计算出2,3,4,5,6次方程的判别式。
from dis_of_poly import *from sympy import *from sympy.abc import a,b,c,d,e,f,g,h,ximport mathimport datetimen = eval(input("Enter degree(2-8):"))d1 = datetime.datetime.now()#计算判别式cof_a = dict_a[str(n)]cof_b = dict_b[str(n)]dis_matrix = Matrix(make_matrix(cof_a, cof_b, n))s = n*(n-1)/2if s%2 == 0: result = simplify(1/a*dis_matrix.det())else: result = simplify(-1/a*dis_matrix.det())#输出 d2 = datetime.datetime.now() print("Run successfully!一共用时:",d2-d1)
这个文件的运行依赖于上一个Python文件,并将结果储存在result变量中。测试员只需输入方程次数,运行完后再输入result即可查看其判别式。
2次方程的判别式:
3次方程判别式:
4次方程判别式:
可以看到4次方程的判别式已经非常复杂了,更不用说5,6次方程了,也不便在此展示,而7次方程的计算时间可能要很久,笔者正在测试中。
以上运行的结果,笔者已经放在码云网站上,欢迎有兴趣的同学查阅!当然,也希望大家能提出建设性意见。
本次分享到此结束,欢迎交流与批评。具体代码及运行结果可查看:http://git.oschina.net/Jclian91/PanBieShi . Have a nice dream tonight~~
- 用Sympy计算高次方程的判别式
- 一元高次方程的求解
- 一元高次方程的求解
- 一元高次方程求解
- 高次方程问题总结
- Sympy 解方程
- sympy 解方程
- SymPy解方程
- 用二分法解一元高次方程的单根(用两种语言描述的:C语言和Matlab语言)
- ACM_高次同余方程
- Python 解多元高次方程
- 高数 08.03 齐次方程
- Sympy符号计算库
- Python 符号计算的瑞士军刀——SymPy
- 利用Sympy计算sin1°的最小多项式
- 【Python】四、Sympy——《用Python做科学计算》
- 一元N次方程,转为字符串在oracle用power函数计算
- POJ 3243 离散对数-高次同余方程求解
- ubuntu 下 安装ftp服务器
- golang的原始套接字
- MTK tpd驱动框架
- linux
- 使用JDBC访问数据库
- 用Sympy计算高次方程的判别式
- [算法与数据结构]
- 8.12 删数 1862
- LinkedHashMap和HashMap的比较使用
- listView中设置PopUpWindow
- Remove Nth Node From End of List leetcode java
- 移动端文件上传-样式
- React Native 第七天
- 蚁群算法(独辟蹊径的进化算法)