システムとモデリング

modelica, Julia, Design Structure Matrix, SysML, 他モデリング全般について。

Julia言語

Open ModelicaをJuliaで操作する

久々にOpen Modelicaに手を出してみました。 今回はJuliaを使ってOpen Modelicaを操作してシミュレーションする試みです。 今年になってOpen ModlicaのJulia APIが開発されために可能になりました。 www.openmodelica.org 手順 パッケージOMJuliaを使用しま…

Plotly で Design Structure Matrix を描画する。

久々にDesign Structure Matrixの記事になります。 今までDesign Structure Matrixの描画にはGadfly.jlパッケージのヒートマップ機能を使用していました。 例としては以下のようなものになります。 ただこの描画方法ですとDSMの要素の有無を色でしか表現でき…

Juliaパッケージ DesignStructureMatrix.jlを制作して公式パッケージにするまで

Design Structure Matrix ( DSM )関係の関数を集めたJuliaパッケージDesignStructureMatrix.jlを公開しました。 github.com 現時点の内容としては DSMの描画 DSMのシーケンシング DSMのクラスタリング が利用できます。詳細はREADMEを御覧ください。 今回、J…

Gadfly.jlでDesign Structure Matrixを描画する。

今まではDesign Structure Matrixの描画にSeaborn.jlを使用してきました。 otepipi.hatenablog.com ただSeaborn.jlはPython環境がないと使用できない点、日本語に対応していない点が不満でしたので、描画をGadfly.jlに乗り換えたいと思います。 Gadfly.jlで…

Juliaで可到達行列をレベル分けして並び替える

Design Structure Matrixのシーケンシング関連の記事です。今回の内容は以下の記事をJuliaで自動化したものになります。 otepipi.hatenablog.com 可到達行列を並び替えて下三角行列に近い形にします。 並べ替える前の可到達行列は以下のような形になります。…

Juliaで可到達行列を求める

DSM(DesignStructureMatrix)のシーケンシングに必要なDSMの可到達行列をJuliaのプログラムで求めてみます。 可到達行列とは 以下のスライドの説明がわかりやすいと思います。 http://ise.me.tut.ac.jp/lectures/decision-making/DSS12-2.pdf DSMの隣接行列A…

DSMをJuliaでクラスタリングし、自動で整列させる

前回の記事の続きです。 otepipi.hatenablog.com 前回はJuliaでDSMのクラスタリングのみしましたが、今回はそのクラスタリング結果に基づいてDSMを並べ替えるところまでやります。 実装 実装したコードは以下のようになりました。 using LinearAlgebra using…

DSMをJuliaのクラスタリングプログラムで整理する。

今回はDSM(Design Structure Matrix)のクラスタリングコードをJuliaで実装してみます。 クラスタリングアルゴリズムについては下記記事を参照してください。 otepipi.hatenablog.com 実際には以下の記事の擬似コードをJuliaで実装し直したものになります。 o…

DSMを置換行列で並べ替える

前回の記事で行列を並べ替える置換行列を勉強しましたが、これをDSM(Design Structure Matrix)に応用してみます。 otepipi.hatenablog.com 例題 以下のDSMを対角線上に非ゼロ要素が集まるように行列演算で並べ替えます。 また、今回のDSMの隣接行列は以下の…

Metis.jlでグラフを分割する

今回はJuliaのパッケージMetis.jlでグラフを分割してみます。 github.com 以下の隣接行列からなるグラフを2つに分割してみます。 A=[0 1 0 0 1 1 0; 0 0 0 1 0 0 1; 0 1 0 1 0 0 1; 0 1 1 0 1 0 1; 0 0 0 1 0 1 0; 1 0 0 0 1 0 0; 0 1 1 1 0 0 0] Metis.par…

Juliaでスケールフリー・ネットワークの生成と可視化

前々回Juliaでランダムネットワークを生成しましたが、今回はスケールフリー・ネットワークを生成してみます。 otepipi.hatenablog.com スケールフリーネットワークとは ノードの次数分布がべき則で近似できるネットワークのことです。 一方、以前紹介したラ…

Juliaでランダム・ネットワークを生成して可視化する

この記事は以下の大著を大いに参考にしています。 いつか書評記事を書きたいですね。 ネットワーク科学: ひと・もの・ことの関係性をデータから解き明かす新しいアプローチ作者: アルバート・ラズロバラバシ,Albert‐L´aszl´o Barab´asi,池田裕一,井上寛康,谷…

DSM-Design Structure MatrixをJulia言語のheatmap(by Seaborn)で描画&ネットワーク可視化(by GraphPlot)

前回はDSM(Design Structure Matrix)をMatlabのheatmapで描画し、さらにネットワーク可視化を行いましたが、今回はJulia言語でそれをやってみます。 前回の記事は以下 otepipi.hatenablog.com heatmapでDSMの可視化 wikipediaのDSM例を描画します。 今回、…

OctaveとJuliaの行列演算速度を比較する

今回はOctaveとJuliaの行列演算速度を比較してみます。 高速と言われるJuliaですが、Octaveと比べてどの程度早いのでしょうか? 題材は以下より、n ×n行列とn×1列の積をとります。 この計算速度は一般的にO(n2)になるとされています。 MATLABとOctaveによる…

プラントの理論モデルに使用する式には注意しよう(戒め)

以下の記事に使用した計算モデルに間違いがあったため修正と、教訓のために記事を残しておきます。 otepipi.hatenablog.com otepipi.hatenablog.com 何を間違ったか プラントモデルに使用する数式を間違えました 上記記事では以下の例題を扱っておりました。…

JuliaでPID制御:自動調整の検定

これまで何回かJuliaでPID制御をする記事を書きましたが、コードの正しさを確認する検定を行っていなかったので今回はそれを確認します。 過去の記事は以下 otepipi.hatenablog.com otepipi.hatenablog.com otepipi.hatenablog.com 今回の検定内容 ジーグラ…

MarkdownでJuliaを実行する

今回は前2回と同様にMarkdown Preview Enhancedを使い、今回はJuliaを実行してみます。 otepipi.hatenablog.com otepipi.hatenablog.com shd101wyy.github.io 前提として、Juliaがシステム環境変数Pathに登録されている必要があります。 Markdownで下記のよ…

Dockerの導入とJulia/Octaveセッションの起動まで(win10 Home)

最近巷ではDockerが流行していることもあり、私も勉強のためシミュレーション環境をDockerに移行してみたいと考えています。 導入に向けての記録を備忘録代わりにとっておきます。 環境 win10 Home 64bit intel core i7 事前準備としてタスクマネージャーの…

JuliaでPIDのオートチューニング その2進捗状況

この記事中のプログラムコードには誤りがあります。 詳細は下記記事を御覧ください。 otepipi.hatenablog.com 前回からの続きです。今回は前回のオートチューニングで得られたパラメーターを当てはめてPIDしてみます。 前回は↓ otepipi.hatenablog.com 得ら…

JuliaでPIDのオートチューニング その1

この記事中のプログラムコードには誤りがあります。 詳細は下記記事を御覧ください。 otepipi.hatenablog.com 今回はJuliaでPIDパラメーターのオートチューニングを行ってみます。 今回、PIDのオートチューニングにはジーグラ・ニコルスのステップ応答を使用…

JuliaでPID制御を実装する。

前回、JuliaでPI制御を実装しましたので、今回はそれに微分ゲインを加えてPID制御にします。 otepipi.hatenablog.com 離散的であるプログラムでの実装では微分制御は以下の式で実装できます。 $$ \begin{equation} u_d(t)=k_d \frac{e_t - e_{t-1}}{⊿t} \end…

JuliaでPI制御を実装する

今回はプログラミング言語JuliaでPI制御を実装してみます。練習のため制御関係のパッケージは使用せず、一から実装してみました。 例題は下記書籍のものになります。 エンジニアのためのフィードバック制御入門作者: Philipp K. Janert,野原勉,星義克,米元謙…

Juliaで過渡応答解析(by ControlSystems)

今回はJuliaの制御工学系パッケージ"ControlSystems.jl"で遊んでみたいと思います。 GitHub github.com Document juliacontrol.github.io バネマスダンパ台車系の過渡応答解析 下記Matlab用制御工学の参考書から例題を解いてみます。 制御のためのMATLAB作者…

微分方程式を行列で差分化して解く その3

今回も前回に引き続き行列を使用して1階微分の微分方程式を解いてみます。 前回までは初期値が $$ y(0) = 0 $$ でしたが、そうではない場合について考えていきたいと思います。 前回までの内容は以下になります。 otepipi.hatenablog.com otepipi.hatenablog…

微分方程式を行列で差分化して解く その2

前回からの続きです。 前回は以下 otepipi.hatenablog.com 今回は計算にJulia言語を使用しています。この文章自体も一部Weave.jlを使って書いています。 otepipi.hatenablog.com まず使用するパッケージを読み込んでおきます。 using Gadflyusing LinearAlge…

Weave.jlを使ってJuliaのノートブックを作成する

今回はJuliaのパッケージ"Weave.jl"を使ってjupyter notebookのように文章とプログラミングの演算結果を同時に掲載できるノートブックを作っていきます。 "Weave.jl"と数値計算に強いJuliaを使えば簡単に技術資料を作ることができそうです。 Weave.jl github…

Juliaで最適化計算

今回はJuliaのパッケージ"JuMP.jl"を使って最適化問題を解いてみます。 JuMP.jlについて Juliaの最適化計算パッケージです。 www.juliaopt.org 特徴は下記のようですね。 本来の数式に近い記述が可能 速い 記述がsolverに依存しない 例題を実行する。 下記ド…

JuliaでModelicaライクなシミュレーション

今回はJuliaのパッケージ"Modia.jl"を使用してModelicaのような非因果モデリングでシミュレーションしてみます。 Modelicaについては以前の記事を参照してください。 otepipi.hatenablog.com Modia.jlについて Modia.jlはJulia言語による方程式ベースのシス…

Modelicaプログラミング練習

こんばんは!Otepipiです! 今回はプログラミング言語Modelicaを使用してプログラミングの練習をしていきたいと思います。 Modelicaとは Modelicaはオブジェクト指向のプログラミング言語ですが、その中でも物理モデリングに特化しています。 言語仕様は下記…

Julia言語を使って常微分方程式を解く(捕食者-非捕食者モデル)

こんにちは!Otepipiです。 今日はプログラミング言語Juliaを使用して微分方程式を解いてみます。 例題は下記「微分方程式で数学モデルを作ろう」から『捕食者ー非捕食者モデル』です。 微分方程式で数学モデルを作ろう作者: デヴィッド・バージェス・モラグ…