2014 dxdy logo

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

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




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


26/09/13
648
Таджикистан
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
10907
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
648
Таджикистан
svv
Можно ли написать программу одного.

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


23/07/08
10907
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
10907
Crna Gora

(Оффтоп)

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

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


26/09/13
648
Таджикистан
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
10907
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
648
Таджикистан
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
648
Таджикистан
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
10907
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
648
Таджикистан
svv

(Оффтоп)

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

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


23/07/08
10907
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, Супермодераторы



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

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


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

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