FreeMatでは配列として扱うため、変数名を下記のように配列にして、無名関数で定義し、ode45コマンドに渡せば、数値的に解いてくれます。
m=1、c=1、k=10、kp=10、ki=10、kd=10として、プログラムとしたのがex505.mになりますが、これは【制御工学基礎編】(1)のex502.mと同じものになります。無名関数とode45についてはシミュレーション・応用編-3を参照してください。これを動作させると、図11が得られます。
clear;m=1;c=1;k=10;kp=10;ki=10;kd=10;yset=0.1; dydt=@(t,y) [y(2);(-(c+kd)*y(2)-(k+kp)*y(1)+kp*yset+y(3))/m;ki*(yset-y(1))]; [t,y]=ode45(dydt,[0,10],[0;0;0]); plot(t,y(:,1));grid('on'); xlabel('Time[s]');ylabel('Height[m]');
次回からは、【制御工学応用編】として、過渡応答、周波数応答について説明します。
伊藤孝宏(いとう・たかひろ)
1960年生。小型モーターメーカーのエンジニア。博士(工学)。専門は流体工学、音・振動工学。現在は、LabVIEWを使って、音不良の計測・診断ソフト、特性自動検査装置などの開発を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.