for loo内のtrapzのエラーについて

6 views (last 30 days)
浩祐 佐々木
浩祐 佐々木 on 21 May 2021
Commented: Atsushi Ueno on 25 May 2021
下記のようにfor loop内でtrapzを使用しようとしています.
A = zeros(1,1039);
for i=1:1039
Cum_current(1,i)=trapz(B(1:i,1)',C(1:i,1)');
end
B,Cは1300行*1列のベクトルです
意図としては各試行iでの積分結果をCum_currentのi列目に保存して記録しておきたいというものです.
これを実行すると下記のエラーが表示されます
エラー: trapz (line 47)
次元の引数は、インデックス付け範囲の中で、正の整数のスカラーでなければなりません。
実際にiを1039と定義してtrapzを実行すると計算は回るのですが
for loopにすると上記エラーが発生します.
初歩的な質問かと存じますがご教授いただけますと幸いです.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 21 May 2021
Edited: Atsushi Ueno on 21 May 2021
trapz関数の引数の組み合わせは下記三種類のパターンがあります。引数の意味も併記しておきます。
Q = trapz(Y) Y 数値データ:ベクトル | 行列 | 多次元配列
Q = trapz(X,Y) X — 点の間隔:1 (既定値) | 等間隔を表すスカラー | 座標のベクトル
Q = trapz(___,dim) dim — 演算の対象の次元:正の整数スカラー
trapz(B(1:i,1)',C(1:i,1)');
上記の書き方でtrapz関数を呼び出すと、「引数が2つあって、最初の引数がXの条件に該当しないので、二番目のパターンに該当しない」と認識されます。
エラー: trapz (line 47)
次元の引数は、インデックス付け範囲の中で、正の整数のスカラーでなければなりません。
エラー文の「次元の引数」とは、trapz関数の引数dimの事です。dimと認識すべき場所にスカラでない「C(1:i,1)」を入力したので三番目のパターンにも該当しないと判断され、エラーが発生します。
  4 Comments
Atsushi Ueno
Atsushi Ueno on 25 May 2021
permuteのエラーをみて気付きましたが、i=2:10のループにする必要があります。XY一組の数値では台形が出来ないからですね。スカラ値を入力すると座標ではなく間隔として認識するので、エラーになります。

Sign in to comment.

More Answers (1)

浩祐 佐々木
浩祐 佐々木 on 25 May 2021
ご回答ありがとうございます.
はい,ご指摘いただきました通りi=1,が問題でした.
X,Yがスカラ担っているためのエラーでした.
上記修正したら当初目的のものも無事まわりました.
ご親切にありがとうございました.
  1 Comment
Atsushi Ueno
Atsushi Ueno on 25 May 2021
採用ありがとうございます。
  1. エラー: trapz (line 47) 次元の引数は、インデックス付け範囲の中で、正の整数のスカラーでなければなりません。
  2. エラー: permute ORDERには無効な置き換えインデックスが含まれています
1番目は「次元:正の整数スカラー」を期待する所に「座標のベクトル」が入力されたのが原因ですが、問題が再現しませんでした。(質問者様の問題が解決したので、めでたしとしましょう)
2番目は「座標のベクトル」を期待する所に「等間隔のスカラー」が入力されたのが原因でした。trapz(1,1)を入力するとエラー無しで答え0を出してしまうtrapz関数の仕様は混乱の元ですね。

Sign in to comment.

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!