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

2 visualizaciones (últimos 30 días)
KenShi
KenShi el 21 de En. de 2019
Respondida: KenShi el 30 de En. de 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;]
以上、宜しくお願いいたします。

Respuesta aceptada

Shunichi Kusano
Shunichi Kusano el 23 de En. de 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;

Más respuestas (1)

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

Categorías

Más información sobre プログラミング en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2015a

Community Treasure Hunt

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

Start Hunting!