![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Численные методы решения дифференциальных уравнений в частных производных
1.4.1. Использование метода сеток для решения параболических уравнений в частных производных Одним из наиболее распространенных численных методов решения уравнений в частных производных является метод сеток. В методе сеток область Ω, в которой необходимо найти решение уравнения, разобьем прямыми, параллельными осям
Точки, которые лежат на границе области Ω, называются внешними, остальные точки – внутренними. Совокупность всех точек называется сеткой, величины h и Δ – шагами сетки по хи t соответственно.
![]() Рис.1.1. Сетка
Идея метода сеток состоит в том, что вместо любой непрерывной функции Разностные схемы решения параболических уравнений будем рассматривать на примере следующего одномерного уравнения: Построим сетку
В этой и последующих формулах Для замены
Кроме того, заменим начальные и граничные условия их разностной аппроксимацией: Заменив частные производные в задаче соответствующими разностными соотношениями, получим следующую вычислительную схему для расчета значений функции и в узлах сетки
Это явная двухслойная разностная схема (рис.1.2). Рис.1.2. Шаблон явной двухслойной разностной схемы
Учитывая, что на нулевом слое (при i = 0)все значения
Пример. Решить параболическое уравнение, описывающее распределение температуры в стержне длиной L, начальная температура стержня задается произвольной функцией Здесь а2 – коэффициент температуропроводности; Подпрограмма решения задачи с помощью явной разностной схемы в MATLAB: //Правая часть дифференциального уравнения function y=f(x, t) y=sin(x*t) endfunction //Начальное условие function y=fi(x) y=exp(0.15*x) endfunction //Условие на левой границе function y=myu(t) y=l endfunction //Условие на правой границе function y=nyu(x) y=2.117 endfunction function [u, x, t]=parabol(N, K, L, T, a) //Функция решения параболического уравнения методом сеток с помощью явной разностной схемы. N - количество участков разбиения интервала по х (0, 1_); К – количество участков разбиения интервала по t (0, Т); а - коэффициент температуропроводности, // Функция возвращает матрицу решений u вектора х, t // Вычисляем шаг по х H = L/N; // Вычисляем шаг по t Delta = T/K; // Формируем массив х и первый столбец матрицы решений u // из начального условия for I = l: N+l x(i) = (i-l)*h; u(i, l) = fi(x(i)); end //Формируем массив t, первую и последнюю строку матрицы решений u из граничных условий for j = l: K+l t(j) = (j-l)*delta; u(l, j) = myu(t(j)); u(N+l, j) = nyu(t(j)); end gam = a^2*delta/h^2; // Формируем матрицу решений u for j = l: K for i = 2: N u(i, j+l) = gam*u(i-l, j)+(l-2*gam)*u(i, j)+gam*u(i+l, j)+delta*... f(x(i), t(j)); end end end Входными данными подпрограммы parabol решения задачи являются: N – количество интервалов, на которые разбивается отрезок (О, L); К – количество интервалов, на которые разбивается отрезок (О, Т); L – длина стержня, Т – интервал времени, а – параметр дифференциального уравнения. Функция возвращает три параметра: решение – сеточная функция u, определенная на сетке [U, Х, T]=parabol(50, 200, 5, 3, 0.4); surf(X, T, U'); xlabel('X'); ylabel('T'); График решения данной задачи изображен на рис.1.3.
Рис.1.3. График решения параболического уравнения при 1.4.2. Использование метода сеток для решения гиперболических уравнений Решение гиперболических уравнений также можно осуществить с помощью разностных схем. Разностные схемы решения одномерного гиперболического уравнения рассмотрим на примере следующего уравнения: Построим сетку
остальные производные такие же, как и в предыдущем подразделе. Получим следующую явную разностную схему решения уравнения: Она устойчива при В качестве примера рассмотрим следующую задачу. Пример. Решить начально-граничную задачу:
Ниже представлена функция giperbol решения данного уравнения, а на рис.1.4 – график полученного решения. Параметры функциианалогичны рассмотренным ранее, т.е. в подпрограмме решения параболического уравнения. function [u, x, t]=giperbol(N, K/L, T, a) //Функция решения гиперболического уравнения с помощью явной разностной схемы. Входные данные: N - количество участков разбиения интервала (0, L); K - количество участков разбиения интервала (0, T); a - коэффициент теплопроводности; u - матрица решений в узлах сетки; массив x; массив t, // Вычисляем шаг по х и по t h=L/N; delta=T/K; //Формируем массив x, первый и второй столбцы матрицы решений u из начального условия for i=1: N+1 x(i)=(i-1)*h; u(i, 1)=fi(x(i)); u(i, 2)=u(i, 1)+delta*psi(x(i)); end //Формируем массив t, первую и последнюю строки матрицы решений u из граничных условий for j=1: K+1 t(j)=(j-1)*delta; end //Формируем первую и последнюю строки матрицы решений u из граничных условий for j=2: K+1 u(1, j)=0; u(N+1, j)=fi(L); end gam=a^2*delta^2/h^2; //Формируем матрицу решений u for j=2: K for i=2: N u(i, j+1)=-u(i, j-1)+gam*u(i-1, j)+(2-2*gam)*... u(i, j)+gam*u(i+1, j)+delta^2*f(x(i), t(j)); end end end Рис.1.4. График решения гиперболического уравнения
1.4.3. Использование метода сеток для решения эллиптических уравнений Разностные схемы решения одномерного эллиптического уравнения рассмотрим на следующем примере. Пример. Рассмотрим разностную схему для эллиптического уравнения в прямоугольной области Проведем в области Ω прямые, параллельные осям Для построения разностного уравнения заменим частные производные и граничные условия следующими соотношениями: Преобразуем данную эллиптическую краевую задачу к следующей системе разностных уравнений: Эту систему можно решать итерационными методами (например, методом Зейделя). В случае медленной сходимости итерационных процессов при решении сеточных уравнений, получаемых при аппроксимации гиперболических и эллиптических задач, можно попробовать заменить метод Зейделя градиентными методами (или методами релаксации). Ниже представлено решение эллиптического уравнения сеточным методом, а на рис.1.5 график полученного решения. Рис.1.5. График решения эллиптического уравнения
function [psi, x, y, k]=ellip(R, a, b, Nx, Ny, eps) // Функция ellip решения задачи // Входные данные: R, a, b - значения, определяющие область решения задачи; Nx - количество участков разбиения интервала(R-b, R+b); Ny - количество участков разбиения интервала(-a, a); eps - точность решения уравнения методом Зейделя. // Выходные данные: // psi - матрица решений в узлах сетки, массив x, массив y, k - количество итераций при решении разностного уравнения // Вычисляем шаг по y и по x hy=2*a/Ny; hx=2*b/Nx; // Формируем массив x, первый и последний столбцы матрицы решений psi из граничного условия for i=1: Nx+1 x(i)=R-b+(i-1)*hx; psi(i, 1)=0; psi(i, Ny+1)=0; end; // Формируем массив y, первую и последнюю строки матрицы решений psi из граничного условия for j=1: Ny+1 y(j)=-a+(j-1)*hy; psi(1, j)=0; psi(Nx+1, 1)=0; end; // Вычисляем коэффициенты разностного уравнения A=2/hy^2+2/hx^2; D=1/hy^2; for i=2: Nx+1 B(i)=1/hx^2+5/(2*hx*x(i)); C(i)=1/hx^2-5/(2*hx*x(i)); end //Решение разностного уравнения методом Зейделя p=1; k=0; while p> eps for i=2: Nx for j=2: Ny V=1/A*(B(i)*psi(i-1, j) +C(i)*psi(i+1, j)+ D*(psi(i, j-1)...+psi(i, j+1))+2); R(i, j)=abs(V-psi(i, j)); psi(i, j)=V; end end p=R(2, 2); for i=2: Nx for j=2: Ny if R(i, j)> p p=R(i, j); end end end k=k+1; end endfunction //Вызов функции решения задачи. [PSI, X, Y, K]=ellip(18, 3, 6, 32, 16, 0.01); //Построение графика функции surf(X, Y, PSI'); xlabel('X'); ylabel('Y'); |
Последнее изменение этой страницы: 2017-04-13; Просмотров: 3361; Нарушение авторского права страницы