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

◆ Cpzero()

Sub Cpzero ( N As  Long,
A() As  Complex,
Z() As  Complex,
IFlag As  Long,
S() As  Double,
Info As  Long,
Optional Iter As  Long,
Optional MaxIter As  Long = 0 
)

高次代数方程式 (複素係数, 複素解) (ニュートン法)

目的
本ルーチンは複素係数の多項式p(z)のすべてのゼロ点をニュートン法により求める.
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).
[in,out]Z()配列 Z(LZ - 1) (LZ >= N)
[in] 方程式の解の初期推定値. (不明であれば, IFlag = 0 として推定値を設定しなくてもよい)
  注 - 初期推定値はすべて異なった値であること.
[out] 求められた解.
[in]IFlag方程式の解の初期推定値の入力フラグ.
= 0: 初期推定値は与えられていない.
<> 0: Z()に初期推定値が与えられている.
[out]S()配列 S(LS - 1) (LS >= N)
求められた解の誤差限界.
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N < 1)
= -2: パラメータ A() の誤り. (A(0) = 0)
= -3: パラメータ Z() の誤り.
= -5: パラメータ S() の誤り.
= 1: MaxIter回の反復で収束しなかった. ゼロ点の最終推定値がZ()に入る. 誤差限界S()は計算されない.
[out]Iter(省略可)
収束までに要した反復回数.
[in]MaxIter(省略可)
最大反復回数. (省略時 = 25 * N)
MaxIter <= 0 であれば省略時の既定値に設定する.
出典
SLATEC
使用例
次の代数方程式を解く.
x^3 + (-19-14i)*x^2 + (67+191i)*x + 116-612i = 0
解は 8 + 4i, 4 + 9i, 7 + i である.
Sub Ex_Cpzero()
Const N As Long = 3
Dim A(N) As Complex, Z(N - 1) As Complex, S(N - 1) As Double
Dim IFlag 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)
IFlag = 0
Call Cpzero(N, A(), Z(), IFlag, S(), Info)
For I = 0 To N - 1
Debug.Print Creal(Z(I)), Cimag(Z(I)), S(I)
Next
Debug.Print "Info =", Info
End Sub
実行結果
8 4 6.12410216962375E-13
4 9 2.62419907575987E-13
7 1 2.49188840222312E-13
Info = 0