Математические основы моделирования сложных физических систем
.pdf
|
|
(x) = |
1 |
(x x h) (x x ) (x |
|
x), |
|||||
|
i |
|
|
|
|||||||
|
|
h |
i |
|
i |
i 1 |
|
|
|||
|
|
|
|
|
|
|
|
|
|||
|
|
(x) = |
|
1 |
(x x h) (x x ) (x |
|
x), |
||||
i |
|
|
|
1 |
|||||||
|
|
|
h |
i |
|
i |
i |
|
|||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
(x) = |
1, |
x 0, |
|
|
|
|
|
|
|
|
|
|
0, |
x < 0. |
|
|
|
В интегральное уравнение (2.3) теперь входит первая производная функции
u . Первая производная дискретной аппроксимации функции u имеет вид
du |
|
dy(x) |
= y1 |
d 1 (x) |
y2 |
d 2 (x) |
yn |
d n |
(x) |
. |
(2.5) |
dx |
|
dx |
dx |
dx |
dx |
||||||
|
|
|
|
|
|
||||||
Подставим эту аппроксимацию производной искомого решения в равенство (2.3) и потребуем его выполнения для каждой из n пробных функций (2.4). Тогда вместо интегрального уравнения (2.3) получим систему n алгебраических уравнений:
|
dy |
|
|
1 |
1 d i (x) n |
|
d j (x) |
1 |
(2.6) |
||
|
|
|
|||||||||
i |
|
|
|
|
|
|
|
y j |
|
dx q(x) i (x)dx = 0, i = 1,2, , n. |
|
dx |
|
|
|
0 dx j=1 |
dx |
||||||
|
|
0 |
|
0 |
|
||||||
|
|
|
|
||||||||
Перепишем систему уравнений (2.6) с учетом граничных условий (2.1)
|
|
|
1 d i (x) |
n |
d |
j (x) |
|
1 |
|
|
(2.7) |
||||||||||||||
y1 |
yn |
|
|
|
|
|
|
|
|
|
|
|
y j |
|
|
|
|
|
dx = i (x)q(x)dx, |
i. |
|||||
|
|
|
|
|
dx |
|
dx |
|
|||||||||||||||||
|
|
|
0 |
|
|
|
j=1 |
|
|
|
0 |
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
Получим коффициенты матрицы K |
|
|
|
|
|
|
|||||||||||||||||||
|
|
y1 |
|
1 d 1 (x) d |
j (x) |
dx, |
i = 1, |
j; |
|
|
|||||||||||||||
|
|
|
0 |
|
|
|
dx |
|
|
|
|
dx |
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 d i (x) d j (x) |
dx, |
|
|
i = 2,3, , n |
1, |
j; |
|
|||||||||||||||
fij = |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(2.8) |
||||||
|
|
0 dx |
|
|
dx |
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
yn |
|
|
1 d n (x) d |
j |
(x) |
dx, |
i = n, |
j. |
|
|
|||||||||||||
|
|
|
|
0 |
|
dx |
|
|
|
|
|
dx |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
30
Матрица K имеет размерность nxn , где n - число узлов, считая
граничные. Она также оказывается трехдиагональной и включает граничные условия в первый и последний члены главной диагонали:
1 h |
1 |
0 |
|
0 |
0 |
1 |
2 |
1 |
|
0 |
0 |
0 |
1 |
2 |
1 |
|
0 |
K = |
1 |
|
|
|
|
. |
(2.9) |
h |
|
|
|
|
|||
|
0 |
0 |
1 |
2 |
1 |
|
|
|
|
|
|||||
|
|
0 |
0 |
0 |
1 |
1 h |
|
Теперь займемся вычислением правой части системы уравнений (2.7) |
|||||||
при произвольной нагрузке q(x) . |
|
|
|
|
|
||
Для первого и последнего узлов имеем |
|
|
|
||||
|
|
|
h |
|
|
|
|
|
|
Q1 = |
1 (x)q(x)dx, |
|
(2.10) |
||
|
|
|
0 |
|
|
|
|
|
|
|
xn |
|
|
|
|
|
|
Qn = |
|
n (x)q(x)dx. |
|
(2.11) |
|
|
|
|
xn |
h |
|
|
|
Вычисление правой части для внутренних узлов производится по формуле |
|||||||
xi |
|
|
|
xi h |
|
|
|
Qi = |
i (xi )q(x)dx |
i (xi )q(x)dx,1 < i < n. |
(2.12) |
||||
xi h |
|
|
|
xi |
|
|
|
2.3. Контрольный пример
31
Рисунок 2.1 - Точное решение - сплошная кривая, крестики - решение методом
конечных элементов
В качестве контрольного примера решим методом конечных
элементов задачу (2.1) при q(x) = |
2 , a0 = a1 =1: |
|
||||||
|
d 2u |
= 2, |
x |
[0,1], |
||||
|
d 2 x |
|||||||
|
|
du |
|
|
|
du |
(2.13) |
|
u(0) = |
(0), u(1) = |
(1), |
||||||
|
|
|||||||
|
|
dx |
|
|
dx |
|
||
имеющую точное аналитическое решение |
|
|
|
|||||
|
u(x) = x2 |
x |
1. |
|
||||
Пусть шаг дискретизации h = 0.1, тогда n = 11. Вычисления интегралов выполним вручную, а для решения получившейся в результате вычисления системы уравнений (2.2) применим пакет SCILAB.
По формулам (2.9) - (2.12) получаем систему алгебраических уравнений
32
(2.2) в виде:
1.1 |
1 |
0 |
|
0 |
0 |
y1 |
0.01 |
1 |
2 |
1 |
|
0 |
0 |
y2 |
0.02 |
0 |
1 |
2 |
1 |
|
0 |
|
|
|
|
|
|
|
|
= |
(2.14) |
0 |
0 |
|
1 |
2 |
1 |
y10 |
0.02 |
0 |
0 |
|
0 |
1 |
0.9 |
y11 |
0.01 |
Воспользуемся математическим пакетом SCILAB, чтобы решить эту
систему уравнений.
Текст программы:
K = [
1.1 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 0 -1 2 -1
0 0 0 0 0 0 0 0 0 -1 0.9];
q = -0.01*[1 2 2 2 2 2 2 2 2 2 1]; sol = inv(K)*q';
x = linspace(0,1,11); u = 1 + x + x*x;
scf(1), plot(x,u, x,sol,'+'), xlabel('x'), ylabel('u,y')
33
На рисунке 2.1 приведены результаты работы программы, из которых видно, что решение, найденное методом конечных элементов, на графике совпадает с точным.
2.4. Нормированные пробные функции
На сетке с равномерным шагом дискретизации на интервале x [0,1]
определим функции
|
2 |
(x x h), |
x [x , x h], |
|
|
|
|
|
|||
i (x) = |
h2 |
i |
i |
i |
(2.15) |
|
|
0, |
x [xi , xi |
h], xi |
1, |
|
2 |
(x x h), |
x [x h, x ], |
|
|
|
|
|
|||
i (x) = |
h2 |
i |
i |
i |
(2.16) |
|
|
0, |
x [xi h, xi ], xi |
0. |
|
Определим пробную функцию на сетке выражением
i |
(x), |
i = 1; |
|
i (x) = i (x) |
i (x), i |
1, n; |
(2.17) |
i |
(x), |
i = n. |
|
Эти функции нормированы на единицу
1 |
1 |
1 |
|
i (x)dx = |
i (x)dx = |
(x)dx = 1. |
(2.18) |
0 |
0 |
0 |
|
Производная пробной функции дается выраженниями
d |
|
|
2 |
, |
x [xi |
, xi |
h], |
|
|
i |
= |
|
h2 |
(2.19) |
|||||
dx |
|
|
|
|
|
||||
|
0, |
|
x [xi , xi |
h], xi 1, |
|
||||
|
|
|
|
|
|||||
34
d |
|
|
2 |
, |
x [xi |
h, xi |
], |
|
i |
= |
h2 |
(2.20) |
|||||
dx |
|
|
|
|
||||
|
0, |
|
x [xi h, xi ], xi 0. |
|
||||
|
|
|
|
|
||||
Пусть y(xi ) - сеточная функция, аппроксимирующая значения u(x) в
узлах x = xi . В окрестности узла используем аппроксимацию:
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u(x) y(xi ) |
|
(x |
xi ) |
|
|
|
(x |
|
xi ) yx (xi ) |
(xi |
x) yx (xi ) |
(2.21) |
|||||||||
|
|
|
i=1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Здесь |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
y |
|
|
(x ) = |
1 |
|
( y(x |
) y(x ) , |
|
|
|
|
|||||||
|
|
|
x |
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
i |
h |
|
i 1 |
|
i |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
- производная сеточной функции в узле xi , взятая в направлении назад, |
|||||||||||||||||||||
|
|
|
y |
|
|
(x ) = |
|
1 |
y(x ) y(x |
) , |
|
|
|
|
|||||||
|
|
|
x |
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
i |
|
h |
|
i |
|
i 1 |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
- производная сеточной функции в узле xi , |
взятая в направлении вперед. |
||||||||||||||||||||
Тогда аппроксимация производной решения в окрестности узла xi |
справа и |
||||||||||||||||||||
слева от него имеет вид |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
du |
(x , x) |
|
|
|
|
(x |
|
x ) y |
|
(x ) |
(x |
|
x) y |
|
(x ) |
(2.22) |
||||
|
|
|
|
|
|
|
x |
|
x |
||||||||||||
|
dx |
i |
|
|
|
|
|
|
|
|
i |
i |
|
i |
|
i |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Здесь (x) - функция Хэвисайда.
Переход к интегральной форме полностью аналогичен 2.1. Подставим аппроксимацию производной искомого решения (2.22) в интегральное уравнение (2.3) и потребуем его выполнения для каждой из пробных функций
(2.17). Тогда вместо (2.3) получим n уравнений
|
du |
|
1 |
1 |
|
|
|
|
1q(x) |
|
|
|
||
|
|
d i |
(x) |
du |
|
(x , x)dx = |
|
(x)dx, i = 1,2, , n. |
(2.23) |
|||||
|
|
|
|
|
|
|
|
|
||||||
i dx |
|
0 |
0 |
dx |
|
dx |
i |
0 |
i |
|
|
|||
|
|
|
|
|
||||||||||
Здесь индекс i функции |
i (x) |
соответствует номеру строки матричного |
||||||||||||
35
уравнения, интегрирование ведется по окрестности узла xi с тем же номером,
что и номер строки, в интервале x |
[xi 1, xi 1] |
для внутренних узлов i 1, n , а |
||
для первого и последнего узлов |
- в интервалах x |
[x1, x2 ] и |
x [xn 1, xn ] |
|
соответственно. |
|
|
|
|
2.5. Матричные коэффициенты |
|
|
|
|
Подставим в (2.23) выражения для i , |
d / dx |
и du / dx |
и вычислим |
|
матричные коэффициенты построчно. Для упрощения дальнейших выкладок
обозначим yi |
y(xi ) . |
|
|
|
|
|
|
|
|
|
|
|
|
|
Для первой строки имеем |
|
|
|
|
|
|
|
|
|
|||||
|
h |
d |
1 |
|
du |
|
2 |
|
h |
2 y |
y |
|||
|
(0)a y |
|
(x) |
|
(0, x)dx = |
|
a y |
|
|
|
2 |
1 |
dx. |
|
|
|
|
|
|
|
h2 |
|
|||||||
1 |
0 1 |
dx |
|
dx |
|
h2 0 1 |
0 |
h |
||||||
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Матричные коэффициенты f1 j для первой строки не равны нулю только в первых двух столбцах:
f |
= |
2 |
a |
2 |
, f = |
2 |
, f |
= 0, j > 2. |
(2.24) |
|
h2 |
h2 |
|||||||
11 |
|
h 0 |
12 |
1 j |
|
|
|||
Для последней n -той строки имеем
|
1 |
d |
n |
|
du |
|
2 |
|
|
1 2 y |
y |
||||
|
(1)a y |
|
(x) |
|
(1, x)dx = |
|
a y |
|
|
|
|
n |
n 1 |
dx. |
|
|
|
|
|
|
|
|
h2 |
|
|||||||
n |
1 n |
dx |
dx |
|
h2 1 |
n |
1 h |
h |
|||||||
|
1 h |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Матричные коэффициенты fnj для последней строки не равны нулю только в двух последних столбцах:
f |
|
= a |
2 |
2 |
, f |
|
= |
2 |
, f |
|
= 0, j < n 1. |
(2.25) |
|
|
|
|
h2 |
|
h2 |
|
|||||||
|
nn |
1 h |
|
|
n,n 1 |
|
|
nj |
|
|
|||
Для строк с номерами 1 < i < n имеем
xi |
d |
i |
(x) yx dx |
xi |
h d |
i |
(x) yx dx = |
|
x h |
dx |
x |
|
dx |
||||
i |
|
i |
||||||
|
|
|
|
|
|
|
||
i |
|
|
|
i |
|
|
|
|
36
xi |
2 |
|
yi |
yi 1 |
|
xi |
h |
2 |
|
yi 1 |
yi |
|
|
|
dx |
|
|
|
dx. |
||||||
x h h2 |
h |
x |
|
h2 |
|
h |
|
|||||
|
|
|
|
|
||||||||
i |
|
|
|
|
|
i |
|
|
|
|
|
|
Матричные коэффициенты для этих строк не равны нулю в главной диагонали и еще двух столбцах - перед и после главной диагонали:
4 |
|
|
2 |
|
|
(2.26) |
|
fii = |
|
, fi,i 1 |
= fi,i 1 |
|
, fij |
= 0,i 1 < j < i 1. |
|
h2 |
h2 |
||||||
Следовательно, матрица K в данном случае имеет размерность |
nxn , |
||||||
где n - число узлов, считая граничные. Она оказывается трехдиагональной и включает граничные условия в первый и последний члены диагонали:
1 a0h |
1 |
0 |
|
0 |
0 |
1 |
2 |
1 |
|
0 |
0 |
0 |
1 |
2 |
1 |
|
0 |
K = |
2 |
|
|
|
|
. |
(2.27) |
|
|
|
|
|
|||
h2 |
|
|
|
||||
|
0 |
0 |
1 |
2 |
1 |
|
|
|
0 |
0 |
0 |
1 1 |
a1h |
|
|
Вычислим правую часть матричного уравнения. Согласно (2.23), вектор правой части дается выражениями
h
q1 = q(x) 1 (x)dx, i = 1;
0 |
|
|
|
xi |
xi h |
|
|
qi = |
q(x) i (x)dx |
q(x) i (x)dx,1 < i < n; |
(2.28) |
xi |
h |
xi |
|
h |
|
|
|
qn = q(x) n (x)dx, i = n. |
|
||
1 |
h |
|
|
Из сравнения матриц жесткости и правых частей, вычисленных с нормированными базовыми функциями (формулы (2.27) и (2.28)) и с ненормированными базовыми функциями видно (формулы (2.8) и (2.12)), что
37
в обоих случаях мы получим тоже самое матричное уравнение (2.2), к
решению которого сводится поставленная задача (2.1).
2.6. Пример вычислительной программы
В Приложении приведен текст вычислительной программы fem2.cpp,
написанной на языке С++, в котором решается задача (1.23) об однородном стержне с закрепленными концами нагруженном внешними силами,
направленными вдоль оси стержня и непрерывно меняющимися по величине.
Функцию нагрузки q(x) в правой части уравнения (1.23) можно задавать в тексте программы. Число узлов при дискретизации задачи также задается в тексте программы. На выходе получаются величины смещений узловых точек. Рекомендуется протестировать программу по какому-либо точному решению u(x) , получив для него функцию нагрузки q(x) . Примеры таких точных решений приведены в тексте программы.
Чтобы протестировать программу, решим континуальную задачу об однородном стержне с закрепленными концами (1.23):
d 2u = q(x), u(0) = u(1) = 0. d 2 x
Программа, реализующая вычислительный алгоритм для этой задачи,
приведена в Приложении и состоит из текста программы на С++ в файле fem3.cpp и хедерного файла fem3.h.
Чтобы протестировать программу, решим контрольный пример. Пусть решение имеет вид:
u(x) = x3 x.
Очевидно, что это решение удовлетворяет граничным условиям задачи.
Подставив это решение в уравнение, получим правую часть этого уравнения
38
для нашей тестовой задачи
q(x) = 6x.
В тексте программы fem3.cpp введем найденную правую часть в функцию fun_q() . В функции main() зададим число узлов knots_N . В функции output() организуем вывод приближенного решения и точного решения для соответствующих узлов в текстовый файл с именем results.dat.
3. СТАЦИОНАРНАЯ ДИФФУЗИЯ-КОНВЕКЦИЯ
3.1. Дискретизация задачи Пусть коэффициенты дифференциального уравнения зависят от
координаты x , а само уравнение имеет вид
|
d |
D(x) |
du |
|
|
C(x) |
du |
A(x)u = q(x), x [0,1], |
(3.1) |
||
|
dx |
dx |
dx |
||||||||
|
|
|
|
|
|
|
|||||
с граничными условиями |
|
|
|
|
|
|
|||||
|
|
au = D(x) |
du |
, x = 0; au = D(x) |
du |
, x = 1. |
(3.2) |
||||
|
|
dx |
dx |
||||||||
|
|
|
|
|
|
|
|
|
|
||
Такое уравнение может возникает в задачах диффузии или теплопроводности. В случае диффузии D - коэффициент диффузии, C -
коэффициент конвекции, A - коэффициент поглощения, и эти коэффициенты могут зависеть от координаты x , но не зависят от самого решения, что и делает задачу линейной.
Произведем дискретизацию так же, как и в предыдущем случае.
Согласно схеме метода конечных элементов, разобьем интервал [0,1] на элементы, соединенные в узлах xi , i =1,2, ,n (рисунок 1.4). Будем разыскивать приближенное решение задачи (3.1), (3.2) среди функций семейства с конечным числом параметров в виде (1.26).
39
