Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
342_magdis / 8.Текст программы.doc
Скачиваний:
10
Добавлен:
17.04.2015
Размер:
193.02 Кб
Скачать

46

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");

Соседние файлы в папке 342_magdis