Cコード化
漸化式を元にCコード化したものが以下になる。
#include <stdio.h>
double dotV;
double V;
double Vzi;
double dotS;
double S;
double Szi;
const double m=1;
int ObjectMovementModel(double F, double deltaT)
{
int ret = -1;
if( m != 0 ){
dotV = 1/m * F;
V = dotV * deltaT + Vzi;
Vzi = V;
dotS = V;
S = dotS * deltaT + Szi;
Szi = S;
}
return ret;
}
int main()
{
int i;
double F = 0;
printf("F,v,s\n");
for( i = 0; i < 10000; i++ ){
if( i >= 5000 ){
F = 1;
}
ObjectMovementModel( F, 0.001 );
printf("%lf,%lf,%lf\n",F, V, S);
}
return 0;
}
シミュレーション結果
Cコードから直接グラフ表示するのは困難なため、
printfで常時各変数を出力している。
よって、これをExcelに張り付けてグラフ化することで
シミュレーションという体にする。
以下がそのグラフ。
このように想定通りの結果が得られている。
この流れが、もっとも原始的なモデルベース開発と言える形である。
まとめ
- 状態空間モデルを使用せず、微分方程式のままシミュレーションを試みる。
- Simulinkがあれば、ブロック図のままでもシミュレーションできるが…。
- その後、ブロック図を離散化。
- この段階でオートコード生成したりもする。
- 漸化式導出。
- Cコード化とシミュレーション実施。
- もっとも原始的なモデルベース開発?
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント