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

3 次查看(过去 30 天)
KenShi
KenShi 2019-1-21
回答: KenShi 2019-1-30
例えば、以下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;]
以上、宜しくお願いいたします。

采纳的回答

Shunichi Kusano
Shunichi Kusano 2019-1-23
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;

更多回答(1 个)

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

类别

Help CenterFile Exchange 中查找有关 Curve Fitting Toolbox 入門 的更多信息

产品


版本

R2015a

Community Treasure Hunt

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

Start Hunting!