
Математические основы моделирования сложных физических систем
.pdf
непрерывных функций линейных в пределах элементов с изломами в узлах и определяемых своими узловыми значениями ui ,i =1,2, ,n . Каждую из таких функций можно изобразить в виде ломаной линии, начинающейся в точке
x = 0 , проходящей через домик в узле i и заканчивающейся в точке x = 1.
1.3. Метод Галеркина
Остается определить ui в аппроксимции решения (1.26). Это можно сделать по-разному путем приближенного удовлетворения уравнению в
(1.23). Однако, поскольку уравнение в (1.23) содержит вторую производную по u , а уже первая производная по u в (1.26) терпит разрывы непрерывности в узлах, воспользуемся следующим приемом. Обозначим
R(x) = |
d 2u(x) |
q(x) |
|
d 2 x |
|||
|
|
невязку уравнения в (1.23). Точное решение дает R(x) = 0 , и, следовательно,
1 |
(x) |
d 2u(x) |
q(x) dx = 0 |
(1.29) |
|
0 |
d 2 x |
||||
|
|
|
|||
|
|
|
|
для любых функций (x) , которые носят название пробных.
Переход от дифференциального уравнения к интегральной формулировке той же задачи в вычислительной математике называется переходом от коэффициентной к слабой форме. Такой переход существенно расширяет класс решаемых задач, поскольку интеграл, в отличие от производной, может быть взят и от кусочно-непрерывных функций и дельта-
функций.
Подставим аппроксимацию искомого решения (1.26) в интегральное уравнение (1.29) и затем выполним в (1.29) интегрирование по частям с учетом граничного условия (1.24). Тогда вместо (1.29) получим:
20

du
dx
1 |
1 |
d (x) du(x) |
|
|
||
|
q(x) (x) dx = 0. |
(1.30) |
||||
|
|
|
|
|
||
0 |
0 |
dx |
|
dx |
||
|
|
|
||||
|
|
|
|
|
Поскольку разыскивается приближенное решение среди функций семейства с конечным числом параметров в форме (1.26) и для него, как правило,
R(x) 0 , то выполнение тестового условия (1.30) на базе (1.26) для любых
пробных функций невозможно.
Смягчим условие (1.30), потребовав, чтобы оно выполнялось только
для n функций i (x) , которые совпадают с пробными функциями, заданными |
|
выражением (1.28): |
|
(x) = i (x), i =1,2, ,n. |
(1.31) |
Такой прием носит название метода Галеркина. |
|
В интегральное уравнение (1.30) теперь входит первая производная
функции u . Первая производная дискретной аппроксимации функции u
(1.26) имеет вид
|
|
|
du d (x) |
= u1 |
d 1(x) |
u2 |
d 2 (x) |
un |
d n |
(x) |
. |
(1.32) |
||||||||
|
|
|
dx |
|
|
|
dx |
|
dx |
|
dx |
|
dx |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
Подставим эту аппроксимацию производной искомого решения в |
||||||||||||||||||||
равенство (1.30) |
и потребуем его выполнения для каждой из |
n пробных |
||||||||||||||||||
функций (1.28). Тогда вместо (1.30) получим n уравнений |
|
|
|
|||||||||||||||||
|
du 1 |
1 |
|
d i (x) |
n |
d j (x) |
|
|
|
|
|
|
|
|||||||
i |
|
|
|
|
|
|
|
|
u j |
|
|
|
q(x) i (x) |
dx = 0, i = 1, 2, |
, n. (1.33) |
|||||
dx 0 |
|
|
|
dx |
|
dx |
|
|||||||||||||
|
0 |
|
|
j=1 |
|
|
|
|
|
|
|
|
При вычислении первого члена в левой части уравнения (1.30) следует учитывать условия на границах.
В случае нулевых граничных условий вместо (1.24) имеем
u(0) = 0, u(1) = 0. |
(1.34) |
Граничные точки следует исключить из системы уравнений, так как решения
21

на границах известны. Нулевые граничные условия будут выполняться автоматически, если построить аппроксимирующую функцию так, как показано на рисунке 1.3, т.е. искать решение (1.26) только для внутренних узлов. Тогда автоматически
|
1(0) = 0, |
n (1) = 0, i (0) = 0, i |
|
|||||
Таким образом, в случае нулевых граничных условий |
|
|||||||
|
|
|
|
|
|
du |
1 |
(1.35) |
|
|
|
|
|
|
|
= 0 |
|
|
|
|
|
i dx |
||||
|
|
|
|
0 |
|
|||
для всех i в (1.33). |
|
|
|
|
|
|
|
|
После подстановки граничных условий (1.35) в (1.33) получим |
|
|||||||
1 |
d i (x) |
n |
d |
j |
|
|
|
|
|
|
u j |
|
|
|
dx |
q(x) i (x) dx = 0, i. |
(1.36) |
|
dx |
dx |
||||||
0 |
j=1 |
|
|
|
||||
|
|
|
|
|
|
|
Это дает систему линейных алгебраических уравнений относительно u j вида
(1.19) с коэффициентами fij матрицы жесткости:
|
1 d |
i (x) d j (x) |
|
(1.37) |
||||
fij |
= |
|
|
|
|
|
dx, |
|
|
dx |
dx |
||||||
|
0 |
|
|
|
||||
|
|
|
|
|
|
|
|
|
и правую часть матричного уравнения Qi |
|
|
|
|||||
|
|
|
1 |
|
|
|
|
|
|
Qi = |
i (x)q(x)dx. |
(1.38) |
|||||
|
|
|
0 |
|
|
|
|
|
Здесь fij = f ji и матрица K |
симметричная, что характерно |
для метода |
Галеркина.
При ненулевых граничных условиях граничные точки следует включить в сетку узлов, так как решения на границах неизвестны и должны быть найдены.
22

Рисунок 1.4 - Пробные функции для ненулевых граничных условий
Как можно видеть на рисунке 1.4, пробные функции, построенные для граничных узлов, состоят из половинок "домиков":
1 (x) = |
1 (x) = |
|
1 |
(x |
h) |
(x) |
(h |
x); |
|
|
|
|
(1.39) |
|||||||
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
h |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
(x) = |
|
(x) = |
1 |
(x |
x |
h) |
(x |
|
x |
|
) |
(x |
x). |
|
|
(1.40) |
|||
n |
n |
|
|
|
|
|
||||||||||||||
|
|
h |
n |
|
|
|
|
n 1 |
|
n |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Для внутренних узлов "домики" - полные, и пробные функции |
||||||||||||||||||||
определяются по-прежнему выражением (1.28). |
|
|
|
|
|
|
|
|||||||||||||
Вычислим матрицу жесткости при нулевых граничных условиях. Для |
||||||||||||||||||||
простоты примем |
длину |
элементов |
одинаковой и |
равной |
h . Согласно |
|||||||||||||||
рисунку 1.4 и определению функции |
i (1.28), наклон d |
i / dx функции i |
||||||||||||||||||
равен 1 / h на интервале [xi |
1, xi ] , |
1 / h на интервале [xi , xi |
1] и равен нулю |
|||||||||||||||||
для вне этих интервалов. Кроме того, произведение |
(d i |
/ dx)(d j |
/ dx) |
|||||||||||||||||
отлично от нуля |
только |
при |
j = i, j = i |
1, |
когда |
соответствующие |
два |
|||||||||||||
элемента, которые несут на себе функции |
i |
и |
|
j |
, перекрываются (рисунок |
|||||||||||||||
1.4). В противном случае (d |
|
|
i / dx)(d |
|
j / dx) = 0 . |
|
|
|
|
|
|
|
||||||||
Вычислим коэффициенты матрицы K для i |
- той строки. Для узлов на |
|||||||||||||||||||
главной диагонали получим: |
|
|
|
|
|
|
|
|
|
|
|
|
|
23

xi 1 |
d |
i |
(x) 2 |
xi |
1 |
2 |
xi 1 |
||
fii = |
|
|
|
dx = |
|
|
|
dx |
|
|
dx |
|
h |
|
|||||
xi 1 |
|
xi |
1 |
|
xi |
||||
|
|
|
|
|
|
||||
Для узлов cправа от диагонали |
j = i 1 получим |
1 2 dx = 2 . h h
|
|
|
xi |
|
d |
i |
|
|
d |
i |
1 |
|
|
|
xi |
1 |
|
|
1 |
|
|
|
1 |
|
|
||||
f |
|
|
= |
|
|
|
|
|
|
|
dx = |
|
|
|
|
|
|
|
|
|
|
dx = |
|
. |
|||||
i,i |
1 |
|
dx |
|
|
dx |
|
|
|
h |
|
|
h |
|
h |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
xi |
1 |
|
|
|
|
|
|
xi |
1 |
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Для узлов cлева от диагонали j = i |
|
1 получим |
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
xi 1 d |
i |
|
|
d |
i |
1 |
|
|
xi 1 |
1 1 |
|
1 |
|
|
||||||||||||
f |
|
|
= |
|
|
|
|
|
|
dx = |
|
|
|
|
|
|
|
|
|
|
dx = |
|
|
. |
|||||
i,i |
1 |
|
dx |
|
|
dx |
|
|
|
|
|
h |
|
|
h |
h |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
xi |
|
|
|
|
|
|
|
xi |
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Таким образом, получим для внутренних узлов в i |
- той строке |
||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
2 / h, |
|
|
|
|
|
|
j |
|
i, |
|
|
|
||||||||
|
|
|
fij |
|
|
|
|
|
|
1 / h, |
j |
i |
|
1, j |
|
i |
|
1, |
|
(1.41) |
|||||||||
|
|
|
|
|
|
|
|
0, |
|
|
|
|
j |
i |
1, j |
|
|
i |
|
1. |
|
|
|
||||||
Следовательно, матрица K в данном случае оказывается трехдиагональной и |
|||||||||||||||||||||||||||||
имеет размерность (N |
|
2)x(N |
|
|
|
2) , где N -число узлов, считая граничные: |
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
2 |
|
1 |
0 |
|
|
|
|
0 |
|
|
|
|
0 |
|
|
|
|||||
|
|
|
|
|
|
|
|
1 |
|
2 |
1 |
|
|
|
|
0 |
|
|
|
|
0 |
|
|
|
|||||
|
|
|
K |
1 |
|
0 |
|
1 |
2 |
|
1 |
|
|
|
|
|
|
0 |
|
(1.42) |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
h |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
0 |
|
|
1 |
|
2 |
|
|
|
|
|
1 |
|
|
|
|||||
|
|
|
|
|
|
|
|
0 |
|
0 |
|
|
0 |
|
1 |
|
|
|
2 |
|
|
|
Теперь вычисленим матрицу жесткости при ненулевых граничных условиях. При ненулевых граничных условиях граничные точки следует включить в сетку узлов. При прежнем шаге дискретизации это приводит к увеличению числа уравнений на два: в систему уравнений будут добавлены две новые неизвестные - значения смещений в граничных узлах. Это приведет к соответствующему увеличению размерности матрицы K .
На границе x = 0 в соответствии с условиями (1.24) имеем
24

|
|
|
au1, |
i = 1, |
|
du |
|
n |
|
|
= i (0)au(0) = a i (0) u j (0) j (0) = 0, |
i = 2,3, , n, (1.43) |
||
i |
dx 0 |
|||
|
j=1 |
|
и на границе x = 1
|
|
1 |
0, |
i = 1,2, , n |
1, |
|
du |
n |
|
|
|
|
|
|
|
||
|
|
= i (1)au(1) = a i (1) u j (1) j (1) = aun , |
i = n. |
(1.44) |
|
i |
|
|
|||
dx |
|
||||
|
|
j=1 |
|
|
Перепишем систему уравнений (1.33) в более удобном для дальнейщего
рассмотрения в виде
|
|
1 d i (x) |
n |
d j |
(x) |
|
1 |
(1.45) |
|
aun in |
au1 i1 |
|
|
u j |
|
|
dx = |
i (x)q(x)dx, i. |
|
|
dx |
dx |
|||||||
|
|
0 |
j=1 |
|
0 |
|
|||
|
|
|
|
|
|
|
Здесь ij - символ Кронекера.
После подстановки граничных условий (1.43) и (1.44) в (1.45) получим коэффициенты матрицы K :
|
au1 |
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 = |
0 |
|
dx |
|
|
dx |
|
(1.46) |
|||||||||||
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
1 d n (x) d j (x) |
|
|
|
|
|||||||||||||
|
aun |
|
|
|
|
|
|
|
|
|
|
|
|
|
dx, |
i = n, |
j. |
|
|
|
|
|
|
dx |
dx |
|
|||||||||||||
|
0 |
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Следовательно, матрица K в данном случае имеет размерность NxN , |
|||||||||||||||||||
где N - число |
узлов, |
|
|
считая |
граничные. |
Она |
также оказывается |
трехдиагональной, но отличается, помимо размерности, тем, что включает граничные условия в первый и последний члены диагонали:
25

1 ah |
1 |
0 |
|
0 |
0 |
1 |
2 |
1 |
|
0 |
0 |
0 |
1 |
2 |
1 |
|
0 |
K = |
1 |
|
|
|
|
. |
(1.47) |
h |
|
|
|
|
|||
|
0 |
0 |
1 |
2 |
1 |
|
|
|
|
|
|||||
|
|
0 |
0 |
0 |
1 1 |
ah |
|
Теперь займемся вычислением правой части системы уравнений (1.45)
при произвольной нагрузке q(x) .
В случае нулевых граничных условий все узлы с номерами i = 1 и i = n
являются внутренними и имеют окрестности с обоих сторон от узла (рисунок
1.3) правая часть матричного уравнения получается интегрированием по окрестности внутренних узлов. Имеем
xi |
xi |
h |
|
Qi = |
i (xi )q(x)dx |
i (xi )q(x)dx, i. |
(1.48) |
xi h |
xi |
|
|
В случае ненулевых граничных условий для первого и последнего |
|||
узлов имеем |
|
|
|
|
h |
|
|
|
Q1 = 1 (0)q(x)dx, |
(1.49) |
|
|
0 |
|
|
|
xn |
|
|
Qn = |
n (xn )q(x)dx. |
(1.50) |
|
xn h |
|
Вычисление правой части для |
внутренних узлов с номерами |
1 < i < n |
производится по формуле (1.48).
Таким образом, для континуальной задачи метод конечных элементов осуществляет переход к дискретной задаче на основе аппроксимации искомого решения суммой кусочно-полиномиальных функций, отличных от
26
нуля на нескольких соседних элементах, содержащих узел. Затем выполнятся переход от коэффициентной формы дифференциального уравнения к интегральной - слабой форме - с помощью условия невязки. Непрерывность пробных функций позволяет применить метод Галеркина и в процессе соединения элементов в систему сформировать матрицу для всей системы.
Все пробные функции отличны от нуля на разных интервалах, что делает их существенно различными и построенную на их основе при помощи метода Галеркина систему линейных алгебраических уравнений невырожденной.
Более того, матрица оказывается ленточной, и каждое уравнение связывает не более трех неизвестных в соседних узлах.
1.4. Пример вычислительной программы
В Приложении приведен текст вычислительной программы fem1.cpp,
написанной на языке С++ , в котором решается задача о стержне с закрепленными концами составленном из однородных элементов и нагруженном в местах соединения стержней внешними силами,
направленными вдоль оси стержня. В файле входных данных можно задавать число элементов, их размеры и коэффициенты жесткости. На выходе получаются величины смещений узловых точек - мест соединения стержней.
Система линейных алгебраических уравнений решается методом обратной подстановки. Текст программы снабжен подробными комментариями со ссылками на формулы данного раздела.
Чтобы исследовать работу программы с помощью дебагера можно в консоли ввести команду на компилирование и сборку исполняемого модуля с записью информации для дебагирования:
$ g++ fem1.cpp -g -o fem1.bin
Сначала откройте текст программы в редакторе, например, Kate или в
27

каком-либо другом редакторе неформатированного текста с опцией нумерования строк. Затем включите режим дебагирования, введя с консоли команду
$ gdb fem1.bin
Введите точку останова на нужной строке программы, например, на функции main
> break main
и запустите программу на выполнение командой
> run
Для первоначального ознакомления с процессом дебагирования достаточно нескольких команд: n (next) - перейти на следующую стороку, s
(step) - войти внутрь команды, если команда предполагает обращение к функциям, p <var_name> (print) выводит значение переменной, с (continue) -
продолжить выполнение программы и q (quit) - закончить работу в дебагере.
2. НЕОДНОРОДНЫЙ НАГРУЖЕННЫЙ СТЕРЖЕНЬ
2.1. Переход к интегральной форме Рассмотрим задачу
|
d 2u |
|
|
|
|
||
|
|
|
= q(x), |
x [0,1], |
|||
|
d 2 x |
||||||
|
|
du(0) |
|
|
du(1) |
(2.1) |
|
u(0) |
|
= 0, u(1) |
|
= 0. |
|||
|
dx |
|
dx |
||||
|
|
|
|
|
Требуется решить задачу методом конечных элементов, т.е. необходимо получить систему алгебраичесих уравнений
KU = Q, |
(2.2) |
решение которой U дает дискретную аппроксимацию искомого решения u .
Обозначим
28

R(x) = |
d 2u(x) |
q(x) |
|
d 2 x |
|||
|
|
невязку уравнения (2.1). Точное решение дает R(x) = 0 , и, следовательно,
1 |
(x) |
d 2u(x) |
q(x) dx = 0 |
|
0 |
d 2 x |
|||
|
|
|||
|
|
|
для любых функций (x) , которые носят название пробных.
Выполним интегрирование по частям с учетом граничного условия
(2.1) и получим
|
du |
|
1 |
1 d (x) du(x) |
|
1 |
(2.3) |
||||
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
dx |
q(x) (x)dx = 0. |
|
|
dx |
|
0 |
0 dx |
|
dx |
|||||
|
|
|
|
0 |
|
||||||
|
|
|
|
||||||||
Поскольку разыскивается приближенное решение среди функций |
|||||||||||
семейства с конечным числом параметров, для него, как правило, R(x) |
0 , то |
выполнение тестового условия (2.3) для любых пробных функций невозможно. Смягчим условие (2.3), потребовав, чтобы оно выполнялось только для n функций i (x) :
(x) = i (x), i =1,2, , n.
Такой прием носит название метода Галеркина.
2.2. Кусочно-линейные пробные функции
Разобьем интервал x [0,1] на отрезки длиной h так что он будет
содержать n узлов, и будем разыскивать приближенное решение задачи (2.1)
в виде:
u(x) y(x) = y1 1(x) |
y2 |
2 (x) |
yn n (x). |
(2.4) |
где |
|
|
|
|
i (x) = |
i (x) |
i (x), |
|
|
29