【入門】微分方程式からCコードへ【数値計算】

【入門】微分方程式からCコードへ【数値計算】 数値計算
【入門】微分方程式からCコードへ【数値計算】

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に張り付けてグラフ化することで
シミュレーションという体にする。
以下がそのグラフ。

運動方程式をC言語でシミュレーション、Excel

このように想定通りの結果が得られている。
この流れが、もっとも原始的なモデルベース開発と言える形である。

まとめ

  • 状態空間モデルを使用せず、微分方程式のままシミュレーションを試みる。
    • Simulinkがあれば、ブロック図のままでもシミュレーションできるが…。
  • その後、ブロック図を離散化。
    • この段階でオートコード生成したりもする。
  • 漸化式導出。
  • Cコード化とシミュレーション実施。
    • もっとも原始的なモデルベース開発?

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

タイトルとURLをコピーしました