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

◆ Rpqr79()

Sub Rpqr79 ( N As  Long,
A() As  Double,
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^5 + 2*x^3 + 2*x^2 - 15*x + 10 = 0
解は 1(重根), -2, ±√5 である.
Sub Ex_Rpqr79()
Const N As Long = 5
Dim A(N) As Double, Z(N - 1) As Complex, S(N - 1) As Double
Dim Info As Long, I As Long
A(0) = 1: A(1) = 0: A(2) = 2: A(3) = 2: A(4) = -15: A(5) = 10
Call Rpqr79(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 Cimag(A As Complex) As Double
複素数の虚数部
Function Creal(A As Complex) As Double
複素数の実数部
Sub Rpqr79(N As Long, A() As Double, Z() As Complex, Info As Long)
高次代数方程式 (実数係数、複素解) (随伴行列法)
実行結果
-2 0
-2.1094237467878E-15 2.23606797749979
-2.1094237467878E-15 -2.23606797749979
0.999999999999999 2.75985349470833E-08
0.999999999999999 -2.75985349470833E-08
Info = 0