for loo内のtrapzのエラーについて
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
浩祐 佐々木
el 21 de Mayo de 2021
Comentada: Atsushi Ueno
el 25 de Mayo de 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にすると上記エラーが発生します.
初歩的な質問かと存じますがご教授いただけますと幸いです.
0 comentarios
Respuesta aceptada
Atsushi Ueno
el 21 de Mayo de 2021
Editada: Atsushi Ueno
el 21 de Mayo de 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 comentarios
Atsushi Ueno
el 25 de Mayo de 2021
permuteのエラーをみて気付きましたが、i=2:10のループにする必要があります。XY一組の数値では台形が出来ないからですね。スカラ値を入力すると座標ではなく間隔として認識するので、エラーになります。
Más respuestas (1)
浩祐 佐々木
el 25 de Mayo de 2021
1 comentario
Atsushi Ueno
el 25 de Mayo de 2021
採用ありがとうございます。
- エラー: trapz (line 47) 次元の引数は、インデックス付け範囲の中で、正の整数のスカラーでなければなりません。
- エラー: permute ORDERには無効な置き換えインデックスが含まれています
1番目は「次元:正の整数スカラー」を期待する所に「座標のベクトル」が入力されたのが原因ですが、問題が再現しませんでした。(質問者様の問題が解決したので、めでたしとしましょう)
2番目は「座標のベクトル」を期待する所に「等間隔のスカラー」が入力されたのが原因でした。trapz(1,1)を入力するとエラー無しで答え0を出してしまうtrapz関数の仕様は混乱の元ですね。
Ver también
Categorías
Más información sobre 数値積分と微分 en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!