MATLAB の diff()関数
このチュートリアルでは、Matlab の diff()
関数を使用して差分と近似導関数を求める方法について説明します。
MATLAB で diff()
関数を使用して差分と近似導関数を求める
diff()
関数は、Matlab の差分と近似導関数を求めるために使用されます。構文:diff(x)
は、ベクトルまたは行列の隣接する要素間の差異を見つけるために使用されます。入力がベクトルの場合、差は入力ベクトルの隣接する値の差になります。出力ベクトルのサイズは、入力ベクトルのサイズより 1つ小さくなります。たとえば、ベクトルの値の違いを見つけましょう。以下のコードを参照してください。
clc
x = [1 3 6 9];
y = diff(x)
出力:
y =
2 3 3
出力では、入力ベクトル 1 と 3 の最初の 2つの要素の差は 2 であり、変数 y に格納されます。入力が行列の場合、差は入力行列の行間の差になり、行のサイズは行の長さと差の順序の差に等しくなります。たとえば、ベクトルの値の違いを見つけましょう。以下のコードを参照してください。
clc
x = [1 3 6 9; 1 2 3 4]
y = diff(x)
出力:
x =
1 3 6 9
1 2 3 4
y =
0 -1 -3 -5
出力では、入力行列の最初の 2 行の最初の 2つの要素の差は 0 であり、変数 y に格納されます。入力行列の 1 行を増やすと、出力行列の 1 行も増えます。diff()
関数の 2 番目の引数を使用して、ベクトル要素または行列要素間の n 番目の時間差を見つけることもできます。たとえば、diff(x,2)
関数は、入力ベクトルまたは行列の値の間の 2 次の差を見つけます。ステートメント diff(x,2)
はステートメント diff(diff(x))
と同じです。たとえば、上記のベクトルの値の 2 次の差を見つけましょう。以下のコードを参照してください。
clc
x = [1 3 6 9]
y = diff(x,2)
出力:
x =
1 3 6 9
y =
1 0
出力では、サイズが入力ベクトルの長さと差の次数の差に等しくなるため、出力ベクトルのサイズも小さくなっています。高階の場合、diff()
関数はそれ自体を再帰的に呼び出して違いを見つけます。diff()
関数の 3 番目の引数を使用して、行ではなく行列の列の違いを見つけることもできます。たとえば、上記の行列の列の違いを見つけましょう。以下のコードを参照してください。
clc
x = [1 3 6 9; 1 2 3 4]
y = diff(x,1,2)
出力:
x =
1 3 6 9
1 2 3 4
y =
2 3 3
1 1 1
列間の差の場合、列のサイズは列の長さと差の順序の差に等しくなり、行のサイズは同じままになります。diff(f)/h
関数を使用して関数の偏導関数を求めることもできます。ここで、f は指定された関数、h はステップサイズです。たとえば、sin(x)
の偏導関数を見つけて、plot()
関数を使用してグラフにプロットしてみましょう。以下のコードを参照してください。
h = 0.001;
x = -2*pi:h:2*pi;
f = sin(x);
y = diff(f)/h;
plot(x(:,1:length(y)),y,x,f)
legend('sin(x)','cos(x)')
出力:
出力では、青い線は正弦波であり、赤い線は正弦波の導関数である余弦波です。legend()
関数は、グラフ上に凡例を描画して、どのプロットがどのデータに属しているかを示すために使用されます。