Исследование модели фрактального броуновского движения
Фрактальное броуновское движение, фрактальный гауссовский шум, автомодельность, оценка ковариационной функции, оценка параметра Харста, интерполяция, экстраполяция, фильтрация Калмана-Бьюси. Статистическое моделирование фрактального броуновского движения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 16.09.2013 |
Размер файла | 680,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
const double P = 1000000;
const int n=200;
double B[n+1];
double Bw1[n+1];
double Bw2[n+1];
double X[n+1];
double Y[n+1];
double M[n+1];
double d = 0.01;
double alpha = 1.0;
double sigma = 0.05;
int ind = 0;
int ind2 = 0;
double g0 = 1.0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
lblHurst->Caption = "H = " + AnsiString(H);
}
//---------------------------------------------------------------------------
double TForm1::Cov(double x)
// Вычисление точного значения ковариационной функции
{
double res = 0.5*(pow(fabs(x+1),2*H)-2*pow(fabs(x),2*H)+pow(fabs(x-1),2*H));
return res;
}
//---------------------------------------------------------------------------
double TForm1::Fspectr(double x)
// Вычисление значения оценки спектральной плотности
{
double res = cos(0)*Cov(0);
for (int i=1; i<=L; i++) {
res += 2*cos(x*i)*Cov(i);
}
res = res/(2*M_PI);
return res;
}
//---------------------------------------------------------------------------
void TForm1::CanvasClear()
// Очистка области построения графиков
{
Image1->Canvas->Pen->Color = clWhite;
Image1->Canvas->Pen->Mode = pmCopy;
for (int i=0; i<Image1->Height; i++) {
Image1->Canvas->MoveTo(0,i);
Image1->Canvas->LineTo(Image1->Width-1,i);
}
}
//---------------------------------------------------------------------------
void TForm1::ScaleMotion()
// Масштабирование ФБД по выборочному второму моменту
{
// Вычисление выборочного второго момента
double dev = 0;
for (int j=1; j<=n; j++) {
dev += pow(B[j]-B[j-1],2);
}
dev = dev/n;
// ShowMessage("dev = " + AnsiString(dev));
// Вычисление коэффициента масштабирования по выборочному второму моменту
double coef = sqrt(1.0/dev);
// Масштабирование ФБД
for (int j=1; j<=n; j++) {
B[j] = B[j]*coef;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
// Построение спектральной плотности
{
Memo1->Clear();
CanvasClear();
// Отрисовка осей координат
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(505,250);
Image1->Canvas->LineTo(505,255);
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(5,255);
Image1->Canvas->MoveTo(255,300);
Image1->Canvas->LineTo(255,5);
Image1->Canvas->MoveTo(255,50);
Image1->Canvas->LineTo(250,50);
Image1->Canvas->Pen->Color = clBlack;
double lambda[N+1];
double f[N+1];
for (int i=0; i<=N; i++) {
lambda[i] = -M_PI + (2*M_PI/N)*i;
f[i] = Fspectr(lambda[i]);
}
// Построение графика спектральной плотности
int c = 200;
Image1->Canvas->MoveTo(5,250-floor(f[0]*c));
Memo1->Lines->Add(AnsiString(f[0]));
for (int i=1; i<=N; i++) {
Image1->Canvas->LineTo(5+i*(500.0/N),250-floor(f[i]*c));
Memo1->Lines->Add(AnsiString(Fspectr(lambda[i])));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
// Моделирование ФБД
{
Memo1->Clear();
CanvasClear();
double lambda[N+1];
double f[N+1];
double Vk[N+1];
double beta[n+1];
AnsiString buf;
// Считывание значений Lambda[k] для данного N и параметра Харста H
for (int i=0; i<=N; i++) {
buf = Memo2->Lines->Strings[i];
lambda[i] = StrToFloat(buf);
}
// Генерирование случайных величин V[k]
randomize();
for (int i=0; i<=N; i++) {
Vk[i] = RandG(0,1)/sqrt(N);
}
// Вычисление реализаций ФГШ
for (int i=0; i<n; i++) {
beta[i]=0;
for (int j=1; j<=N; j++) {
beta[i] += cos(lambda[j]*i)*Vk[j];
}
}
// Вычисление значений ФБД
B[0] = 0;
Memo1->Lines->Add(AnsiString(B[0]));
for (int i=1; i<=n; i++) {
B[i] = B[i-1] + beta[i-1];
Memo1->Lines->Add(AnsiString(B[i]));
}
//ScaleMotion();
// Вычисление масштаба шкалы значений ФБД
double maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(B[i])) {
maxb = fabs(B[i]);
}
}
int scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
// Отрисовка осей координат
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(405,250);
Image1->Canvas->MoveTo(405,250);
Image1->Canvas->LineTo(405,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->Pen->Color = clBlack;
// Построение графика ФБД
for (int i=0; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-B[i]*scale);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnLoadClick(TObject *Sender)
// Загрузка значений Lambda[k] из внешнего файла
{
Memo2->Clear();
char p[100];
if(OpenDialog1->Execute()){
AnsiString PathName = OpenDialog1->FileName;
using namespace std;
fstream myfile(PathName.c_str());
while (!myfile.eof()) {
myfile.getline(p,100);
Memo2->Lines->Add(AnsiString(p));
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSaveClick(TObject *Sender)
// Сохранение вычисленных значений Lambda[k] во внешний файл
{
if ( SaveDialog1->Execute() ) {
AnsiString PathName = SaveDialog1->FileName;
using namespace std;
fstream myfile(PathName.c_str());
myfile << Memo2->Text.c_str();
myfile.close();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnCalcClick(TObject *Sender)
// Вычисление значений Lambda[k] для заданного N и параметра Харста H
{
double lambda[N+1];
double delta = 0.00001;
lambda[0] = -M_PI;
Memo2->Lines->Add(AnsiString(lambda[0]));
double I, I2;
double x = -M_PI;
int k = 0;
I = 0;
while (x<0) {
I2 = I;
I = (x + M_PI)/(2*M_PI);
for (int i=1; i<=L; i++) {
I+= (Cov(i)*(sin(x*i)+sin(M_PI*i)))/(M_PI*i);
}
if ( (I2 < (1.0/N)*(k+1)) && (I >= (1.0/N)*(k+1)) ) {
lambda[k+1] = x;
k++;
Memo2->Lines->Add(AnsiString(x));
}
x += delta;
}
lambda[N/2] = 0;
Memo2->Lines->Add(AnsiString(lambda[N/2]));
for (int i=1; i<=N/2; i++) {
lambda[N/2+i] = fabs(lambda[N/2-i]);
Memo2->Lines->Add(AnsiString(lambda[N/2+i]));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnHurstClick(TObject *Sender)
// Изменение значения параметра Харста
{
H = StrToFloat(editHurst->Text);
lblHurst->Caption = "H = " + AnsiString(H);
Memo2->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnCovClick(TObject *Sender)
// Построение оценки ковариационной функции
{
CanvasClear();
const int nn = 21; // количество вычисляемых значений
// Вычисление точного значения ковариационной функции
double Cv[nn];
for (int i=0; i<nn; i++) {
Cv[i] = Cov(i);
}
// Построение массива реализаций ФГШ
double beta[n];
for (int i=0; i<n; i++) {
beta[i] = B[i+1]-B[i];
}
Memo1->Lines->Add(" ");
Memo1->Lines->Add("cov = ");
// Вычисление оценки ковариационной функции по реализациям ФГШ
double Cv2[nn];
for (int i=0; i<nn; i++) {
Cv2[i] = 0;
for (int j=0; j<=n-i-1; j++) {
Cv2[i] += beta[i+j]*beta[j];
}
Cv2[i] = Cv2[i]/(n-i);
Memo1->Lines->Add(FloatToStr(Cv2[i]));
}
// Вычисление масштаба шкалы значений ковариационной функции
double maxb = 0;
for (int i=0; i<nn-1; i++) {
if (maxb < fabs(Cv2[i])) {
maxb = fabs(Cv2[i]);
}
}
int scale = ceil(250/maxb);
if (scale > 249 ) {
scale = 249;
}
// Отрисовка осей координат
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(5+10*(nn-1),250);
Image1->Canvas->LineTo(5+10*(nn-1),255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->Pen->Color = clBlack;
// Построение графика точного значения ковариационной функции
Image1->Canvas->MoveTo(5,250-scale*Cv[0]);
for (int i=1; i<nn; i++) {
Image1->Canvas->LineTo(5+i*10,250-scale*Cv[i]);
}
// Построение графика оценки ковариационной функции
Image1->Canvas->Pen->Color = clRed;
Image1->Canvas->MoveTo(5,250-scale*Cv2[0]);
for (int i=1; i<nn; i++) {
Image1->Canvas->LineTo(5+i*10,250-scale*Cv2[i]);
}
double He = 0.5*log(Cv2[1]+1.0)/log(2) + 0.5;
Label2->Caption = "[H] = "+AnsiString(floor(He*10000.0)/10000.0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnLoadSignalClick(TObject *Sender)
// Загрузка сигнала, построенного в Matlab
{
Memo1->Clear();
CanvasClear();
// Считывание значений из внешнего файла
char p[100];
int i = 0;
if(OpenDialog1->Execute()){
AnsiString PathName = OpenDialog1->FileName;
using namespace std;
fstream myfile(PathName.c_str());
while (!myfile.eof()) {
myfile.getline(p,100);
Memo1->Lines->Add(AnsiString(p));
B[i] = StrToFloat(AnsiString(p));
i++;
}
}
ScaleMotion();
// Вычисление масштаба шкалы значений ФБД
double maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(B[i])) {
maxb = fabs(B[i]);
}
}
int scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
// Отрисовка осей координат
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(505,250);
Image1->Canvas->MoveTo(505,250);
Image1->Canvas->LineTo(505,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->Pen->Color = clBlack;
// Построение ФБД
for (int i=0; i<n; i++) {
Image1->Canvas->LineTo(5+i,250-B[i]*scale);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnBMClick(TObject *Sender)
// Построение стандартного броуновского движения
{
Memo1->Clear();
CanvasClear();
double f[N+1];
double beta[n+1];
randomize();
beta[0] = 0;
for (int i=1; i<=n; i++) {
beta[i]=RandG(0,1);
}
B[0] = 0;
Memo1->Lines->Add(AnsiString(B[0]));
for (int i=1; i<=n; i++) {
B[i] = B[i-1] + beta[i];
Memo1->Lines->Add(AnsiString(B[i]));
}
double maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(B[i])) {
maxb = fabs(B[i]);
}
}
int scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(505,250);
Image1->Canvas->MoveTo(505,250);
Image1->Canvas->LineTo(505,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->Pen->Color = clBlack;
for (int i=0; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-B[i]*scale);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnBetaClick(TObject *Sender)
// Построение функции beta при неслучайных V[k]
// Просто для наблюдения за ее структурой
{
Memo1->Clear();
CanvasClear();
double lambda[N+1];
double f[N+1];
double beta[n+1];
AnsiString buf;
for (int i=0; i<=N; i++) {
buf = Memo2->Lines->Strings[i];
lambda[i] = StrToFloat(buf);
}
for (int i=0; i<n; i++) {
beta[i]=0;
for (int j=1; j<=N; j++) {
beta[i] += cos(lambda[j]*i)*(1.0/N);
}
}
double maxb = 0;
for (int i=0; i<n; i++) {
if (maxb < fabs(beta[i])) {
maxb = fabs(beta[i]);
}
}
int scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(505,250);
Image1->Canvas->MoveTo(505,250);
Image1->Canvas->LineTo(505,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250-beta[0]*scale);
Image1->Canvas->Pen->Color = clBlack;
for (int i=1; i<n; i++) {
Image1->Canvas->LineTo(5+i,250-beta[i]*scale);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSolveClick(TObject *Sender)
// Решение диффура
{
CanvasClear();
randomize();
X[0] = RandG(0,g0);
Y[0] = 0;
// Моделирование ФБД
double mu[N/2+1];
double Ak1[N/2+1];
double Bk1[N/2+1];
double Ak2[N/2+1];
double Bk2[N/2+1];
double beta1[n+1];
double beta2[n+1];
AnsiString buf;
// Считывание значений Mu[k] для данного N и параметра Харста H
for (int i=0; i<=N/2; i++) {
buf = Memo2->Lines->Strings[i];
mu[i] = StrToFloat(buf);
}
// Генерирование случайных величин V[k]
for (int i=0; i<=N/2; i++) {
Ak1[i] = RandG(0,1)/sqrt(N);
Bk1[i] = RandG(0,1)/sqrt(N);
Ak2[i] = RandG(0,1)/sqrt(N);
Bk2[i] = RandG(0,1)/sqrt(N);
}
// Вычисление реализаций ФГШ
for (int i=0; i<=n; i++) {
beta1[i]=0;
beta2[i]=0;
for (int j=1; j<=N/2; j++) {
beta1[i] += cos(mu[j]*i)*Ak1[j] + sin(mu[j]*i)*Bk1[j];
beta2[i] += cos(mu[j]*i)*Ak2[j] + sin(mu[j]*i)*Bk2[j];
}
}
// Масштабирование beta1
double dev = 0;
for (int j=1; j<=n; j++) {
dev += pow(beta1[j],2);
}
dev = dev/n;
double coef = sqrt(1.0/dev);
for (int j=1; j<=n; j++) {
beta1[j] = beta1[j]*coef;
}
// Масштабирование beta2
dev = 0;
for (int j=1; j<=n; j++) {
dev += pow(beta2[j],2);
}
dev = dev/n;
coef = sqrt(1.0/dev);
for (int j=1; j<=n; j++) {
beta2[j] = beta2[j]*coef;
}
// Решение системы диффуров с помощью конечных разностей
for (int i=1; i<=n; i++) {
X[i] = X[i-1]*(1.0-alpha*d) + beta1[i]*pow(d,H);
Y[i] = Y[i-1] + X[i-1]*d + sigma*beta2[i]*pow(d,H);
}
M[0] = 0;
double bbeta = sqrt(pow(alpha,2)+1/pow(sigma,2));
for (int i=1; i<=n; i++) {
M[i] = M[i-1]*(1.0-bbeta*d) + (bbeta-alpha)*(Y[i]-Y[i-1]);
}
// Вычисление масштаба шкалы значений функций
double maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(X[i])) {
maxb = fabs(X[i]);
}
if (maxb < fabs(Y[i])) {
maxb = fabs(Y[i]);
}
if (maxb < fabs(M[i])) {
maxb = fabs(M[i]);
}
}
int scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(405,250);
Image1->Canvas->MoveTo(405,250);
Image1->Canvas->LineTo(405,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250-Y[0]*scale);
Image1->Canvas->Pen->Color = clBlue;
for (int i=1; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-Y[i]*scale);
}
Image1->Canvas->MoveTo(5,250-X[0]*scale);
Image1->Canvas->Pen->Color = clBlack;
for (int i=1; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-X[i]*scale);
}
Image1->Canvas->MoveTo(5,250-M[0]*scale);
Image1->Canvas->Pen->Color = clRed;
for (int i=1; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-M[i]*scale);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnShowClick(TObject *Sender)
{
CanvasClear();
// Вычисление масштаба шкалы значений ФБД
double maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(B[i])) {
maxb = fabs(B[i]);
}
}
int scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
// Отрисовка осей координат
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(405,250);
Image1->Canvas->MoveTo(405,250);
Image1->Canvas->LineTo(405,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->Pen->Color = clBlack;
// Построение графика ФБД
for (int i=0; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-B[i]*scale);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnFBM2Click(TObject *Sender)
// Моделирование ФБД (альтернативный вариант)
{
Memo1->Clear();
CanvasClear();
double mu[N/2+1];
double Ak[N/2+1];
double Bk[N/2+1];
double beta[n+1];
AnsiString buf;
// Считывание значений Mu[k] для данного N и параметра Харста H
for (int i=0; i<=N/2; i++) {
buf = Memo2->Lines->Strings[i];
mu[i] = StrToFloat(buf);
}
// Генерирование случайных величин V[k]
randomize();
for (int i=0; i<=N/2; i++) {
Ak[i] = sqrt(2.0)*RandG(0,1)/sqrt(N);
Bk[i] = sqrt(2.0)*RandG(0,1)/sqrt(N);
}
// Вычисление реализаций ФГШ
for (int i=0; i<n; i++) {
beta[i]=0;
for (int j=1; j<=N/2; j++) {
beta[i] += cos(mu[j]*i)*Ak[j] + sin(mu[j]*i)*Bk[j];
}
}
// Вычисление значений ФБД
B[0] = 0;
Memo1->Lines->Add(AnsiString(B[0]));
for (int i=1; i<=n; i++) {
B[i] = B[i-1] + beta[i-1];
Memo1->Lines->Add(AnsiString(i)+" : "+AnsiString(B[i]));
}
//ScaleMotion();
// Вычисление масштаба шкалы значений ФБД
double maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(B[i])) {
maxb = fabs(B[i]);
}
}
int scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
// Отрисовка осей координат
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(405,250);
Image1->Canvas->MoveTo(405,250);
Image1->Canvas->LineTo(405,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->Pen->Color = clBlack;
// Построение графика ФБД
for (int i=0; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-B[i]*scale);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnErrClick(TObject *Sender)
{
double maxb;
int scale;
Memo1->Clear();
CanvasClear();
if (ind2 == 0) {
double eps[n+1];
double maxe=0;
for (int i=0; i<=n; i++) {
eps[i] = X[i] - M[i];
if (i>10) {
if (fabs(eps[i]) > maxe) {
maxe = fabs(eps[i]);
}
}
}
// Вычисление масштаба шкалы значений функций
maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(eps[i])) {
maxb = fabs(eps[i]);
}
}
scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(405,250);
Image1->Canvas->MoveTo(405,250);
Image1->Canvas->LineTo(405,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->Pen->Color = clRed;
Image1->Canvas->MoveTo(5,250-maxe*scale);
Image1->Canvas->LineTo(405,250-maxe*scale);
Image1->Canvas->MoveTo(5,250+maxe*scale);
Image1->Canvas->LineTo(405,250+maxe*scale);
Image1->Canvas->MoveTo(5,250-eps[0]*scale);
Image1->Canvas->Pen->Color = clBlack;
for (int i=1; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-eps[i]*scale);
}
ind2 = 1;
ShowMessage("maxe = "+AnsiString(maxe));
}
else {
maxb = 0;
for (int i=0; i<=n; i++) {
if (maxb < fabs(X[i])) {
maxb = fabs(X[i]);
}
if (maxb < fabs(Y[i])) {
maxb = fabs(Y[i]);
}
if (maxb < fabs(M[i])) {
maxb = fabs(M[i]);
}
}
scale = floor(250/maxb);
if (scale > 249 ) {
scale = 249;
}
Image1->Canvas->Pen->Color = clSilver;
Image1->Canvas->MoveTo(5,250);
Image1->Canvas->LineTo(405,250);
Image1->Canvas->MoveTo(405,250);
Image1->Canvas->LineTo(405,255);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(5,250+scale);
Image1->Canvas->MoveTo(5,250-scale);
Image1->Canvas->LineTo(10,250-scale);
Image1->Canvas->MoveTo(5,250+scale);
Image1->Canvas->LineTo(10,250+scale);
Image1->Canvas->MoveTo(5,250-Y[0]*scale);
Image1->Canvas->Pen->Color = clBlue;
for (int i=1; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-Y[i]*scale);
}
Image1->Canvas->MoveTo(5,250-X[0]*scale);
Image1->Canvas->Pen->Color = clBlack;
for (int i=1; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-X[i]*scale);
}
Image1->Canvas->MoveTo(5,250-M[0]*scale);
Image1->Canvas->Pen->Color = clRed;
for (int i=1; i<=n; i++) {
Image1->Canvas->LineTo(5+i*2,250-M[i]*scale);
}
ind2=0;
}
}
//---------------------------------------------------------------------------
Размещено на Allbest.ru
...Подобные документы
Синтез стохастических систем при неполной информации о векторе переменных состояния. Оптимальное наблюдение (оптимальная фильтрация). Восстановление переменных состояния нелинейных объектов. Оптимальный наблюдатель (оптимальный фильтр Калмана -Бьюси).
реферат [732,9 K], добавлен 06.06.2015Определение параметров движения при вращательном движении, зависимости скорости, ускорения, времени от угла поворота, установление времени поворота на определенный угол. Применение построенной математической модели к расчету параметров движения тела.
курсовая работа [112,0 K], добавлен 18.03.2010Динамическая и математическая модели движения иглы в замке вязального механизма. Форма заключающего клина. Синтез закона движения иглы. Упрощенное изображение вязального механизма однофонтурной вязальной машины. Математическое моделирование движения иглы.
курсовая работа [1,5 M], добавлен 03.03.2015Фракталы как структуры, состоящие из частей, которые в каком-то смысле подобны целому, их классификация и разновидности. Алгоритмы фрактального сжатия изображений. Универсальные и векторные графические форматы, их отличительные характеристики и свойства.
презентация [192,7 K], добавлен 12.02.2014Разработка автоматизированной системы реализации модели движения тела переменной массы на примере движения одноступенчатой ракеты, расчет времени и скорости полета. Описание формы загрузки программы. Требование к программному и техническому обеспечению.
курсовая работа [255,0 K], добавлен 18.03.2012Разработка модели движения трёх видов судов: надводного корабля "Красный Кавказ", катера "Тритон" и корабля на подводных крыльях. Написание программной модели в среде Matlab и исследование с ее помощью динамических свойств моделируемых объектов.
курсовая работа [590,5 K], добавлен 08.03.2012Створення алгоритму фрактального стиснення з втратами для зображень. Основні принципи методу, його обґрунтування та алгоритм реалізації. Характеристика типової схеми фрактального стиснення. Побудова алгоритму, його представлення та афінне перетворення.
курсовая работа [932,1 K], добавлен 10.07.2017Положения алгоритмов сжатия изображений. Классы приложений и изображений, критерии сравнения алгоритмов. Проблемы алгоритмов архивации с потерями. Конвейер операций, используемый в алгоритме JPEG. Характеристика фрактального и рекурсивного алгоритмов.
реферат [242,9 K], добавлен 24.04.2015Понятие о кинематике. Относительность, траектория и виды движений. Движение тела, брошенного под углом к горизонту. Разработка компьютерной программы для моделирования. Описание интерфейса программы и программного кода. Инструкция пользования интерфейсом.
курсовая работа [1,6 M], добавлен 25.11.2013Моделирование движения невесомой заряженной частицы в электрическом поле, созданном системой нескольких фиксированных в пространстве заряженных тел, в случае, когда заряженные тела находятся в одной плоскости и в ней же находится движущаяся частица.
курсовая работа [62,7 K], добавлен 31.05.2010Моделирование траектории движения космического аппарата, запускаемого с борта космической станции, относительно Земли. Запуск осуществляется в направлении, противоположном движению станции, по касательной к её орбите. Текст программы в среде Matlab.
контрольная работа [138,8 K], добавлен 31.05.2010Разработка алгоритма фильтрации данных, полученных с систем спутниковой навигации с помощью GNSS-модуля. Анализ работы фильтра Калмана, его программная реализация под конкретную задачу. Выбор навигационных модулей для получения данных позиционирования.
дипломная работа [3,6 M], добавлен 12.01.2016Проект оболочки моделирования кривошипно-шатунного механизма в среде MS Visual Studio. Разработка его математической модели. Исследование кинематики точек В, С, М. Алгоритм и код программы. Анимация движения механизма и график движения основных точек.
курсовая работа [422,2 K], добавлен 13.03.2016Определение характеристик точности выходного параметра вероятностным расчетно-аналитическим методом. Моделирование на электронно-вычислительной машине точности выходного параметра каскада. Сравнение его точности. Обоснование числа реализаций каскада.
курсовая работа [870,4 K], добавлен 23.06.2014Физическая и математическая модели уравнения движения материальной точки. Блок-схема алгоритма основной программы для решения задачи Коши и получения результатов с фиксированным количеством отрезков разбиения. Разработка программы для ЭВМ, ее листинг.
курсовая работа [212,3 K], добавлен 24.11.2014Практические навыки моделирования законов движения многосвязных механических систем на примере трехзвенного манипулятора. Основные этапы моделирования: исходная система; формирование исходных данных, геометрической, динамической и математической модели.
презентация [535,0 K], добавлен 25.06.2013Характеристика движения тела, брошенного под углом к горизонту, с точки зрения криволинейного движения. Пути разработки программы, реализующей модель движения тела. Основные требования к программному обеспечению, сообщения и тестирование системы.
курсовая работа [861,5 K], добавлен 17.03.2011Интерполяция данных с использованием значений функции, заданной множеством точек, для предсказания значения функции между ними. Результаты линейной интерполяции в графическом виде. Кубическая сплайн-интерполяция. Функции для поиска вторых производных.
презентация [2,7 M], добавлен 29.09.2013Интерполяция методом наименьших квадратов. Построение функции с применением интерполяционного многочленов Лагранжа и Ньютона, кубических сплайнов. Моделирование преобразователя давления в частоту в пакете LabVIEW. Алгоритм стандартного ПИД-регулятора.
курсовая работа [2,7 M], добавлен 20.04.2011Классификация и основные характеристики метода сжатия данных. Вычисление коэффициентов сжатия и оценка их эффективности. Алгоритмы полиноминальных, экстраполяционных и интерполяционных методов сжатия и их сравнение. Оптимальное линейное предсказание.
курсовая работа [1,1 M], добавлен 17.03.2011