• ベストアンサー

数値計算の方法

先に三角関数を含む式の質問をしたものです。 例の式は解に近いところのデータがとれておりますので ニュートン法、2分法などを検討したのですが 式の微分方法が不明なことと、精度が10^(-8)を 最低限保障するために、 両方とも不可と思います。 他に知られている方法はございますでしょうか。 エクセルVBAで解法を考えています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • inara
  • ベストアンサー率72% (293/404)
回答No.2

回答数が少ないなのでちょっと質問します。 「yという数値を共有する」というのは、式(1)=式(2)という意味でしょうか?だとしたら、f(K1)=式(1)-式(2)=0の解K1を求めたいということですね。K1以外のパラメータがR,Xx,Yy,R1,Atと5個もあって、しかもその値は我々には分からないので、いったい解がいくつあるのか分かりません。 >式の微分方法が不明なことと とありますが、f(K1)をK1で微分すると以下のようになります(長ったらしい式ですが)。 f'(K1)=-(R+Xx)*sin(K1)+2*R*sin(K1)+(R*K1-Yy)*cos(K1)+R1*sin(K1-arctan((R*K1-Yy)/Xx))*(1-R/(Xx*(1+(R*K1-Yy)^2/(Xx^2))))-R*cos(At)*sin(K1+At)-R*K1*cos(At)*cos(K1+At) ニュートン法では初期値の選択を誤ると解に行き着きませんが、「解に近いところのデータがとれております」とのことですので、よほど複雑なふるまいの関数でない限り解けるはずです。2分法なら微分も必要ないのでなおさらです。 >精度が10^(-8)を最低限保障するために これはf(K1)=0の精度として±1e-8必要なのか、K1の絶対精度が±1e-8なのか、相対精度が±1e-8なのか分かりませんが、後2つならVBAの倍精度を使えば問題ないと思います。f(K1)=0の精度として±1e-8必要な場合、5個のパラメータの値が未知なため、f(K1)がK1に対してどれくらい敏感に動くのか不明ですので、倍精度で充分かどうか判断できません。 y=f(K1)のグラフを描けば解がどこにどれくらいあって、K1に対してf(K1)の変動がどれくらい敏感なのかだいたい分かると思います。

catshoes01
質問者

お礼

補足とお礼を混同しました。申しわけありません。 微分式についてですが、K1という変数はSin,Cosだけでなく 一般項(三角関数の記述の外)にもあるのですが、間違いないでしょうか。 例:(R * K1 - Yy) * Sin(K1)   R * K1 * Cos(At) * Sin(K1 + At) など 今検証中ですが、本当にすみませんがよろしくお願いします。

catshoes01
質問者

補足

R,Xx,Yy,R1,At は既知の数値です。未知数ではありません。 ニュートンの収束精度が10^(-8)を別の箇所で適応していますが R,Xx,Yy,R1,At の数値自体はその適用の範囲外なのでエクセル の持つ精度は維持しています。 yという数値は式(1)=式(2)という意味  その通りです。 f'(K1)=-(R+Xx)*sin(K1)+2*R*sin(K1)+(R*K1-Yy)*cos(K1)+R1*sin(K1-arctan((R*K1-Yy)/Xx))*(1-R/(Xx*(1+(R*K1-Yy)^2/(Xx^2))))-R*cos(At)*sin(K1+At)-R*K1*cos(At)*cos(K1+At) ニュートン法では初期値の選択を誤ると解に行き着きませんが、「解に近いところのデータがとれております」とのことですので、よほど複雑なふるまいの関数でない限り解けるはずです。2分法なら微分も必要ないのでなおさらです。 大変感謝します。実用に生かすのが目的なので、これだけで充分回答を得た と思います。(収束精度の問題がありますが) 関連する質問ですみませんが ニュートンの式で収束精度を10^(-12)程度にするとエラーが 発生します。原因と対策をご教示お願いします。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • age_momo
  • ベストアンサー率52% (327/622)
回答No.3

あくまでも実用上と言うことであればExcelのソルバーも使ってみることをお勧めします。 (少し質問の趣旨とは違いますが) まず、WorkSheetにK1の値を入れるセルを決め、これを参照する形でy1、y2を求める 式を書き、最後にy1-y2を書きます。(直接、y1-y2を書いてもかまいません) 次に、ツール ⇒ アドイン・・・ ⇒ ソルバー にチェックを入れるとツールのところに ソルバーが出てきますのでy1-y2が入ったセルを目的セルに設定して(目標値0)、K1の値が 入ったセルを変化させるセルに指定すると目的セルが0になるような数値を探してくれます。 精度に関してはソルバーの設定のところで精度を決めるところがありますので これに1E-14を入れておくと差がこの値になるまで探索を実行してくれます。 ひたすら数値だけを求めたい時にはお勧めです。

catshoes01
質問者

お礼

ありがとうございます。ソルバーの存在はしりませんでした。 ただ、計算式自体が機密事項で、やはりコードを記述する形で 処理したいと思います。 VBAのリバースエンジニアリングはC言語レベルの解読ができない 限り先ず不可能な手法を開発しています。

すると、全ての回答が全文表示されます。
  • ko-an
  • ベストアンサー率0% (0/1)
回答No.1

微分方法が不明であるならば数値微分すればよろしいのではないでしょうか?

catshoes01
質問者

補足

ありがとうございます。 収束値が与えられている場合でも数値微分は可能なのでしょうか。 もしかしたら数値微分の意味を当方取り違えているのかもしれませんが。

すると、全ての回答が全文表示されます。

関連するQ&A