MATLAB Answers

T S
0

Outportブロッ​クからsimOutコ​マンドを使ってワーク​スペースから値取得す​ると計算過程でエラー​が出ます

Asked by T S
on 8 Nov 2017
Latest activity Answered by Kei Otsuka
on 11 Nov 2017
OutportブロックからsimOutコマンドを使ってワークスペースから値を取得すると計算でできずに 下記のようなエラーが出ます。
エラー: ^ 入力はスカラーと正方行列でなければなりません。 POWER を要素ごとに計算するには、代わりに POWER (.^) を使用してください。
^ の部分を .^ にも変えましたが結果は変わりませんでした。 ワークスペースに書き出される行列がそろっていないために 計算できていないと思われるですが、エラーの意味の解釈はあっているでしょうか。
また、ワークスペースにOutportブロックから値を送る時に 例えば、  10×1 の行列を 1×10 の行列にする方法が分かりません。

  4 Comments

Show 1 older comment
T S
on 9 Nov 2017
https://jp.mathworks.com/matlabcentral/answers/361493-simulink-matlab
simuOutは以前質問した時にワークスペースから値をとって Matlabでその値を使用して計算することができるものだと回答をいただきました
実際に使っているモデルは公開できないものなので添付できないのですが
Matlabで計算している変数のワークスペースの値を見ると (例) a=b*c の時 b=1*101 double c=201*1 double のような行列で計算しようとしたときにエラーが出たので 行列を転置すれば改善されると思ったのですが間違っているでしょうか。 また、Outportの前にMathFcnを挟んでtransposeの設定も行いましたが
エラー: ^ 入力は 2 次元でなければなりません。 POWER を要素ごとに計算するには、代わりに POWER (.^) を使用してください。
少し異なるエラーが出てしまいました。
simOutはシミュレーション結果が含まれるオブジェクトですね。
行列bが1x101、cが201x1の場合、 行列積なので片方だけ転置してもエラーになります。b、c双方転置すれば計算はできますが、それがT Sさんが期待されている結果かどうかは判断できません。
b = randi(100,1,101);
c = randi(100,201,1);
a = b*c; %エラー
a = b'*c'; %これはOK
try,catch構文等を使ってエラー発生時の値を正確に把握してみては如何でしょうか。
T S
on 10 Nov 2017
もう一度、mファイルを確認したところ 計算式にfor文が組み込まれていて 添付したmファイルの中身のような式になっているのですが for文の定義が設定ができておらずエラーになってしまいます。

Sign in to comment.

1 Answer

Answer by Kei Otsuka
on 11 Nov 2017

当初の質問から若干逸れてきていると思いますので、一旦整理しますね。
・質問
以下のように、for文を使って行列bの要素数分だけループを回した時にエラーになる。
for i=1:length(b)
c = c(i,1)
end
・回答
初回のループ実行時に c の要素数は必ず1になってしまいますので、 2回目以降のループでインデックスが2以上になった場合、エラーとなります。行列 c から一時的に要素を抽出して演算したい場合は別の変数定義して使ってみてください。

  0 Comments

Sign in to comment.