2次元配列における任​意の座標からの積分値​を求める方法を教えて​下さい。

2 Ansichten (letzte 30 Tage)
KenShi
KenShi am 21 Jan. 2019
Beantwortet: KenShi am 30 Jan. 2019
例えば、以下2次元配列Y(3×5)において、任意の座標(例えばY(2,3)=8)に対する
各点までの積分値(3×5)を求める方法はありますか?
Y =[1 2 3 4 5;
6 7 8 9 10;
11 12 13 14 15;]
以上、宜しくお願いいたします。

Akzeptierte Antwort

Shunichi Kusano
Shunichi Kusano am 23 Jan. 2019
cumsum関数を利用する方法があるかと思います。
足しこんでいく方向をコントロールできますのでこれを利用して、出発点は(1,1),(1,end),(end,1),(end,end)から選ぶことができます。
行列の任意の位置を起点としたい場合は、1.その点で行列を4分割して, 2.それぞれでcumsumを適用し、3.結果をつなぎ合わせる、という手順になるかと思います。
Y = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
% Y(2,3)を含むよう4分割
Y11 = Y(1:2,1:3);
Y12 = Y(1:2,3:end);
Y21 = Y(2:end,1:3);
Y22 = Y(2:end,3:end);
% cumsumの計算
Y11_cumsum = cumsum(cumsum(Y11,1,'reverse'),2,'reverse');
Y12_cumsum = cumsum(cumsum(Y12,1,'reverse'),2,'forward');
Y21_cumsum = cumsum(cumsum(Y21,1,'forward'),2,'reverse');
Y22_cumsum = cumsum(cumsum(Y22,1,'forward'),2,'forward');
% つなぎ合わせる
Y_cumsum = zeros(size(Y));
Y_cumsum(1:2,1:3) = Y11_cumsum;
Y_cumsum(1:2,3:end) = Y12_cumsum;
Y_cumsum(2:end,1:3) = Y21_cumsum;
Y_cumsum(2:end,3:end) = Y22_cumsum;

Weitere Antworten (1)

KenShi
KenShi am 30 Jan. 2019
返事が遅くなりましてありがとうございます。
cumsumではなく、cumtrapzを使用したかったのですが、
教えて頂いた分割する方法を用いてトライしてみます。
cumtrapzは方向をコントロールはできないようですが、
配列の向きを変更することで実現できるのではと考えております。
元の配列を分割するアイディアは無かったです。
どうもありがとうございました。

Kategorien

Mehr zu プログラミング finden Sie in Help Center und File Exchange

Produkte


Version

R2015a

Community Treasure Hunt

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

Start Hunting!