7. 非線形方程式 (1変数)
注 – 例題ワークシートをダウンロードすることができます. 1. 例題ワークシートの入手と使用方法 をご覧ください.
1 変数の非線形方程式の解き方 (一般の非線形関数のゼロ点の求め方) の XLPack による解き方の例を説明します.
例題
次の方程式を解く.
f(x) = x3 - 2x - 5 = 0
f(x) の形を確認するためにグラフを描いてみます.
ゼロ点は x = 2 付近にあることがわかるので, ゼロ点を挟む区間として [1, 3] を採用することにします.
VBA プログラムを使用した解き方 (1)
VBAサブルーチン Dfzero を使ったプログラム例を示します.
Function F(X As Double) As Double
F = X ^ 3 - 2 * X - 5
End Function
Sub Start()
Dim Ax As Double, Bx As Double, Rx As Double, Re As Double, Ae As Double, Info As Long
'--- Input data
Ax = 1
Bx = 3
Rx = Ax
Re = 0.000000000000001 '1e-15
Ae = Re
'--- Compute zero of equation
Call Dfzero(AddressOf F, Ax, Bx, Rx, Re, Ae, Info)
'--- Output zero
MsgBox Str(Ax) & " (Info = " & Str(Info) & ")"
End Sub
目的関数を外部関数として用意し, 区間と要求精度を指定して呼び出します. 確実にゼロ点を挟む区間を与えるように注意が必要です.
このプログラムを実行すると, X = 2.0945514815 が得られます.
VBAプログラムを使用した解き方 (2)
リバースコミュニケーション版のVBAサブルーチン Dfzero_r を使ったプログラム例を示します.
Sub Start()
Dim Ax As Double, Bx As Double, Rx As Double, Re As Double, Ae As Double, Info As Long
Dim XX As Double, YY As Double, IRev As Long
'--- Input data
Ax = 1
Bx = 3
Rx = Ax
Re = 0.000000000000001 '1e-15
Ae = Re
'--- Compute zero of equation
IRev = 0
Do
Call Dfzero_r(Ax, Bx, Rx, Re, Ae, Info, XX, YY, IRev)
If IRev <> 0 Then YY = XX ^ 3 - 2 * XX - 5
Loop While IRev <> 0
'--- Output zero
MsgBox Str(Ax) & " (Info = " & Str(Info) & ")"
End Sub
目的関数を外部関数として与えるのではなく, IRev = 1のときに XX の値を使って関数値を計算し YY に入れて再度 Dfzero_r を呼び出します. リバースコミュニケーション版の詳細については こちら を参照してください.
このプログラムを実行すると上と同じ結果が得られます.
ソルバーを使用した解き方
XLPackソルバーアドインの「1変数非線形方程式」を使って解くこともできます. B7セルに数式 (=B6^3-2*B6-5) が入力されています.
ソルバーについては こちら も参照ください.