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

5 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
浩祐 佐々木
浩祐 佐々木 on 25 May 2021
返信が大変遅くなり申し訳ございません.
大変勉強になります.
すいません,簡単な例での再現ができず手こずっておりました.
ご指摘の点も踏まえまず下記のようなプログラムを書けばうまくまわりました
A=[1 2 3 4 5 6 7 8 9 10]
B=[1 4 9 16 25 36 49 64 81 100]
C=zeros(1,7)
for i=1:7
D=trapz(A(1:i),B(1:i))
end
一方,同様のA,Bをcsv形式で別のファイルで準備し(その際A,Bは縦列データなのでcsvファイルは10*2のマトリクスだと思ってください)これを読み込む形で下記のようなプログラムを作ってみました
importdata('Book1.csv') %Book1.csvは保存したcsvファイル名だとお考えください
A=ans(1:11,1)
B=ans(1:11,2)
C=zeros(10,1)
for i=1:10
C(i)=trapz(A(1:i),B(1:i))
end
このプログラムでは下記エラーでした
エラー:permute
ORDERには無効な置き換えインデックスが含まれています
前回とは異なるエラーが出て途方にくれております..
前回投稿した1039行のデータは中身や行数は違うこそすれ,やっていることは上記一番初めにトライした簡単なものと同じだと自分では認識しているのですが,何がおかしいのでしょうか...
元の「次元は正の整数で〜」のエラーでテキストファイルを同じくimportdataで読み込み
データlabelをtextファイルとして,数値データを行列として読み込んだ構造ファイルであるという違いはあります
アドバイスいただけると幸いです
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.

Categories

Find more on 数値積分と微分 in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!