![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Численное решение модельного уравнения |
диссипации, конвекции и кинетики СОДЕРЖАНИЕ Общая постановка задачи Постановка тестовых задач Методика решения тестовых задач Результаты вычислений Список литературы Приложения Приложение 1: Описание программы Приложение 2: Текст программы 1. ОБЩАЯ ПОСТАНОВКА ЗАДАЧИ Перенос тепла (или вещества) теплопроводностью (для вещества соответственно диффузией) и конвекцией описывается дифференциальным уравнением параболического типа: ( 1 ) где температура (или концентрация). Пусть являются некоторыми константами и . Уравнение (1) при указанных выше предположениях называется модельным уравнением диссипации, конвекции и кинетики. Слагаемые правой части имеют следующий физический смысл: - соответствует переносу тепла теплопроводностью (или вещества диффузией); - соответствует конвективному переносу;- - "кинетический член", соответствует источнику, пропорционально- му температуре или концентрации; - интенсивность внешних источников или стоков. В дальнейшем будем рассматривать только тепловую интерпретацию уравнения (1). Численное решение уравнения (1) будем искать в области : ( 2 ) при заданных начальных значениях температуры: ( 3 ) и граничных условиях. Граничные условия описывают режимы теплообмена с внешней средой: при ; при . 2. ПОСТАНОВКА ТЕСТОВЫХ ЗАДАЧ В качестве тестовых задач для температуры мною были выбраны следующие пять функций: ( 9 ) ( 10 ) ( 11 ) ( 12 ) ( 13 ) Для функции (9) имеем: Для функции (10): Для функции (11): Для функции (12): Для функции (13): Данные функции тестировались на отрезке по X: , с количеством разбиений по этим отрезкам - 30. 3. МЕТОДИКА РЕШЕНИЯ ТЕСТОВЫХ ЗАДАЧ Данная задача решается с помощью двухслойной неявно конечно-разностной схемы. Схема реализуется в три этапа. 1 этап: находятся предварительные значения с помощью 4-х точечной неявной схемы: ( 5 ) 2 этап: используется за два шага. Сначала находятся на полученном слое () с шагом , а затем через . В этом случае используется 4-х точечная неявная разностная схема: ( 6 ) ( 7 ) 3 этап: окончательные значения находятся в виде линейной комбинации двух предварительных значений: ( 8 ) Для решения (1) воспользуемся формулами (5) - (8). Данные уравнения представляют трех диагональные матрицы, решаемые методом скалярной прогонки. В начале нужно преобразовать (5) – (7) к виду: ( 14 ) Тогда (5) примет вид: Т.е. ; ; ; . Формула (6) преобразуется в: Т.е. ; ; ; . Формула (7) преобразуется в: Т.е. ; ; ; . Далее решаем по формулам скалярной прогонки: ( 15 ) ( 16 ) Для определения , и воспользуемся данными граничными условиями, т.е. формулой (4) и функцией . Так если мы берём из формулы (9), то имеем: Приведём это выражение к виду: . Т.е. теперь мы имеем и : Далее найдем конечное : ( 18 ) Проведя аналогичные расчёты для заданных формулами (10) – (13), мы получим соответствующие , и . Далее мы можем решить системы методом прогонки и получить требуемый результат. 4. РЕЗУЛЬТАТЫ ВЫЧИСЛЕНИЙ В результате проведённых испытаний программа показала свою высокую надёжность. Были получены следующие данные. При расчёте с использованием функции и входных данных ; ; ; ; ; ; на отрезке по X и по времени с шагом 0,033 был получен результат с ошибкой равной 0,0675.
Для функции при ; ; ; ; ; ; , на том же промежутке, ошибка составляет 0,055. С функцией и ; ; ; ; ; ; ошибка примет значение 0,0435. При и условиях ; ; ; ; ; ; в результате возникает ошибка равная 0,0055. И, наконец, если выбрана функция и ; ; ; ; ; ; , то ошибка составит 0,00255. Т.е. можно сказать, что мы имеем результат с первым порядком точности. Столь малую точность можно объяснить тем, что производная, найденная при граничных условиях, так же имеет первый порядок точности. СПИСОК ЛИТЕРАТУРЫ А. Епанешников, В. Епанешников Программирование в среде urbo-Pascal 7.0. - М.: Диалог - Мифи, 1996. - 288 с. Петухова Т. П., Сибирцев В. В. Пакет прикладных программ для численного моделирования процессов тепло- и массопереноса. – Караганда: Изд-во КарГУ. 1993 Фигурнов В. Э. IBM PC для пользователя. - М.: Инфра - М, 1995. - 432 с. Приложение 1 ОПИСАНИЕ ПРОГРАММЫ Поставленная задача была программно реализована на языке программирования urbo-Pascal 7.0. В состав программы входят следующие файлы: basis.pas - PAS-файл основной части программы (решение системы уравнений методом скалярной прогонки); basis.v&v - EXE-файл основной части программы (вызывается из S AR .PAS); fu .bmp - BMP-фаил с изображением функций; i form.v&v - X -фаил с информацией о программе (вызывается из S AR .PAS); music.v&v - музыкальный EXE-фаил (вызывается из S AR .PAS); my me u.pas - U I для создания меню; sea.exe - программа для просмотра графических файлов; s ar .pas - файл для запуска всей программы; u - файл с результатами работы; zas avka.v&v - EXE-фаил с заставкой к основной программе (вызывается из S AR .PAS). Файл S AR является, как бы оболочкой программы, из которой вызываются другие файлы. Сам процесс решения содержится в файле BASIS. BASIS содержит следующие процедуры и функции: Fu c io Fu U (Xm, :real):real; Вход: значение по X и значение по времени , а также глобальная переменная выбранной функции Selec Fu c io . Действие: вычисляет точное значение функции U при заданных X и . Выход: Fu U – значение функции. Fu c io Fu F (Xm, ,a,b,v:real):real; Вход: значение по X, по времени , коэффициенты , , и номер выбранной функции Selec Fu c io . Действие: вычисляет значение функции F при заданных X, , , , . Выход: Fu F – значение функции F.Fu c io Be a Zero ( ime:real): real; Вход: значение времени и глобальные коэффициенты , , , номер выбранной функции Selec Fu c io . Действие: вычисляет , используемое в методе скалярной прогонки. Выход: Be a Zero – значение .Fu c io U E d ( ime,Alf,Be :real): real; Вход: значение времени , , и глобальные коэффициенты , , , номер выбран- ной функции Selec Fu c io . Действие: вычисляет используемое в методе скалярной прогонки. Выход: U E d – значение . Procedure Pri Array; Вход: использует глобальный массив данных U m. Действие: выдает содержимое U m на экран и в файл. Выход: вывод U m. Приложение 2 ТЕКСТ ПРОГРАММЫ Основная часть программы выглядит так: Program Basis; Uses Cr ; { Подключение библиотек } Label Me ka1,Me ka2; { Метки } Var a, b, v : real; { Коэффициенты, задаются пользователем } h, au : real; { Шаг по X и по времени соответственно } X,x0 : real; { Конечное и начальное значение X } m, ,k : word; { Переменные используемые в циклах для расчета } , 0 : real; { Конечное и начальное значение времени } Kol voX, Kol vo : word; { Количество разбиений по X и по времени } U m,U , U 1 2, U 1 : array of real; { Массивы результатов } z : array of real; { Массив точных решений } Xm : real; { Промежуточный X } Alfa,Be a : array of real; { Массив коэффициентов используемых при скалярной прогонке } a progo ka, b progo ka, c progo ka, d progo ka : real; { Коэффициенты для скалярной прогонки } Error : real; { Значение ошибки } ime : real; { Переменная времени } ch : char; { Код нажатой клавиши } Selec Fu c io :word; { Номер выбранной функции } U : ex ; { Переменная для вывода результата в файл } Alfa 1,Alfa 2,Be a 1,Be a 2 : real; { Коэффициенты граничных условий } Da a : word; { Переменная режима ввода начальных данных } Fu c io Fu U (Xm, :real):real; { Функция U (точное решение) } begi If Selec Fu c io =1 he Fu U:=SQR(Xm) Xm SQR( ); If Selec Fu c io =2 he Fu U:=SQR(Xm) SQR( ) 10 Xm SQR(SQR( )) Xm; If Selec Fu c io =3 he Fu U:=Xm SI (Xm )-4 SQR(Xm) COS( ); If Selec Fu c io =4 he Fu U:= EXP(Xm); If Selec Fu c io =5 he Fu U:=SI (Xm) EXP( ); e d; Fu c io Fu F (Xm, ,a,b,v:real):real; { Функция F } begi if Selec Fu c io =1 he if Selec Fu c io =2 he if Selec Fu c io =3 he b (Xm SI (Xm )-4 SQR(Xm) COS( )); if Selec Fu c io =4 he if Selec Fu c io =5 he e d; Fu c io Be a Zero ( ime:real): real; { Функция Be a для прогонки } begi If Selec Fu c io =1 he Be a 1 (SQR(x0) x0 SQR( ime))); If Selec Fu c io =2 he If Selec Fu c io =3 he If Selec Fu c io =4 he Be a 1 ( ime EXP(x0))); If Selec Fu c io =5 he Be a 1 (SI (x0) EXP( ime))); e d; Fu c io U E d ( ime,Alf,Be :real): real; { Функция Um для прогонки } begi If Selec Fu c io =1 he Be Alfa 2)/(Alfa 2-Alf Alfa 2 h Be a 2); If Selec Fu c io =2 he Be Alfa 2)/(Alfa 2-Alf Alfa 2 h Be a 2); If Selec Fu c io =3 he If Selec Fu c io =4 he (Alfa 2-Alf Alfa 2 h Be a 2); If Selec Fu c io =5 he (Alfa 2-Alf Alfa 2 h Be a 2); e d; Procedure Pri Array; { Процедура печати массива U } begi Wri eL ; For m:=0 o Kol voX do begi Wri e(U m:15:4); e d; Wri eL ; Wri eL (U); e d;{ Основная программа } Begi Assig (U,'u'); { Файл для записи значений функции } Rewri e(U); { Открытие файла для записи } ex BackGrou d(0); { Выбор функции для работы } ClrScr; ex Color(10); Go oXY(20,8); Wri e('Введите номер выбранной функции (1-5):'); Me ka1: ch:=ReadKey; If ch='1' he Selec Fu c io :=1 else If ch='2' he Selec Fu c io :=2 else If ch='3' he Selec Fu c io :=3 else If ch='4' he Selec Fu c io :=4 else If ch='5' he Selec Fu c io :=5 else begi Sou d(400); Delay(100); oSou d; Go o Me ka1; e d; ex Color(11); Go oXY(11,12); Wri e('Вы будете работать со стандартными параметрами (цифра ~1~)'); Go oXY(22,13); Wri e('или введете свои данные (цифра ~2~) ?'); Me ka2: ch:=ReadKey; If ch='1' he Da a:=1 else If ch='2' he Da a:=2 else begi Sou d(400); Delay(100); oSou d; Go o Me ka2; e d; ex BackGrou d(9); ex Color(10); ClrScr; { Ввод начальных данных } Wri eL ; Wri eL ('-------------------------------- Ввод данных ---------------------------------¬'); For k:=1 do 21 do Wri eL ('¦ ¦'); ex Color(15); Wi dow(3,3,77,23); Wri e(' Введите область рассчета по X от: '); If Da a=1 he begi x0:=0; Wri e(x0:1:0); Wri eL ; e d else ReadL (x0); Wri e(' до: '); If Da a=1 he begi X:=1; Wri e(X:1:0); Wri eL ; e d else ReadL (X); Wri eL ; Wri e(' Введите количество разбиений по направлению X: '); If Da a=1 he begi Kol voX:=30; Wri e(Kol voX:2); Wri eL ; e d else ReadL (Kol voX); Wri eL ;Wri eL ; Wri e(' Введите область рассчета по времени от: '); If Da a=1 he begi 0:=0; Wri e( 0:1:0); Wri eL ; e d else ReadL ( 0); Wri e(' до: '); If Da a=1 he begi :=1; Wri e( :1:0); Wri eL ; e d else ReadL ( ); Wri eL ; Wri e(' Введите количество разбиений по времени: '); If Da a=1 he begi Kol vo :=30; Wri e(Kol vo :2); Wri eL ; e d else ReadL (Kol vo ); Wri eL ;Wri eL ; Wri eL (' Введите коэффициенты'); Wri e(' a='); If Da a=1 he begi a:=1; Wri e(a:1:0); Wri eL ; e d else ReadL (a); Wri e(' b='); If Da a=1 he begi b:=1; Wri e(b:1:0); Wri eL ; e d else ReadL (b); Wri e(' v='); If Da a=1 he begi v:=0.0
01; Wri e(v:1:3); Wri eL ; e d else ReadL (v); Wri e(' Alfa-1='); If Da a=1 he begi Alfa 1:=1; Wri e(Alfa 1:1:0); Wri eL ; e d else ReadL (Alfa 1); Wri e(' Be a-1='); If Da a=1 he begi Be a 1:=1; Wri e(Be a 1:1:0); Wri eL ; e d else ReadL (Be a 1); Wri e(' Alfa-2='); If Da a=1 he begi Alfa 2:=1; Wri e(Alfa 2:1:0); Wri eL ; e d else ReadL (Alfa 2); Wri e(' Be a-2='); If Da a=1 he begi Be a 2:=1; Wri e(Be a 2:1:0); Wri eL ; ex Color(14); Wri e(' Нажмите любую клавишу'); ReadKey; e d else ReadL (Be a 2); { Интерфейс экрана при выдаче результата } ex BackGrou d(3); ex Color(1); Wi dow(1,1,80,25); ClrScr; Wri eL ; Wri eL ('г===================== Результат ==========================¬'); For k:=1 o 21 do Wri eL ('¦ ¦'); ex Color(0); ex BackGrou d(7); Go oXY(2,23); Wri eL (' Для продолжения нажмите любую клавишу'); ex BackGrou d(3); Wi dow(3,4,77,22); ex Color(15); ClrScr; { Вычесление шага сетки } au:=( - 0)/Kol vo ; h:=(X-x0)/Kol voX; { Ввод данных при ime= 0 } For m:=0 o Kol voX do begi Xm:=x0 h m; U m:=Fu U(Xm, 0); e d; ex Color(14); Wri eL ('Время равно ', ime:3:3); ex Color(15); Wri eL (U,'Время равно ', ime:3:3); Pri Array; { Начало рассчета } ime:= 0; Repea ime:= ime au; Wri eL ; ex Color(14); Wri eL ('Время равно ', ime:3:3); ex Color(15); Wri eL (U,'Время равно ', ime:3:3); { 1 этап. Решается методом скалярной прогонки } a progo ka:=(-2 v-a h)/(2 SQR(h)); c progo ka:=(a h-2 v)/(2 SQR(h)); Alfa:=Be a Zero( ime); For m:=1 o Kol voX-1 do begi Alfa b progo ka); Be a/ au-a progo ka Be a b progo ka); e d; U ,Be a:=Alfa; { 2 этап, часть первая. Решается методом скалярной прогонки } a progo ka:=(-2 v-a h)/(2 SQR(h)); c progo ka:=(a h-2 v)/(2 SQR(h)); Alfa:=Be a Zero( ime); For m:=1 o Kol voX-1 do begi Alfa b progo ka); Be a/ au-a progo ka Be a b progo ka); e d; U 1 2,Be a:=Alfa U 1 2; { 2 этап, часть вторая. Решается методом скалярной прогонки } a progo ka:=(-2 v-a h)/(2 SQR(h)); c progo ka:=(a h-2 v)/(2 SQR(h)); Alfa:=Be a Zero( ime); For m:=1 o Kol voX-1 do begi Alfa b progo ka); Be a/ au-a progo ka Be a b progo ka); e d; U 1,Be a:=Alfa Be a; { 3 этап. Окончательное значение } For m:=0 o Kol voX do U m; Pri Array; { Вывод результата на экран и его запись в файл } For m:=0 o Kol voX do { Рассчет точного значения функции } begi z:=Fu U(x0 m h, ime); e d; { Вывод ошибки расчета на экран и в файл } Error:=0; For m:=0 o Kol voX do begi a:=Abs(U m); If Error&l ;a he Error:=a; e d; Wri eL ; ex Color(4); Wri eL ('Максимальная ошибка для этого времени равна ',Error:10:7); ex Color(15); Wri eL (U,'Максимальная ошибка для этого времени равна ',Error:15:13); Wri eL (U); ReadKey; U il ime> ; Close(U); { Закрытие файла с результатами } E d.
Папирусы математические ). Древние египтяне решали и гораздо более сложные задачи (например, на арифметическую и геометрическую прогрессии). Как формулировка задачи, так и решение давались в словесной форме и только в виде конкретных численных примеров. И все же за этими примерами чувствуется наличие накопленных общих методов, если не по форме, то по существу равносильных решению уравнений 1-й и иногда 2-й степеней. Имеются и первые математические знаки (например, особый знак для дробей). В начале 20 в. были расшифрованы многочисленные математические тексты (клинописи) и другой из древнейших культур — вавилонской (см. Клинописные математические тексты ). Это открыло миру высоту математической культуры, существовавшей уже за 4000 лет до наших дней. Вавилоняне с помощью обширных специальных таблиц умели решать разнообразные задачи; некоторые из них равносильны решению квадратных уравнений и даже одного вида уравнения 3-й степени. Среди учёных, разрабатывающих историю математики, возник спор о том, в какой мере математику вавилонян можно считать А
1. Численное решение модельного уравнения диссипации, конвекции и кинетики
2. Численное решение системы линейных алгебраических уравнений методом Гаусса
3. Решение дифференциальных уравнений 1 порядка методом Эйлера
4. Решение нелинейного уравнения методом касательных
5. Приближённые методы решения алгебраического уравнения
9. Решение некоторых уравнений и неравенств с параметром
10. Решение иррациональных уравнений
11. Решение дифференциального уравнения с последующей аппроксимацией
12. Численный расчет дифференциальных уравнений
13. Метод касательных решения нелинейных уравнений
14. Алгоритмы численного решения задач
15. Методы и алгоритмы компьютерного решения дифференциальных уравнений
16. Решение дифференциальных уравнений в среде MathCAD
17. Алгоритм решения Диофантовых уравнений
18. Метод замены неизвестного при решении алгебраических уравнений
19. Решение дифференциального уравнения первого порядка
20. Решение дифференциальных уравнений
21. Решение матричных уравнений. Базисный минор. Ранг. Действия над матрицами
25. Краткие сведения о электронных таблицах. Решение уравнения
26. Решение систем дифференциальных уравнений методом Рунге-Куты 4 порядка
28. Решение уравнений, систем уравнений, неравенств графически
29. Решение уравнений в целых числах
30. Итерационные методы решения систем линейных уравнений с неединственными коэффициентами
31. Решение систем линейных алгебраических уравнений
32. Уравнения и способы их решения
33. Методы решения уравнений в странах древнего мира
34. Приближенное решение уравнений методом хорд и касательных
35. Решение задачи Дирихле для уравнения Лапласа методом сеток
36. Способы решения систем линейных уравнений
37. Алгебраическое и графическое решение уравнений, содержащих модули
41. Дифференциальные уравнения движения точки. Решение задач динамики точки
42. Применение графиков в решении уравнений
43. Методы решения уравнений, содержащих параметр
44. Графическое решение уравнений, неравенств, систем с параметром
46. Автоматизация решения систем линейных алгебраических уравнений
49. Решение линейных интегральных уравнений
50. Решение прикладных задач численными методами
51. Решение систем нелинейных алгебраических уравнений методом Ньютона
52. Решение системы линейных уравнений
53. Решение уравнений средствами Excel
57. Итерационные методы решения систем нелинейных уравнений
58. Решение линейной системы уравнений с тремя неизвестными
59. Решение произвольных систем линейных уравнений
60. Решение систем дифференциальных уравнений при помощи неявной схемы Адамса 3-го порядка
61. Решение уравнений с параметрами
62. Формулы, возможно неизвестные, для решений уравнения Пифагора
64. Прямые методы решения систем линейных алгебраических уравнений
65. Методы оптимизации при решении уравнений
66. Методы решения уравнений линейной регрессии
68. Статистика населения. Методы анализа динамики и численности и структуры населения
69. Индия. Проблемы и пути их решения
74. Решение задач по курсу "семейное право"
75. Культура, природа, человек. Проблемы и пути их решения
76. Решение транспортной задачи методом потенциалов
77. Sportster Voice 28.8 Инсталляция & Проблемы и решения
78. По решению прикладных задач на языке FRED
79. Получение уравнения переходного процесса по передаточной функции
80. 10 задач с решениями программированием на Паскале
81. Системы принятия решений, оптимизация в Excel и базы данных Access
84. Корень n-ой степени и его свойства. Иррациональные уравнения. Степень с рациональными показателем
85. Решение задач - методы спуска
89. Использование дифференциальных уравнений в частных производных для моделирования реальных процессов
90. Синтез оптимальных уравнений
91. Решение оптимизационной задачи линейного программирования
92. Методы и приемы решения задач
93. Решение задач линейного программирования
94. Решение задачи линейного программирования
95. Решение задач линейной оптимизации симплекс – методом
96. Устойчивость систем дифференциальных уравнений
98. О преобразовании дифференциальных систем уравнений в случае сингулярных пучков матриц
99. Метод прогонки решения систем с трехдиагональными матрицами коэффициентов