MATLAB/simulink

MATLAB/simulink

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

MATLABで作ったグラフ画像を高解像度で保存したい時がある。 普通にメニューバーからや saveas(gcf,'figname.png') で保存すると低解像度になってしまう。そういう時は print(gcf,'-djpeg','fign...
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'); figure plot(u) ylim()...
MATLAB/simulink

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

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

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

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

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

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

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

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

離散系の積分器

古典制御の範囲では制御対象や制御器を表現する場合にはラプラス変換を用いて\(s\)の関数として表した。例えばPID制御の一部である積分器は \begin{align}K_{i} \int_{0}^{t} e(\tau) d \tau\end...
MATLAB/simulink

一次遅れ系の伝達関数に含まれるパラメータを変更してそれぞれの係数の意味を理解する

一次遅れ系の伝達関数 \begin{align}G=\frac{K}{Ts+1}\end{align} について、係数の持つ意味を理解する。一般に\(K\)は比例ゲイン、\(T\)は時定数と呼ばれる。 次のグラフは比例ゲインを固定し、時定数...
MATLAB/simulink

MATLABでトーラスを描く

MATLABを使ったトーラスの描き方はMATLABのヘルプセンターにサンプルコードがある。そのコードはSymbolic Math Toolboxを使って書かれてるため不必要な形になるよう書き直した。 トーラスは次の式で与えられる \begi...
MATLAB/simulink

MATLABを使って伝達関数を部分分数分解する

制御工学ではよく伝達関数の性質を調べるために部分分数分解をすることがある。部分分数分解とは分数の分母を因数分解し、それらをいくつかの分数の和に分解することを指す。例えば \begin{align}\frac{1}{(x+p_{1})(x+p...
MATLAB/simulink

ガウスニュートン法による関数フィッティング

いくつかのデータ群から関数フィッティングを行う手法はいくつかあり、ガウスニュートン法はその一つである。 今回は調べていたら偶然見つけたガウスニュートン法のMATLABスクリプトを修正、関数化して使いやすくてみた。 プログラムは以下の通り。 ...
MATLAB/simulink

モンテカルロ法を使って円周率を計算する

円周率を計算する方法にモンテカルロ法というものがある。 モンテカルロ法は次の手順で円周率を求める。 円と、円が内接するような正方形を用意する正方形内にランダムな点を打つ全点と円内の点との数の比を求める すなわち \begin{align}\...
MATLAB/simulink

MATLAB/simulinkを使って簡単な適応制御を試す

一次遅れ系を例にMIT方式に基づくモデル規範型適応制御を試してみる。 今、制御対象を \begin{align}y(s)=\frac{b}{s+a}\end{align} で表す。これは微分方程式で書き直せば、 \begin{align}\...
MATLAB/simulink

エラトステネスのふるいを約数の関係を使って改良する

前回実装したエラトステネスのふるいを約数の関係を使って高速化する。 例えば次の数の約数は \begin{align}12=1,2,3,4,6,12\end{align} となる。ここである約数\(n\)の掛け算の組を\(m_{1},m_{2...
MATLAB/simulink

エラトステネスのふるいを実装する

素数とは1と自身以外に約数を持たない正の整数のことである。この素数には今のところ法則性が見つかっておらず、探すにはエラトステネスのふるい等を用いる必要がある。 エラトステネスのふるいは次のステップで素数の探索を行う。 2を素数にする2の倍数...