diff関数,複数の​差分,行列の列間の差​分について

조회 수: 80 (최근 30일)
佳奈子 浜口
佳奈子 浜口 2021년 9월 3일
답변: Atsushi Ueno 2021년 9월 3일
複数の差分
ベクトルを作成し、要素間の 2 階差分を計算します.
2 階差分とはどういう意味でしょうか?
2つ横の要素との差ではないようですので
どう理解すればよいのか,把握しかねております.
X = [0 5 15 30 50 75 105];
Y = diff(X,2)
Y = 1×5
5 5 5 5 5
行列の列間の差分について
下記の説明が記載されておりますが
(X,1,2)の1,2は何を指定しているのでしょうか?
こちらは単純に1つ隣の数,方向性の指定ということで良いのでしょうか?
「列間の 1 次差分を計算します。」
X = [1 3 5;7 11 13;17 19 23];
Y = diff(X,1,2)
Y = 3×2
2 2
4 2
2 4
https://jp.mathworks.com/help/matlab/ref/diff.html?searchHighlight=diff&s_tid=srchtitle#btwmxq8-10

채택된 답변

Hernia Baby
Hernia Baby 2021년 9월 3일
■1つ目の質問
2階差分は簡単に言うとお隣さんの差を取る作業を何回やりますかって話です。
以下例で見てみましょう。
X = [0 5 15 30 50 75 105];
Y_1 = diff(X,1)
Y_1 = 1×6
5 10 15 20 25 30
Xの差をとったY_1にもう一度diff関数で差を取ります。
Y_2 = diff(Y_1,1)
Y_2 = 1×5
5 5 5 5 5
この動作が以下の diff(X,2) に相当します。
Y = diff(X,2)
Y = 1×5
5 5 5 5 5
■2つ目の質問
diff(X, 1, dim)の引数dimは引く方向になります。
これはXがベクトルではなく、行列の場合で使用します。
縦と横、どっちのお隣さんの差を取りますかって話です。
以下、例を見てみましょう。
X = [1 3 5;7 11 13;17 19 23]
X = 3×3
1 3 5 7 11 13 17 19 23
これを横方向の差と縦方向の差それぞれ出してみます
上下の差について
Y = diff(X,1,1)
Y = 2×3
6 8 8 10 8 10
左右の差について
Y = diff(X,1,2)
Y = 3×2
2 2 4 2 2 4

추가 답변 (1개)

Atsushi Ueno
Atsushi Ueno 2021년 9월 3일
> 2 階差分とはどういう意味でしょうか?
→2段階(2連続)差分、差分の差分、という意味です。ドキュメントにも「Y = diff(X,n) は、diff(X) 演算子を再帰的に n 回適用することで n 階差分を計算します」と説明があります。
X = [0 5 15 30 50 75 105];
Y = diff(X,2)
Y = 1×5
5 5 5 5 5
Y = diff(diff(X))
Y = 1×5
5 5 5 5 5
>(X,1,2)の1,2は何を指定しているのでしょうか?こちらは単純に1つ隣の数,方向性の指定ということで良いのでしょうか?
→仰る通りで、2番目の引数1は差分の次数、3番目の引数2は次元(方向性)の指定です。
MATLAB関数を説明するドキュメントにおいて、引数の数と順番に着目し、引数の意味を説明する文書に辿り着けます。例えば下図のように辿っていけます。

카테고리

Help CenterFile Exchange에서 関数の基礎에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!