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

◆ Cpqr79()

Sub Cpqr79 ( N As  Long,
A() As  Complex,
Z() As  Complex,
Info As  Long 
)

高次代数方程式 (複素係数, 複素解) (随伴行列法)

目的
本ルーチンは複素係数の多項式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).
[out]Z()配列 Z(LZ - 1) (LZ >= N)
求められた解.
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N <= 0)
= -2: パラメータ A() の誤り. (A(0) = 0)
= 1: 随伴行列の固有値を求める際に最大反復回数(30回)以内に収束しなかった.
出典
SLATEC
使用例
次の代数方程式を解く.
x^3 + (-19-14i)*x^2 + (67+191i)*x + 116-612i = 0
解は 8 + 4i, 4 + 9i, 7 + i である.
Sub Ex_Cpqr79()
Const N As Long = 3
Dim A(N) As Complex, Z(N - 1) As Complex
Dim 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 Cpqr79(N, A(), Z(), Info)
For I = 0 To N - 1
Debug.Print Creal(Z(I)), Cimag(Z(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 Cpqr79(N As Long, A() As Complex, Z() As Complex, Info As Long)
高次代数方程式 (複素係数, 複素解) (随伴行列法)
実行結果
4 9.00000000000001
7.99999999999999 3.99999999999998
7.00000000000001 1.00000000000001
Info = 0