フィルターのクリア

finverse()​を用いたことによるベ​クトル化推奨、配列変​換不可エラー

19 ビュー (過去 30 日間)
Daisuke Kusakari
Daisuke Kusakari 2019 年 1 月 28 日
回答済み: Kazuya 2019 年 1 月 30 日
既知の二次遅れ系の伝達関数を有するシステムの逆関数を求め、目標信号(のこぎり波)に対してフィードフォワード制御信号を導出するプログラムを作成しております。
T=0.005;
Tr=0.001;
syms t;
SV=2*16*triangularPulse(0,Tr,T,t)-16;
aFreq=3330;
K=50;
ext=0.015
sys=tf(K*aFreq^2,[1,2*ext*aFreq,aFreq^2]);
[num,den]=tfdata(sys);
syms s;
sys_sym=poly2sym(cell2mat(num),s)/poly2sym(cell2mat(den),s);
MV=ilaplace(laplace(SV)*finverse(sys_sym));
fplot(SV,[0 T]);
hold on
fplot(MV,[0 T])
上記を動作したところ、おそらくfinverse起因で下記のエラーが発生しました。ベクトル化するよう示唆されましたが、ベクトル化して離散化するとラプラス変換・逆ラプラス変換不可能(連続データのみ受け付けるため)です。どのような対処が望ましいでしょうか。ご助力頂けますようよろしくお願いいたします。
警告: 関数が配列入力で予期せぬ動作をします。パフォーマンスを向上させるために、入力引数と同じサイズと形状をもつ出力を返すように関数を適切にベクトル化してください。
警告: FunctionLine の更新中にエラーが発生しました。
FunctionLine 更新での関数の評価中に、次のエラーが報告されました: 式を double の配列に変換できません。
  3 件のコメント
Daisuke Kusakari
Daisuke Kusakari 2019 年 1 月 30 日
対応いたしました。配慮が足りず申し訳ございませんでした。
Kazuya
Kazuya 2019 年 1 月 30 日
ありがとうございます。

サインインしてコメントする。

採用された回答

Kazuya
Kazuya 2019 年 1 月 30 日
計算される MV を見てみると ilaplace を含んだ結果になっているので、 ilaplace が逆変換を計算できないことが原因ではないでしょうか。逆ラプラス変換ができない式ですか??
ちなみに、
警告: 関数が配列入力で予期せぬ動作をします。パフォーマンスを向上させるために、入力引数と同じサイズと形状をもつ出力を返すように関数を適切にベクトル化してください。
のベクトル化というのは、fplot 関数に与える式に、入力としてベクトルを入れてもちゃんと計算できるようにしてください、ということを意味しています。例えば、
fplot(@(x) sin(x)*cos(x))
でも同じメッセージがでてきますが、
fplot(@(x) sin(x).*cos(x))
ではOKです。
プロットを描く際には、式 sin(x)*cos(x) の x に実数値を代入して、関数値を計算して描くわけですが、その計算時に x に数値のベクトルを入力できるようにしたほうがいいですよ、という意図かと。
配列演算の項も参照してみてください。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange計算幾何学 についてさらに検索

Community Treasure Hunt

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

Start Hunting!