for loo内のtrapzのエラーについて
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
下記のように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 commentaires
Réponse acceptée
Atsushi Ueno
le 21 Mai 2021
Modifié(e) : Atsushi Ueno
le 21 Mai 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 commentaires
Atsushi Ueno
le 25 Mai 2021
permuteのエラーをみて気付きましたが、i=2:10のループにする必要があります。XY一組の数値では台形が出来ないからですね。スカラ値を入力すると座標ではなく間隔として認識するので、エラーになります。
Plus de réponses (1)
浩祐 佐々木
le 25 Mai 2021
1 commentaire
Atsushi Ueno
le 25 Mai 2021
採用ありがとうございます。
- エラー: trapz (line 47) 次元の引数は、インデックス付け範囲の中で、正の整数のスカラーでなければなりません。
- エラー: permute ORDERには無効な置き換えインデックスが含まれています
1番目は「次元:正の整数スカラー」を期待する所に「座標のベクトル」が入力されたのが原因ですが、問題が再現しませんでした。(質問者様の問題が解決したので、めでたしとしましょう)
2番目は「座標のベクトル」を期待する所に「等間隔のスカラー」が入力されたのが原因でした。trapz(1,1)を入力するとエラー無しで答え0を出してしまうtrapz関数の仕様は混乱の元ですね。
Voir également
Catégories
En savoir plus sur 数値積分と微分 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!