Пример с матрицей
Связывающее температуры трех соседних узлов сетки с физическими свойствами прилежащих участков пространства, так как значения коэффициентов уравнения зависят от р, k и h:
a=pl/h^2; c=pr/h^2; b=-a-c+k; (4)
Коэффициент а описывает свойства левой части шаблона, а с – правой, а b – обеих вместе. Чуть позже мы увидим, что коэффициент b попадет в диагональ матрицы. Теперь надо примерить шаблон ко всем узлам сетки. Узел номер 1 даст уравнение:
a1U0+b1U1+c1U2=0,
Узел номер 2:
a2U1+b2U2+c2U3=0,
И т. д. Здесь важно следить за индексами. Для простоты пока считаем, что коэффициенты а,, b,, с, не изменяются при переходе от узла к узлу. В узлах сетки вблизи границ (то есть в узле 1 и узле N-1) уравнения упрощаются, так как £/" и UN считаются известными и поэтому перемещаются в правую часть уравнения. Так, первое уравнение системы станет:
b1U1+c1U2=0,
А последнее:
an-1Un-2+bn-1Un=+1=0,
Все остальные уравнения будут иметь вид (3). Теперь пора изобразить всю систему уравнений, используя матричные обозначения и не отображая многочисленные нули. Для простоты будем считать, что N = 5:
b1 | c1 | U1 | -a1U0 | |||
a2 | b2 | c2 | U2 | 0 | ||
a3 | b3 | c3 | U3 | = | 0 | |
a4 | b4 | U4 | -c4U5 |
Вы видите, что матрица системы уравнений имеет характерную регулярную трех-диагональную структуру, а структура вектора правых частей тоже легко прочитывается. Граничные; условия краевой задачи заняли подобающие им крайние места, а внутренние позиции – нули.
Решать такую систему следует специальным методом, который называется методом прогонки и является модификацией метода Гаусса. Он работает во много раз быстрее самого метода Гаусса. Мы реализуем его немного позже, а сейчас попробуем применить алгоритм generate из библиотеки STL для генерации матрицы, имеющей рассмотренную структуру, и вектора решений U. В простых случаях он известен и легко угадывается. Затем с помощью сечений произведем умножение Матрицы на вектор и убедимся в том, что вектор правых частей системы уравнений будет иметь правильную структуру и значения. Эту часть работы рассматривайте как дополнительное упражнение по использованию структур данных типа valarray и slice. В процессе решения краевой задачи мы будем пользоваться контейнерами другого типа (vector), так как метод прогонки не требует применения каких-то особых приемов работы с сечениями.
Если для простоты принять р = 1, h = 1, U0 = 100, a UN =0, то коэффициенты матрицы будут равны ai = сi = 1, bi. = – 2, k = 0, а решение U(x) известно заранее. Это – линейно спадающая от 100 до 0 функция, а в более общем случае – функция произвольных граничных условий:
U(x)=U0+[Un-U0]x/L
Где L – длина всей расчетной области. Правильность решения проверяется прямой подстановкой в уравнение (1).