643.МГУЛ.2301.ВТ-02 12
Аннотация
В данном документе содержаться полные исходные тексты программного обеспечения статистического моделирования работы КЭНС в процессе полёта летательного аппарата.
Программа написана на визуальном объектно-ориентированном языке высокого уровня Borland C++ Builder 2006.
Документ предназначен для лиц, сопровождающих программное обеспечение моделирующего комплекса.
Содержание
1. Файл "statis.cpp"....................................................................................
2. Файл "BinsErrors.h"...............................................................................
3. Файл "BinsErrors.cpp"..................................................................
4. Файл "SPMain.h"....................................................................................
5. Файл "SPMain.cpp"................................................................................
6. Файл "StatisticProcess.h".......................................................................
7. Файл "StatisticProcess.cpp"....................................................................
8. Файл "statmain.h"...................................................................................
9. Файл "statmain.cpp"............................................................................... |
Стр.
5
6
7
11
13
18
19
29
31 |
Файл "statis.cpp"
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("statmain.cpp", Form1);
USEFORM("SPMain.cpp", ScratchPad);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
try {
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TScratchPad), &ScratchPad);
Application->Run();
}
catch (Exception &exception) {
Application->ShowException(&exception);
}
catch (…) {
try {
throw Exception("");
}
catch (Exception &exception) {
Application->ShowException(&exception);
}
}
return 0;
}
Файл "BinsErrors.h"
// Класс моделирования вносимых разово в опр-й м-т времени ошибок БИНС
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <stdio.h>
class BinsErrors {
public:
BinsErrors(); // конструктор
~BinsErrors(); // деструктор
// функция преинициализации (задаются ограничения при формировании ошибок) (характеристики на уровне 3СИГМА)
bool Preinitialize(double SigmaCoordx,double SigmaCoordz,double SigmaRatex,double SigmaRatez,double SigmaAcsx,double SigmaAcsz,double MCoordx,double MCoordz,double MRatex,double MRatez);
bool FormErrors(); // функция формирования ошибок БИНС случайным образом при заданных ограничениях
bool WriteToFile(char *FileName); // функция записи ошибок в файл
protected:
// генератор случайных нормально распределенных чисел
double RandG(double gnM, // требуемое матожидание
double gnSIG // требуемое СКО
);
double DX, DZ, DVX, DVZ, DVTX, DVTZ; // ошибки БИНС
// характеристики ошибок
double SigmaKx;
double SigmaVx;
double SigmaVTx;
double MKx;
double MVx;
double SigmaKz;
double SigmaVz;
double SigmaVTz;
double MKz;
double MVz;
FILE *fris;
bool DataInserted;
Int RisCounter;
private:};
Файл "BinsErrors.cpp"
//Реализация функций КЛАССА ФОРМИРОВАНИЯ ВНОСИМЫХ ОШИБОК БИНС
#include "BinsErrors.h"
#include <string.h>
#define CH_DIR_REZ "..\\rezults"
extern int Prezult;
extern char CHTEXT[128];
extern float CXBHosh;
BinsErrors::BinsErrors() { // конструктор
SigmaKx = 0.0;
SigmaVx = 0.0;
SigmaVTx = 0.0;
MKx =0.0;
MVx = 0.0;
SigmaKz = 0.0;
SigmaVz = 0.0;
SigmaVTz = 0.0;
MKz = 0.0;
MVz = 0.0;
DX = 0.0;
DZ = 0.0;
DVX = 0.0;
DVZ = 0.0;
fris = 0;
DataInserted = false;
RisCounter = 0;
srand((unsigned)time(NULL)); // инициализация генераторов текущим временем (исключение псевдослучайности)
}
BinsErrors::~BinsErrors() { // деструктор
If (fris) {
fclose(fris);
fris=0;
}
}
// функция преинициализации (задаются ограничения при формировании ошибок) (характеристики на уровне 3СИГМА!)
bool BinsErrors::Preinitialize(double SigmaCoordx,double SigmaCoordz,
double SigmaRatex,double SigmaRatez,
double SigmaAcsx,double SigmaAcsz,
double MCoordx,double MCoordz,
double MRatex,double MRatez
) {
try {
SigmaKx = SigmaCoordx;
SigmaVx = SigmaRatex;
SigmaVTx = SigmaAcsx;
MKx = MCoordx;
MVx = MRatex;
SigmaKz = SigmaCoordz;
SigmaVz = SigmaRatez;
SigmaVTz = SigmaAcsz;
MKz = MCoordz;
MVz = MRatez;
if (!Prezult) {
strcpy(CHTEXT, CH_DIR_REZ);
strcat(CHTEXT, "\\BinsOsh.ris");
fris=fopen(CHTEXT,"a");
if (!fris) throw 0;
fprintf(fris,"DX DZ DVX DVZ DVTX DVTZ\n");
fclose(fris);
}
DataInserted = true;
return true;
}
catch(...) {return false;}
}
float LIM(float x, float a) { // функция ограничения
if (fabs(x) <= fabs(a)) return (x);
else if (x > 0.0) return( fabs(a));
else return(-fabs(a));
}
bool BinsErrors::FormErrors() { // функция формирования ошибок БИНС случайным образом при заданных ограничениях
double koeffvx, koeffvz;
try {
if (!DataInserted) throw 0;
if (SigmaKx != 0)
koeffvx = SigmaVx/(SigmaKx); //0.0005555; // SKO=1.6666 (5 na urovne 3 sigma)
else
koeffvx = 0.0;
if (SigmaKz != 0)
koeffvz = SigmaVz/(SigmaKz);
else
koeffvz = 0.0;
double sigmakx = SigmaKx/3.0; // для генератора нужно задавать на уровне 1 СИГМА (генератор на выходе выдает уровень 3СИГМА) !!!
double sigmakz = SigmaKz/3.0;
double sigmavtx = SigmaVTx/3;
double sigmavtz = SigmaVTz/3;
// формирование случайных ошибок по координатам в плане
// (нормальный закон)
DX=LIM(RandG(MKx,sigmakx), SigmaKx);
DZ=LIM(RandG(MKz,sigmakz), SigmaKz);
DVTX=RandG(MKx,sigmavtx);
DVTZ=RandG(MKz,sigmavtz);
if(DX < 0)
DVTX = fabs(DVTX)*(-1);
else
DVTX = fabs(DVTX);
if(DZ < 0)
DVTZ = fabs(DVTZ)*(-1);
else
DVTZ = fabs(DVTZ);
// формирование случайных ошибок по скоростям
// (нормальный закон)
DVX = koeffvx*(DX);
DVZ = koeffvz*(DZ);
return true;
}
catch(...) {return false;}
}
double BinsErrors:: RandG(double gnM,double gnSIG) { // генератор случайных нормально распределенных чисел
double u1,u2,s2;
s2=2;
while (s2 > 1) {
u1=2*(float)rand()/32768-1;
u2=2*(float)rand()/32768-1;
s2=pow(u1,2)+pow(u2,2);
}
return((double)(sqrt(-2*log(s2)/s2)*u1*gnSIG+gnM));
}
bool BinsErrors::WriteToFile(char *FileName) { // функция записи ошибок в файл
try {
FILE *f;
f=fopen(FileName,"w");