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

77 views (last 30 days)
佳奈子 浜口
佳奈子 浜口 on 3 Sep 2021
Answered: Atsushi Ueno on 3 Sep 2021
複数の差分
ベクトルを作成し、要素間の 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

Accepted Answer

Hernia Baby
Hernia Baby on 3 Sep 2021
■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

More Answers (1)

Atsushi Ueno
Atsushi Ueno on 3 Sep 2021
> 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関数を説明するドキュメントにおいて、引数の数と順番に着目し、引数の意味を説明する文書に辿り着けます。例えば下図のように辿っていけます。

Categories

Find more on 関数の基礎 in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!