6. 代数方程式

代数方程式のXLPackによる解き方の例を示します。

例題

次の方程式を解く。

    x5 + 2x3 + 2x2 - 15x + 10 = 0

これは、因数分解できて、

    (x - 1)2(x + 2)(x2 + 5) = 0

となるので、解は 1(重根)、-2、±√5i となります。

以下、ワークシート関数WRpzero2とVBAサブルーチンRpzero2を使った2種類の解き方を説明します。

ワークシート関数を使用した解き方

ワークシートの適当な場所に代数方程式の係数aiを入力します。次に、WRpzero2関数を使用して解(図のx(r), x(i)およびs(i))を入れるためのセルを(n + 1) x 3セル選択します。数式バーのfxをクリックしてWRpzero2を選択します。

必要なパラメータ(ここでは、N, A())の入力を要求されるので、それぞれに適切な値を入力します。Nは次数(この例では5)、A()は係数が入っているセル範囲です。

入力が終了したらCtrl+Shift+Enterを押します。

これで、5つの解が正しく求められました。なお、一番右の列(s(i))は誤差限界を表します。

重根(1)については精度が半分程度に落ちているのがわかります。代数方程式の計算においては、m重根を求める場合には解の有効桁数がおおよそ1/mになるとされているので注意が必要です。

VBAプログラムを使用した解き方

上と同じ例題をVBAプログラムにより解いてみます。VBAサブルーチンRpzero2を使ったプログラム例を示します。

Sub Start()
    Const NMax = 10
    Dim N As Long
    Dim A(NMax) As Double, XR(NMax) As Double, XI(NMax) As Double, S(NMax) As Double
    Dim IFlag As Long, Info As Long, Iter As Long, I As Long
    '--- Input data
    N = 5
    For I = 0 To N
        A(I) = Cells(4 + I, 1)
    Next
    '--- Compute roots of equation
    IFlag = 0
    Call Rpzero2(N, A(), XR(), XI(), IFlag, S(), Info, Iter)
    Cells(9, 2) = Info
    Cells(9, 3) = Iter
    '--- Output roots
    For I = 0 To N - 1
        Cells(4 + I, 2) = XR(I)
        Cells(4 + I, 3) = XI(I)
        Cells(4 + I, 4) = S(I)
    Next
End Sub

所定の位置にデータを入力し、マクロStartを実行すると次のように上と同じ結果が得られます。

Top