XLPack 7.0
XLPack 数値計算ライブラリ (Excel VBA) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ Dka()

Sub Dka ( N As  Long,
A() As  Complex,
Z() As  Complex,
Info As  Long,
Optional Iter As  Long,
Optional MaxIter As  Long = 0 
)

高次代数方程式 (複素係数, 複素解) (3 次 DKA 法)

目的
本ルーチンは複素係数の多項式p(z)のすべてのゼロ点を3次のDKA(Durand-Kerner-Aberth)法により求める.
p(z) = a0*z^n + a1*z^(n-1) + ... + an
引数
[in]N方程式の次数. (N >= 1)
[in]A()配列 A(LA - 1) (LA >= N + 1)
p(z)の複素係数ベクトル (a0 〜 an).
[out]Z()配列 Z(LZ - 1) (LZ >= N)
求められた解.
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N <= 0)
= -2: パラメータ A() の誤り.
= -3: パラメータ Z() の誤り.
= 1: 最大反復回数を超えた.
[out]Iter(省略可)
収束までに要した反復回数.
[in]MaxIter(省略可)
最大反復回数. (省略時 = 10 * N)
MaxIter <= 0 であれば省略時の既定値に設定する.
出典
森正武「FORTRAN77数値計算プログラミング(増補版)」岩波書店 (1987)
使用例
次の代数方程式を解く.
x^3 + (-19-14i)*x^2 + (67+191i)*x + 116-612i = 0
解は 8 + 4i, 4 + 9i, 7 + i である.
Sub Ex_Dka()
Const N As Long = 3
Dim A(N) As Complex, Z(N - 1) As Complex
Dim Iter As Long, Info As Long, I As Long
A(0) = Cmplx(1): A(1) = Cmplx(-19, -14): A(2) = Cmplx(67, 191)
A(3) = Cmplx(116, -612)
Call Dka(N, A(), Z(), Info, Iter)
For I = 0 To N - 1
Debug.Print Creal(Z(I)), Cimag(Z(I))
Next
Debug.Print "Iter =", Iter, "Info =", Info
End Sub
Function Cmplx(R As Double, Optional I As Double=0) As Complex
複素数の作成
Function Cimag(A As Complex) As Double
複素数の虚数部
Function Creal(A As Complex) As Double
複素数の実数部
Sub Dka(N As Long, A() As Complex, Z() As Complex, Info As Long, Optional Iter As Long, Optional MaxIter As Long=0)
高次代数方程式 (複素係数, 複素解) (3 次 DKA 法)
実行結果
8 4
4 9
7 0.999999999999997
Iter = 5 Info = 0