Решение краевой задачи на графе методом Ритца
Дипломная работа - Математика и статистика
Другие дипломы по предмету Математика и статистика
ующие функции:
, (3.16)
где k - номер ребра, i=1,..,ni-1.
Для удобства дальнейшей работы перенумеруем сплайны, начиная от внутренней вершины вдоль ребер ?1, ?2, ?3, и обозначим их через ?i, i=1,..,n,
n = n1 + n2 + n3 - 2.
После перенумерования базисные функции будут иметь вид:
(3.17)
где k - это номер текущего ребра графа, i = 1,2,.., n1 + n2 + n3 - 2
Рисунок 3.6. Перенумерованные сплайны.
При этом система Ритца будет иметь вид Ay = b, где матрица А имеет портрет, представленный на рисунке 3.7.
Рисунок 3.7. Портрет матрицы.
Элементы матрицы, учитывая вид оператора А, указанный в формуле 1.57,
имеют следующий вид:
(3.18)
Для решения матричного уравнения, в котором матрица имеет портрет, изображенный на рисунке 3.7, воспользуемся специальным методом Гаусса. Будем последовательно исключать переменные, до тех пор, пока не получим верхнетреугольную матрицу. Так как матрица разрежена, то удобно хранить только ненулевые элементы. Здесь можно выделить несколько векторов: главная диагональ (1), диагонали над (2) и под (3) главной, а так же единичные ненулевые элементы над (4, 5) и под (6, 7) главной диагональю. При исключении элементов (3), (6) и (7) автоматически будут заполняться элементы, находящиеся непосредственно под элементами (4) и (5), поэтому необходимо хранить так же и эти вектора. Общая схема представлена на рисунке 3.8.
Рисунок 3.8. Схема хранения элементов матрицы.
4. Описание программы и тестовые расчеты
Метод, приведенный в теоретической части данной работы, реализован с помощью языка программирования Delphi 7.0. Разработанная программа позволяет найти приближенное решение краевой задачи на графе и для модельных задачи с известным точным решением вычислить погрешность приближённого решения.
Для поиска решения необходимо было реализовать, во-первых, алгоритм метода Ритца, и, во-вторых, решить систему линейных уравнений с матрицей специального вида. Вспомогательными действиями являются описание сплайнов на графе, вычисление скалярных произведений, составление матрицы, подсчет интегралов, вывод результатов работы программы в виде, удобном для пользователя.
Входными данными в программу являются длины ребер графа, число точек на каждом из ребер, а так же коэффициент измельчения сетки, от которого зависит точность вычисления интегралов и скалярных произведений. Внутри программы задаются такие параметры как сила натяжения струн и сила упругости.
На выходе пользователь получает несколько видов данных:
а) графики точного и полученного решений для каждой из трех струн, на графиках возможно масштабирование;
б) текстовый файл с сетками по каждому ребру графа;
в) текстовый файл с получившейся матрицей;
г) текстовый файл с правой частью матричного уравнения;
д) текстовый файл с получившимися коэффициентами для метода Ритца.
Основные процедуры и функции.
procedure TForm1.Button1Click(Sender: TObject); - ввод данных с формы. Вводятся длины струн, количество точек разбиения на каждой из струнu_toch(x: real; k: integer): real; - точное решение, найденное предварительно точными методами, необходимо для наглядного представления результатов работы программы; входные параметры : х - точка, значение в которой необходимо вычислить, k - номер рассматриваемой струны; возвращает точное значение в точке х
function f(x: real; k: integer): real; - входные данные, плотность струны; входные параметры : х - точка, значение в которой необходимо вычислить, k - номер рассматриваемой струны; возвращает значение в точке х
function Tt(t: real; k: integer): real; - входные данные, сила натяжения струны; входные параметры : х - точка, значение в которой необходимо вычислить, k - номер рассматриваемой струны; возвращает значение в точке х
function splain(t: real; k, i: integer): real; - описание сплайна 1 степени на струне номер k; входные параметры : t - точка, значение в которой необходимо вычислить, k - номер рассматриваемой струны, i - номер сплайна (соответствует номеру узла, являющегося вершиной) ; возвращает значение в точке t
function Аsplain(t: real; k, i: integer): real; - описание производной по t сплайна 1 степени на струне номер k; входные параметры : t - точка, значение в которой необходимо вычислить, k - номер рассматриваемой струны, i - номер сплайна (соответствует номеру узла, являющегося вершиной) ; возвращает значение в точке t
function skal_pr(p, r, k: integer): real; - вычисление скалярного произведения p-того и r-того сплайнов на k-той струне
function integral(p, k: integer): real; - вычисление правой части; p - номер сплайна, k - номер струны, возвращает значение
procedure sost_sist; - процедура для составления матрицы оператора; работает с глобальными параметрами, заполняет matr[i,j] элементами skal_pr(i,j,k) и вектор правой частиresh_sist; - процедура для решения матричного уравнения методом Гаусса, вычисляет значения коэффициентов метода Ритца
procedure print_vect(vectors: string); - записывает в указанный в параметре файл значения всех векторов на момент вызова, нужна для промежуточного контроля
procedure TForm1.Button2Click(Sender: TObject); - вызывает функции для составления и решения системы линейных уравнений
procedure TForm1.Button3Click(Sender: TObject); - чертит графики точных и полученных решений.
Тестовый пример
Краевая задача для описания формы отклонения системы имеет вид (1.41)-(1.44):
, , (1.41)
, (1.42)
, , (1.43)
. (1.44)
Задачу можно описать в операторном виде: Au=f .
Таким образом, входными данными при решении подобной задачи будут:
) Сила натяжения (на каждой струне)
Tt(x: real; k