Исследование модели фрактального броуновского движения

Теоретические основы фрактального броуновского движения, вопросы его статистического моделирования на компьютере. Применение теории при статистическом моделировании процессов стохастической системы, описываемых линейным дифференциальным уравнением.

Рубрика Физика и энергетика
Вид дипломная работа
Язык русский
Дата добавления 14.03.2012
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

2. Методические указания к организационно-экономической части дипломных проектов и работ - М.: МАИ, 1996.

3. Ширяев А.Н. Основы стохастической финансовой математики. Том 1. Факты и модели. - М.: ФАЗИС, 1998.

4. Миллер Б.М., Панков А.Р. Теория случайных процессов в примерах и задачах. - М.: ФИЗМАТЛИТ, 2002.

5. Ширяев А.Н. Вероятность.

6. Панков А.Р., Платонов Е.Н. Практикум по математической статистике. -М.: МАИ, 2006.

7. T.E. Duncan. Some Martingales from a Fractional Brownian Motion and Applications. Proceedings of the 44th IEEE Conference on Decision and Control, and the European Control Conference 2005.

8. Колмогоров А.Н. Интерполирование и экстраполирование ССП. Известия Академии наук СССР. Серия математическая. Том 5, №1. 1941.

9. Иванов В.В., Ковалев А.М., Тарасова Е.В. Методические указания к РГР по курсу «Организация, планирование и управление работой ИВЦ НПО». -М.: , 1989.

10. Методические указания к организационно-экономической части дипломных проектов и работ - М.: МАИ, 1996.

11. Бобков Н.И., Голованова Т.В. Охрана труда на ВЦ: Методические указания к дипломному проектированию. -М.: МАИ, 1995.

12. Березин В.М., Дайнов М.И. Защита от вредных производственных факторов при работе с ПЭВМ. Учебное пособие. -М.: МАИ, 2003.

Приложение

Исходный код программы (выполнено на C++ Builder 5.0):

#include <vcl.h>

#pragma hdrstop

#include "MainUnit.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

double H = 0.8; // Параметр Харста

const int N = 1000; // Количество отрезков разбиения [-pi; pi]

const int L = 1000; // Количество слагаемых в формуле вычисления спектральной плотности

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


Подобные документы

  • Понятие броуновского движения как теплового движения мельчайших частиц, взвешенных в жидкости или газе. Траектория движения частиц. Разработка Эйнштейном и Смолуховским первой количественной теории броуновского движения. Опыт исследователя Броуна.

    презентация [83,5 K], добавлен 27.10.2014

  • Атомная структура материи. Роль и значение открытия Р. Броуна. А. Эйншнейн и первая теория броуновского движения. Происхождение законов вероятности в физике. Определение размеров белковой молекулы Т. Сведбергом. Современная наука и броуновское движение.

    реферат [36,6 K], добавлен 23.09.2014

  • Понятие, причины и закономерности броуновского движения - хаотического движения частиц вещества в жидкости или в газе. Ознакомление с содержанием теории хаоса на примере движения бильярдных шариков. Способы восстановления детерминированных фракталов.

    реферат [3,8 M], добавлен 30.11.2010

  • Понятие случайного процесса. Описания случайных процессов. Состояние системы с хаотической динамикой. Метод ансамблей Гиббса. Описание движения шаровидной частицы. Метод решения задач броуновского движения. Стохастическое дифференциальное уравнение.

    презентация [194,5 K], добавлен 22.10.2013

  • Основные положения атомно-молекулярного учения. Закономерности броуновского движения. Вещества атомного строения. Основные сведения о строении атома. Тепловое движение молекул. Взаимодействие атомов и молекул. Измерение скорости движения молекул газа.

    презентация [226,2 K], добавлен 18.11.2013

  • Содержание теории теплорода и описание атомного состава вещества. Раскрытие молекулярных свойств вещества. Природа хаотичного движения малых частиц взвешенных в жидкости или газе, уравнение броуновского движения. Свойства и объём молекул идеального газа.

    презентация [127,2 K], добавлен 29.09.2013

  • Закономерность броуновского движения микрочастиц в вакууме. Критическая и рабочая характеристика холостого хода. Зависимость относительной мощности от вращения на валу двигателя. Основные процессы, происходящие на микроуровне в ферромагнитном веществе.

    статья [415,8 K], добавлен 24.10.2013

  • История открытия физического явления диффузия. Экспериментальное определение постоянных Больцмана и Авогадро. Закономерности броуновского движения. Схема диффузии через полупроницаемую мембрану. Применение физического явления диффузия в жизни человека.

    реферат [336,4 K], добавлен 21.05.2012

  • Изучение броуновского движения, экспериментальная проверка выполнения формулы Эйнштейна для среднеквадратичного смещения броуновской частицы на примере эмульсии, приготовленной из молока с низким содержанием жира, для контрастности подкрашенной йодом.

    лабораторная работа [36,9 K], добавлен 07.06.2014

  • Характеристика величины, характеризующей тепловое состояние тела или меры его "нагретости". Причина Броуновского движения. Прародитель современных термометров, их виды. Единицы измерения температуры, типы шкал. Эксперимент по изготовлению термоскопа.

    презентация [297,1 K], добавлен 14.01.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.