Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава III . Одномерное уравнение переноса с постоянными коэффициентами ⇐ ПредыдущаяСтр 4 из 4
Постановка задачи
Рассмотрим уравнение переноса вида
(3.1)
удовлетворяющее начальному условию
(3.2)
и граничным условиям 1. P> 0 p> 0, нет на левой границе условий. 2. P< 0 p< 0, нет на правой границе условий. (3.3) Входные данные: 1) P> 0
2) P< 0
Явные” схемы
Рассмотрим схему бегущего счета в обоих случаях. 1) p> 0 В этом случае используется правая разностная схема
(3.1′ ) ; (3.2′ ) . (3.3′ )
Из уравнения (3.1′ ) следует
2) p< 0 Разностная схема(левая) имеет вид:
; (3.1″ ) ; (3.2″ ) (3.3″ )
Из уравнения (3.1″ ) следует
Таблица 11. Численное решение уравнения переноса с постоянными коэффициентами схема бегущего счета “явная ” схема (правая разностная схема)
Таблица 12. Численное решение уравнения переноса с постоянными коэффициентами схема бегущего счета “явная ” схема (левая разностная схема)
Текст программы смотри в приложении 4 Неявные схемы
Рассмотрим две различные разностные схемы: 1. Центрально-разностная схема. 2. Трехточечная схема с весом. Все эти схемы сводятся к стандартному виду (3.4) и решаются методом прогонки
(3.4)
Коэффициенты Ai, Bi, Ci должны удовлетворять условиям:
(3.5)
Коэффициенты B0 , C0, F0, AN, CN, FN находятся из граничных условий. В данной задаче в зависимости от знака функции p(x, t) ставятся граничные условия и тем самым находятся наши коэффициенты. 1) Когда р> 0 задается правое граничное условие: (3.3′ )
Используя уравнения (3.3′ ) находим коэффициенты AN, CN, FN. Коэффициенты B0 , C0, F0 находятся из дополнительного условия, которое ставится на левом конце.
2) Когда р< 0 задается граничное условие на левом конце
(3.3″ )
Используя уравнения (3.3″ ) находим коэффициенты B0 , C0, F0 Коэффициенты AN, CN, FN находятся из дополнительного условия, которое ставится на правом конце.
Центрально-разностная схема Разностная схема задачи (3.1)-(3.3) имеет следующий вид:
1) р> 0. В этом случае граничное условие задается на правом конце:
(3.6)
Используя уравнение (3.6) находим коэффициенты AN =0, CN=1, Дополнительное условие на левом конце имеет вид:
(3.7)
Приведем уравнение (3.7) к виду:
(3.7′ )
Отсюда находим коэффициенты:
2) В случае, когда р< 0, граничное условие ставится на левом конце
(3.8)
Используя уравнение (3.8) находим коэффициенты B0, =0, C0=1, Дополнительное условие на правом конце имеет вид: (3.9)
Приводим уравнение (3.9) к виду:
(3.9′ )
отсюда находим коэффициенты:
Таблица 13. Численное решение уравнения переноса с постоянными коэффициентами центральная разностная схема метод прогонки
Таблица 14. Численное решение уравнения переноса с постоянными коэффициентами центральная разностная схема метод прогонки
Текст программы смотри в приложении 5 Трехточечная схема с весом Разностная схема имеет вид:
вещественный параметр
1. p> 0
На левом конце ставится дополнительное условие 2. p< 0
На правом конце ставится дополнительное условие
Разностные уравнения и дополнительные условия сводятся к стандартному виду (3.4) и решаются методом прогонки.
Таблица 15. Численное решение уравнения переноса с постоянными коэффициентами Трехточечная схема с весом Метод прогонки
Таблица 16. Численное решение уравнения переноса с постоянными коэффициентами Трехточечная схема с весом Метод прогонки
Таблица 17. Численное решение уравнения переноса с постоянными коэффициентами Трехточечная схема с весом Метод прогонки
Таблица 18. Численное решение уравнения переноса с постоянными коэффициентами Трехточечная схема с весом Метод прогонки
Текст программы смотри в приложении 6 3.3.3 Схема “прямоугольник” 1. p> 0 разностная схема правая имеет вид
2. p< 0 разностная схема левая имеет вид
Схема со сглаживанием Разностная схема имеет вид
1. p> 0
2. p< 0
Схема сводится к стандартному виду и решается методом прогонки.
Схема прямоугольник со сглаживанием
1.p> 0
2. p< 0
Шахматная” схема Имеем схему с весом
1. p> 0 2. p< 0 Параметр управляет реализацией схемы. При =0 и (i+j)- четном решаем по явной схеме, при =1 и (i+j)- нечетном решаем по неявной схеме явно. В целом схема реализуется явно. Заключение
Теория разностных схем является самостоятельным разделом вычислительной математики, где изучаются методы приближенного решения дифференциальных уравнений путем замены их конечно –разностными уравнениями (разностными схемами). Конечно –разностный метод (метод сеток) –один из мощных достаточно универсальных методов современной вычислительной математики. Этот метод относится к классу машинных методов решения широкого круга задач для дифференциальных уравнений. В дипломной работе рассмотрены “явные” и неявные разностные методы решения для одномерного уравнения переноса с переменными коэффициентами и для одномерного уравнения переноса с постоянными коэффициентами на неравномерных сетках. Использованы такие разностные схемы, как схема бегущего счета, трехточечная схема с весом, центрально –разностная схема, схема “прямоугольник”, схема со сглаживанием, схема прямоугольник со сглаживанием, “шахматная ” схема. Произведены некоторые расчеты для одномерного уравнения переноса с переменными и постоянными коэффициентами на неравномерных сетках, с целью определения наиболее устойчивой разностной схемы. Исследование показало, что наиболее устойчивым методом для одномерного уравнения переноса с переменными коэффициентами является: 1) При p0> 0, pN> 0 трехточечная схема с весом при G=1, абсолютная погрешность аппроксимации на 50-м слое составляет 0, 00007549. 2) При p0< 0, pN< 0 неявная схема с центральной разностью, абсолютная погрешность аппроксимации на 50-м слое составляет 0, 00007574. 3) При p0< 0, pN> 0 так же схема с центральной разностью, абсолютная погрешность составляет 0, 00009042. Так же произведены расчеты некоторых методов одномерного уравнения переноса с постоянными коэффициентами. Исследование показало, что наиболее устойчивым методом для одномерного уравнения переноса с постоянными коэффициентами является: 1) При p> 0 трехточечная схема с весом при G=1, абсолютная погрешность аппроксимации на 50-м слое составляет 0, 00000755. 2) При p< 0 также трехточечная схема с весом при G=1, абсолютная погрешность на 50-м слое составляет 0, 00022000 Список использованной литературы
1. Самарский А.А. Теория разностных схем. М.: Наука, 1977, с. 616. 2. Самарский А.А., Гулин А.В.Численные методы. М.Наука, 1989, с. 315. 3. Охлопков Н.М. Численные методы решения обыкновенных дифференциальных уравнений. Якутск: Изд-во Ягу, 1993, с. 38. 4. Охлопков Н.М., Охлопков Г.Н. Введение в специальность “Прикладная математика” часть 1, 2 Якутск: Изд-во Ягу, 1997, с. 93, с. 85. 5. Охлопков Н.М., Иванов Ф.В. Вычислительные алгоритмы решения задач для дифференциальных уравнений Якутск: Изд-воЯгу, 1992, с.65. 6. Охлопков Н.М., Иванов Ф.В. Пакет программ численного решения задач математической физики ч.2, Якутск: Изд-во Ягу, 1989, с 15. 7. Охлопков Н.М. Об экономичных методах решения задач математической физики. Якутск: Изд-во Ягу, 1982, с. 39.
Приложение 1 Уравнение с переменными коэффициентами “Явная” схема. Левая разностная схема p0< 0, pN< 0 uses crt; const n=15; j0=20; tt=1; l=1; A=0.01; a1=1; q=2; type m=array[0..n] of real; hi=array[0..n] of real; var i, j: integer; x, h, t, tau, d: hi; u, u1, g, u2, u11, u12: m; function ut(p, r: real): real; begin ut: = A*exp(p+r); end; function fi(p, r: real): real; begin fi: =A*exp(p+r)*(p*(p+1)+r*(r+1)+7); end; function ro(p, r: real): real; begin ro: =sqr(p)+sqr(r)+5; end; function p1(p, r: real): real; begin p1: =-(p+r+2); end; begin clrscr; writeln ( 'sxema begushego scheta'); writeln(' kogda p0< 0, pN< 0'); writeln(' levaya raznostnaya sxema'); readln; h[0]: =0; h[1]: =a1; for i: =2 to n do h[i]: =l/n; tau[j]: =tt/j0; t[j]: =0; j: =1; for i: =0 to n do begin x[i]: =i*h[i]; t[j]: =j*tau[j]; u[i]: = A*(exp(x[i])); end; while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; u1[0]: =A*exp((t[j])); for i: =n-1 downto 0 do begin g[i]: =tau[j+1]*p1(x[i], t[j+1])/h[i+1]; u11[i]: =(-g[i]*u1[i+1])+(ro(x[i], t[j+1])*u[i]); u12[i]: =tau[j+1]*fi(x[i], t[j]); u1[i]: =(u11[i]+u12[i])/(ro(x[i], t[j+1])+g[i]); end; for i: =n-1 downto 0 do u[i]: =u1[i]; writeln('----------------------------------------------------------'); write(' ', j, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; j: =j+1; writeln('--------------------------------------------------------------'); readln; end; end.
Уравнение с переменными коэффициентами “Явная” схема. Схема бегущего счета. Правая разностная схема p0> 0, pN> 0 uses crt; const n=15; j0=50; tt=1; l=0.5; A=0.5; a1=2; q=2; type w=array[0..n] of real; hi=array[0..n] of real; var i, j: integer; x, h, t, tau, d: hi; u, u1, g, u2, u11, u12: w; function ut(p, r: real): real; begin ut: = A*exp(p+r); end; {to4noe reshenie} function fi(p, r: real): real; begin fi: =A*exp(p+r)*(p*(p-1)+r*(r-1)+3); end; function ro(p, r: real): real; begin ro: =sqr(p)+sqr(r)+5; end; function p1(p, r: real): real; begin p1: =p+r+2; end; begin clrscr; writeln ( 'sxema begushego scheta'); writeln(' kogda p0> 0, pN> 0'); writeln(' pravaya raznostnaya sxema'); readln; h[0]: = 0; h[1]: = a1; for i: =2 to n do h[i]: = h[i-1]*q; for i: =0 to n do h[i]: =x[i]-x[i-1]; tau[j]: =t[j]-t[j-1]; t[j]: =0; j: =1; for i: =0 to n do begin x[i]: =i*h[i]; t[j]: =j*tau[j]; u[i]: = A*exp(x[i]); {u0(x)} end; begin while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; u1[i]: =A*exp(l+t[j]); {mu2(t)} for i: =n-1 downto 0 do begin g[i]: =(tau[j+1]*p1(x[i], t[j+1])/h[i+1]); {R[i, j+1]} u11[i]: =(g[i]*u1[i+1])+ro(x[i], t[j+1])*u[i]; u12[i]: =tau[j+1]*fi(x[i], t[j+1]); u1[i]: =(u11[i]+u12[i])/(ro(x[i], t[j+1])+g[i]); {y end; for i: =n-1 downto 0 do begin u[i]: =u1[i]; end; writeln('----------------------------------------------------------'); write(' ', j, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; j: =j+1; writeln('--------------------------------------------------------------' readln; end; end; end.
Приложение 2
Уравнение с переменными коэффициентами Схема с центральной разностью p0> 0, pN> 0 uses crt; const n=15; j0=50; tt=1; l=1; A1=1; q=3; g1=1; type m=array[0..n] of real; hi=array[0..n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut(p, r: real): real; begin ut: = A1*exp(p+r); end; function fi(p, r: real): real; begin fi: = begin fi: =A*exp(p+r)*(p*(p-1)+r*(r-1)+3); end; function ro(p, r: real): real; begin ro: =sqr(p)+sqr(r)+5; end; p1(p, r: real): real; begin p1: =p+r+2; end; begin clrscr; writeln (' chislennoe reshenie uravneniya perenosa'); writeln ( 'sxema s sentralnoy raznostju'); writeln(' kogda p0> 0, pn> 0'); readln; h[0]: =0; h[1]: =a1; for i: =2 to n do h[i]: =h[i-1]*q; for i: =0 to n do h[i]: =x[i]-x[i-1];; tau[j]: =t[j]-t[j-1]; t[j]: =0; k: =0; clrscr; writeln('------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('-------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnost '); writeln('--------------------------------------------------------'); for i: =0 to n do begin x[i]: =i*h[i]; t[j]: =j*tau[j]; u[i]: = A1*exp(x[i]); d[i]: =abs(ut(x[i], t[j])-u[i]); write('', i, '', u[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, '', d[i]: 6: 8, ''); end; writeln('-------------------------------------------------------'); readln; k: =1; while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; c[0]: =1+(p1(x[i], t[j])*tau[j])/h[i]+tau[j]*q; b[0]: =(tau[j]*p1)/h[i]; a[n]: =0; c[n]: =1; for i: =1 to n-1 do begin r[i]: =tau[j]*p1/(2*h[i]); a[i]: =-r[i]; c[i]: =ro; b[i]: =-a[i]; f[i]: =ro*u[i]+tau[j]*fi(x[i], t[j]); end; f[0]: =tau[j]*fi(x[0], t[j])+u[0]; f[n]: = A1*exp(l+t[j]); alfa[0]: =b[0]/c[0]; betta[0]: =f[0]/c[0]; for i: =1 to n-1 do begin z[i]: =c[i]-alfa[i-1]*a[i]; alfa[i]: =b[i]/z[i]; betta[i]: =(f[i]+a[i]*betta[i-1])/z[i]; end; u1[n]: =(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]); for i: =n-1 downto 0 do u1[i]: =alfa[i]*u1[i+1]+betta[i]; writeln('----------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; k: =k+1; writeln('--------------------------------------------------------------'); readln; for i: =0 to n do u[i]: =u1[i]; end; end.
Уравнение с переменными коэффициентами Схема с центральной разностью p0< 0, pN< 0 uses crt; const n=15; j0=50; tt=1; l=1; A1=1; q=3; g1=1; type m=array[0..n] of real; hi=array[0..n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut(p, r: real): real; begin ut: = A1*exp(p+r); end; function fi(p, r: real): real; begin fi: =A1*exp(p+r)*(p*(p+1)+r*(r+1)+7); end; function ro(p, r: real): real; begin ro: =sqr(p)+sqr(r)+5; end; function p1(p, r: real): real; begin p1: =-(p+r+2); end; begin clrscr; writeln (' chislennoe reshenie uravneniya perenosa'); writeln ( 'sxema s sentralnoy raznostju'); writeln(' kogda p0< 0, pn< 0'); readln; h[0]: =0; h[1]: =g1; for i: =2 to n do h[i]: =h[i-1]*q; for i: =0 to n do h[i]: =x[i]-x[i-1]; tau[j]: =t[j]-t[j-1]; t[j]: =0; k: =0; clrscr; writeln('------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('-------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnost '); writeln('--------------------------------------------------------'); for i: =0 to n do begin x[i]: =i*h[i]; t[j]: =j*tau[j]; u[i]: = A1*exp(x[i]); d[i]: =abs(ut(x[i], t[j])-u[i]); write('', i, '', u[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, '', d[i]: 6: 8, ''); end; writeln('-------------------------------------------------------'); readln; k: =1; while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; c[0]: =1; b[0]: =0; a[n]: =-(tau[j]*p1[x)/h[i]; c[n]: =1-(p1*tau[j])/h[i]+tau[j]*q; for i: =1 to n-1 do begin r[i]: =tau[j]*p1/(2*h[i]); a[i]: =-r[i]; c[i]: =ro; b[i]: =-a[i]; f[i]: =ro*u[i]+tau[j]*fi(x[i], t[j]); end; f[0]: =A1*exp(t[j]); f[n]: = (tau[j]*fi(x[n], t[j])+u[n]); alfa[0]: =b[0]/c[0]; betta[0]: =f[0]/c[0]; for i: =1 to n-1 do begin z[i]: =c[i]-alfa[i-1]*a[i]; alfa[i]: =b[i]/z[i]; betta[i]: =(f[i]+a[i]*betta[i-1])/z[i]; end; u1[n]: =(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]); for i: =n-1 downto 0 do u1[i]: =alfa[i]*u1[i+1]+betta[i]; writeln('----------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; k: =k+1; writeln('--------------------------------------------------------------'); readln; for i: =0 to n do u[i]: =u1[i]; end; end.
Уравнение с переменными коэффициентами Схема с центральной разностью. p0< 0, pN> 0 uses crt; const n=15; j0=50; tt=1; l=1; A1=1; q=3; a2=1; type m=array[0..n] of real; hi=array[0..n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut(p, r: real): real; begin ut: = v*exp(p+r); end; function fi(p, r: real): real; begin fi: =A1*exp(p+r)*((p+r+10)-(2*p-1)*exp(2*r); end; function ro(p, r: real): real; begin ro: =p+r+10; end; function p1(p, r: real): real; begin p1: =(2*p-1)*exp(2*r); end; begin clrscr; writeln (' chislennoe reshenie uravneniya perenosa'); writeln ( 'sxema s sentralnoy raznostju'); writeln(' kogda p0< 0, pn> 0'); readln; h[0]: =0; h[1]: =a2; for i: =2 to n do h[i]: =h[i-1]*q1; h[i]: =x[i]-x[i-1];; tau[j]: =t[j]-t[j-1]; t[j]: =0; k: =0; clrscr; writeln('------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('-------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnost '); writeln('--------------------------------------------------------'); for i: =0 to n do begin x[i]: =i*h[i]; u[i]: = A1*exp(x[i]); d[i]: =abs(ut(x[i], t[j])-u[i]); write('', i, '', u[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, '', d[i]: 6: 8, ''); end; writeln('-------------------------------------------------------'); readln; k: =1; while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; c[0]: =1; b[0]: =0; a[n]: =0; c[n]: =1; for i: =1 to n-1 do begin r[i]: =tau[j+1]*p1/(2*h[i]); a[i]: =-r[i]; c[i]: =ro; b[i]: =-a[i]; f[i]: =ro*u[i]+tau[j+1]*fi(x[i], t[j]); end; f[0]: =A1*exp(t[j]); f[n]: =A1*exp(l+t[j]); alfa[0]: =b[0]/c[0]; betta[0]: =f[0]/c[0]; for i: =1 to n-1 do begin z[i]: =c[i]-alfa[i-1]*a[i]; alfa[i]: =b[i]/z[i]; betta[i]: =(f[i]+a[i]*betta[i-1])/z[i]; end; u1[n]: =(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]); for i: =n-1 downto 0 do u1[i]: =alfa[i]*u1[i+1]+betta[i]; writeln('----------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; k: =k+1; writeln('--------------------------------------------------------------'); readln; for i: =0 to n do u[i]: =u1[i]; end; end.
Уравнение с переменными коэффициентами Схема с центральной разностью. p0> 0, p< 0 uses crt; const n=15; j0=50; tt=1; l=1; A1=1; a2=1; q=3; type m=array[0..n] of real; hi=array[0..n] of real; var i, j, k: integer; h, d, tau, t: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut(p, r: real): real; begin ut: = A1*exp(p+r); end; function fi(p, r: real): real; begin fi: =A1*exp(p+r)*((p+r+10)-(2*p-1)*exp(2*r); end; function ro(p, r: real): real; begin ro: =p+r+10; end; function p1(p, r: real): real; begin p1: =(2*p-1)*exp(2*r); end; begin clrscr; writeln (' chislennoe reshenie uravneniya perenosa'); writeln ( 'sxema s sentralnoy raznostju'); writeln(' kogda p0> 0, pn< 0'); readln; h[0]: =0; h[1]: =a2; for i: =2 to n do h[i]: =h[i-1]*q; h[i]: =x[i]-x[i-1]; tau[j]: =t[j]-tau[j-1]; t[j]: =0; k: =0; clrscr; writeln('------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('-------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnost '); writeln('--------------------------------------------------------'); for i: =0 to n do begin x[i]: =i*h[i]; t[j]: =j*tau[j]; u[i]: = A1*exp(x[i]); d[i]: =abs(ut(x[i], t[j])-u[i]); write('', i, '', u[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, '', d[i]: 6: 8, ''); end; writeln('-------------------------------------------------------'); readln; k: =1; while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; c[0]: =p1+ro*tau[j]/h[i]; b[0]: =tau[j]*p1/h[i]; a[n]: =tau[j]*p1/h[i]; c[n]: =-ro+p1*tau[j]/h[i]; for i: =1 to n-1 do begin r[i]: =tau[j]*p1/(2*h[i]); a[i]: =-r[i]; c[i]: =ro; b[i]: =-a[i]; f[i]: =ro*u[i]+tau[j]*fi(x[i], t[j]); end; f[0]: =tau[j+1]*fi(x[0], t[j])+ro*u[0]; f[n]: =-(tau[j+1]*fi(x[n], t[j])+ro*u[n]); alfa[0]: =b[0]/c[0]; betta[0]: =f[0]/c[0]; for i: =1 to n-1 do begin z[i]: =c[i]-alfa[i-1]*a[i]; alfa[i]: =b[i]/z[i]; betta[i]: =(f[i]+a[i]*betta[i-1])/z[i]; end; u1[n]: =(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]); for i: =n-1 downto 0 do u1[i]: =alfa[i]*u1[i+1]+betta[i]; writeln('----------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; k: =k+1; writeln('--------------------------------------------------------------'); readln; for i: =0 to n do u[i]: =u1[i]; end; end.
Приложение 3
Уравнение с переменными коэффициентами Трехточечная схема с весом Метод прогонки p0> 0, pN> 0 uses crt; const n=15; j0=50; tt=1; l=1; A1=1; q=3; a2=1; type m=array[0..n] of real; hi=array[0..n] of real; var i, j, k, G: integer; h, d, tau, t, f1, f2, f3, f4, f5, f6: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut(p, r: real): real; begin ut: = A1*exp(p+r); end; function fi(p, r: real): real; begin fi: =A*exp(p+r)*(p*(p-1)+r*(r-1)+3); end; function ro(p, r: real): real; begin ro: =sqr(p)+sqr(r)+5; end; function p1(p, r: real): real; begin p1: =p+r+2; end; begin clrscr; writeln (' chislennoe reshenie uravneniya perenosa'); writeln ( 'sxema begushego scheta'); writeln(' metod progonki'); writeln(' ------------------------------' ); writeln('-------------kogda p0> 0, pN> 0------------'); writeln(' vvedite G=' ); read(G); writeln('----------------------------------------'); readln; readln; h[0]: =0; h[1]: =a2; for i: =2 to n do h[i]: =h[i-1]*q; for i: =0 to n do h[i]: =x[i]-x[i-1];; tau[j]: =t[j]-t[j-1]; t[j]: =0; k: =0; clrscr; writeln('------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('-------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnost '); writeln('--------------------------------------------------------'); for i: =0 to n do begin x[i]: =i*h[i]; t[j]: =j*tau[j]; u[i]: = A1*exp(x[i]); d[i]: =abs(ut(x[i], t[j])-u[i]); write('', i, '', u[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, '', d[i]: 6: 8, ''); end; writeln('-------------------------------------------------------'); readln; k: =1; while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; c[0]: =ro+(p1*tau[j])/h[i]; b[0]: =G*tau[j]*p1/h[i]; a[n]: =0; c[n]: =1; for i: =1 to n-1 do begin a[i]: =-G*p1*tau[j]/(2*h[i]); c[i]: =ro; b[i]: =-a[i]; f1[i]: =(1-G)*p1*tau[j]/(2*h[i]); f2[i]: =ro*u[i]; f3[i]: =G*tau[j]*fi(x[i], t[j]); f4[i]: =(1-G)*tau[j]*fi(x[i], t[j]-tau[j]); f[i]: =f1[i]*(u[i+1]-u[i-1])+f2[i]+f3[i]+f4[i]; end; f5[i]: =(1-G)*p1*(u[1]-u[0])*tau[j]/h[i]; f6[i]: =ro*u[0]+f5[i]+G*tau[j]*fi(x[0], t[j]+tau[j]); f[0]: =f6[j]+(1-G)*tau[j]*fi(x[0], t[j]); f[n]: = A1*exp(l+t[j]); alfa[0]: =b[0]/c[0]; betta[0]: =f[0]/c[0]; for i: =1 to n-1 do begin z[i]: =c[i]-alfa[i-1]*a[i]; alfa[i]: =b[i]/z[i]; betta[i]: =(f[i]+a[i]*betta[i-1])/z[i]; end; u1[n]: =(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]); for i: =n-1 downto 0 do u1[i]: =alfa[i]*u1[i+1]+betta[i]; writeln('----------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; k: =k+1; writeln('--------------------------------------------------------------'); readln; for i: =0 to n do u[i]: =u1[i]; end; end.
Уравнение с переменными коэффициентами Трехточечная схема с весом Метод прогонки p0< 0, pN< 0 uses crt; const n=15; j0=50; tt=1; l=1; A1=1; q=3; a2=1; type m=array[0..n] of real; hi=array[0..n] of real; var i, j, k, G: integer; h, d, tau, t, f1, f2, f3, f4, f5, f6: hi; u, u1, r, x, z, a, b, c, f, alfa, betta: m; function ut(p, r: real): real; begin ut: = A1*exp(p+r); end; function fi(p, r: real): real; begin fi: =A*exp(p+r)*(p*(p+1)+r*(r+1)+7); end; function ro(p, r: real): real; begin ro: =sqr(p)+sqr(r)+5; end; function p1(p, r: real): real; begin p1: =-(p+r+2); end; begin clrscr; writeln (' chislennoe reshenie uravneniya perenosa'); writeln ( 'trextochechnaya sxema'); writeln(' kogda p< 0'); writeln(' vvedite G=' ); read(G); writeln('----------------------------------------------------'); readln; readln; h[0]: =0; h[1]: =a2; for i: =2 to n do h[i]: =h[i-1]*q; for i: =0 to n do h[i]: =x[i]-x[i-1];; tau[j]: =t[j]-t[j-1]; t[j]: =0; k: =0; clrscr; writeln('------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('-------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnost '); writeln('--------------------------------------------------------'); for i: =0 to n do begin x[i]: =i*h[i]; t[j]: =j*tau[j]; u[i]: = A1*exp(x[i]); d[i]: =abs(ut(x[i], t[j])-u[i]); write('', i, '', u[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, '', d[i]: 6: 8, ''); end; writeln('-------------------------------------------------------'); readln; k: =1; while t[j]< =tt do begin clrscr; t[j]: =t[j]+tau[j]; c[0]: =1; b[0]: =0; a[n]: =-g*(tau[j]*p1)/h[i]; c[n]: =ro-g*(p1*tau[j])/h[i]; for i: =1 to n-1 do begin r[i]: =tau[j]*p1/(2*h[i]); a[i]: =(-g*p1*tau[j])/(2*h[i]); c[i]: =ro; b[i]: =-a[i]; f1[i]: =(1-g)*(p1*tau[j])/(2*h[i]); f2[i]: =ro*u[i]; f3[i]: =g*tau[j]*fi(x[i], t[j]); f4[i]: =(1-g)*tau[j]*fi(x[i], t[j]-tau[j]); f[i]: =f1[i]*(u[i+1]-u[i-1])+f2[i]+f3[i]+f4[i]; end; f[0]: =A1*exp(t[j]); f5[i]: =(1-g)*p1*(u[1]-u[0])*tau[j]/h[i]; f6[i]: =ro*u[0]+f5[i]+g*tau[j]*fi(x[0], t[j]+tau[j]); f[n]: =f6[j]+(1-g)*tau[j]*fi(x[0], t[j]); alfa[0]: =b[0]/c[0]; betta[0]: =f[0]/c[0]; for i: =1 to n-1 do begin z[i]: =c[i]-alfa[i-1]*a[i]; alfa[i]: =b[i]/z[i]; betta[i]: =(f[i]+a[i]*betta[i-1])/z[i]; end; u1[n]: =(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]); for i: =n-1 downto 0 do u1[i]: =alfa[i]*u1[i+1]+betta[i]; writeln('----------------------------------------------------------'); write(' ', k, 'sloy'); writeln(' '); writeln('--------------------------------------------------------'); writeln('N priblijennoe tochnoe pogreshnosti '); writeln('--------------------------------------------------------'); for i: =0 to n do begin d[i]: =abs(ut(x[i], t[j])-u1[i]); write('', I, ' ', u1[i]: 6: 8, ' '); writeln(ut(x[i], t[j]): 6: 8, ' ', d[i]: 6: 8, ' '); end; k: =k+1; |
Последнее изменение этой страницы: 2019-10-03; Просмотров: 210; Нарушение авторского права страницы