m 直接型、カスケード型、並列型を含む、指定されたシステム伝達関数に従ってシステム構造図の matlab シミュレーションを自動的に描画します

目次

1. アルゴリズムシミュレーション効果

2. アルゴリズムには理論的知識の概要が含まれます

3. MATLABコアプログラム

4. 完全なアルゴリズム コード ファイル


1. アルゴリズムシミュレーション効果

matlab2022a のシミュレーション結果は次のとおりです。

2. アルゴリズムには理論的知識の概要が含まれます


        伝達関数は、制御システムの解析および設計のプロセスにおいて重要な概念です。伝達関数を通じて、システムの安定性と応答特性を迅速に分析できます。同時に、システム伝達関数に応じたシステム構造図の自動描画は、エンジニアが複雑な制御システムをより深く理解し、設計するのに役立つ非常に価値のある技術です。本稿では、与えられたシステム伝達関数に応じてシステム構成図を自動描画する方法をダイレクト型、カスケード型、パラレル型など詳しく紹介します。まず伝達関数の基本概念を紹介し、次にダイレクト型、カスケード型、パラレル型のシステム構成図の描画方法をそれぞれ説明し、最後に本論文で提案する自動描画アルゴリズムと他の関連アルゴリズムの長所と短所を比較する。 。

1. 伝達関数の基本概念
       伝達関数 (Transfer Function) は、線形時不変システム (Linear Time-Invariant System、LTI システム) の入力と出力の関係を記述する数学モデルです。次のように定義されます:
G(s) = \frac{Y(s)}{X(s)}

       このうち、G(s) はシステムの伝達関数、Y(s) と X(s) はそれぞれシステムの出力と入力のラプラス変換を表します。伝達関数は、安定性、位相余裕、ゲイン余裕などのシステムの周波数領域特性を分析するのに便利です。

2. システム構成図の作成方法
2.1 直接型システム構成図
       直接型システム構成図は、伝達関数を各サブシステムの伝達関数の積として直接表現する最も単純な構成図です。伝達関数 G(s) が与えられると、次のように表すことができます:
G(s) = G_1(s)G_2(s)\cdots G_n(s)

       このうち、G_i(s) は i 番目のサブシステムの伝達関数を表します。直接形式のシステム構造図を描くには、各サブシステムの伝達関数を順番に接続するだけです。具体的な手順は次のとおりです。

       伝達関数 G(s) を各サブシステムの伝達関数の積に分解します。
       各サブシステムを順番に描画し、その入力を前のサブシステムの出力に接続し、出力を次のサブシステムの入力に接続します。
        この方法の利点は、シンプルかつ直感的で実装が容易であることですが、欠点は、複雑な伝達関数の場合、直接構造図が最もコンパクトな表現にならない可能性があることです。

2.2 カスケードシステム構成図
        カスケードシステム構成図は、伝達関数を複数のサブシステム伝達関数のカスケード接続として表現した構成図です。伝達関数 G(s) の場合、次のように表すことができます:
G(s) = G_1(s) + G_2(s) + \cdots + G_n(s)

        このうち、G_i(s) は i 番目のサブシステムの伝達関数を表します。カスケード システムの図を描くには、個々のサブシステムの伝達関数を合計し、その結果を他のサブシステムの伝達関数とカスケードする必要があります。具体的な手順は次のとおりです。

       伝達関数 G(s) を各サブシステムの伝達関数の合計に分解します。
        各サブシステムを順番に描画し、その入力端子を前のサブシステムの出力端子に接続し、出力端子を次のサブシステムの入力端子に接続します。 subsystem;
        すべてのサブシステムの出力を加算器に接続すると、加算器の出力がシステム出力になります。
        この方法の利点は、より複雑な伝達関数を表現できること、および複数のサブシステムが相互作用する状況に適していることですが、欠点は、構造図が複雑で理解と分析が難しい場合があることです。

2.3 並列システム構成図
       並列システム構成図は、伝達関数を複数のサブシステム伝達関数の並列接続として表現した構成図です。伝達関数 G(s) の場合、次のように表すことができます:
G(s) = \frac{G_1(s)G_2(s) + G_3(s)G_4(s) + \cdots + G_{2n-1 } (s)G_{2n}(s)}{G_{2n+1}(s)}

        このうち、G_i(s) は i 番目のサブシステムの伝達関数を表します。並列システム構造図を描くには、各サブシステムの伝達関数を 2 × 2 で乗算し、その結果を加算して他のサブシステムの伝達関数と並列に接続する必要があります。具体的な手順は次のとおりです。

        伝達関数 G(s) を各サブシステムの伝達関数の商に分解します。
        各サブシステムを順番に描画し、その入力端子を前のサブシステムの出力端子に接続し、出力端子を次のサブシステムの入力端子に接続します。サブシステム;
       すべてのサブシステムの出力を加算器に接続します。加算器の出力はシステム出力です。加算器の
       出力を別のサブシステム ($G_{2n+1}(s)$) 入力に接続します。この出力はシステム出力です。 subsystem はシステムの合計出力です。
       この方法の利点は、より複雑な伝達関数を表現できること、および複数のサブシステムが相互作用する状況に適していることですが、欠点は、構造図が複雑で理解と分析が難しい場合があることです。

3. 実装プロセス
       与えられたシステム伝達関数に従ってシステム構成図の自動描画を実現するための主な手順は次のとおりです。

        与えられた伝達関数を因数分解して各サブシステムの伝達関数を求める;
必要な構造図の種類(直接型、カスケード型、並列型)に応じて、対応する描画方法に従って各サブシステムを接続し、グラフィック表現でシステム構造図を描画
       する。
       実装プロセスでは、次の重要な問題を解決する必要があります。

       伝達関数の因数分解: 与えられた伝達関数について、それを個々のサブシステムの伝達関数に分解する必要があります。これは、数学ソフトウェア (MATLAB、Mathematica など) を使用するか、特殊な分解アルゴリズムを作成することによって実現できます。
       サブシステムの表現: システム構造図を描くときは、各サブシステムをグラフィック表現で表現する必要があります。これは、プロット ライブラリ (Matplotlib、Graphviz など) を使用するか、専用のプロット プログラムを作成することによって実現できます。

3. MATLABコアプログラム

if option2==2
    axes(handles.axes2); 
    [xy1]=func_s1(a1,n1,0,1,option1);
    hold on
    [xy2]=func_s2(a2,b2,n2,xy1(end,1)-2,1,option1);
    hold on
    [xy3]=func_s3(a3,b3,n3,xy2(end,1)-2,1,option1);
    hold on
    [xend,I1] = max([xy1(end,1),xy2(end,1),xy3(end,1)]);
    [yend,I2] = min([xy1(end,2),xy2(end,2),xy3(end,2)]);
    xlim([1,xend+1]);
    ylim([0,2]);
    
   [x0,y0]=func_block(0,0);
   [x0a,y0a]=func_block(2,0);
   [x0b,y0b]=func_block(4,0);
   if option1 == 1
      text(x0(1)-0.1,1.1,['F(s)']);
      text(xend,1.1,['Y(s)']);
   else
      text(x0(1)-0.1,1.1,['F(z)']);
      text(xend,1.1,['Y(z)']);
   end
    %对应的系统框图%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    axes(handles.axes1); 
    [x0,y0]=func_block(0,0);
    hold on
    quiver(x0(1)-1,mean(y0),1,0,'r','filled','LineWidth',2); 
    hold on
    quiver(x0(2),mean(y0),1,0,'r','filled','LineWidth',2); 
    hold on
    if option1 == 1
      text(mean(x0)*0.9,mean(y0),[num2str(a1),'/','s^',num2str(n1)]);
    else
      text(mean(x0)*0.9,mean(y0),[num2str(a1),'/','z^',num2str(n1)]);  
    end

    [x0a,y0a]=func_block(2,0);
    hold on
    quiver(x0a(2),mean(y0a),1,0,'r','filled','LineWidth',2); 
    hold on
    if option1 == 1
      text(mean(x0a)*0.9,mean(y0a),[num2str(a2),'/','(s^',num2str(n2),'+',num2str(b2),')']);
    else
      text(mean(x0a)*0.9,mean(y0a),[num2str(a2),'/','(z^',num2str(n2),'+',num2str(b2),')']);
    end
    [x0b,y0b]=func_block(4,0);
    hold on
    quiver(x0b(2),mean(y0b),1,0,'r','filled','LineWidth',2); 
    hold on
    if option1 == 1
      text(mean(x0b)*0.925,mean(y0b),[num2str(a3),'/','(s+',num2str(b3),')^',num2str(n3)]);
      text(x0(1)-1,1.05*mean(y0),['F(s)']);
      text(x0b(2)+0.7,1.05*mean(y0),['Y(s)']);
    else
      text(mean(x0b)*0.925,mean(y0b),[num2str(a3),'/','(z+',num2str(b3),')^',num2str(n3)]); 
      text(x0(1)-1,1.05*mean(y0),['F(z)']);
      text(x0b(2)+0.7,1.05*mean(y0),['Y(z)']);
    end

    xmaxx = max([x0(2),x0a(2),x0b(2)]);
    xminx = min([x0(1),x0a(1),x0b(1)]);
    ymaxx = max([y0(2),y0a(2),y0b(2)]);
    yminx = min([y0(1),y0a(1),y0b(1)]);
    axis([xminx-2,xmaxx+2,yminx-1,ymaxx+1]);
end
08_084_m

4. 完全なアルゴリズム コード ファイル

V

おすすめ

転載: blog.csdn.net/hlayumi1234567/article/details/131215534