精华内容
下载资源
问答
  • python求解一元四次方程
    2022-03-16 10:30:55
    from scipy import optimize
    
    
    def func(y):
    
        return eval("""(23.474/ (1+y)**0.024 + 22.316/(1+y)**1.024 + 21.158/(1+y)**2.024-64.896)""")
    
    
    root = optimize.newton(func, x0=0, tol=0.0000000001)
    print(root)
    

    更多相关内容
  • 一元三次、四次方程求解

    千次阅读 2020-01-02 15:29:52
    一、一元四次方程求解 一元四次方程求根公式,百科: https://baike.baidu.com/item/%E4%B8%80%E5%85%83%E5%9B%9B%E6%AC%A1%E6%96%B9%E7%A8%8B%E6%B1%82%E6%A0%B9%E5%85%AC%E5%BC%8F/10721996?fr=aladdin 1.网上搜...

    一、一元四次方程求解

    一元四次方程求根公式,百科        https://baike.baidu.com/item/%E4%B8%80%E5%85%83%E5%9B%9B%E6%AC%A1%E6%96%B9%E7%A8%8B%E6%B1%82%E6%A0%B9%E5%85%AC%E5%BC%8F/10721996?fr=aladdin

    1.网上搜到的求解代码

    python求解代码,见:https://github.com/Larissa1990/Solve-cubic-and-quartic-equations-with-one-unknown/blob/master/Equations.py   经测试, 有bug,求解不正确

    说明,见:https://www.cnblogs.com/larissa-0464/p/11706131.html

     

    2. 一元四次方程在线求解工具https://www.osgeo.cn/app/s2085   可用来验证求解程序是否正确;

     

    3. 一元四次方程, 沈天珩简化求根公式,  具体公式 详见百科链接;

    import math
    import cmath
    import numpy as np
    
    
    def cal_quartic_ik(args_list):
        a, b, c, d, e = args_list
    
        D = 3*pow(b,2) - 8*a*c
        E = -pow(b, 3) + 4*a*b*c - 8*pow(a, 2)*d
        F = 3*pow(b, 4) + 16*pow(a, 2)*pow(c, 2) - 16*a*pow(b, 2)*c + 16*pow(a, 2)*b*d - 64*pow(a, 3)*e
    
        A = D**2 - 3*F
        B = D*F - 9*pow(E, 2)
        C = F**2 - 3*D*pow(E, 2)
    
        delta = B**2 - 4*A*C  # 总判别式
    
        if (D == 0) & (E == 0) & (F == 0):
            """ 四重实根"""
            x = -b/(4*a)
            return 1, [x]
        if (A == 0) & (B == 0) & (C == 0) & (D*E*F != 0):
            """ 两个实根,其中一个三重实根"""
            x1 = (-b*D + 9*E)/(4*a*D)
            x234 = (-b * D - 3 * E) / (4 * a * D)
            return 2, [x1, x234]
        if (E == 0) & (F == 0) & (D != 0):
            """ 一对二重根"""
            if D>0:  # 根为实数
                x13 = (-b + math.sqrt(D))/(4*a)
                x24 = (-b - math.sqrt(D)) / (4 * a)
                return 2, [x13, x24]
    
            if D<0:  # 根为虚数
                # x13 = (-b + cmath.sqrt(D))/(4*a)
                # x24 = (-b - cmath.sqrt(D)) / (4 * a)
                return 0, 0
        if (A*B*C != 0) & (delta == 0):
            """ 一对二重实根 """
            x3 = (-b - np.sign(A*B*E)*math.sqrt( D - B/A))/(4*a)
            x4 = (-b - np.sign(A*B*E)*math.sqrt( D - B/A))/(4*a)
            if A*B>0 :  # 其余两根为不等实根
                x1 = (-b + np.sign(A*B*E)*math.sqrt( D - B/A) + math.sqrt( 2*B/A) )/(4*a)
                x2 = (-b + np.sign(A * B * E) * math.sqrt(D - B / A) - math.sqrt(2 * B / A)) / (4 * a)
                return 4, [x1, x2, x3, x4]
            if A*B < 0:  # 其余两根为共轭虚根
                # x1 = (-b + np.sign(A * B * E) * math.sqrt(D - B / A) + cmath.sqrt(2 * B / A)) / (4 * a)
                # x2 = (-b + np.sign(A * B * E) * math.sqrt(D - B / A) - cmath.sqrt(2 * B / A)) / (4 * a)
                return 2,  [x3, x4]
        if delta > 0:
            """" 两个不等实根和一对共轭虚根"""
            z1 = A*D + 3*(( -B + math.sqrt(delta))/2.0)
            z2 = A * D + 3 * ((-B - math.sqrt(delta)) / 2.0)
    
            # print """ z1 =  """, z1
            # print """ z2 =  """, z2
            # print """ abs(z1) =  """, abs(z1)
            # print """ abs(z2) =  """, abs(z2)
    
            z = D**2 - D*(np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0)) + \
                (np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0))**2 - 3*A
    
            x1 = (-b + np.sign(E)*math.sqrt((D + np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0))/3.0)
                  + math.sqrt((2*D - np.sign(z1)*pow(abs(z1), 1.0/3.0) - np.sign(z2)*pow(abs(z2), 1.0/3.0)
                     + 2*math.sqrt(z))/3.0))/(4*a)
            x2 = (-b + np.sign(E)*math.sqrt((D + np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0))/3.0)
                  - math.sqrt((2*D - np.sign(z1)*pow(abs(z1), 1.0/3.0) - np.sign(z2)*pow(abs(z2), 1.0/3.0)
                     + 2*math.sqrt(z))/3.0))/(4*a)
    
            # 虚根忽略
            return 2, [x1, x2]
        if delta < 0:
            if E == 0:
                if (D>0) & (F>0) :
                    """ 四个不等实根 """
                    x1 = (-b + math.sqrt(D + 2*math.sqrt(F))) / (4 * a)
                    x2 = (-b - math.sqrt(D + 2 * math.sqrt(F))) / (4 * a)
                    x3 = (-b + math.sqrt(D - 2 * math.sqrt(F))) / (4 * a)
                    x4 = (-b - math.sqrt(D - 2 * math.sqrt(F))) / (4 * a)
                    return 4, [x1, x2, x3, x4]
                else:
                    """ 两对不等共轭虚根 """
                    # 虚根忽略
                    print " 两对不等共轭虚根 "
                    return 0, 0
            else:
                if (D > 0) & (F > 0):
                    """ 四个不等实根 """
                    theta = math.acos((3*B-2*A*D)/(2*A*math.sqrt(A)))
                    y1 = (D - 2*math.sqrt(A)*math.cos(theta/3.0))/3.0
                    y2 = (D + math.sqrt(A)*(math.cos(theta/3.0) + math.sqrt(3)*math.sin(theta/3.0)))/3.0
                    y3 = (D + math.sqrt(A) * (math.cos(theta / 3.0) - math.sqrt(3) * math.sin(theta / 3.0))) / 3.0
    
                    x1 = (-b + np.sign(E) * math.sqrt(y1) + ( math.sqrt(y2) + math.sqrt(y3)))/(4*a)
                    x2 = (-b + np.sign(E) * math.sqrt(y1) - (math.sqrt(y2) + math.sqrt(y3))) / (4 * a)
                    x3 = (-b - np.sign(E) * math.sqrt(y1) + (math.sqrt(y2) - math.sqrt(y3))) / (4 * a)
                    x4 = (-b - np.sign(E) * math.sqrt(y1) - (math.sqrt(y2) - math.sqrt(y3))) / (4 * a)
    
                    return 4, [x1, x2, x3, x4]
                else:
                    """ 两对不等共轭虚根 """
                    # 虚根忽略
                    print " 两对不等共轭虚根 "
                    return 0, 0

            经测试,求解正确;

             程序中,忽略了复数解,返回的解,均是实数解; 可作为一基础求解工具;

     

    一、一元三次方程求解

     

    盛金公式: https://baike.baidu.com/item/%E7%9B%9B%E9%87%91%E5%85%AC%E5%BC%8F#9

    def cal_cubic_ik(args_list):
        a, b, c, d = args_list
    
        A = b**2 - 3*a*c
        B = b*c - 9*a*d
        C = c**2 - 3*b*d
    
        delta = B**2 - 4*A*C  # 总判别式
    
        if (A == 0) & (B == 0):
            """ 一个三重实根"""
            x = -b/(3*a)
            return 1, [x]
    
        if delta > 0:
            """" 一个实根和一对共轭复根"""
    
            y1 = A*b + 3*a*(( -B + math.sqrt(delta))/2.0)
            y2 = A*b + 3*a*(( -B - math.sqrt(delta))/2.0)
            print """ y1 =  """, y1
            print """ y2 =  """, y2
            print """ abs(y2) =  """, abs(y2)
            # 虚根忽略
            x1 = (-b - (np.sign(y1)*pow(abs(y1), 1.0 / 3.0) + np.sign(y2)*pow(abs(y2), 1.0 / 3.0)) )/ (3 * a)  # 负数直接开立方根会报错
            return 1, [x1]
    
        if delta == 0:
            """三个实根,其中有一个二重根 """
            K = B/float(A)
            x1 = -b/float(a) + K
            x23 = -K/2.0
            return 2,  [x1, x23]
    
        if delta < 0:
            """ 三个不等实根 """
            T = (2*A*b - 3*a*B)/(2*math.sqrt(pow(A, 3)))
            theta = math.acos(T)
    
            x1 = (-b - 2 * math.sqrt(A) * math.cos(theta / 3.0)) / (3 * a)
            x2 = (-b + math.sqrt(A)*(math.cos(theta/3.0)) + math.sqrt(3)*math.sin(theta/3.0))/(3*a)
            x3 = (-b + math.sqrt(A) * (math.cos(theta / 3.0)) - math.sqrt(3) * math.sin(theta / 3.0)) / (3 * a)
    
            return 3, [x1, x2, x3]

     程序中,忽略了复数解,返回的解,均是实数解

     

    展开全文
  • 文章目录一、一元二方程求解公式二、编程求解一元次方程1、直接求解一元次方程2、编写一元二次方程求解函数3、编写一元二次方程类 一、一元二方程求解公式 对于一元二次方程ax2+bx+c=0ax^2+bx+c=0ax2+bx+c=0 ...
    展开全文
  • 檀纪4353年2月3日 月曜日 晴(划掉)公元2020年2...突发奇想,就打算写下这么一篇《一元次方程寻根记杂谈》,如有谬误请各位读者予以斧正,非常感谢。不过这篇文章的主要内容和群论可能没有多大关系,只是因为一元...

    檀纪4353年2月3日 月曜日 晴(划掉)公元2020年2月3日 星期一 晴

      前些日子一有闲暇碎片时间就利用起来刷知乎。看的东西挺杂的,有什么推荐就看什么,也不刻意去搜寻一些相关话题。然而绕进了伽罗瓦的怪圈中出不来了(摊手)——群论是个好东西啊!突发奇想,就打算写下这么一篇《一元高次方程寻根记杂谈》,如有谬误请各位读者予以斧正,非常感谢。不过这篇文章的主要内容和群论可能没有多大关系,只是因为一元高次方程的求解以及阿贝尔定理和群论沾了点边,仅此而已。话不多说,开始进入正题。

      高次方程一般指次数高于二次的方程。我们此处主要研究一般类型的3、4次方程及部分特殊类型的5次方程的求解,以及其相关判别式。下文中的方程,系数若无特殊说明,一般均指代实系数;且最高次项系数不为0(这条可是根据定义而一直存在的潜规则(逃))。

      先来热个身看看熟悉的一元二次方程吧。(如果说一元二次方程都不会求解的话这篇文章可以不用看下去了)我们有:

    等式两边同时除以a(因为非0,详见上方潜规则),配方,并移项,得到:

    这时我们可以知道,判别式

    对于这个方程有无重根、有无实数根有着关键的影响。当Δ>0时,方程有两个不等实根:

    当Δ=0时,方程有一个二重实根:

    当Δ<0时,方程有一对共轭虚根:

      热身完毕。接下来不妨看看一元三次方程。其历史就不必过多介绍了,随手一百度就存在一大堆。一元三次方程有两种求根公式,分别为卡当公式(也叫卡(尔)丹公式,音译;下文统一使用“卡当”)以及盛金公式。相信能够看到这里的读者们多数对于一元三次方程还是有不浅的了解的。一元三次方程的标准形长这样:

    同样地,我们可以进行除以a并配方的操作。但由于a、b、c的任意性,一般情况下我们只能消除二次项,而对一次项束手无策。配方之后长这样:

    我们可以稍作换元,令上式中括号内关于x的一次二项式这个整体为y,新的一次项系数和常数项分别为p和q,则得到:

    卡当的做法如下:先令y=A+B,其中A与B待定。我们有:

    对比该带有待定参数的恒等式与原方程,我们可以得到:

    将下式三次方,结合韦达定理,我们便能得到与

    相关的一元二次方程,其两解即分别为
    。考虑到A和B的轮换对称性,不妨令:

    则可得到一元三次方程的求根公式:

    我们知道,在复数范围内,任何一个非零数都有三个不同的三次方根。此处的

    为何如此取值呢?在上述关于A和B的联立方程组中,我们取了下式的三次方进行运算,便带入了增根。因故,开回三次根来求A和B的值时,我们还要保证A和B的乘积是一个实数,从而不得不如此取值。于是我们就得到了关于x的一元三次方程
    的求根公式:令:

    有:

    公式出来了,可是判别式呢?任意一个实数,开三次根,仍然是实数;而开二次根则需要分类,即正数或0开方得到实数,负数开方得到虚数。我们需要通过判别式来得知根的虚实以及重根的有无,因此,观察上式,判别式只能是:

    当Δ>0时,显然,

    是实数,
    都是虚数,即存在一个实根和一对共轭虚根;

    当Δ=0时,代入上式,得:

    即存在三个实根。若q非0,则其中包含一个二重根;若q=0,由于Δ=0,可推出p=0,即p=q=0时,方程有一个三重实根;

    当Δ<0时,我们知道,

    互为共轭虚数。取其辐角在
    范围内的三次根,则
    互为共轭虚数,相加即为实数。而三次单位虚根
    亦互为共轭虚数,故对应相乘后仍为共轭虚数,相加亦得到实数。因此此时方程存在三个不相等的实数根。

      自此,卡当公式、其判别式及其相关性质算是推导完毕了。然而卡当公式的繁杂,在于需先计算出p与q的值再代入计算,或可以认为,其需要通过配方消除二次项之后,再代入用于计算缺项一元三次方程的求根公式进行计算;且当Δ<0,存在三个不相等的实数根时,卡当公式需要将一对共轭虚数进行三次根的计算,便利性较差。针对该些问题,当代数学家范盛金提出的盛金公式很好地将其解决,并提出了一组新的判别式,更方便地判断根的虚实以及重根的有无。此处先将盛金公式写出,再予以证明:


    重根判别式:

    总判别式:

    (1)当A=B=0时,方程有一个三重实根,此时应用盛金公式1求解。
      盛金公式1:

    (2)当Δ>0时,方程有一个实根和一对共轭虚根,此时应用盛金公式2求解。
      盛金公式2:

      其中,

    (3)当A≠0且Δ=0时,方程有三个实根,其中包含一个二重根,此时应用盛金公式3求解。
      盛金公式3:

    (4)当Δ<0时,方程有三个不等实根,此时应用盛金公式4求解。
      盛金公式4:

      其中,

      完结。下文中将对该四条公式一一予以证明。

      公式1证明:由配方后的方程出发:

    当A=B=0时,

    ,故有:

    因此

    。由完全立方公式可知,当该方程存在三重根时,3a、b、c、3d成等比数列。因此又有
    成立。证毕。

      公式2证明:由卡当公式出发。其中,三次根号内的式子可发生如下变换:

    ,则有:

    证毕。由此顺便能够证明总判别式

    的正确性。

      公式3证明:由公式2的证明过程证明了总判别式

    的正确性,从而当重根判别式A≠0而总判别式Δ=0时,方程一定存在一个二重根。由卡当公式出发,由A≠0可知p≠0。因为:

    所以:

    故有:

    证毕。

      公式4证明:引理:由棣莫弗定理知,当

    时,有:

    此处虚数的三次方根取辐角在

    范围内的值,同上文中卡当公式的取值方法。因Δ<0,方程存在三个不等实根,由韦达定理易证:

    故重根判别式A一定为正。由卡当公式出发。其中,三次根号内的式子可发生如下变换:

    ,其中
    ,即
    ,有:

    代回卡当公式,即得盛金公式4。至此盛金公式证毕。盛金公式除了解决了上文中提到的卡当公式存在的不便之处之外,当总判别式Δ=0时,盛金公式中不存在根号,而卡当公式中仍存在三次根号,且二重根

    和总判别式
    与二次方程存在二重根时的
    和判别式
    极为相似,体现了数学中简洁、对称、和谐之美。

      一元三次方程讲完了。能够看到此处并且都能完全看懂的读者,数学水平一定不低。即将步入一元四次方程的坑,前方高能预警!一元三次方程的求根已经如此复杂,一元四次方程不说也能猜测出其复杂程度之高。

      历史上最先提出一般形式的一元四次方程的解法的是卡当的学生费拉里。以下先介绍费拉里的解法:将标准形式

    的等式两边同时除以a,并移项,有:

    引入参数y,等式两边同时加

    得:

    该式中无论y取何值均能够成立。等式左边为完全平方式,因此我们希望通过y的取值将等式右边亦配成完全平方式,则可将原方程因式分解为两个一元二次方程的乘积从而求得原方程的四个根。故有:

    这是一个关于y的一元三次方程,可通过上述的卡当公式或盛金公式求解。解得三个y的值可任取其一。由于三次方程一定存在至少一个实数根,故此处y取该实数值代入原方程方便计算。

      然而,该方法只能通过降次的方法,将一个一元四次方程降为一个一元三次方程和两个一元二次方程来求根,却无法对根的虚实以及重根的有无进行判断,在判别式方面存在一定的缺陷。结合一元三次方程中卡当公式和盛金公式的推导方法,我们可以得到如下的一元四次方程求根公式(后文中将给出严格证明。使用该方法推出的“公式”在互联网上早已有之,其形式大同小异,然而,有部分“公式”从头到尾无sgn的出现,导致根号前的符号在多数情况下出错;有部分“公式”仍存在虚数开方的情况且未给出判断根的虚实的条件;有部分“公式”在方程存在一个二重根时求该二重根仍存在开方未化简。以下公式为本文作者所给出,解决了上述提到的所有问题,并由计算机代码验证其成立,且由于不存在虚数开方的情况,使得更容易转换为计算机代码;可见于百度百科词条“一元四次方程求根公式”中):


    重根判别式:

    总判别式:

    (1)当D=E=F=0时,方程有一个四重实根,应用公式1求解。
      公式1:

    (2)当DEF≠0,A=B=C=0时,方程有一个三重实根和一个独立实根,应用公式2求解。
      公式2:

    (3)当E=F=0,D≠0时,方程有两个二重根,应用公式3求解;若D>0,方程有两个二重实根;若D<0,方程有一对二重共轭虚根。
      公式3:

    (4)当ABC≠0,Δ=0时,方程有一个二重实根,应用公式4求解;若AB>0,则其余两根为两个不等实根;若AB<0,则其余两根为一对共轭虚根。
      公式4:

    (5)当Δ>0时,方程有两个不等实根和一对共轭虚根,应用公式5求解。
      公式5:令:

      则有:

    其中,sgn表示符号因子。当n=0时,sgn(n)=0;当n≠0时,

    (6)当Δ<0时,若D与F均为正数,则方程有四个不等实根;否则方程有两对不等共轭虚根。
    <6.1>若E=0,F>0,则应用公式6求解。
      公式6:

    <6.2>若E=0,F<0,则应用公式7求解。
      公式7:

    <6.3>若E≠0,令:

    此时一定有
    ,故若D或F中有非正值即方程无实数解时,有
    成立。则公式8:

    <6.3.1>当D>0,F>0时,方程的四个不等实根可表示为:

    <6.3.2>当
    时,方程的两对共轭虚根可表示为:

      完结。下文中将对该公式予以严格证明。

      一元四次方程的一般形为:

    将其等式两边同时除以a,并配方消除三次项,得:

    ,新方程的二次项系数、一次项系数、常数项分别为p、q、r,则原方程化为关于X的缺项一元四次方程:

    设:

    由韦达定理知:

    故有:

    代入重根判别式D、E、F,有:

    再次使用韦达定理,知

    分别为关于y的一元三次方程:

    的三根。于是我们便能够代入盛金公式的判别式求得:

    然而B以负号起始,在形式上与盛金公式相异。注意只是形式上相异而已;但我们为了好看,用-B的值代替B,即:

    而总判别式

    仍未变。至此,公式中的重根判别式由来证毕。

      然而,当我们解出关于y的一元三次方程

    之后,得到的三个根并不是4aK、4aM、4aN,而是这三个值的平方。该三值的平方只要不为0,在复数范围内,其总有两个相异的平方根。当然,为0的特殊情况一定存在,但作为一般情况来考虑,我们仍需将其视作不为0的情况来讨论平方根取正值还是负值(为叙述方便,此处作特殊定义:将纯虚数中,正数倍的i、负数倍的i统称为正数、负数;实部为正数、负数的非纯虚数亦统称为正数、负数;0既是正数也是负数。下同)。返回到原方程组,观察到,其使用韦达定理化为关于y的一元三次方程时,(4aK)(4aM)(4aN)=E这一式子被平方。这就是增根的由来。我们只要确定了其中两个数的正负,便能知道第三个数取正值还是负值。不妨4aM、4aN均取正值。当上述一元三次方程有三个正根时,4aK的正负便与E相同;当上述一元三次方程有一个正根和两个负根时,不妨4aM、4aN为该二负根的正平方根,则4aM与4aN的乘积为负实数,故4aK的正负与E相反;当上述一元三次方程有一个正实根和一对共轭虚根时,不妨4aM、4aN为该对共轭虚根的正平方根,则4aM、4aN互为共轭虚数,其乘积为正实数,故4aK的正负与E相同。总结可以得出,当且仅当上述一元三次方程存在两个负根时,4aK的取值的正负与E相反,否则相同。

      当关于x的原方程存在四重根时,关于X的缺项方程理应亦存在四重根,又根据韦达定理知四根之和为0,故关于X的缺项方程理应存在四重0根,即K+M+N=K-M-N=-K+M-N=-K-M+N=0,即K=M=N=0,故关于y的一元三次方程存在三重0根,即D=E=F=0。反之,当D=E=F=0时,关于y的一元三次方程存在三重0根,故K=M=N=0,故关于X的缺项方程理应存在四重0根,即关于x的原方程存在四重根成立。由

    ,知:

    与盛金公式1的证明方式同理地,由于原方程可以化为

    ,根据二项式展开易知此时12a、3b、2c、3d、12e成等比数列,故有
    成立。公式1证毕。

      当关于x的原方程存在三重根时,关于X的缺项方程理应亦存在三重根。即K+M+N、K-M-N、-K+M-N、-K-M+N中有三个值相等且不为0。无论该四式中取何三式相等,均可得到K、M、N的绝对值均相等,即关于y的一元三次方程有一个三重根,即A=B=C=0。反之,当A=B=C=0时,关于y的一元三次方程有一个三重根,故有K、M、N的平方均相等,即K、M、N的绝对值均相等,因此K+M+N、K-M-N、-K+M-N、-K-M+N中必有三个值相等且不为0,方程存在三重根。设关于X的缺项方程能因式分解为

    ,展开得:

    故可解得:

    此时一定有D≠0,否则由A=B=C=0可推出D=E=F=0,则原方程存在一个四重根,与前设矛盾,故D可作为分母出现。由

    ,即得
    成立。公式2证毕。

      当关于x的原方程存在两个二重根时,关于X的缺项方程理应亦存在两个二重根。即K+M+N、K-M-N、-K+M-N、-K-M+N中有两个值相等且不为0,另两个值亦相等且不为0。由K、M、N的轮换对称性,不妨设K+M+N=K-M-N,-K+M-N=-K-M+N,则可得M=N=0,即关于y的一元三次方程有一个二重0根,有E=F=0成立。反之,当E=F=0时,关于y的一元三次方程有一个二重0根,则K、M、N中有且仅有两个值为0。不妨M=N=0,则K+M+N=K-M-N,-K+M-N=-K-M+N,故原方程存在两个二重根。因为E=F=0,所以易得关于y的一元三次方程的三个根分别为0、0、D。取

    ,4aM=4aN=0,则
    ,故有
    成立。公式3证毕。

      当关于x的原方程存在一个二重根时,关于X的缺项方程理应亦存在一个二重根。即K+M+N、K-M-N、-K+M-N、-K-M+N中有两个值相等,另两值不等。从该四式中任取两式相等,均可推出K、M、N中存在两数绝对值相等且不为0,故关于y的一元三次方程有一个二重非零根。此时必有ABC≠0且Δ=0。反之,若ABC≠0且Δ=0,则关于y的一元三次方程有一个二重非零根,故K、M、N中存在两数平方相等且不为0,即K、M、N中存在两数绝对值相等且不为0,因此K+M+N、K-M-N、-K+M-N、-K-M+N中有两个值相等,另两值不等,可知原方程存在一个二重根。用盛金公式求解该关于y的一元三次方程(注意盛金公式中B此处需变为-B,原因上文中有提到),得:

    令:

    则有:

    而4aK的取值,则与E以及关于y的一元三次方程有无负根有关。由韦达定理,知关于y的一元三次方程的三根之积非负,故其存在二重根时,剩余的一个单独根一定为正数或0。而该二重根则可正可负,但一定非零。当其为正即AB>0时,4aK的正负与E相同;当其为负即AB<0时,4aK的正负与E相反。故可令:

    因E与

    同时为零或同时不为零,故上式不受0的干扰,成立。然而对比公式中的取值,4aK的取值并非
    ,而是
    。下证该二值相等:前者的正负由ABE的乘积的正负来决定,后者亦如此,故两者正负性相同,只需证明其平方相等即可。当E=0时,该两者均为0,成立;当E≠0时,从结论出发反推,两边平方得:

    等价于:

    由Δ=0,知

    ,故上式等价于:

    通分,去分母,并移项,上式等价于:

    展开,等价于:

    上式括号中的式子为Δ的三分之一,故其一定为0,故该式恒成立,即当Δ=0时,

    恒成立。将4aK、M+N、M-N的值代回,并结合

    解得:

    公式4证毕。

      当Δ>0时,关于y的一元三次方程有一个正实根(或0)及一对共轭虚根。用盛金公式将该三根求出。盛金公式中的

    此处用
    表示,因为字母y已被用于表示关于y的一元三次方程中。有:

    与上文中重根判别式B类似,此处

    的形式也与盛金公式有所差异,为美观、对称起见,亦可考虑以其负值代替其本身,则有:

    此时便存在:

    我们知道,解出的三个y值分别为4aK、4aM、4aN的平方,而此处

    却是虚数,我们将要遇到虚数开方的问题。如前文中所述,我们需要取的是实部为正数的其中一个平方根。我们有:

    该式的证明略。毕竟这是一个将其两边平方之后显然可得成立的等式。由此,当n>0时,我们有:

    ,则有:

    其中,我们还有:

    故令:

    则有:

    以及:

    由于关于y的一元三次方程无负根,故4aK的正负与E相同,即:

    将K、M、N的值代回即得公式5,公式5证毕。

      当Δ<0时,关于y的一元三次方程有三个实根。由于三个实根之积为

    ,故存在0根或奇数个正根和偶数个负根。负根的存在与否对于4aK的取值有着关键的影响。我们知道,当E≠0时,通过D与F的正负易判断方程的实根为1正2负还是3正0负;E=0时,取4aK=0即可,然而我们无法直接判断
    中哪个为0,必须分类讨论,不如直接求解。当E=0时,关于y的一元三次方程除0根外另两根为:

    由韦达定理易知,若F>0,该二根同号;若F<0,该二根异号。将

    作为
    代回,并取4aK=0,可得:

    当F<0时,将该四根稍作变形便可得:

    当F>0时,两个根号可合并为一个,将其平方后合并同类项再开根便可。可化简得:

    公式6、公式7证毕。当E≠0时,若D与F均为正,则关于y的一元三次方程有三个正根,否则有一个正根和两个负根。下证其充分性:若D与F均为正,由韦达定理知:

    由最后一式,三根中的负根必成对出现。假设

    为负数,
    为正数,由第一式可得:

    代入第二式并结合基本不等式,有:

    推出与前提矛盾。故D、F均为正时一定有三个正根,充分性成立。下证其必要性:当三根均为正时,因:

    故D、F一定均为正,必要性成立。因此,Δ<0且E≠0时,D、F均为正是关于y的一元三次方程有三个正根的充要条件;反之,D、F不全为正则为关于y的一元三次方程有一个正根和两个负根的充要条件。用盛金公式求出

    的值,即:

    用辅助角公式消除sin,我们知道,
    ,用余弦函数的周期性及单调性不难证明
    。因此,当D、F均为正时,可取:

    当D、F不全为正时,可取:

    代回,即得公式8,公式8证毕。

      至此,该一元四次方程求根公式已完全证毕。

      好了,我们先等一会儿看一元五次方程,毕竟达到五次之后只有部分特殊形式才能有根式解了。来关心一下判别式这个神奇的东西吧。我们不难发现,无论是一元二次方程、一元三次方程还是一元四次方程,当且仅当(总)判别式为0时存在重根。至于重根的具体情况,我们还需通过重根判别式了解。而(总)判别式不为0时,其正负对于方程实数根的个数的影响如下表所示:

    知乎对表格支持度不太好,表格里面打汉字更是怪怪的,于是就打了英文,将就着看下吧。quadratic equation表示二次方程,括号内有“2”作为提示;real前的数字表示实根的个数。由代数基本定理知,一元n次方程在复数范围内一定有n个根,故知实根个数可推出虚根个数,表内不再呈现。然而我们发现,一元四次方程在Δ<0时,并不能直接判断实根的个数,甚至这两种可能性相差太远,全为实根和全为虚根。那么(总)判别式的本质到底是什么?我们虽然不能求出一般形式的高于四次的一元方程的根式解(阿贝尔定理在此就不证明了,网上多得是,证明起来太浪费篇幅),但我们能否求出其判别式的表达式来判断实根的个数呢?答:前半句可以,后半句有困难。表达式并不难求,但知道表达式并算出判别式之后欲通过其正负来判断实根的个数,从一元四次方程开始就已经存在问题了。只要我们写出了表达式,我们就能容易地知道为何会出现如此的问题。可以先从一元二次方程出发找找规律。当其无重根时,若有两个实数根,其差为实数,差的平方一定为正;若有一对共轭虚根,其差为纯虚数,差的平方一定为负;而存在重根时,两根之差显然为0,其平方也为0。似乎两根之差的平方与判别式有着离不开的关系。而事情确实如此,我们有:

    其中,等式右边分母为正数与非零实数的偶数次方的乘积,一定为正。故其正负仅需通过分子来判断。我们可以让

    ,也可以让
    ,这是人为规定的,只要能正确进行判别即可;我们使用后面一种只是习惯上的问题罢了。再来看三次方程。对于缺项三次方程
    而言,我们有:

    恒成立。仔细看,等式右边即为卡当公式中的Δ的相反数,故其可判别重根的有无和根的虚实。当其存在重根时,等式左边一定为0;而由卡当公式的判别法则我们知道,等式右边为0时存在重根。Δ>0时,等式右边为负。不妨

    ,则
    互为共轭虚数,乘积为正;而
    为纯虚数,平方为负,故等式左边为负,成立。Δ<0时同理可证。若代换为盛金公式,则对于一般形式的一元三次方程:

    有:

    卡当公式与盛金公式中的Δ无论形式还是数值均不相同,但其拥有相同的正负性,均可用来判别重根的有无与根的虚实。这一点也正好印证了前文(一元二次方程)中“我们可以让

    ,也可以让
    ,这是人为规定的,只要能正确进行判别即可;我们使用后面一种只是习惯上的问题罢了”这一句话。到了一元四次方程中,我们仍可以以根的减、乘来表达出Δ。即:

    一元四次方程无重根时,根的虚实有三种情况:4实0虚、2实2虚、0实4虚,但Δ只有正、负两种情况,无法构成一一对应,因此我们即便知道了Δ的值也不一定能直接判断出根的虚实情况。易证在无重根且根全为实数或全为虚数时,上式均为正。

      那不妨来看看一元五次方程的判别式?嗯,一元五次方程居然会在这里冒出来,出现得猝不及防。——对于一般形式的一元五次方程:

    我们仍可通过配方的方式将四次项消除,变为缺项一元五次方程。由于一般形式的一元五次方程的(总)判别式在形式上过于复杂,因此我们讨论缺项一元五次方程的判别式——若有大胆的读者可以尝试着将配方后得到的新系数用原系数的四则运算表示并代回判别式将其展开。那画面太美不敢想象……对于缺项一元五次方程:

    我们有:

    一共19项。项的排序有点乱,不过这是“伟大”的Microsoft Mathematics软件给我的排序——当然懒得手算了。当Δ<0时,方程有三个不等实根和一对共轭虚根;当Δ=0时,方程存在重根,重根的情况及根的虚实需通过重根判别式(若有)进一步判断;当Δ>0时,方程有五个不等实根或一个实根和两对不等共轭虚根。目前为止,(后面一小句是重点!!!)除能够一眼看出(划掉)通过直接因式分解降次来求解的一元五次方程以外(重点结束),我们所有能用根式表示出解的特殊形式的一元五次方程均有Δ≥0成立,换言之,我们还没找到合适的手段来求解有三个不等实根和一对共轭虚根的一元五次方程。而Δ=0的所有一元五次方程我们均能够用根式来表达其五根。惊不惊喜?意不意外?

      惊喜意外之余,我们不妨来求一下Δ=0时方程的根式解。有一点必须明确,Δ=0的一元五次方程真的只是所有一元五次方程中的冰山一角的冰山一角的冰山一角……求之前我们先来看看缺项式中的p、q、r、s分别代表什么吧。对于一般形式的一元五次方程:

    配方得:

    接下来我们马上就来研究一下缺项一元五次方程在Δ=0时应如何求得根式解。先证明一个小引理,当一个多项式有重根时,该重根的值必为其导函数多项式的根且重数减一。令:

    其中,G(x)中不含

    这个因式。那么我们称k为方程F(x)=0的重根
    的重数。有:

    由于G(x)中不含

    这个因式,故
    中一定也不含
    这个因式,因此在F'(x)中,根
    的重数为k-1。回到一元五次方程。因Δ=0,故方程存在重根。令:

    则f(y)=0与f'(y)=0的公共根即为方程f(y)=0重根。我们有:

    我们将其循环进行长除法,可不断降次,直到得到两个完全相同的方程(此时重根的个数大于1或根的重数大于2)或得到一元一次方程(此时方程有且仅有一个二重根)。由f(y)=0与f'(y)=0,我们一定有:

    若得到两个完全相同的方程,方程次数一定不高于四次,必能求出其根式解;若得到一元一次方程,直接可求得二重根的值,其表达式应为关于p、q、r、s的有理分式。在求得原方程的至少两解(因为有重根)之后,我们可以将因式除去,则原方程的剩余解应为一个不高于三次的一元方程的解,可用根式表达。然而,我们在联立:

    时,我们需要用下式来给上式降次。我们并不知道p是否为0,故不能贸然将上式乘以2p,将下式乘以5y然后相减降次。此时需要分类讨论。由于分类讨论过于复杂,此处不再详细展开。但我们由此能够得知,对于确定的p、q、r、s,当Δ=0时,用此方法一定能求出所有五个根的根式解。

      那么,Δ≠0时,部分特殊形式的能用根式表达出所有解的方程应该如何求解呢?我们看到,对于缺项一元三次方程,卡当设了两个待定的数,结合三次单位虚根来表达出三个根;对于一元四次方程,上文中我们也设了三个待定的数,结合正负号来表达出四个根;是不是五次方程也可以如此求解?不妨试一试。令五次单位虚根的其中一个为:

    有:

    设:

    由韦达定理知:

    这一组式子与一元三次方程和一元四次方程中通过类似方法得出的式子在形式上有极大的区别,无法通过再次使用韦达定理降次。通过这个方程组我们无法求得一般情况下K、L、M、N的根式解,故我们应当加一些额外的条件限制,来求特殊形式下的根式解。至于应该如何加条件,加什么条件,并没有一个统一的说法。例如上海财经大学应用数学系的汤健儿于2012年1月在《高等数学研究》第15卷第1期上发表的《几类能用根式求解的五次方程》一文中就给出了五种特殊形式下的一元五次方程的根式解。此处我们先挑两种最简单、常见的形式来讲解,这两种形式均需要两个约束条件。(实际上该文中给出的五种特殊形式均有两个约束条件,但并不一定至少需要两个约束条件才能求解,在讲完两种最简单、常见的形式之后,将举一种只有一个约束条件但能够用根式求解的方程)

      第一类:约束条件:

    。上式中我们令K=L=0,有:

    故存在:

    从该步起,推导过程的形式将与卡当公式相似,故过程略。由于M、N轮换对称,不妨令:

    代回,得五根。上式中二次根号内的式子的值一定不为0,否则方程将有重根,Δ=0。当其为正数时,显然原一元五次方程有一个实根和两对不等共轭虚根;当其为负数时,显然原一元五次方程有五个不等实根。结合上文中所述的Δ的正负与实根个数的关系,不难看出Δ一定>0。事实上,我们有:

    方程有五个实根时,五次根号内存在虚数,可化为三角形式,方法与上文中盛金公式4的推导方法相似,此处略。

      第二类:约束条件:

    。上式中我们令L=N=0,有:

    由q和r不难解出K与M,即:

    代回,即得五根。当且仅当

    时,方程存在重根,Δ=0,而此处Δ非零,故一定有
    成立。显然,方程恒存在一个实根和两对不等共轭虚根。事实上,我们有:

      好了那我们来看看只有一个约束条件但能用根式求解的一元五次方程的特殊形式。约束条件为:

    若p=0,该约束条件与上文中的第二类完全相同,直接用彼方法求解即可;p≠0时,上式中我们令KL=MN,则有:

    求解时仅需p、q、r,得出K、L、M、N的值之后代入最后一式,便能求出p、q、r、s间的关系,即上述约束条件。由前三式整理可得:

    观察到,有:

    由韦达定理知,

    分别为关于X的一元二次方程:

    的两根。此处的K、L、M、N并非完全轮换对称,但我们可以将有序数组(K,L,M,N)变换为(M,N,L,K),得到的新式与原式完全相同,因此我们可以认为,

    轮换对称。不妨取:

    又因为

    ,故有:

    故我们可以再次使用韦达定理求出

    的值。考虑对称性以及与s相关的等式的成立(即排除由于不完全对称可能带来的增根),可令:

    到了这一步之后,怎么求得K、L、M、N的值呢?以K为例,我们有:

    此处为何不继续化简了呢?如果大胆的话可以试试,代入太辣眼睛了……只要知道了能够如此计算便能得出精确的根式解,已经足够。L、M、N同理可得。代回即得五根。

      能看到这里并且全部看懂的人一定不简单。马上就要收尾了。文末有彩蛋哦~讲了那么多实系数一元高次方程的相关内容,我们不妨来看一下如果系数中出现了虚数,一元三次方程的卡当公式会出现什么问题吧。

      我们通常对一个虚数开三次根时,会选取辐角在

    范围内的值。这是因为,根据棣莫弗定理,两个复数相乘,模长相乘,辐角相加——进而推广到计算复数的n次方时,模长取原模长的n次方,辐角取原辐角的n倍。对任意一个虚数而言,其辐角有无数个,但辐角主值有且仅有一个,落在
    范围内。而我们用模长和辐角来表示一个虚数时,多采用其辐角主值作为辐角出现——为了方便。求出虚数的一个三次根之后,只需将其乘以三次单位虚根
    便能得到其余两个三次根。而且若默认选取辐角在
    范围内的值,则一对共轭虚数开三次根之后仍互为共轭虚数,其和为实数,积亦为实数。前文中,实系数一元三次方程的卡当公式中遇到虚数开三次根的情况便是如此取值的。然而,若扩展至复系数,三次根号内遇到虚数时直接取辐角在
    范围内的值就可能会导致求得的三个“根”均不是原方程的根。问题在这里:

    我们求得

    的值之后,假设其均为虚数,则直接取其辐角在
    范围内的三次根得到A和B之后,AB的乘积的辐角一定在
    范围内,但
    的辐角却有可能在
    范围内,如此造成了
    无法成立的严重问题。微软提供的免费版科学计算器Microsoft Mathematics功能虽强大,但在计算求系数中带有虚数的一元三次方程的根时仍直接使用卡当公式的原型,并在虚数开三次根时默认取其辐角在
    范围内的值,使得经常出现求得的三个“根”均不是原方程的根的问题。为了避免这一问题,我们仅需通过
    直接用A来表示B即可,即卡当公式变形为:

    当然,我们也可写作:

    这两种写法本质上其实是一样的。若在二次根号中遇到虚数,无需纠结使用实部为正数的平方根还是实部为负数的平方根,对比上述二式即可知其缘由。虚数开三次根时,将三个值轮流取一遍便能直接得出三根,因此上述二式中直接使用y而未写下标。安卓版的付费软件“Matlab计算器”中便使用的是变形后的式子,无论系数是否为实数均恒成立,求出的根一定是正确的原方程的三根。

      彩蛋时刻到!那么彩蛋究竟是什么呢?——常数项为虚数,其他系数为实数的缺项一元四次方程的求根公式来了!——(请自行慢慢证明)方程原形:

    什么?你要说f<0该如何是好?别急,我们算出f>0时的四虚根之后,将其都取一遍共轭便得到了f<0时的四虚根。用共轭虚数的性质易证。

    令:

    则有:

      完结!撒花~

      令和2年2月5日凌晨 水曜日(划掉)公元2020年2月5日凌晨 星期三

      Sim-CH作于上海

    展开全文
  • 一元四次方程求解方法的思考与研究 一元四次方程求解的基本思路是降次,它可以由二次、三次方程的求解得到启示.
  • 基于python编程的一元次方程求解 写在前面的话: 我是单纯感兴趣才开始自学python的,听的是中国大学MOOC(慕课)网的哈尔滨工业大学车万翔老师的授课《高级语言程序设计(Python)CAP》,网址分享给大家:...
  • 已知元一次方程x<sub>1</sub>+2x<sub>2</sub>+3x<sub>3</sub>+5x<sub>4</sub>=6,列出所有可能的自然数解,并特别求出使函数 f=2<sup>x<sub>1</sub></sup>+3<sup>x<sub>2</sub></sup>+4<sup>x<sub>3</sub></sup>+...
  • 其中,方程根的解法更是一元二次方程的重中之重,下面就给大家分析一下一元二次方程在初中学习中常见的方程的解法:[1]求解一元次方程求解一元次方程方程常见的有三种方法:(1)公式法:将一元二次方程化为一般...
  • 1.一元n非线性方程 1.1非线性函数 1.2 非线性函数案例 1.3 非线性函数的几何图形 2.扭断迭代法求非线性方程解的基本原理 2.1 概述 2.2确定误差或收敛条件 2.3迭代过程 2.3 二分法的优缺点 3. Pytho...
  • python求解多元一次方程

    千次阅读 2020-12-03 18:21:21
    想要用随机生成的数组去穷尽所有可能还是不太现实,长度为n的数列,一共就有2^n种可能,我试了一下,如果是4个数,也就是16种情况,在1000重复下,平均要随机生成53才能全部生成全部可能,最多的要156。...
  • python求解多元多次方程组或非线性方程组

    万次阅读 多人点赞 2020-02-24 18:15:05
    背景:如何使用python求解多元多次方程组或者非线性方程组。 原创内容,转载注明出处! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博主在文章基础上添加新内容也新发了新的更新...
  • 一,简介退火算法不言而喻,就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内能)越高原子态越不稳定,而温度有一个向低温...二,计算方程我们所要计算的方程是f(x) = (x - 2) * (x + 3) * (x + 8) * (...
  • 一元次方程的概念:只含有一个未知数,并且未知数的次数是1,系数不为0的方程叫做一元次方程一元次方程的标准形式是:ax+b=0 (其中x是未知数,a,b是已知数,且a≠0),它的解是x=- 。我们判断一个方程是不是...
  • 背景:如何使用python求解多元多次方程组或者非线性方程组。原创内容,转载注明出处!请勿用于商业用途!(上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博主在文章基础上添加新内容也...
  • 一元四次方程的求根公式

    千次阅读 热门讨论 2019-07-10 14:05:41
    对于一元四次方程: ax4+bx3+cx2+dx+e=0\Large a x^{4}+b x^{3}+c x^{2}+d x+e=0ax4+bx3+cx2+dx+e=0 记: {Δ1=c2−3bd+12aeΔ2=2c3−9bcd+27ad2+27b2e−72ace\Large \begin{cases} \Delta_{1}=c^{2}-3 b d+12 a e \...
  • python一元次方程式的根
  • python--二次方程求解

    2022-05-01 16:48:33
    return xx else: while is_number(xx)==False: print('不是数字,请再次输入') cc =input("请输入第一个数:") if is_number(cc)==True: break return ccprint('此程序用于计算一元次方程解,请依次输入三个数') zz...
  • Python实现3行代码解简单的一元次方程python3行本文所述实例为Python用3行代码实现解一元一次方程,代码简洁高效,具体用法如下:>>> solve("x - 2*x + 5*x - 46*(235-24) = x + 2")3236.0功能代码如下...
  • 如何用Python 和牛顿法解元一次方程组如何用Python 和牛顿法解元一次方程组我是试图用Sympy这个库来解决问题,却出错了.from math import *from pylab import *#Avoid confict betwwen sympy and mathimport ...
  • 使用Python求解方程

    千次阅读 2022-07-05 23:56:08
    例如我们要解一个这样的二元一次方程组: 当然我们可以手动写出解析解,然后写一个函数来求解,这实际上只是用 Python 来单纯做“数值计算”. 但实际上,numpy.linalg.solve 可以直接求解线性方程组.一般地,
  • M阶Runge-Kutta方法用于求解方程, dydx=f(x,y),y(a)=y0  (1)\frac{\boldsymbol{dy}}{\boldsymbol{dx}}=\boldsymbol{f}\left( \boldsymbol{x},\boldsymbol{y} \right) ,\boldsymbol{y}\left( \boldsymbol{a} \...
  • 费拉里法求解一元四次方程

    千次阅读 2018-12-22 15:01:30
    从初中接触函数和方程开始,我们就经常和一元二次方程打交道,几乎不会遇到需要求解一元三次方程或一元四次方程的问题。前段时间我看到一篇涉及到解一元四次方程的文献,我这么厉害,肯定要自己去解它一解。后来发现...
  • 一元函数的最值问题 题目 求函数y=11sin(x)+7cos(5x)y =11sin(x)+7cos(5x)y=11sin(x)+7cos(5x)在x∈[−3,3]x∈[-3,3]x∈[−3,3]内的最大值。 流程图 代码实现 # 第一步,绘制函数图像 import numpy as np ...
  • sympy 解元一次方程

    千次阅读 2020-12-03 18:21:25
    SymPy is an open source Python library for symbolic mathematics. It aims to become a full-featured computer algebra system (CAS) while keeping the code as simple as possible in order to be ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 746
精华内容 298
关键字:

python求解一元四次方程