補間値を算出する
MATLABではデータの補間を行う関数が準備されており、補間値を簡単に求めることができます。
例えば以下のようなテーブルデータがあったとします。
グラフで表すとこんな感じです。
このテーブルから、Xが5である場合の値を求めたい場合、以下のようにinterp1関数を使用すると簡単に計算できます。
X = [0 1.8 3.4 6.7 10.8]
Y = [1.4 4.2 5.8 6.9 11.4]
interp1(X, Y, 5)
上記の場合は単純な線形補間で値を求めましたが、より正確に求めたい場合は別の算出方法をオプションで指定することも出来ます。
オプションとして指定する計算方法は色々がありますが。
・ざっくりで良いから計算時間を小さくしたい場合・・・linear(オプションを指定しなければコレ)
・処理時間は少しかかってもいいから詳細な結果を求めたい場合・・・spline
の2つを使い分ければ十分かと思います。
ちなみに、先ほどの補間をlinerではなくsplineを用いて計算すると若干算出される値が変わります。
補間で求めたい値をまとめて指定する
上で示したテーブルから以下のようにX軸が2刻みとなるようなテーブルを作成することを考えてみたいと思います。
Cなどのプログラム言語では、以下のような感じでループ処理することを考えるかと思います。
X1 = 0:2:10
for icnt = 1 : length(X1)
V(icnt) = interp1(X, Y, X1(icnt))
end
しかしMATLABではわざわざループ文で処理する必要はありません。
interp1関数の3番目の引数には配列を指定することができますので、それを利用することで以下のように1行で計算できてしまいます。
V = interp1(X, Y, 0:2:10)
こうすることでinterp1関数の呼び出しを1回で済ますことができます。
小さな処理ではループで何回もinterp1関数を呼び出したところで何の問題もないのですが、これが100回とか1000回とかのループになると明らかに処理速度が変わってきます。
補間だけの話ではないですが、ループ処理する前に、その関数は配列使えないのか?と調べてみると良いです。
コメント