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