XLPack 7.0
XLPack 数値計算ライブラリ (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 
)

高次代数方程式 (複素係数, 複素解) (連立法(2 次法))

目的
本ルーチンは複素係数の多項式p(z)のすべてのゼロ点を連立法(2 次法)により求める.
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
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 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)
高次代数方程式 (複素係数, 複素解) (連立法(2 次法))
実行結果
8 4 6.12410216962375E-13
4 9 2.62419907575987E-13
7 1 2.49188840222312E-13
Info = 0