プログラミング

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を使って書かれてるため不必要な形になるよう書き直した。トーラスは次の式で与えられる\begin{...
MATLAB/simulink

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

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

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

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

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

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

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

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

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

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

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

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

pandasを使ったcsvファイルの読み込み

pandasを使ったcsvファイルの操作が思いのほか使いやすかったので残しておく。pandasがインストールされている環境でimport pandas as pddf = pd.read_csv('FILEPASS/FILENAME.csv...
MATLAB/simulink

MATLABで伝達関数を定義する

matlabでの伝達関数の定義は単純で、例えば次のような伝達関数\(G(s)\)\begin{align}G(s)=\dfrac{1}{s^{2}+2s+3}\end{align}であればNp = Dp = P = tf(Np, Dp)とす...
MATLAB/simulink

ゼータ関数の特殊値を計算する

ゼータ関数\begin{align}\zeta(s) = \sum_{n=1}^{\infty} \dfrac{1}{n^s} =\dfrac{1}{1^s}+\dfrac{1}{2^s}+\dfrac{1}{3^s}+\dfrac{1}{...
MATLAB/simulink

ウォリスの公式と円周率

次の無限積をウォリスの公式という。\begin{align}\lim_{m \to \infty} \large \prod_{n=1}^m \frac{4n^2}{4n^2-1}=\frac{\pi}{2}\end{align}ウォリスの...
MATLAB/simulink

全探索したデータから重複分を取り除く

前回(n個の組み合わせを全部列挙してみる)で作ったプログラムを改造して巡回セールスマン問題用のプログラムを作ってみる。まず巡回セールスマン問題とは、あるセールスマンが複数の都市を訪れるとき、どのような順番で巡回すれば最も効果的(時間、移動距...
MATLAB/simulink

n個の組み合わせを全部列挙してみる

\( n \)個の組み合わせは\( n^n \)で表される。例え2桁の2進数は2進数10進数000011102113の組み合わせがある。ここでは\( n \)個の組み合わせをmatlabで全列挙してみようと思う。プログラムは以下の形で実装で...
python

pythonで記述した関数を別ファイルに記述し直してimportする

いつも忘れるのでまとめておく。pythonのバージョンはpython3.7を利用している。始めに次のようなコードを考える。print('Hello! python') これを関数化して別ファイルに移せば main.pyはimport gre...
MATLAB/simulink

二次元平面上に置かれた二点間の距離を求める

二次元平面上に置かれた二点 \(p_{1}(x_{1},y_{1}),p_{2}(x_{2},y_{2})\) 間の距離\(d(p_{1},p_{2})\)は\begin{align}d(p_{1},p_{2})=\sqrt{(x_{2}-...