|
impulse_ss
|
連続時間線形系(状態空間表現)のインパルス応答
|
<書式>
{Y,X} = impulse_ss(A,B,C,D,iu,T)
Matrix X,Y; //状態X,出力Y
Matrix A,B,C,D; //状態空間表現の4つの行列
Integer iu; //単位インパルスを入力する入力番号
Matrix T; //時間列
| |
備考1:状態空間表現は次のような式であらわされます.
上で用いている記号(x,y,A,B,C,D)と同じです.
.
x = Ax + Bu
y = Cx + Du
備考2:引数iuについて.
複数入力を持つシステムの場合,どの入力にインパルス関数を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
| |
<プログラム例>
Func void main()
{
Matrix X,Y; //状態X,出力Y
Matrix A,B,C,D; //状態空間表現の4つの行列
Integer iu; //単位インパルスを入力する入力番号
Matrix T; //時間列
A=[[-1,2][-1,-3]];
B=trans([0,1]);
C=[2,0];
D=[0];
iu=1;
T=[0:0.1:10]; //0秒から0.1秒刻みで10秒までの時間列を生成
{Y,X} = impulse_ss(A,B,C,D,iu,T);
mgplot(1,T,X,{"state"}); //状態をプロット
mgreplot(1,T,Y,{"output"}); //出力をプロット
mgplot_grid(1); //グリッドの表示
}
| |
|
impulse_tf
|
連続時間線形系(伝達関数の係数の対)のインパルス応答
|
<書式>
{Y,X} = impulse_tf(num,den,T)
Matrix X,Y; //状態X,出力Y
Matrix num,den; //伝達関数の分子,伝達関数の分母
Matrix T; //時間列
| |
備考:引数numとdenについて.
伝達関数を分子(numerator)と分母(denominator)にわけています.
num(s)
G(s) = --------
den(s)
numとdenはそれぞれMatrix型になっていて,分子・分母の多項式の係数
を用いて表現します.
例えば伝達関数がつぎのような場合,
このようになります. num=[0,1,d]; den=[a,b,c]; | |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からインパルス応答を出力
*/
Func void main()
{
Matrix X,Y; //状態X,出力Y
Matrix num,den; //伝達関数の分子,伝達関数の分母
Matrix T; //時間列
num=[0,1]; //伝達関数の分子の係数
den=[0.1,1]; //伝達関数の分母の係数
T=[0:0.001:1.0]; //0秒から0.001秒刻みで1.0秒までの時間列を生成
{Y,X} = impulse_tf(num,den,T);
mgplot(1,T,X,{"state"}); //状態をプロット
mgreplot(1,T,Y,{"output"}); //出力をプロット
mgplot_grid(1); //グリッドを表示
}
| |
|
impulse_tfn
|
連続時間線形系(伝達関数)のインパルス応答
|
<書式>
{Y,X} = impulse_tfn(g,T)
Matrix X,Y; //状態X,出力Y
Rational g; //伝達関数
Matrix T; //時間列
| |
備考:引数のgは有利多項式型(Rational)の伝達関数です. 定義の仕方などはプログラム例を参考にしてください. | |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からインパルス応答を出力
*/
Func void main()
{
Matrix X,Y; //状態X,出力Y
Rational g; //伝達関数
Matrix T; //時間列
Polynomial s; //ラプラス演算子
s=Polynomial("s"); //sを変数宣言
g=1/(0.1*s+1); //伝達関数の定義
T=[0:0.001:1.0]; //0秒から0.001秒刻みで1.0秒までの時間列を生成
{Y,X} = impulse_tfn(g,T);
mgplot(1,T,X,{"state"}); //状態をプロット
mgreplot(1,T,Y,{"output"}); //出力をプロット
mgplot_grid(1); //グリッドを表示
}
| |
|
impulse_tfm
|
連続時間線形系(伝達関数行列)のインパルス応答
|
<書式>
{Y,X} = impulse_tfm(G,iu,T)
Matrix X,Y; //状態X,出力Y
RaMatrix G; //伝達関数行列
Integer iu; //単位インパルスを入力する入力番号
Matrix T; //時間列
| |
備考:引数iuについて.
複数入力を持つシステムの場合,どの入力にインパルス関数を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
| |
<プログラム例>
Func void main()
{
Matrix X,Y; //状態X,出力Y
Rational g1,g2,g3,g4; //伝達関数
RaMatrix G; //伝達関数行列
Matrix T; //時間列
Integer iu; //単位インパルスを入力する入力番号
Polynomial s; //ラプラス演算子
s=Polynomial("s"); //sを変数宣言
g1=2/(s+1); //伝達関数の定義
g2=3/(s+2);
g3=4/(s+3);
g4=5/(s+4);
G=[[g1,g2][g3,g4]]; //伝達関数行列
print(G);
T=[0:0.1:10]; //0秒から0.1秒刻みで10秒までの時間列を生成
iu=2; //入力2にインパルス関数を入力
{Y,X}=impulse_tfm(G,iu,T);
mgplot(1,T,X,{"state"}); //状態をプロット
mgreplot(1,T,Y,{"output"}); //出力をプロット
mgplot_grid(1); //グリッドを表示
}
| |
|
impulse_plot_ss
|
連続時間線形系(状態空間表現)のインパルス応答のプロット
|
<書式> impulse_plot_ss(A,B,C,D,iu,T) Matrix A,B,C,D; //状態空間表現の4つの行列 Integer iu; //単位インパルスを入力する入力番号 Matrix T; //時間列 | |
備考1:状態空間表現は次のような式であらわされます.
上で用いている記号(A,B,C,D)と同じです.
.
x = Ax + Bu
y = Cx + Du
備考2:引数iuについて.
複数入力を持つシステムの場合,どの入力にインパルス関数を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
| |
<プログラム例>
Func void main()
{
Matrix A,B,C,D; //状態空間表現の4つの行列
Integer iu; //単位インパルスを入力する入力番号
Matrix T; //時間列
A=[[-1,2][-1,-3]];
B=trans([0,1]);
C=[2,0];
D=[0];
iu=1;
T=[0:0.1:10]; //0秒から0.1秒刻みで10秒までの時間列を生成
impulse_plot_ss(A,B,C,D,iu,T);
}
| |
|
impulse_plot_tf
|
連続時間線形系(伝達関数の係数の対)のインパルス応答のプロット
|
<書式>
impulse_plot_tf(num,den,T)
Matrix num,den; //伝達関数の分子,伝達関数の分母
Matrix T; //時間列
| |
備考:引数numとdenについて.
伝達関数を分子(numerator)と分母(denominator)にわけています.
num(s)
G(s) = --------
den(s)
numとdenはそれぞれMatrix型になっていて,分子・分母の多項式の係数
を用いて表現します.
例えば伝達関数がつぎのような場合,
このようになります. num=[0,1,d]; den=[a,b,c]; | |
<プログラム例>
Func void main()
{
Matrix num,den; //伝達関数の分子,伝達関数の分母
Matrix T; //時間列
num=[0,1]; //伝達関数の分子の係数
den=[0.1,1]; //伝達関数の分母の係数
T=[0:0.001:1.0]; //0秒から0.001秒刻みで1.0秒までの時間列を生成
impulse_plot_tf(num,den,T);
}
| |
|
impulse_plot_tfn
|
連続時間線形系(伝達関数)のインパルス応答のプロット
|
<書式> impulse_plot_tfn(g,T) Rational g; //伝達関数 Matrix T; //時間列 | |
備考:引数のgは有利多項式型(Rational)の伝達関数です. 定義の仕方などはプログラム例を参考にしてください. | |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からインパルス応答を出力
*/
Func void main()
{
Rational g; //伝達関数
Matrix T; //時間列
Polynomial s; //ラプラス演算子
s=Polynomial("s"); //sを変数宣言
g=1/(0.1*s+1); //伝達関数の定義
T=[0:0.001:1.0]; //0秒から0.001秒刻みで1.0秒までの時間列を生成
impulse_plot_tfn(g,T);
}
| |
|
impulse_plot_tfm
|
連続時間線形系(伝達関数行列)のインパルス応答のプロット
|
<書式> impulse_plot_tfm(G,iu,T) RaMatrix G; //伝達関数行列 Integer iu; //単位インパルスを入力する入力番号 Matrix T; //時間列 | |
備考:引数iuについて.
複数入力を持つシステムの場合,どの入力にインパルス関数を入力するか
で結果が変わります.1入力のシステムであれば
iu=1;
としておけば良いです.
| |
<プログラム例>
/*
伝達関数G(s)= 1/(0.1s+1) からインパルス応答を出力
*/
Func void main()
{
Matrix X,Y; //状態X,出力Y
Rational g; //伝達関数
Matrix T; //時間列
Integer iu; //単位インパルスを入力する入力番号
Polynomial s; //ラプラス演算子
s=Polynomial("s"); //sを変数宣言
g=1/(0.1*s+1); //伝達関数の定義
T=[0:0.001:1.0]; //0秒から0.001秒刻みで1.0秒までの時間列を生成
iu=1;
impulse_plot_tfm([g],iu,T);
}
| |