|
|
◆ Rpzero()
| Sub Rpzero |
( |
N As |
Long, |
|
|
A() As |
Double, |
|
|
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^5 + 2*x^3 + 2*x^2 - 15*x + 10 = 0
解は 1(重根), -2, ±√5 である. Sub Ex_Rpzero()
Const N As Long = 5
Dim A(N) As Double, Z(N - 1) As Complex, S(N - 1) As Double
Dim IFlag As Long, Info As Long, I As Long
A(0) = 1: A(1) = 0: A(2) = 2: A(3) = 2: A(4) = -15: A(5) = 10
IFlag = 0
Call Rpzero(N, A(), Z(), IFlag, S(), Info)
For I = 0 To N - 1
Next
Debug.Print "Info =", Info
End Sub
Function Cimag(A As Complex) As Double 複素数の虚数部
Function Creal(A As Complex) As Double 複素数の実数部
Sub Rpzero(N As Long, A() As Double, Z() As Complex, IFlag As Long, S() As Double, Info As Long, Optional Iter As Long, Optional MaxIter As Long=0) 高次代数方程式 (実数係数, 複素解) (連立法(2 次法))
- 実行結果
1.0000000135981 2.14625358292393E-08 1.26597932122911E-07
1.48298437403299E-18 2.23606797749979 8.99528943854828E-15
-2 1.15041631099093E-19 7.53855142372064E-15
7.94241311875315E-17 -2.23606797749979 9.06723080094738E-15
0.999999987046461 -2.24784161738852E-08 1.26578540844987E-07
Info = 0
注 - 二重根は半分の精度でしか求められない.
|