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

7 Ansichten (letzte 30 Tage)
Daisuke Kusakari
Daisuke Kusakari am 28 Jan. 2019
Beantwortet: Kazuya am 30 Jan. 2019
既知の二次遅れ系の伝達関数を有するシステムの逆関数を求め、目標信号(のこぎり波)に対してフィードフォワード制御信号を導出するプログラムを作成しております。
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 Kommentare
Daisuke Kusakari
Daisuke Kusakari am 30 Jan. 2019
対応いたしました。配慮が足りず申し訳ございませんでした。
Kazuya
Kazuya am 30 Jan. 2019
ありがとうございます。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

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

Weitere Antworten (0)

Kategorien

Mehr zu 計算幾何学 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!