LINUX.ORG.RU

История изменений

Исправление AIv, (текущая версия) :

Да, хочу задачку.

Решается уравнение

         2
d u     d u
--- = D ----
d t        2
        d t
u искомая функция, u(x,t), t время, x координата, D коэффициент диффузии (или теплопроводности - здесь одно и то же). Моделируется отрезок -L/2<x<L/2. На границах отрезка u = 0. В начальный моменты времени u=0 везде кроме точки x=0 (это называется дельта-функция Дирака).

Численная схема Эйлера (самая простая): \hat u_i = u_i + h D (u_{i-1}+u_{i+1}-2 u_i)/delta_x^2, где \hat u_i - следующее значение u в точке i, h шаг по времени, delta_x шаг сетки по пространству.

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

u[i] += h*D*(u[i-1]+u[+1]-2*u[i])/(delta_x*delta_x);
Но есть подвох - если делать так, то мы меняем u[ i ], а его старое значение нужно для расчета u[i+1].

Каждый дцатый шаг по времени мы сбрасываем в текстовый файл значения u, в одну колонку. Это и есть выхлоп. Задача очень простая.

Исходная версия AIv, :

Да, хочу задачку.

Решается уравнение

         2
d u     d u
--- = D ----
d t        2
        d t
u искомая функция, u(x,t), t время, x координата, D коэффициент диффузии (или теплопроводности - здесь одно и то же). Моделируется отрезок -L/2<x<L/2. На границах отрезка u = 0. В начальный моменты времени u=0 везде кроме точки x=0 (это называется дельта-функция Дирака).

Численная схема Эйлера (самая простая): \hat u_i = u_i + h D (u_{i-1}+u_{i+1}-2 u_i)/delta_x^2, где \hat u_i - следующее значение u в точке i, h шаг по времени, delta_x шаг сетки по пространству.

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

u[i] += h*D*(u[i-1]+u[+1]-2*u[i])/(delta_x*delta_x);
Но есть подвох - если делать так, то мы меняем u, а его старое значение нужно для расчета u[i+1].

Каждый дцатый шаг по времени мы сбрасываем в текстовый файл значения u, в одну колонку. Это и есть выхлоп. Задача очень простая.