Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.04.2012, 20:51
Thiago Thiago вне форума
Прохожий
 
Регистрация: 09.04.2012
Сообщения: 1
Репутация: 10
По умолчанию не получается график лямбда от x для ур-ния ван дер поля

Собственно построить биффуркационную диаграмму(т.е. зависимость параметра l(так обозначил лямбду) от х). Сам дельфи осваивать начал недавно, программа получилась кривая, так что не судите строго. Решил ур. ВдП методом рунге кутта, дальше насколько понял - надо сделать 3 цикла - по l,в нем по времени, в этом еще по иксу. В программе еще 2 графика - фазовый портрет и временная реализация, но главное построить этот. Помогите, если кто может
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, Buttons;
 
type
  TForm1 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    Chart1: TChart;
    Chart2: TChart;
    Chart3: TChart;
    Series1: TPointSeries;
    Series2: TPointSeries;
    Series3: TPointSeries;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Chart1DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  l,w:double;
 
implementation
 
{$R *.dfm}
 
 
function dx(x,y:double):double;
begin
result:=y;
end;
 
function dy(x,y:double):double;
begin
result:=(l-x*x)*y-w*w*x;
end;
 
procedure runge(var x,y:double);
const
dh=0.05;
var
k1,k2,k3,k4,
l1,l2,l3,l4,
q1,q2,q3,q4:double;
begin
k1:=dx(x,y);
l1:=dy(x,y);
 
 
k2:=dx(x+dh*k1/2,y+dh*q1/2);
l2:=dy(x+dh*k1/2,y+dh*q1/2);
 
 
k3:=dx(x+dh*k2/2,y+dh*q2/2);
l3:=dy(x+dh*k2/2,y+dh*q2/2);
 
 
k4:=dx(x+dh*k3,y+dh*q3);
l4:=dy(x+dh*k3,y+dh*q3);
 
 
x:=x+dh*(k1+2*k2+2*k3+k4)/6;
y:=y+dh*(l1+2*l2+2*l3+l4)/6;
 
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
t_stop,time,x,y:double;
begin
Chart1.Series[0].Clear;
l:=StrToFloat(LabeledEdit1.Text);
w:=StrToFloat(LabeledEdit2.Text);
 
t_stop:=30000;
 
 While l<5 do
  begin
  x:=0.1;
  y:=0.1;
 
  time:=0;
    While time<t_stop do
      begin
      runge(x,y);
      if time>25000 then
      Chart1.Series[0].AddXY(l,x);
      time:=time+1;
      //Application.ProcessMessages;
      end;
      //Chart1.Series[0].AddXY(l,x);
  l:=l+0.1;
 end;
 
end;
 
 
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
halt;
end;
 
procedure TForm1.Chart1DblClick(Sender: TObject);
var x,z,y,t_stop1,time1: double;
begin
Chart2.Series[0].Clear;
Chart3.Series[0].Clear;
Chart1.Series[0].GetCursorValues(l,x);
z:=0.1;
y:=0.1;
t_stop1:=2000;
time1:=0.1;
 while time1<t_stop1 do
  begin
  runge(x,y);
  Chart2.Series[0].AddXY(y,z);
  Chart3.Series[0].AddXY(time1,x);
  Application.ProcessMessages;
  time1:=time1+0.1;
end;
end;
 
 
end.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025