2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4
 
 Re: Помогите пожалуйста написать программу
Сообщение06.02.2014, 08:42 
Аватара пользователя


26/09/13
645
Таджикистан
svv
Спасибо большой за то, что Вы так мне помогали.
Да я тоже знаю правилу. Исправите пожалуйста мою программу.
код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
procedure TForm1.Button3Click(Sender: TObject);
var   u: array [0..20,0..50] of real;
       h,tay,x,t1:real;
       i,j,l,n,m,t,sh,ih:integer;
begin
sh:=100;
n:=20;
m:=50;
l:=1;
t:=300;
h:=l/n;
tay:=t/m;
//Инициализация массива
  for i:=0 to n do
  begin
      for j:=0 to m do
      u[i,j]:=0;
  end;
//Конец инициализация массива
  for I:=0 to n do
  begin
    x:=i*h;
    u[I,0]:=sqr(2)*SIN(pi*x);
  end;
for j:=0 to m do u[0,j]:=0 ;
  for j:=0 to m do
  u[n,j]:=0;

  for j:=1 to m do
  begin
//    FORM2.Chart1.Series[0].Add(u[i,j],'',clred);
     for i:=1 to n-1 do
     begin
        u[i,j]:=u[i,j-1]+(tay/sqr(h))*(u[i+1,j-1]-2*u[i,j-1]+u[i-1,j-1]);
        Memo1.Lines.Add('u('+inttostr(i)+ ','+ IntToStr(j)+  ')=' +FloatToStr(u[i,j]));
        WITH FORM2 DO
        BEGIN
          Chart1.Series[0].Add(u[i,j],'',clred);
        END;
      end;
  end;
   form2.ShowModal;

end;
 

 Профиль  
                  
 
 Re: Помогите пожалуйста написать программу
Сообщение07.02.2014, 16:48 
Аватара пользователя


26/09/13
645
Таджикистан
svv

Спасибо за все!

 Профиль  
                  
 
 Re: Помогите пожалуйста написать программу
Сообщение07.02.2014, 17:19 
Заслуженный участник
Аватара пользователя


23/07/08
10677
Crna Gora
Пожалуйста. Помещу здесь на всякий случай базовый вариант.
код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
const
  N=10;
  M=400;
  LL=1.;
  TT=1.;
var
  x: array [0..N] of real;
  t: array [0..M] of real;
  u: array [0..N, 0..M] of real;
  v: array [0..N, 0..M] of real;

procedure Calculate;
const
  h=LL/N;
  tau=TT/M;
var
  i, k: integer;
begin
  for i:=0 to N do x[i]:=i*h;
  for k:=0 to M do t[k]:=k*tau;
  for i:=0 to N do u[i,0]:=sqrt(2)*sin(pi*x[i]);
  for k:=1 to M do
  begin
    u[0,k]:=0;
    u[N,k]:=0;
    for i:=1 to N-1 do
      u[i,k]:=u[i,k-1]+tau/sqr(h)*(u[i+1,k-1]-2*u[i,k-1]+u[i-1,k-1]);
    for i:=0 to N do
      v[i,k]:=sqrt(2)*sin(pi*x[i])*exp(-sqr(pi)*t[k]);
  end;
end;

procedure TForm1.Display;
var
  i, k: integer;
begin
  k:=TrackBar1.Position;
  if (k<0) or (k>M) then Exit;
  Label1.Caption:='k='+IntToStr(k);
  Label2.Caption:='t='+FloatToStr(t[k]);
  Series1.Clear;
  Series2.Clear;
  for i:=0 to N do
  begin
    Series1.AddXY(x[i], u[i,k]);
    Series2.AddXY(x[i], v[i,k]);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Calculate;
  TrackBar1.Max:=M;
  Display;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Display;
end;
 


:!: Здесь в массиве $u$ хранятся значения, полученные численным методом, а в массиве $v$ — теоретические значения.

-- Пт фев 07, 2014 16:25:32 --

И ещё. Можете изменить процедуру TForm1.FormCreate на такую:
Используется синтаксис Delphi
procedure TForm1.FormCreate(Sender: TObject);
begin
  Calculate;
  TrackBar1.Max:=M;
  Chart1.LeftAxis.AutomaticMaximum:=false;
  Chart1.LeftAxis.Maximum:=1.5;
  Display;
end;
 

Тогда левая ось графика не будет автоматически изменяться с изменением графика.
Это тоже хорошо. Может, ещё лучше.

Вот неустойчивость метода — это плохо. Вторая численная производная опасна!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2, 3, 4

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group