2014 dxdy logo

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

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




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


26/09/13
645
Таджикистан
svv
Вот аналитический решения уравнения при краевых условиях

$\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 - \text{это аналитический ответ}\\
\end{align*}

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


23/07/08
10677
Crna Gora
Отлично!
Тогда с учетом краевых условий пишем:
$u_0^j=0$
$u_N^j=0$
Для $i=1..N-1$:
$u_{i}^{j+1}=u_{i}^{j}+\dfrac{\tau}{h^{2}}(u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j}})$
Здесь проблем с выходом за границы массива уже нет. А у Вас была одна формула для $i=0..N$.

Ну, а Вы учтите начальное условие, напишите формулу для $u_i^0$.

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


26/09/13
645
Таджикистан
svv
Можно ли написать программу одного.

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


23/07/08
10677
Crna Gora
Maik2013
Я помогу Вам написать программу. Но от Вас — формулы.
Я имею в виду, расчетные формулы для элементов массива $u_i^j$, а не условия на непрерывную физическую величину $u(x, t)$.
Конкретно — для $u_i^0$.

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


11/05/08
32166

(Оффтоп)

svv в сообщении #822069 писал(а):
А значения массива при таких индексах не определены.

Они в подавляющем большинстве случаев очень даже определены. Но совсем не так, как следовало бы. Maik2013
, не обращайте внимания -- это я так, буквоедства ради.

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


23/07/08
10677
Crna Gora

(Оффтоп)

Я когда-то написал на C++ библиотечку для работы с векторами и матрицами, которой до сих пор пользуюсь. Там по умолчанию выполняется проверка индекса на принадлежность диапазону. Если выходит за пределы, возбуждается исключение. Вот у меня — точно не определены. По-моему, математику это должно нравиться.

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


26/09/13
645
Таджикистан
svv
Вот все решение этого уравнения если честно то не знаю дальше как быт.
Если можете пожалуйста помогите.

$$
\dfrac{\partial u}{\partial t}=\dfrac{\partial^{2} u}{\partial x^{2}}
$$
$$
\dfrac{u_{i}^{j+1}-u_{i}^{j}}{\tau}=\dfrac{u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j}}{h^{2}}
$$
$$
u_{i}^{j+1}=u_{i}^{j}+\dfrac{\tau}{h^{2}}(u_{i+1}^{j}-2u_{i}^{j}+u_{i-1}^{j})
$$

\begin{align*}
& x_{i}=i\cdot h, \quad i=0,1,\ldots,N=20, \quad h=\dfrac{1}{20}=0,05\\
& t_{j}=j\cdot \tau, \quad j=0,1,\ldots,M=50, \quad \tau=\dfrac{T}{50}=\dfrac{10}{50}=0,2\\
\end{align*}

\begin{align*}
& u_{0}^{j}=u(0,j\cdot \tau)=0, \quad j=0,1,...,50\\
& u_{20}^{j}=u(1, j\cdot \tau)=0, \quad j=0,1,...,50\\
\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}^{0}+u_{i-1}^{0})\\
& i=1,\ldots, N-1\\
&\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\ldots\\
\end{align*}

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


23/07/08
10677
Crna Gora
Ну, смотрите: в физике $u(x,0)=\sqrt{2}\sin\pi x$.
Величина $x$ непрерывна, $0\leqslant x \leqslant L=1$.

В дискретной модели есть только отдельные значения $x_i=ih$.
Связь между дискретной и непрерывной моделью: $u_i^j=u(x_i, t_j)$.
Значит, надо взять $u_i^0=u(x_i, t_0)=u(x_i, 0)=\sqrt{2}\sin\pi x_i$

Значения $u_i^j$ в программе хранятся в элементах массива u[i,j].
Значит, u[i,0]= чему?

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


11/05/08
32166

(Оффтоп)

svv в сообщении #822099 писал(а):
Если выходит за пределы, возбуждается исключение.

Это хорошо и правильно, конечно, но я имел в виду, что подавляющее большинство случаев выхода за пределы массива будет в данной ситуации выводить в этот же массив. Только не куда надо (или даже не надо).

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


24/05/09

2054
$u(x,0)=\sqrt{2}\sin\pi x$ вот без математических крючков всё понятно. х меняется в диапазоне 0 - 1, вот и вычисляйте в цикле хоть с шагом 0,1 хоть 0,01. Получите 10 (или 100) значений - и на график их.

Немного непонятно, куда на график прикрутить ещё одну переменную, которая сейчас в формуле 0, но должна поменяться на j. На какую ось координат её повесить? График 3-х мерный что-ли?

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


26/09/13
645
Таджикистан
Alexu007
Думаю можно и это нарисовать график
Alexu007 в сообщении #822215 писал(а):
$u(x,0)=\sqrt{2}\sin\pi x$ вот без математических крючков всё понятно. х меняется в диапазоне 0 - 1, вот и вычисляйте в цикле хоть с шагом 0,1 хоть 0,01. Получите 10 (или 100) значений - и на график и


Можно нарисовать график по осью $y$ подставит $t_{i}$ и осью $x$
подставит $x_{i}$ может быт я не прав.
Alexu007 в сообщении #822215 писал(а):
Немного непонятно, куда на график прикрутить ещё одну переменную, которая сейчас в формуле 0, но должна поменяться на j. На какую ось координат её повесить? График 3-х мерный что-ли?

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


26/09/13
645
Таджикистан
svv
Посмотрите пожалуйста правильно написал программу
код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
procedure TForm1.Button1Click(Sender: TObject);
var   u: array [0..20,0..70] of real;
       h,tay:real;
       i,j:integer;
begin
h:=0.5;
tay:=0.0025;
  for i:=0 to 20 do
  begin
      for j:=0 to 70 do
      u[i,j]:=0;
  end;
  for j:=0 to 70 do u[0,j]:=0.05 ;
  for j:=0 to 70 do
  u[1,j]:=-0.02;
  for j:=0 to 70 do
  u[2,j]:=-0.02;
   for j:=0 to 70 do
  u[20,j]:=-0.02;
  for i:=1 to 19 do
  begin
     for j:=0 to 70 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]));
     WITH FORM2 DO
    BEGIN
     Chart1.Series[0].Add(u[i,j+1],'',clred);
    END;
     end;
  end;
   form2.ShowModal;
end;
 

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


23/07/08
10677
Crna Gora
svv в сообщении #822105 писал(а):
Значит, надо взять $u_i^0=u(x_i, t_0)=u(x_i, 0)=\sqrt{2}\sin\pi x_i$
Alexu007 в сообщении #822215 писал(а):
$u(x,0)=\sqrt{2}\sin\pi x$ вот без математических крючков всё понятно. х меняется в диапазоне 0 - 1, вот и вычисляйте в цикле хоть с шагом 0,1 хоть 0,01.
Сделайте это.

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


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

(Оффтоп)

Пожалуйста помогите мне в этом а то я не очень понимаю.

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


23/07/08
10677
Crna Gora
Просто написать за Вас программу не могу, это нарушение правил.

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

Вот что примерно от Вас требовалось:
$$\begin{align}&N=20\\&M=50\\&L=1.\\&T=10.\\&h=L/N\\&\tau=T/M\\&x_i=ih,\quad i=0..N\\&t_k=k\tau,\quad k=0..M\\&u_i^0=\sqrt{2}\sin\pi x_i, \quad  i=0..N\\&\begin{Bmatrix}u_0^k=0\\u_N^k=0\\u_{i}^{k}=u_{i}^{k-1}+\frac{\tau}{h^{2}}(u_{i+1}^{k-1}-2u_{i}^{k-1}+u_{i-1}^{k-1}), \quad i=1..N-1\end{Bmatrix}\;,\quad k=1..M\end{matrix}$$Это те формулы, по которым надо писать программу.
Это Вы тоже не очень понимаете?

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

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



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

Сейчас этот форум просматривают: Mikhail_K


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

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