bode_ss
連続時間線形系(状態空間表現)のボード線図
<書式>
      {Mag,Phase,w} = bode_ss(A,B,C,D)
      {Mag,Phase,w} = bode_ss(A,B,C,D,iu)
      {Mag,Phase,w} = bode_ss(A,B,C,D,iu,w)

         Array   Mag,Phase;  //ゲイン線図,位相線図
         Array   w;          //角周波数
         Matrix  A,B,C,D;    //状態空間表現の4つの行列
         Integer iu;         //正弦波入力を与える入力番号

備考1:状態空間表現は次のような式であらわされます.
    上で用いている記号(x,y,A,B,C,D)と同じです.
       	.
       	x = Ax + Bu
       	y = Cx + Du

備考2:引数iuについて.
    複数入力を持つシステムの場合,どの入力に正弦波を入力するか
        で結果が変わります.1入力のシステムであれば
     iu=1;
    としておけば良いです.

備考3:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.
<プログラム例>

Func void main()
{
	Array   Mag,Phase;  //ゲイン線図,位相線図
	Array   w;          //角周波数
	Matrix  A,B,C,D;    //状態空間表現の4つの行列
	Integer iu;         //正弦波入力を与える入力番号

	A=[[-1,2][-1,-3]];
	B=trans([0,1]);
	C=[2,0];
	D=[0];
	iu=1;
	w=logspace(-3.0,3.0,5000); //0.001〜1000[rad/s]を対数等間隔で
	                           //5000分割したベクトルを生成

	{Mag,Phase,w} = bode_ss(A,B,C,D,iu,w);

	mgplot_semilogx(1,w,Mag);      //ゲイン線図のプロット
	mgplot_semilogx(2,w,Phase);    //位相線図のプロット
}


bode_tf
連続時間線形系(伝達関数の係数の対)のボード線図
<書式>
      {mag,phase,w} = bode_tf(num,den)
      {mag,phase,w} = bode_tf(num,den,w)

         Array mag,phase;    //ゲイン線図,位相線図
         Array w;            //角周波数
         Matrix num,den;     //伝達関数の分子,伝達関数の分母

備考1:引数numとdenについて.
    伝達関数を分子(numerator)と分母(denominator)にわけています.

                   num(s) 
           G(s) = --------
                   den(s)

    numとdenはそれぞれMatrix型になっていて,分子・分母の多項式の係数
    を用いて表現します.

    例えば伝達関数がつぎのような場合,
    
    このようになります.

    num=[0,1,d];
    den=[a,b,c];

備考2:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.

備考3:古いバージョンではバグがあったようです.
 参考:MaTX-ML Article 411 (02-10-30): bode_tf() について
<プログラム例>

/*
  伝達関数G(s)= 1/(0.1s+1) からボード線図をプロット
*/

Func void main()
{
	Array mag,phase;    //ゲイン線図,位相線図
	Array w;            //角周波数
	Matrix num,den;     //伝達関数の分子,伝達関数の分母

	num=[0,1];                  //伝達関数の分子の係数
	den=[0.1,1];                //伝達関数の分母の係数

	w=logspace(-3.0,3.0,5000);  //0.001〜1000[rad/s]を対数等間隔で
	                            //5000分割したベクトルを生成

	{mag,phase,w} = bode_tf(num,den,w);

	mgplot_semilogx(1,w,Mag);      //ゲイン線図のプロット
	mgplot_semilogx(2,w,Phase);    //位相線図のプロット
}


bode_tfn
連続時間線形系(伝達関数)のボード線図
<書式>
      {mag,phase,w} = bode_tfn(g)
      {mag,phase,w} = bode_tfn(g,w)

         Array mag,phase;    //ゲイン線図,位相線図
         Array w;            //角周波数
         Rational g;         //伝達関数

備考1:引数のgは有利多項式型(Rational)の伝達関数です.
    定義の仕方などはプログラム例を参考にしてください.

備考2:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.
<プログラム例>

/*
  伝達関数G(s)= 1/(0.1s+1) からボード線図を出力
*/

Func void main()
{
	Rational   g;         //伝達関数
	Polynomial s;         //ラプラス演算子
	Array mag,phase;      //ゲイン線図,位相線図
	Array w;              //角周波数


	s=Polynomial("s");    //sを変数宣言
	g=1/(0.1*s+1);        //伝達関数の定義

	w=logspace(-3.0,3.0,5000);  //0.001〜1000[rad/s]を対数等間隔で
	                            //5000分割したベクトルを生成


	{mag,phase,w} = bode_tfn(g,w);

	mgplot_semilogx(1,w,mag);      //ゲイン線図のプロット
	mgplot_semilogx(2,w,phase);    //位相線図のプロット
}


bode_tfm
連続時間線形系(伝達関数行列)のボード線図
<書式>
      {mag,phase,w} = bode_tfm(G)
      {mag,phase,w} = bode_tfm(G,iu)
      {mag,phase,w} = bode_tfm(G,iu,w)

         Array mag, phase;   //ゲイン線図,位相線図
         Integer iu;         //正弦波入力を与える入力番号
         RaMatrix G;         //伝達関数行列
         Array w;            //周波数

備考1:引数iuについて.
    複数入力を持つシステムの場合,どの入力に正弦波を入力するか
       で結果が変わります.1入力のシステムであれば
     iu=1;
    としておけば良いです.

備考2:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.
<プログラム例>

Func void main()
{
	Rational   g1,g2,g3,g4;    //伝達関数
	RaMatrix   G;              //伝達関数行列
	Polynomial s;              //ラプラス演算子
	Integer    iu;             //正弦波入力を与える入力番号
	Array      mag, phase;     //ゲイン線図,位相線図
	Array      w;              //周波数

	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);

	iu=2;//入力2に正弦波を入力

	w=logspace(-3.0,3.0,5000);  //0.001〜1000[rad/s]を対数等間隔で
	                            //5000分割したベクトルを生成


	{mag,phase,w} = bode_tfm(G,iu,w);

	mgplot_semilogx(1,w,mag);      //ゲイン線図のプロット
	mgplot_semilogx(2,w,phase);    //位相線図のプロット
}


bode_plot_ss
連続時間線形系(状態空間表現)のボード線図のプロット
<書式>
      bode_plot_ss(A,B,C,D)
      bode_plot_ss(A,B,C,D,iu)
      bode_plot_ss(A,B,C,D,iu,w)

         Matrix  A,B,C,D;    //状態空間表現の4つの行列
         Integer iu;         //正弦波入力を与える入力番号
         Array   w;          //角周波数

備考1:状態空間表現は次のような式であらわされます.
    上で用いている記号(x,y,A,B,C,D)と同じです.
       	.
       	x = Ax + Bu
       	y = Cx + Du

備考2:引数iuについて.
    複数入力を持つシステムの場合,どの入力に正弦波を入力するか
        で結果が変わります.1入力のシステムであれば
     iu=1;
    としておけば良いです.

備考3:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.
<プログラム例>

Func void main()
{
	Array   w;          //角周波数
	Matrix  A,B,C,D;    //状態空間表現の4つの行列
	Integer iu;         //正弦波入力を与える入力番号

	A=[[-1,2][-1,-3]];
	B=trans([0,1]);
	C=[2,0];
	D=[0];
	iu=1;
	w=logspace(-3.0,3.0,5000);  //0.001〜1000[rad/s]を対数等間隔で
	                            //5000分割したベクトルを生成

	bode_plot_ss(A,B,C,D,iu,w); //ボード線図をプロット
}


bode_plot_tf
連続時間線形系(伝達関数の係数の対)のボード線図のプロット
<書式>
      bode_plot_tf(num,den)
      bode_plot_tf(num,den,w)

         Array w;            //角周波数
         Matrix num,den;     //伝達関数の分子,伝達関数の分母

備考1:引数numとdenについて.
   伝達関数を分子(numerator)と分母(denominator)にわけています.

                   num(s) 
           G(s) = --------
                   den(s)

   numとdenはそれぞれMatrix型になっていて,分子・分母の多項式の係数
   を用いて表現します.

   例えば伝達関数がつぎのような場合,
   
   このようになります.

   num=[0,1,d];
   den=[a,b,c];

備考3:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.
<プログラム例>

/*
  伝達関数G(s)= 1/(0.1s+1) からボード線図をプロット
*/

Func void main()
{
	Array w;            //角周波数
	Matrix num,den;     //伝達関数の分子,伝達関数の分母

	num=[0,1];                  //伝達関数の分子の係数
	den=[0.1,1];                //伝達関数の分母の係数

	w=logspace(-3.0,3.0,5000);  //0.001〜1000[rad/s]を対数等間隔で
	                            //5000分割したベクトルを生成

	bode_plot_tf(num,den,w);    //ボード線図のプロット
}


bode_plot_tfn
連続時間線形系(伝達関数)のボード線図のプロット
<書式>
      bode_plot_tfn(g)
      bode_plot_tfn(g,w)

         Array w;            //角周波数
         Rational g;         //伝達関数

備考1:引数のgは有利多項式型(Rational)の伝達関数です.
    定義の仕方などはプログラム例を参考にしてください.

備考2:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.
<プログラム例>

/*
  伝達関数G(s)= 1/(0.1s+1) からボード線図を出力
*/

Func void main()
{
	Rational   g;         //伝達関数
	Polynomial s;         //ラプラス演算子
	Array w;              //角周波数


	s=Polynomial("s");    //sを変数宣言
	g=1/(0.1*s+1);        //伝達関数の定義

	w=logspace(-3.0,3.0,5000);  //0.001〜1000[rad/s]を対数等間隔で
	                            //5000分割したベクトルを生成

	bode_plot_tfn(g,w);         //線図のプロット
}


bode_plot_tfm
連続時間線形系(伝達関数行列)のボード線図のプロット
<書式>
      bode_plot_tfm(G)
      bode_plot_tfm(G,iu)
      bode_plot_tfm(G,iu,w)

         Integer iu;         //正弦波入力を与える入力番号
         RaMatrix G;         //伝達関数行列
         Array w;            //周波数

備考1:引数iuについて.
    複数入力を持つシステムの場合,どの入力に正弦波を入力するか
       で結果が変わります.1入力のシステムであれば
     iu=1;
    としておけば良いです.

備考2:角周波数wの単位は[rad/s]です.
    logspaceを使うと簡単に対数間隔のベクトルがつくれます.
<プログラム例>

Func void main23()
{
	Rational   g1,g2,g3,g4;    //伝達関数
	RaMatrix   G;              //伝達関数行列
	Polynomial s;              //ラプラス演算子
	Array      w;              //周波数

	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);

	w=logspace(-3.0,3.0,5000);  //0.001〜1000[rad/s]を対数等間隔で
	                            //5000分割したベクトルを生成

	bode_plot_tfm(G);  //ボード線図のプロット
}