Решение параболических уравнений
или
.
Откуда, используя (1.35), получим:
,
.
Используя данный метод, мы все вычисления проведем в следующем порядке для всех .
1) Зная значения функции на границе (1.33), найдем значения коэффициентов по (1.40) и по (1.38) для всех .
2) Найдем по (1.41), используя для начальное условие (1.34).
3) Найдем по формулам (1.39) для .
4) Найдем значения искомой функции на слое, начиная с :
2.2 Описание логики программного модуля
Листинг программы приведен в приложении 1. Ниже будут описаны функции программного модуля и их назначение.
Функция main() является базовой. Она реализует алгоритм метода сеток, описанного в предыдущих разделах работы.
Функция f (x, y) представляет собой свободную функцию двух переменных дифференциального уравнения (1.29). В качестве аргумента в нее передаются два вещественных числа с плавающей точкой типа float. На выходе функция возвращает значение функции , вычисленное в точке .
Функции mu_1 (t) и mu_2 (t) представляют собой краевые условия. В них передается по одному аргументу (t) вещественного типа (float).
Функция phi() является ответственной за начальный условия.
В функции main() определены следующие константы:
– правая граница по для области ;
– правая граница по для области ;
– шаг сетки по оси ;
– шаг сетки по оси ;
Варьируя и можно изменять точность полученного решения от менее точного к более точному. Выше было доказано, что используемая вычислительная схема устойчива для любых комбинаций параметров и , поэтому при устремлении их к нуля можем получить сколь угодно близкое к точному решение.
Программа снабжена тремя механизмами вывода результатов работы: на экран в виде таблицы, в текстовый файл, а также в файл списка математического пакета Waterloo Maple. Это позволяет наглядно представить полученное решение.
Программа написана на языке программирования высокого уровня Borland C++ 3.1 в виде приложения MS-DOS. Обеспечивается полная совместимость программы со всеми широко известными операционными системами корпорации Майкрософт: MS-DOS 5.x, 6.xx, 7.xx, 8.xx, Windows 9x/Me/2000/NT/XP.
2.3 Пример работы программы
В качестве примера рассмотрим численное решение следующего дифференциального уравнения параболического типа:
в области
,
удовлетворяющее условиям
Задав прямоугольную сетку с шагом оси 0.1 и по оси 0.01, получим следующее решение:
2.10 1.91 1.76 1.63 1.53 1.44 1.37 1.31 1.26 1.22 1.18
2.11 1.75 1.23 1.20 1.15 1.10 1.07 1.04 1.04 1.07 1.21
2.12 1.61 0.95 0.96 0.93 0.91 0.90 0.90 0.94 1.03 1.24
2.13 1.51 0.79 0.81 0.81 0.80 0.81 0.83 0.89 1.03 1.27
2.14 1.45 0.69 0.73 0.74 0.74 0.76 0.80 0.88 1.04 1.31
2.15 1.41 0.64 0.69 0.70 0.71 0.74 0.79 0.89 1.05 1.34
В таблице ось x расположена горизонтально, а ось t расположена вертикально и направлена вниз.
На выполнение программы на среднестатистическом персональном компьютере тратится время, равное нескольким миллисекундам, что говорит о высокой скорости алгоритма.
Подробно выходной файл output.txt, содержащий таблицу значений функции представлен в приложении 3.
Заключение
В работе был рассмотрен метод сеток решения параболических уравнений в частных производных. Раскрыты основные понятия метода, аппроксимация уравнения и граничных условий, исследована разрешимость и сходимость получаемой системы разностных уравнений.
На основании изученного теоретического материала была разработана программная реализация метода сеток, проанализирована ее сходимость и быстродействие, проведен тестовый расчет, построен графики полученного численного решения.
Список источников
1. Березин И.С., Жидков Н.П. Методы вычислений. Т.2. – М.: Физматгиз, 1962.
2. Тихонов А.Н., Самарский А.А. Уравнения математической физики. – М.: Наука, 1972.
3. Пирумов У.Г. Численные методы. – М.: Издательство МАИ, 1998.
4. Калиткин Н.Н. Численные методы. – М.: Наука, 1976.
Приложение
Текст программы
// – //
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main(void);
float f (float x, float t);
float mu_1 (float t);
float mu_2 (float t);
float phi (float x);
// – //
void main(void)
{
clrscr();
FILE *myfile;
FILE *plotter;
float a[120] [120];
float b[120] [120];
float u[120] [120];
float T = 0.05;
float l = 1;
float h = 0.1;
float tau = 0.01;
int n, i, j, k;
float s = pow (h, 2) / tau;
Другие рефераты на тему «Математика»:
Поиск рефератов
Последние рефераты раздела
- Анализ надёжности и резервирование технической системы
- Алгоритм решения Диофантовых уравнений
- Алгебраическое доказательство теоремы Пифагора
- Алгоритм муравья
- Векторная алгебра и аналитическая геометрия
- Зарождение и создание теории действительного числа
- Вероятностные процессы и математическая статистика в автоматизированных системах