zoukankan      html  css  js  c++  java
  • 一元三次方程求解

    Sub SolveCubicEquations(ByVal CubicEquation As String, Optional ByVal x As String = "x", Optional ByRef result As String)
    Dim a As Single, b As Single, c As Single, d As Single, temp As String, n As Byte
    Dim f As Single, g As Single, h As Single, i As Single, j As Single, alpha As Single
    CubicEquation = Replace(CubicEquation, " ", "")
    result = Replace(CubicEquation, "-", "+-")
    s = Split(Split(result, "=")(0), "+")
    For n = 0 To UBound(s)
    If s(n) Like "*" & x & "^3" Then temp = Trim(Split(s(n), x)(0)): a = IIf(temp = "-", -1, IIf(temp = "", 1, Val(temp)))
    If s(n) Like "*" & x & "^2" Then temp = Trim(Split(s(n), x)(0)): b = IIf(temp = "-", -1, IIf(temp = "", 1, Val(temp)))
    If s(n) Like "*" & x Then temp = Trim(Split(s(n), x)(0)): c = IIf(temp = "-", -1, IIf(temp = "", 0, Val(temp)))
    If IsNumeric(s(n)) Then d = s(n)
    Next
    f = c / a - b * b / (3 * a * a)
    g = 2 * b ^ 3 / (3 * a) ^ 3 - b * c / (3 * a * a) + d / a
    h = g ^ 2 / 4 + f ^ 3 / 27
    Select Case Sgn(h)
    Case -1 'Roots Are Real
    i = Sqr(g ^ 2 / 4 - h)
    j = -g / (2 * i)
    If j = 1 Then alpha = 0
    If j <> 1 Then alpha = (Atn(-j / Sqr(1 - j ^ 2)) + 2 * Atn(1)) / 3
    result = "Cubic Equations {" & CubicEquation & "} has 3 Real Roots:" & vbCrLf & String(50, "-")
    result = result & vbCrLf & x & "1=" & Format(2 * i ^ (1 / 3) * Cos(alpha) - b / (3 * a), "0.0000")
    result = result & vbCrLf & x & "2=" & Format(-i ^ (1 / 3) * (Cos(alpha) + (3 ^ 0.5) * Sin(alpha)) - b / (3 * a), "0.0000")
    result = result & vbCrLf & x & "3=" & Format(-i ^ (1 / 3) * (Cos(alpha) - (3 ^ 0.5) * Sin(alpha)) - b / (3 * a), "0.0000")
    Case 0 'All 3 Roots Are Real and Equal
    result = "Cubic Equation {" & CubicEquation & "} has 3 Equal Real Roots:" & vbCrLf & String(50, "-")
    result = result & vbCrLf & x & "1=" & Format(-(d / a) ^ (1 / 3), "0.0000")
    result = result & vbCrLf & x & "2=" & Format(-(d / a) ^ (1 / 3), "0.0000")
    result = result & vbCrLf & x & "3=" & Format(-(d / a) ^ (1 / 3), "0.0000")
    Case 1 'Only 1 Root Is Real
    i = (-g / 2 + h ^ 0.5) ^ (1 / 3)
    j = -(g / 2 + h ^ 0.5) ^ (1 / 3)
    result = "Cubic Equations {" & CubicEquation & "} has only 1 Real Roots:" & vbCrLf & String(50, "-")
    result = result & vbCrLf & x & "1=" & Format(i + j - b / (3 * a), "0.0000")
    result = result & vbCrLf & x & "2=" & Format(-(i + j) / 2 - b / (3 * a), "0.0000") & "+" & Format(Abs(i - j) * 3 ^ 0.5 / 2, "0.0000") & "*i"
    result = result & vbCrLf & x & "3=" & Format(-(i + j) / 2 - b / (3 * a), "0.0000") & "-" & Format(Abs(i - j) * 3 ^ 0.5 / 2, "0.0000") & "*i"
    End Select
    result = Replace(result, "0.0000+", "")
    result = Replace(result, "0.0000-", "")
    result = Replace(result, "0.0000", 0)
    result = Replace(result, ".0000", "")
    result = result & vbCrLf
    Debug.Print result

    End Sub

    Sub macro1()
    SolveCubicEquations "2x^3-4x^2-22x+24=0"
    SolveCubicEquations "x^3   + 6x^2   + 12x + 8 = 0"
    SolveCubicEquations "y^3   + 7y -9 = 0", "y"
    SolveCubicEquations "3z^3   + 5z  = 0", "z"
    SolveCubicEquations "-2x^3   + 8x^2  = 0", "x"
    End Sub

    返回:

    Cubic Equations {2x^3-4x^2-22x+24=0} has 3 Real Roots:
    --------------------------------------------------
    x1=4
    x2=-3
    x3=1

    Cubic Equation {x^3+6x^2+12x+8=0} has 3 Equal Real Roots:
    --------------------------------------------------
    x1=-2
    x2=-2
    x3=-2

    Cubic Equations {y^3+7y-9=0} has only 1 Real Roots:
    --------------------------------------------------
    y1=1.0971
    y2=-0.5485+2.8112*i
    y3=-0.5485-2.8112*i

    Cubic Equations {3z^3+5z=0} has only 1 Real Roots:
    --------------------------------------------------
    z1=0
    z2=1.2910*i
    z3=1.2910*i

    Cubic Equations {-2x^3+8x^2=0} has 3 Real Roots:
    --------------------------------------------------
    x1=4
    x2=0
    x3=0

  • 相关阅读:
    Nginx的Mainline version、Stable version、Legacy version的版本区别
    十个程序员必备的网站推荐
    各大OJ题目分类
    ubuntu 12 安装bcm 43142无线网卡驱动
    unp.h
    Linux优秀软件整理
    陈皓一起写Makefile 概述
    开源资源目录
    (三)鸟哥Linux读书笔记
    CSS3实现选项卡
  • 原文地址:https://www.cnblogs.com/fengju/p/6336290.html
Copyright © 2011-2022 走看看