Доброе время суток ,друзья. В общем создал класс решения уравнений методом Рунге-Кутты, с последующим выводом всей этой пакости на график.
Собственно на всякий случай код
Unit1
Код:
#include "Unit2.h"
#include "Unit2.cpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Runge kut;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try {
kut.Kum=StrToFloat(Edit1->Text);
kut.K0=StrToFloat(Edit2->Text);
kut.Kdos=StrToFloat(Edit3->Text);
kut.Ta=StrToFloat(Edit4->Text);
kut.Tb=StrToFloat(Edit5->Text);
kut.Tc=StrToFloat(Edit6->Text);
kut.y=StrToFloat(Edit7->Text);
kut.y=StrToFloat(Edit8->Text);
kut.y=StrToFloat(Edit9->Text);
kut.y=StrToFloat(Edit10->Text);
kut.A=StrToFloat(Edit11->Text);
kut.B=StrToFloat(Edit12->Text);
kut.h=StrToFloat(Edit13->Text);
kut.c=StrToFloat(Edit14->Text);
Series1->Clear();
kut.S = Series1;
kut.rk();
}
catch(EOverflow&)
{Application->MessageBox("Возможно значения слишком большие","Переполнение",MB_OK);
}
catch(EConvertError&)
{Application->MessageBox("Вводите цифры, а не буквы", "Ошибка ввода данных", MB_OK );
}
}
Класс Unit2
Код:
#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
class Runge
{
private:
double k1,k2,k3,k4,f1;
double b0,b1,b2,b3;
public:
TLineSeries *S;
double Ta,Tb,Tc,Kum,K0,Kdos,A,B,h,c,t,Y,y;
void f(double y0, double y1, double y2, double y3);
void vychislenie(double t, double &Y);
void rk(void);
};
void Runge::f(double y0, double y1, double y2, double y3)
{
f1=y1;
f1=y2;
f1=y3;
f1=((b3*c-b3*y0)-y1-(b2*y2)-(y3*b1))/b0;
};
void Runge::vychislenie(double t, double &Y)
{
f(y,y,y,y);
k1=h*f1;
k1=h*f1;
k1=h*f1;
k1=h*f1;
f(y+k1/2,y+k1/2,y+k1/2,y+k1/2);
k2=h*f1;
k2=h*f1;
k2=h*f1;
k2=h*f1;
f(y+k2/2,y+k2/2,y+k2/2,y+k2/2);
k3=h*f1;
k3=h*f1;
k3=h*f1;
k3=h*f1;
f(y+k3,y+k3,y+k3,y+k3);
k4=h*f1;
k4=h*f1;
k4=h*f1;
k4=h*f1;
y=y+(k1+2*k2+2*k3+k4)/6;
y=y+(k1+2*k2+2*k3+k4)/6;
y=y+(k1+2*k2+2*k3+k4)/6;
y=y+(k1+2*k2+2*k3+k4)/6;
Y=y;
};
void Runge::rk(void)
{
b0=Ta*Tb*Tc;
b1=(Tb*Tc+(Ta*(Tb+Tc)));
b2=(Ta+Tb+Tc);
b3=Kum*K0*Kdos;
for (t=A; t<=B; t=t+h)
{
vychislenie(t,Y);
S->AddXY(t,Y);
}
};
Вот такой ужас накорябал =) Теперь не могу понять, как реализовать собственно этот метод (разделение на потоки). Читал про TThread - мало чего понял... Подскажите, помогите