2014 dxdy logo

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

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




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


26/09/13
648
Таджикистан
Всем добрый вечер.
$$
\dfrac{\partial u}{\partial t}=\dfrac{\partial^{2} u}{\partial x^{2}}
$$
$$
\dfrac{u_{1}^{j+1}-u_{i}^{j}}{\tau}=\dfrac{u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j}}{h^{2}}
$$
$$
u_{1}^{j+1}=u_{i}^{j}+\dfrac{\tau}{h^{2}}(u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j}{h^{2}})
$$
\begin{align*}
& x_{i}=i\cdot h, \quad i=0,1,\ldots,N=20, \quad h=\dfrac{1}{20}=0,005\\
& t_{j}=j\cdot h, \quad i=0,1,\ldots,M=50, \quad \tau=\dfrac{T}{50}=\dfrac{10}{50}=0,2\\
\end{align*}
\begin{align*}
&j=0: \quad u_{i}^{1}= u_{i}^{0}+\dfrac{\tau}{h^{2}}(u_{i+1}^{0}-2u_{i}^{0}+u_{i-1}^{0})\\
& i=1,\ldots, N-1\\
&j=1: \quad u_{i}^{2}=u_{i}^{1}+\dfrac{\tau}{h^{2}}(u_{i+1}^{1}-2u_{i}^{1}+u_{i-1}^{1})\\
& i=1,\ldots, N-1\\
&\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\\
\end{align*}

Вот программа но график не получается дает ошибку
Код:
procedure TForm1.Button1Click(Sender: TObject);
var   u: array [0..20,0..50] of real;
       h,tay:real;
       i,j:integer;
begin
h:=0.05;
tay:=0.25;
  for j:=0 to 50 do u[0,j]:=0;
  for j:=0 to 50 do
  u[1,j]:=0;
  for j:=0 to 50 do
  begin
     for i:=1 to 20 do
     begin
     u[i,j+1]:=u[i,j]+(tay)/(sqr(h))*(u[i+1,j]-2*u[i,j]+u[i-1,j]);
     Memo1.Lines.Add('u('+inttostr(i)+ ','+ IntToStr(j)+  ')=' +FloatToStr(u[i,j+1]));

     end;
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var   u: array [0..10,0..30] of real;
       h,tay:real;
       i,j:integer;
begin
h:=0.05;
tay:=0.25;
  form2.Chart1.Series[0].Clear;
  for j:=0 to 30 do u[0,j]:=0;
  for j:=0 to 30 do
  u[1,j]:=0;
  for j:=0 to 30 do
  begin
     for i:=1 to 10 do
     begin
     u[i,j+1]:=u[i,j]+(tay)/(sqr(h))*(u[i+1,j]-2*u[i,j]+u[i-1,j]);
    // Memo1.Lines.Add('u('+inttostr(i)+ ','+ IntToStr(j)+  ')=' +FloatToStr(u[i,j+1]));
     //   FGRAF.Chart1.SeriesList[0].AddY(2,'DSDSDS');// .`  :='SDSD';
  WITH FORM2 DO
  BEGIN
  //   Chart1.Series[0].Add(u[i,j+1],'',clred);
     Chart1.Series[0].Add(u[i,j+1],'',clred);


  END;

     end;
  end;
  FORM2.ShowModal;
end;

end.

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


19/03/10
8952
 i  Тема перемещена в Карантин.

Писать программы здесь за Вас никто не будет, могут только помочь при возникновении конкретных затруднений. Приведите свои варианты программ и объясните, что не получается.

После того как исправите сообщение, сообщите об этом в теме Сообщение в карантине исправлено.

 Профиль  
                  
 
 Posted automatically
Сообщение31.01.2014, 16:43 
Супермодератор
Аватара пользователя


20/11/12
5728
 i  Тема перемещена из форума «Карантин» в форум «Программирование»
вернул

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


26/09/13
648
Таджикистан
Кто может сказать почему на график дает ошибку?

 Профиль  
                  
 
 Re: Помогите пожалуйста написать программу
Сообщение31.01.2014, 19:27 


24/05/09

2054
Есть такая штука - называется отладка. Если вы сами писали эту программу - это не составит никакого труда. Раз вы сами всё это написали - вы же понимаете для чего каждая строчка и каждый оператор. Вы сами их туда зачем-то вставили.

Вставляете в проблемное место программы любую фигню, которая позволяет произвести останов программы до нажатия кнопки и вывод на экран:


Код:
//QMessageBox msgBox;
//msgBox.setText("error");
//msgBox.exec();



И смотрите сами, что где работает не так.

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


23/07/08
10910
Crna Gora
Ещё до написания программы давайте разберёмся, что Вы хотите запрограммировать.
Maik2013 в сообщении #820698 писал(а):
$\dfrac{\partial u}{\partial t}=\dfrac{\partial^{2} u}{\partial x^{2}}$
Это понятно. Одномерное однородное уравнение теплопроводности.
1) Должен быть ещё коэффициент: $u_t=a u_{xx}$. Вы его не потеряли? Его можно сделать единичным с помощью замены переменных, но Вы её делали?

Maik2013 в сообщении #820698 писал(а):
$\dfrac{u_{1}^{j+1}-u_{i}^{j}}{\tau}=\dfrac{u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j}}{h^{2}}$
2) В левой части исправьте $u_{1}^{j+1}$ на $u_{i}^{j+1}$.
3) Огромная просьба: везде (и в программе тоже) замените $j$ (номер шага по $t$) на $k$. Буквы $i$ и $j$ плохо различимы.

Maik2013 в сообщении #820698 писал(а):
$u_{1}^{j+1}=u_{i}^{j}+\dfrac{\tau}{h^{2}}(u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j}{h^{2}})$
4) Откуда в скобках $h^2$ ?
5) В левой части исправьте $u_{1}^{j+1}$ на $u_{i}^{j+1}$.

Будем считать, что Вы написали формулу правильно:
$u_{i}^{j+1}=u_{i}^{j}+\dfrac{\tau}{h^{2}}(u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j})$
Всё равно вопросы:
6) Очень важно. По какой формуле вычисляются краевые значения $u_{0}^{j+1}$ (неоткуда взять $u_{i-1}^{j}$ в правой части) и $u_{N}^{j+1}$ (неоткуда взять $u_{i+1}^{j}$ в правой части) ?
7) Ещё важнее. Как задаются начальные значения $u_i^0$ ? Способ в Вашей программе (всё равно нулю) неправильный. Так мы вообще для всех $u_{i}^{j}$ будем получать только нули.

Maik2013 в сообщении #820698 писал(а):
$x_{i}=i\cdot h, \quad i=0,1,\ldots,N=20, \quad h=\dfrac{1}{20}=0,005$
8) Разве $\dfrac{1}{20}=0,005$ ?

Maik2013 в сообщении #820698 писал(а):
$t_{j}=j\cdot h, \quad i=0,1,\ldots,M=50, \quad \tau=\dfrac{T}{50}=\dfrac{10}{50}=0,2$
9) Не $t_{j}=j\cdot h$, а $t_{j}=j\cdot \tau$.
10) Не $i=0,1,\ldots,M$, а $j=0,1,\ldots,M$.

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


26/09/13
648
Таджикистан
Alexu007
Спасибо за то, что ответили но эта программу не я написал написать программу один приятель помог и у него не
было время сказал что, далее сам разбирайся, сам не много капал но не смог и туда обращался.

svv
Огромный спасибо Вам за такую подробность и замечание. Могу привести аналитический решение может от туда
понятно будет как получился начальные значения $u_{i}^{0} $
$$
\dfrac{\partial u}{\partial t}=\dfrac{\partial^{2}u}{\partial x^{2}}
$$
\begin{align*}
&u(0,t)=0, \quad 0\leq t\leq T\\
&u(1,t)=0,\\
&u(x,0)=\sqrt{2}\sin\pi x, \quad 0\leq x\leq 1.\\
&u^{T}=\sqrt{2}e^{-\pi^{2}t}\sin\pi x\\
\end{align*}

 Профиль  
                  
 
 Re: Помогите пожалуйста написать программу
Сообщение01.02.2014, 07:30 
Заслуженный участник


11/05/08
32166
Maik2013 в сообщении #820698 писал(а):
Код:
for j:=0 to 50 do
u[1,j]:=0;

При чём тут единица-то?

Maik2013 в сообщении #820698 писал(а):
Код:
for i:=1 to 20 do


Почему до двадцати-то?

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


26/09/13
648
Таджикистан
ewert
Я сам проста написал от 1 до 20 можно меньше и больше

 Профиль  
                  
 
 Re: Помогите пожалуйста написать программу
Сообщение01.02.2014, 08:44 
Заслуженный участник


11/05/08
32166
Maik2013 в сообщении #821368 писал(а):
Я сам проста написал от 1 до 20 можно меньше и больше

Т.е. от балды? Больше-то уж никак нельзя (даже 20 нельзя) -- вылетите за пределы массива.

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


26/09/13
648
Таджикистан
ewert
Знайте Вы почему на график дает ошибку?

 Профиль  
                  
 
 Re: Помогите пожалуйста написать программу
Сообщение01.02.2014, 09:13 
Заслуженный участник


11/05/08
32166
Не знаю, я в дельфях не разбираюсь. Но на две явных ошибки я Вам указал, и если первая может к фатальным последствиям и не привести (там граничные условия могут инициализироваться и сами просто при запуске программы), то вторая приведёт почти наверняка. И вообще использование границ массивов в численном виде неграмотно -- их надо объявлять как константы и обращаться к ним по имени.

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


26/09/13
648
Таджикистан
ewert
При решение числовых не дает ошибку а при рисование графиков дает ошибку
Код:

u(1,0)=5,96804419803112E262
u(2,0)=-1,18764079540819E263
u(3,0)=5,96804419803112E262
u(4,0)=2,62252275314161E-306
u(5,0)=1,17739006702191E-310
u(6,0)=3,47715686908558E-306
u(7,0)=-6,919891842984E-306
u(8,0)=7,11904361829397E-306
u(9,0)=-3,55755029601415E-306
u(10,0)=-3,7001269839441E-306
u(11,0)=6,08048333778748E262
u(12,0)=-1,21001618421971E263
u(13,0)=6,08048333778748E262
u(14,0)=NAN
u(15,0)=NAN
u(16,0)=NAN
u(17,0)=-2,6072455885109E-306
u(18,0)=2,63321033865079E-306
u(19,0)=4,66847663477011E-311
u(20,0)=2,61929090306911E-306
u(1,1)=-2,37528159081638E265
u(2,1)=3,55701402246853E265
u(3,1)=-2,37528159081638E265
u(4,1)=5,96804419803112E264
u(5,1)=6,09944532160386E-304
u(6,1)=-1,38393162734576E-303
u(7,1)=2,43667852549177E-303
u(8,1)=-2,46443389394032E-303
u(9,1)=1,0498441723418E-303
u(10,1)=6,08048333778748E264
u(11,1)=-2,42003236843942E265
u(12,1)=3,62402887415472E265
u(13,1)=NAN
u(14,1)=NAN
u(15,1)=NAN
u(16,1)=NAN
u(17,1)=NAN
u(18,1)=-7,84728747765963E-304
u(19,1)=5,25240833903487E-304
u(20,1)=25
u(1,2)=8,28382438819313E267
u(2,2)=-1,18290210863451E268
u(3,2)=8,88062880799624E267
u(4,2)=-3,56292238622458E267
u(5,2)=5,96804419803112E266
u(6,2)=5,80064699607022E-301
u(7,2)=-8,6973557870147E-301
u(8,2)=8,3907461467748E-301
u(9,2)=6,08048333778748E266
u(10,2)=-3,63004855265913E267
u(11,2)=9,04794162112791E267
u(12,2)=NAN
u(13,2)=NAN
u(14,2)=NAN
u(15,2)=NAN
u(16,2)=NAN
u(17,2)=NAN
u(18,2)=NAN
u(19,2)=2500
u(20,2)=-4970
u(1,3)=-2,83138316188495E270
u(2,3)=4,07042051580162E270
u(3,3)=-3,30643948004822E270
u(4,3)=1,65676487763863E270
u(5,3)=-4,75056318163277E269
u(6,3)=5,96804419803112E268
u(7,3)=3,14991311590043E-298
u(8,3)=6,08048333778748E268
u(9,3)=-4,84006473687883E269
u(10,3)=1,68797865746983E270
u(11,3)=NAN
u(12,3)=NAN
u(13,3)=NAN
u(14,3)=NAN
u(15,3)=NAN
u(16,3)=NAN
u(17,3)=NAN
u(18,3)=NAN
u(19,3)=NAN
u(20,3)=1239030
u(1,4)=9,70487300795266E272
u(2,4)=-1,42379594683784E273
u(3,4)=1,23069999587362E273
u(4,4)=-7,07845790471236E272
....................................

 Профиль  
                  
 
 Re: Помогите пожалуйста написать программу
Сообщение01.02.2014, 09:33 
Заслуженный участник


11/05/08
32166
Maik2013 в сообщении #821378 писал(а):
u(1,0)=5,96804419803112E262
u(2,0)=-1,18764079540819E263
u(3,0)=5,96804419803112E262
u(4,0)=2,62252275314161E-306
u(5,0)=1,17739006702191E-310
u(6,0)=3,47715686908558E-306
u(7,0)=-6,919891842984E-306
u(8,0)=7,11904361829397E-306
u(9,0)=-3,55755029601415E-306
u(10,0)=-3,7001269839441E-306
u(11,0)=6,08048333778748E262
u(12,0)=-1,21001618421971E263
u(13,0)=6,08048333778748E262
u(14,0)=NAN
u(15,0)=NAN
u(16,0)=NAN
u(17,0)=-2,6072455885109E-306
u(18,0)=2,63321033865079E-306
u(19,0)=4,66847663477011E-311
u(20,0)=2,61929090306911E-306

Это означает, что у Вас не инициализировано начальное условие. И оно действительно в тексте программы нигде не задаётся.

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


26/09/13
648
Таджикистан
ewert
Что мне делать покажи пожалуйста на пальцах пожалуйста

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

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



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

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


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

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