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

◆ Dfzero_r()

Sub Dfzero_r ( B As  Double,
C As  Double,
R As  Double,
Re As  Double,
Ae As  Double,
Info As  Long,
XX As  Double,
YY As  Double,
IRev As  Long 
)

非線形方程式 (リバースコミュニケーション版)

目的
本ルーチンは与えられた値BとCの間にある f(x) = 0 の解を求める. 探索範囲[B, C]を要求精度まで(abs(B - C) <= 2*(Re*abs(B) + Ae)となるまで)縮小していくことにより解を求める.
本ルーチンは主としてf(B)とf(C)が反対の符号を持つ問題用に設計されている. 二分法とセカント法を有効に組み合わせた方法が使われている.
引数
[in,out]B[in] 探索範囲の下端.
[out] 最終探索範囲の下端 (求められた解).
[in,out]C[in] 探索範囲の上端.
[out] 最終探索範囲の上端.
[in]R収束を速めるためにゼロ点の推定値を与える. もし, よい推定値が不明ならばRにはBまたはCの値を設定するとよい.
[in]Re収束判定に使用する相対誤差. 要求値が小さすぎる場合, 計算機イプシロンの数倍程度に設定される.
[in]Ae収束判定に使用する絶対誤差. 探索範囲[B, C]が0を含む場合, 0以外の数値を与えなければならない.
[out]Info= 0: 正常終了.
= 1: f(x) = 0 であるが, 解の区間幅が要求精度に達していない可能性がある.
= 2: Bがf(x)の特異点の近傍にある可能性がある.
= 3: 探索範囲内でf(x)の符号が変わらなかった.
= 4: 関数評価回数が上限(500)を超えた.
[out]XXIRev = 1: 関数値を求めるべき点.
[in]YYIRev = 1: 再呼び出し時に関数値f(XX)を与えること.
[in,out]IRevリバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に 0 に設定しておくこと. 2回目以降の呼び出し時には値を変更してはならない.
[out] 0 以外の時には下記処理を行ってから再び本ルーチンを呼び出すこと.
= 0: 処理終了. 正常終了かどうかはInfoをチェックすること.
= 1: XXにおける関数値f(XX)をYYに設定すること. YY以外の変数を変更してはならない.
出典
D. Kahaner, C. Moler, S. Nash, "Numerical Methods and Software", Prentice-Hall (1989)
使用例
次の方程式の区間[1, 3]における解を求める.
x^3 - 2x - 5 = 0
Function FDfzero(X As Double) As Double
FDfzero = X ^ 3 - 2 * X - 5
End Function
Sub Ex_Dfzero_r()
Dim B As Double, C As Double, R As Double, Re As Double, Ae As Double
Dim Info As Long
Dim XX As Double, YY As Double, IRev As Long
B = 1: C = 3: R = B
Re = 0: Ae = 0
IRev = 0
Do
Call Dfzero_r(B, C, R, Re, Ae, Info, XX, YY, IRev)
If IRev <> 0 Then YY = FDfzero(XX)
Loop While IRev <> 0
Debug.Print "X =", B
Debug.Print "Info =", Info
End Sub
Sub Dfzero_r(B As Double, C As Double, R As Double, Re As Double, Ae As Double, Info As Long, XX As Double, YY As Double, IRev As Long)
非線形方程式 (リバースコミュニケーション版)
実行結果
X = 2.09455148154233
Info = 0