ゴールシークとマクロ ① 無限遠からのアプローチ(2)

先日は、複数の解を持つ関数についてゴールシークを行う場合、限りなく大きな値から探しに行くことを検討してみた。
infoment.hatenablog.com
結果、消費税のように単純な計算式の場合、「10の30乗」という大きな値からのアプローチでも、一瞬で計算できることがわかった。

そしてここから、つまづきの連続が始まる。
f:id:Infoment:20190331103434p:plain

まず、複数の解があるというのに、消費税という「一次関数」で検証した点を反省し、4次関数で試してみた。
f:id:Infoment:20190331103700p:plain

この関数で y=0となるのは、以下の四通りだ。

  1. x=1
  2. x=2
  3. x=3
  4. x=4

では、この数式に於いて「10の30乗」からy=0となるxの値をゴールシークで求めるとどうなるか、試してみた。先日の検証では、10の30乗に最も近い「4」が求まるはずだ。

Sub GoalSeekTest()
    Range("G3") = 10 ^ 30
    Range("H3").GoalSeek Goal:=0, ChangingCell:=Range("G3")
End Sub

結果は、以下の通り。
f:id:Infoment:20190331104443p:plain

謎の数値が返ってきた。どうやら次数が高い方程式の場合、あまりにも遠くからゴールを目指すと、正しい答えを導けないらしい。

その後に検証したところ、開始位置となる値を充分小さくすれば、正解に辿り着けることが分かった。
f:id:Infoment:20190331105324p:plain

しかし、関数の次数で開始位置を求めるのは難しい。そもそも、どのような理屈でゴールシークを行っているか分からないので、仕組みの作りようがない。さて、どうしよう。

これが、第一の躓き。
※まだ解決していません。次回に続きます。

参考まで。