| 違反投稿 |
>>3 の続き:
一番下のものを解として採用しましょう。初期値を変えるともう一つの解がみつかるかもしれません。
解2の性能が悪いと思ったら、改善の余地はかなりあります。ニュートン法のキーワードで調べると、たくさん情報がでてくると思います。
最後にVBAのためのヒントを載せます。
まず、ツール→マクロ→VBエディタを開いて、標準モジュールにプロシージャを追加します。解1の方針だと、基本形は、
Function sol(a, b, c)
sol=(-b+Math.Sqr(b*b-4*a*c))/(2*a)
End Function
のような感じで、あとは、Excel関数をよく見ながら、IF文を追加してください。使い方は、例えば、さきほどのシートの適当なセルに、
=sol(A1,B1,C1)
とすれば、解が返ってきます。
解2の基本形は、
Function sol2(a, b, c)
sol2 = 0
For i = 0 To 1000
sol2 = (-a * sol2 * sol2 - c) / b
Next
End Function
みたいな感じです。こちらも使いやすいように改造してみて下さい。通常、反復は回数を指定するのではなく、一つ前の反復との差を取って、それが一定値より小さくなったら、反復終了という風にします。
ご健闘をお祈りします^^ |