vbaで数値計算 05 数値積分
TRANSCRIPT
2017-01更新 熊本高専森下功啓
VBAで数値計算05
本資料の目次
数値積分練習問題その他
2
数値積分3
定積分積分とは微分の逆操作定積分は、幾何学的にはある区間の面積を求めていることに等しい。加速度を積分すると速度が求まり、速度を積分すると移動距離が求まる。例えば、地震計の観測した加速度を2回積分すると地震計の変位が求まる。角速度を積分すると旋回角度が求まる。
4O
𝑥𝑥
𝑦𝑦
𝑎𝑎 𝑏𝑏
𝑓𝑓(𝑥𝑥)
�𝑎𝑎
𝑏𝑏𝑓𝑓 𝑥𝑥 𝑑𝑑𝑥𝑥 = 𝑆𝑆
𝑆𝑆面積
積分計算の定義
定積分の近似解として、短冊の面積の和を求めます。十分に分割数が多ければ高い精度が出るでしょう。
5
O𝑥𝑥
𝑦𝑦
𝑥𝑥0 𝑥𝑥𝑛𝑛∆𝑥𝑥
�𝑥𝑥0
𝑥𝑥𝑛𝑛𝑓𝑓 𝑥𝑥 𝑑𝑑𝑥𝑥 = lim
𝑛𝑛→∞�𝑘𝑘=0
𝑛𝑛−1
𝑓𝑓 𝑥𝑥𝑘𝑘 ∆𝑥𝑥
𝑓𝑓(𝑥𝑥)
*短冊の数が増える(分割数が増える)と、精度が向上する。
∆𝑠𝑠𝑘𝑘 = 𝑓𝑓 𝑥𝑥𝑘𝑘 ∆𝑥𝑥
𝑘𝑘番目の微小領域の面積
6
空白が目立ちます。誤差が大きそうですね?誤差を減らしましょう。
台形積分
誤差を減らすために、短冊の形を長方形から台形に変えます。
7
∆𝑠𝑠𝑘𝑘 =12 𝑓𝑓 𝑥𝑥𝑘𝑘 + ∆𝑥𝑥 + 𝑓𝑓 𝑥𝑥𝑘𝑘 ∆𝑥𝑥
𝑘𝑘番目の微小領域の面積
�𝑥𝑥0
𝑥𝑥𝑛𝑛𝑓𝑓 𝑥𝑥 𝑑𝑑𝑥𝑥 = lim
𝑛𝑛→∞�𝑘𝑘=0
𝑛𝑛−112 𝑓𝑓 𝑥𝑥𝑘𝑘 + ∆𝑥𝑥 + 𝑓𝑓 𝑥𝑥𝑘𝑘 ∆𝑥𝑥
(𝑥𝑥𝑘𝑘 , 𝑓𝑓 𝑥𝑥𝑘𝑘 )
(𝑥𝑥𝑘𝑘 + ∆𝑥𝑥, 𝑓𝑓 𝑥𝑥𝑘𝑘 + ∆𝑥𝑥 )
∆𝑥𝑥
𝑓𝑓 𝑥𝑥𝑘𝑘 + ∆𝑥𝑥 + 𝑓𝑓 𝑥𝑥𝑘𝑘
台形2つ分の面積 = (上辺+下辺)高さ
実装戦略
プログラムをどう組むか考えてみる。まずは近似式に変換する。
8
�𝑥𝑥0
𝑥𝑥𝑛𝑛𝑓𝑓 𝑥𝑥 𝑑𝑑𝑥𝑥~ �
𝑘𝑘=0
𝑛𝑛−112 𝑓𝑓 𝑥𝑥𝑘𝑘 + ∆𝑥𝑥 + 𝑓𝑓 𝑥𝑥𝑘𝑘 ∆𝑥𝑥 ∆𝑥𝑥 ≪ 1
ループで足し続ける微小幅は十分に小さく
𝑥𝑥𝑘𝑘に∆𝑥𝑥を足して𝑥𝑥𝑘𝑘+1を作る
𝑥𝑥の関数𝑓𝑓が必要
実装のイメージ
9
Dim x As DoubleDim y As DoubleDim dx As DoubleDim ds As DoubleDim s As Double
dx = 0.01s = 0#ds = 0#For x = 2 to 10 Step dx ‘ 数値は積分区間s = s + (func(x + dx) + func(x)) * dx / 2#
Next x
�𝑥𝑥0
𝑥𝑥𝑛𝑛𝑓𝑓 𝑥𝑥 𝑑𝑑𝑥𝑥~ �
𝑘𝑘=0
𝑛𝑛−112 𝑓𝑓 𝑥𝑥𝑘𝑘 + ∆𝑥𝑥 + 𝑓𝑓 𝑥𝑥𝑘𝑘 ∆𝑥𝑥
*計算精度向上と計算速度向上のために一工夫の余地はある。
ループで足し続ける
微小幅は十分に小さく
𝑥𝑥𝑘𝑘に∆𝑥𝑥を足して𝑥𝑥𝑘𝑘+1を作る
𝑥𝑥の関数𝑓𝑓が必要
@VBA
練習問題10
問1 普通に定積分
y=ax2+bx-c上記の式において、係数は任意とした場合に-10<=x<=10の範囲で積分する関数を作成せよ。
11
問2 定積分
上記の式において、-10<=x<=10の範囲で積分する関数を作成せよ。
12
𝑦𝑦 = 3.9𝑥𝑥(sin 𝑥𝑥)3
問3 実際のデータの処理
角速度センサから得られたデータを以下のリンクに示す。データをダウンロードし、初期位置からの旋回角度を求めよ。データの説明を次のページに示す。Excelファイル版:https://www.dropbox.com/s/0ascznvpqx4puer/rotation.xlsx?dl=0
csvファイル版:https://www.dropbox.com/s/kfrspmpgenb6rsv/rotation.csv?dl=0
13
14
リンク先のファイルはデジタルIMUセンサで観測した角速度です。元々のファイルサイズはExcelで処理可能な限界を突破していたので一部を抜き出しました。
csvファイルは、PCの観測時刻と角速度の観測値が並んでいます。角速度とは、単位時間当たりの旋回角度のことです。ここで、観測値の単位は不明なので、仮に[rad’/s]としておきます。
Excelファイルは、PCの観測時刻と角速度の観測値と観測時刻の差[s]が並んでいます。Δt列から、観測間隔が不均一であることが分かります。ここで、旋回角度[rad’]を求めるには、微小旋回角度Δθの合計を求めねばなりません。Δθ=観測値*Δtです。
csvファイルと比べると時刻の分解能が小さくなっていることが分かりますが、Excelの標準機能の限界だと思ってください。
その他15
参考文献
SAK Streets - VB 開発言語資料 http://sak.cool.coocan.jp/w_sak3/doc/sysbrd/sak3vb.htm 基本的にVB6.0の解説だが、VBAにほぼそのまま適用できる。かなり詳しい。
なぜ定積分で面積が求まるのか http://mathtrain.jp/teisekibun
16