Effacer les filtres
Effacer les filtres

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

3 vues (au cours des 30 derniers jours)
KenShi
KenShi le 21 Jan 2019
Réponse apportée : KenShi le 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;]
以上、宜しくお願いいたします。

Réponse acceptée

Shunichi Kusano
Shunichi Kusano le 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;

Plus de réponses (1)

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

Catégories

En savoir plus sur Curve Fitting Toolbox 入門 dans Help Center et File Exchange

Produits


Version

R2015a

Community Treasure Hunt

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

Start Hunting!