プログラミング

MATLAB/simulink

ボード線図の示す意味と応答への影響

伝達関数とボード線図の関係を考察する。今伝達関数が\begin{align}G(s)=\frac{s^2+1}{s^2+6s+8}\end{align}で与えられているとする。この時の分子多項式に\(s=-j \omega\)を代入した時明...
MATLAB/simulink

離散時間モデルのボード線図とstep応答

MATLABを使って離散時間モデルのボード線図の描画とstep応答を調べる。MATLABのbode関数は離散時間モデルにも対応しているので簡単。ボード線図step応答ソースT = 0.1; s=tf("s");Gs = 2/(3*s^2+2...
MATLAB/simulink

MATLABで離散モデルに対しPID制御器を作りシミュレーションする

前回に続いてMATLABで離散モデルに対しPID制御器を構築する。与えられたモデルを離散化するにはG=c2d(omega^2/(s^2+2*zeta*omega*s+omega^2),Ts);を使えばいい。例では二次遅れ系をサンプル時間Ts...
MATLAB/simulink

MATLABでPID制御器を作りシミュレーションする

MATLABでPID制御器を作って実装する。MATLABにはモデルを与えればそれっぽくPID制御器を構築してくれる便利な関数pidtuneがあるので今回はこれを使う。pidtuneの構文は下記の通り。 = pidtune(G,'PID');...
C/C++/C#

C言語での多次元配列の渡し方

C言語で配列を宣言する場合int mat;などとする。このように定義された配列を関数に渡すときは先頭のアドレスを渡せばよく、実際の関数の宣言はvoid func(int *mat)となる。一方で多次元配列のこれが多次元になると話が変わる。多...
MATLAB/simulink

極に着目した連続時間システムと離散時間システムの安定性判別

初めに連続時間システムの伝達関数の安定性を調べる。連続時間システムの伝達関数は\begin{align}P_1=\frac{ a_m s^m+a_{m-1} s^{m-1}+ \cdots + a_0}{ b_n s^n+b_{n-1} s...
MATLAB/simulink

離散化した伝達関数の応答をシミュレーションする

離散化した伝達関数の応答を調べる。今回はStep応答を調べた。今プラントを\(G(z^{-1})\)、入力を\(r(t)\)とすると出力は\begin{align}y(t)=G(z^{-1}) r(t-1)\end{align}コードs=t...
MATLAB/simulink

伝達関数の離散化と誤差

前回MATLABを使って伝達関数を離散時間モデルに変換した。前回の結果より\begin{align}G=\frac{10}{15s+1}\end{align}が\begin{align}\frac{0.6449}{z - 0.9355}\e...
MATLAB/simulink

MATLABで作ったグラフ画像を高解像度で保存する

MATLABで作ったグラフ画像を高解像度で保存したい時がある。普通にメニューバーからやsaveas(gcf,'figname.png')で保存すると低解像度になってしまう。そういう時はprint(gcf,'-djpeg','figname....
Manim

manimをインストールしてチュートリアルを動かす

manimは数学などの説明にあるいい感じの動画を作成できるpythonライブラリである。今回はmanimをインストールしてチュートリアルを動かしてみる。インストールにはpipを使う。すでにpythonがインストールされている環境でコマンドプ...
MATLAB/simulink

MATLABでむだ時間を含む伝達関数を定義してシミュレーションをする

MATLABを使ってむだ時間を含む伝達関数を定義して一時遅れ系をシミュレーションする。むだ時間を含む一時遅れ系は\begin{align}G=\frac{K}{1+Ts} e^{-Ls}\end{align}で与えられるような系である。この...
MATLAB/simulink

MATLABで伝達関数を定義してシミュレーションをする

MATLABを使って伝達関数を定義して一時遅れ系をシミュレーションする。一時遅れ系は\begin{align}G=\frac{K}{1+Ts}\end{align}で与えられるような系である。この系の微分方程式は一階の微分方程式になる。シミ...
MATLAB/simulink

MATLABでシステム同定用のM系列信号を生成する

MATLABでシステム同定用のM系列信号を生成する。ツールボックスがないと動かない可能性があるので注意。結果がこんな感じ。コードN = 350;u = idinput(N,'rbs');figureplot(u)ylim()xlabel('...
MATLAB/simulink

m-file内での関数呼び出し

matlabは外部に関数を用意する方法以外にm-file内部で関数を定義することもできる。この場合、定義した関数は同一m-file内以外では使用することができないが、ちょっと試す場合に便利である。こんな感じで使うことができる。x=-10:1...
MATLAB/simulink

MATLABで簡易逆ガンマ関数を実装する

ガンマ関数を使えば階乗を一般化でき便利である。\begin{align}\Gamma(n+1)=n!\end{align}今回は\(n!\)となる\(x\)の値をmatlabを使って求める。n=8256;f=@(x) abs(n-gamma...
MATLAB/simulink

状態空間モデルをMATLABでシミュレーションする

制御工学には古典制御で用いられる伝達関数とは別に、現代制御で用いられる状態空間モデルがある。状態空間モデルは次のようなものである。\begin{align}\dot{x}&=Ax+Bu\\y&=Cx+Du\end{align}MATLABに...
MATLAB/simulink

χ²分布をプロットしてみる

確率分布にはよく使われる正規分部の他に\(\chi^2\)分布というものもある。\(\chi^2\)分布は\(x\)が負の実数の時は\(0\)となる。グラフを書くだけであれば\(x\)が正の実数を取るときの値を調べればいい。これより計算する...
MATLAB/simulink

正規分布とパラメータの意味

ガウス分布は正規分布とも呼ばれ\begin{align}f(x)=\dfrac{1}{ \sqrt{2 \pi \it{σ}^2 }} \exp \left ( - \frac{\left ( x-\it{μ} \right )^2}{2 ...
MATLAB/simulink

サンプリング周波数と信号波形

計算機を用いてグラフを描画する際は離散化された値で計算をするためサンプリング周波数は重要である。今回は一例として正弦波について異なるサンプリング周波数で信号の取得を行い、取得波形の確認を行う。正弦波の式は\begin{align}y=\si...
MATLAB/simulink

MATLABでナイキスト線図を書く

ナイキスト線図を使えば複雑なシステムの安定判別をより容易に行えるようになる場合がある。今回は細かいことを気にせずただナイキスト線図を描画する。正しく描けているかのチェックにはMATLABの関数「nyquist」を使用した。いま開ループ伝達関...