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