Anúncio
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Anúncio

Mais de Katsuhiro Morishita(20)

Último(20)

Anúncio

VBAで数値計算 04 ニュートン法

  1. 2017-01更新 熊本高専 森下功啓 VBAで 数値計算04
  2. 本資料の目次 ニュートン法 練習問題 その他 2
  3. ニュートン法 f(x) = 0をxについて解く 3
  4. ニュートン法とは、𝑥𝑥軸と関数 𝑓𝑓(𝑥𝑥)の交点を求めるアルゴリズム 4 O 𝑥𝑥 𝑦𝑦 𝑦𝑦 = 𝑓𝑓 𝑥𝑥 = 0となる 座標を求める 𝑓𝑓(𝑥𝑥)
  5. ニュートン法のアルゴリズム 5 ①𝑥𝑥𝑘𝑘の初期値𝑥𝑥0 更新値𝑥𝑥1 ②𝑓𝑓 𝑥𝑥0 を計算 ③𝑥𝑥0における接線の傾き(==微分値)を求める ④接線とy = 0の交点の𝑥𝑥座標で𝑥𝑥𝑘𝑘を更新 ⑤以下、解が収束するまで繰り返す O 𝑥𝑥 𝑦𝑦
  6. この戦略で上手くいかないケース 関数の形や初期値によっては発散する事が有ります。 ループ回数に制限を付けましょう。 6 O 𝑥𝑥 𝑦𝑦 𝑓𝑓(𝑥𝑥) End Less *そもそもy=0となる点がない場合も上手くいかない。
  7. 実装戦略 プログラムをどう組むか考えてみる。 7 ①𝑥𝑥𝑘𝑘の初期値𝑥𝑥0 更新値𝑥𝑥1 ②𝑓𝑓 𝑥𝑥0 を計算 ③𝑥𝑥0における接線の傾きを求める ④接線とy = 0の交点の𝑥𝑥座標で𝑥𝑥𝑘𝑘を更新 ⑤以下、解が収束するまで繰り返す O ループ構造 微分が必要 yが0近傍でループを脱出 また、ループ回数の制限で脱出 直線の式ってどんな だったか・・・ 接線の式に0を代入して xについて解く 𝑥𝑥 𝑦𝑦
  8. 実装のイメージ 8 Dim x As Double Dim y As Double Dim count As Integer x = 100 y = 100 count = 0 Do ‘ y = f(x)を求める ‘ f’(x)を求める ‘ 接線のy=0でnew_xを求める。 x = new_x count = count + 1 Loop while y > 0.01 And count < 1000 ループ構造 微分が必要 接線の式に0を代入して xについて解く yが0近傍でループを脱出 また、ループ回数の制限で脱出 @VBA
  9. (応用)1変数連立方程式を解く 9 𝑓𝑓 𝑥𝑥 = 𝑔𝑔 𝑥𝑥 𝑓𝑓 𝑥𝑥 − 𝑔𝑔 𝑥𝑥 = 0 ニュートン法を使って2つの方程式が等しい場合の解を求める ことができます。移項して片側を0にするのがコツです。
  10. 別のアプローチ 2分法や最急降下法もf(x)=0の解を求めることができます。こ れらは計算に時間がかかりますが、発散しません。特に2分法 は解があれば必ず求まります。将来、ニュートン法でうまく 行かなかったら試してみて下さい。 10
  11. 練習問題 11
  12. 問1 ニュートン法 ニュートン法を使ってy=0の解となる自明でないxを求めたい。 y=ax3+bx2+cx+d=0(係数は任意)を解くプログラムを作成 せよ。 12
  13. 問2 ニュートン法 20 log ax=5 上記の式において、係数aを任意としxを求めよ。 13
  14. 問3 極値 ニュートン法は関数の極値を調べることにも使える。極大値や極 小値において微分係数は0であるので、関数の理論微分の式さえ分 かれば理論微分式=0と置いてこれをxについて解けば良い。 以下の関数の極値をプログラムを用いて求めよ。理論微分は手計 算で良い。複数の極がありうることに留意せよ。 14 𝑦𝑦 = 3𝑥𝑥5 + 5𝑥𝑥4 − 7𝑥𝑥3 + 2𝑥𝑥2 − 1𝑥𝑥 + 3
  15. チャレンジ問題 (暇ならやってみよう) 今、xのn次関数を考える。n次関数はy=anxn+…という形をし ている。式で書くと式(1)となる。 15 𝑦𝑦 = � 𝑖𝑖=0 𝑛𝑛 𝑎𝑎𝑖𝑖 𝑥𝑥𝑖𝑖 式(1) ここで、係数を配列に入れておくものとする。配列の要素番 号が指数を表す。 1階微分した関数の係数を計算する関数を実装せよ。
  16. その他 16
  17. 参考文献 SAK Streets - VB 開発言語資料  http://sak.cool.coocan.jp/w_sak3/doc/sysbrd/sak3vb.htm  基本的にVB6.0の解説だが、VBAにほぼそのまま適用できる。かなり詳しい。 17
Anúncio