|
|
◆ Rpzero2()
| Sub Rpzero2 |
( |
N As |
Long, |
|
|
A() As |
Double, |
|
|
Zr() As |
Double, |
|
|
Zi() As |
Double, |
|
|
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] | Zr() | 配列 Zr(LZr - 1) (LZr >= N)
[in] 方程式の解の初期推定値の実数部. (不明であれば, iflag = 0 として推定値を設定しなくてもよい)
注 - 初期推定値はすべて異なった値であること.
[out] 求められた解の実数部. |
| [in,out] | Zi() | 配列 Zi(LZi - 1) (LZi >= N)
[in] 方程式の解の初期推定値の虚数部. (不明であれば, iflag = 0 として推定値を設定しなくてもよい)
注 - 初期推定値はすべて異なった値であること.
[out] 求められた解の虚数部. |
| [in] | IFlag | 方程式の解の初期推定値の入力フラグ.
= 0: 初期推定値は与えられていない.
<> 0: Zr()とZi()に初期推定値が与えられている. |
| [out] | S() | 配列 S(LS - 1) (LS >= N)
求められた解の誤差限界. |
| [out] | Info | = 0: 正常終了.
= -1: パラメータ N の誤り. (N < 1)
= -2: パラメータ A() の誤り. (A(0) = 0)
= -3: パラメータ Zr() の誤り.
= -4: パラメータ Zi() の誤り.
= -6: パラメータ S() の誤り.
= 1: MaxIter回の反復で収束しなかった. ゼロ点の最終推定値がZr()およびZi()に入る. 誤差限界S()は計算されない. |
| [out] | Iter | (省略可)
収束までに要した反復回数. |
| [in] | MaxIter | (省略可)
最大反復回数. (省略時 = 25 * N)
MaxIter <= 0 であれば省略時の既定値に設定する. |
- 出典
- SLATEC
- 使用例
- 次の代数方程式を解く.
x^5 + 2*x^3 + 2*x^2 - 15*x + 10 = 0
解は 1(重根), -2, ±√5i である. Sub Ex_Rpzero2()
Const N As Long = 5
Dim A(N) As Double, Zr(N - 1) As Double, Zi(N - 1) As Double, 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 Rpzero2(N, A(), Zr(), Zi(), IFlag, S(), Info)
For I = 0 To N - 1
Debug.Print Zr(I), Zi(I), S(I)
Next
Debug.Print "Info =", Info
End Sub
Sub Rpzero2(N As Long, A() As Double, Zr() As Double, Zi() As Double, 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
注 - 二重根は半分の精度でしか求められない.
|