ХТМУ Светослав Ненов Навигация Диференчни схеми Начална страница Курсове Математика Диференчни схеми Уравнение на топлопроводимост FTCS схема Настройки FTCS схема Календар Разглеждаме едномерната задача u t = β 2 u, xx t, x L, (1) u(, t) = T (t), t, (2) u(x, ) = g(x), x L (3) u(l, t) = T L (t), t, където, е два пъти непрекъснато диференцируема функция в безкрайния правоъгълник L > u : Π R (4) Π = {(x, t) : x L, t < }. В настоящата секция ще считаме, че разглежданата задача е съгласувана и добре поставена в смисъл на Hadamard. Π В въвеждаме Декартова мрежа (вж. Фигура 1): x 1 =, x i = = (n 1)h = L. x n (i 1)h, i = 1,, n t 1 =, t j = (j 1), j = 1, 2, ;
Фигура 1 Да апроксимираме производната относно t чрез дясна диференчна формула: (, ) = u t x i t j където,. За израза = u( x i + ) u( x i ) (x, t) ще използваме центрирана разлика: където i = 2,, n 1, j = 1, 2,. u( x i +1 ) u( x i ) i = 1,, n j = 1, 2, u xx + O() + O(), 1 xx( x i ) = x i t j x i t j x i t j u (u( h, ) 2u(, ) + u( + h, ) ) + O( ) 1 = (u( x i 1 ) 2u( x i ) + u( x i+1 ) ) + O( ),
Заместваме в (1) и получаваме u( x i +1 ) u( x i ) Ето защо е естествено да разгледаме следния дискретния модел β 2 = (u( x i 1 ) 2u( x i ) + u( x i+1 ) ) + O( ) O(). (5) u i j+1 където i = 2,, n 1, j = 1, 2,. Изразяваме u i j+1 от уравнението (???) и получаваме u i j β 2 = ( u 2 + ), i 1 j u i j u (6) i+1 j u i j+1 = u + β 2 ( 2 + ). i j u i 1 j u i j u i+1 j (7) Използвайки и началните и гранични условия (2)-(4), получаваме T ( ) = u(, ) =, j = 1, 2, t j g( ) = u( x i, ) = u i 1, i = 1,, n, T L x i ( ) = u(l, ) =, j = 1, 2. t j t j t j u 1 j u n j (8) (9) (1) Уравненията (7)-(1) се наричат FTCS диференчна схема за задачата (1)-(4). Нека положим u j u 1 j u 2 j = u n j Тогава
u j+1 u 1 j 1 u 2 j + ( u 1 j 2 u 2 j + u 2 j ) u 1 j+1 r 1 2r r u 1 j u 2 j+1 u 3 j + ( u 2 j 2 u 3 j + u 3 j ) r 1 2r r = = h = = A, 2 u 2 j u j u n j+1 r 1 2r r u n j u n 1 j + ( u 1 j 2 u 1 j + u 2 j ) 1 u n j където r = β 2, j = 1, 2,. Очевидно A е несиметрична тридиагонална матрица. Пример 1. Разглеждаме задачата u t =.1, u xx u(, t) = T (t), u(x, ) = 2, u(1, t) = T L (t), t, x 1, t 12, x 1 t 12, (11) (12) (13) (14) където T (t) = T L (t) = 2, 8 + 6t, 32, 68 6t, 2, t 2, t 4, t 6, t 8, 8 < t, вж. фигура 2.
Фигура 2 Нека h =.1, =.1. Тогава r = β =.1, 11, 121. Въвеждаме мрежа в n = m = Π = {(x, t) : x 1, t < 12} : x 1 =, x i = = (11 1)h = 12. x 11 (i 1)h, i = 1,, 1 t j t 121 t 1 =, = (j 1), j = 1,, 12, = 12. Не е трудно да съставим съотвения код в програмна среда Maple (вж. уравнения (7)-(1)): restart: with(plots): beta :=.1; L := 1; Tend := 12; h :=.1; :=.1; # initialization Maple code
r := *beta/h^2; n := trunc(l/h)+1; m := trunc(tend/)+1; for i from 1 to n do x[i] := (i-1)*h: for j from 1 to m do t[j] := (j-1)*: #the grid constructor # initial and boundary conditions T[] := t-> piecewise(t <= 2 or 8 <= t, 2, 2 <= t and t <= 4, 8+6*t, 4 <= t and t <= 6, 32, 6 <= t and t <= 8, 68-6*t): T[L] := t-> piecewise(t <= 2 or 8 <= t, 2, 2 <= t and t <= 4, 8+6*t, 4 <= t and t <= 6, 32, 6 <= t and t <= 8, 68-6*t): g := x -> 2: # FTCS scheme for i from 1 to n do u[i, 1] := g(x[i]): for j from 1 to m do u[1, j] := T[](t[j]): u[n, j] := T[L](t[j]): for j from 1 to m-1 do for i from 2 to n-1 do u[i, j+1] := u[i, j]+r*(u[i-1, j]-2*u[i, j]+u[i+1, j]): #results seq(x[i], i = 1.. n); seq(u[i, m], i = 1.. n); pointplot([seq(x[i], i = 1.. n)], [seq(u[i, m], i = 1.. n)], connect = true, style = pointline, color = red); end Maple code В следващата таблица са представени някои резултати при различни стойности на Tend:
Tend = 4 Tend = 6 Tend = 8 Tend = 12 Анимация на получената апроксимация на решението (right clic and choose to open the figure in new tab):
Матрично решение: Да положим: u 1 1 u 2 1 u 1 3 1 u 4 1 1/4 1/2 1/4 u 1/4 1/2 1/4 5 1 A =, u 1 = u 6 1, където: u i,1 = 2, i = 1,, 11. Лесно пресмятаме Отново, използвайки началните условия u 2,1 = T ( t 2 ) и u n,1 = T L ( t 2 ) пресмятаме и т.н. = A. u 2 u 1 = A. u 3 u 2 1/4 1/2 1/4 1 u 7 1 u 8 1 u 9 1 u 1 1 u 11 1 Maple code
restart: with(plots): beta :=.1; L := 1; Tend := 12; h :=.1; :=.1; r := *beta/h^2; n := trunc(l/h)+1; m := trunc(tend/)+1; # initialization for i from 1 to n do x[i] := (i-1)*h: for j from 1 to m do t[j] := (j-1)*: #the grid constructor # initial and boundary conditions T[] := t-> piecewise(t <= 2 or 8 <= t, 2, 2 <= t and t <= 4, 8+6*t, 4 <= t and t <= 6, 32, 6 <= t and t <= 8, 68-6*t): T[L] := t-> piecewise(t <= 2 or 8 <= t, 2, 2 <= t and t <= 4, 8+6*t, 4 <= t and t <= 6, 32, 6 <= t and t <= 8, 68-6*t): g := x -> 2: A := n -> Matrix(n, scan = band[1, 1], [[seq(r, i = 1.. n-2), ], [1, seq(1-2*r, i = 1.. n-2), 1], [, seq(r, i = 1.. n-2)] ]): U := Matrix(n, m): # FTCS scheme (matrix form). The tridiagonal matrix for i from 1 to n do U[i, 1] := g(x[i]): for j from 2 to m do U[1, j-1] := T[](t[j-1]): U[n, j-1] := T[L](t[j-1]): U[1.. n, j] := A(n).U[1.. n, j-1]: # FTCS scheme (matrix form). Iterations end Maple code
На следните фигури са изобразени точките {( x i, u i j ) : i = 1,, 11} за различни стойности на j. Maple code J:=25: pointplot([seq(x[i], i = 1.. n)], [seq(u[i, J], i = 1.. n)], color = red); J:=75: pointplot([seq(x[i], i = 1.. n)], [seq(u[i, J], i = 1.. n)], color = red); end Maple code Забележка (Устойчивост, von Neumann). Нека допуснем, че решението на диференчното уравнение (7) има вида ( {i {\boldsymbol i} е имагинерната еденица)
u i j = e iiβh e jr. Да разгледаме поведението на това решение при. j Последно модифициране: вторник, 29 ноември 216, 15:1 Moodle документация за тази страница Вие сте влезли в системата като Светослав Ненов (Изход) Диференчни схеми