85898 (597846), страница 3
Текст из файла (страница 3)
В результате получим эквивалентное уравнение краевых условий на левом крае, но уже с прямоугольной горизонтальной матрицей U размерности 4х8, у которой будут 4 ортонормированные строки:
U ∙Y(0) = u
,
где в результате ортонормирования вектор u преобразован в вектор u .
Как выполнять построчное ортонормирование систем линейных алгебраических уравнений можно посмотреть в [Березин, Жидков].
Дополним прямоугольную горизонтальную матрицу U до квадратной невырожденной матрицы W:
W = ,
где матрица М размерности 4х8 должна достраивать матрицу U до невырожденной квадратной матрицы W размерности 8х8.
В качестве строк матрицы М можно взять те краевые условия, то есть выражения тех физических параметров, которые не входят в параметры левого края или линейно независимы с ними. Это вполне возможно, так как у краевых задач столько независимых физических параметров какова размерность задачи, то есть в данном случае их 8 штук и если 4 заданы на левом крае, то ещё 4 можно взять с правого края.
Завершим ортонормирование построенной матрицы W, то есть выполним построчное ортонормирование и получим матрицу W размерности 8х8 с ортонормированными строками:
W =
.
Можем записать, что
Y (0) = (М
)транспонированная = М
.
Тогда, подставив в формулу метода прогонки С.К.Годунова, получим:
Y(0) = Y (0) ∙с + Y*(0)
или
Y(0) = М ∙с + Y*(0).
Подставим эту последнюю формулу в краевые условия U ∙Y(0) = u
и получим:
U ∙ [ М
∙с + Y*(0) ]= u
.
Отсюда получаем, что на левом крае константы c уже не на что не влияют, так как
U ∙ М
= 0 и остается только найти Y*(0) из выражения:
U ∙ Y*(0) = u
.
Но матрица U имеет размерность 4х8 и её надо дополнить до квадратной невырожденной, чтобы найти вектор Y*(0) из решения соответствующей системы линейных алгебраических уравнений:
∙ Y*(0) =
,
где 0 – любой вектор, в том числе вектор из нулей.
Отсюда получаем при помощи обратной матрицы:
Y*(0) = ∙
,
Тогда итоговая формула для начала вычислений методом прогонки С.К.Годунова имеет вид:
Y(0) = М ∙с +
∙
.
8 Второй алгоритм для начала счета методом прогонки С.К.Годунова
Этот алгоритм обсчитан на компьютерах в кандидатской диссертации.
Этот алгоритм требует дополнения матрицы краевых условий U до квадратной невырожденной:
Начальные значения Y (0), Y
(0), Y
(0), Y
(0), Y*(0) находятся из решения следующих систем линейных алгебраических уравнений:
∙ Y*(0) =
,
∙ Y
(0) =
, где i =
,
,
,
,
где 0 – вектор из нулей размерности 4х1.
9 Замена метода численного интегрирования Рунге-Кутта в методе прогонки С.К.Годунова
Эта замена формул Рунге-Кутта на формулу теории матриц обсчитана на компьютерах в кандидатской диссертации.
В методе С.К.Годунова как показано выше решение ищется в виде:
Y(x) = Y (x) ∙ c + Y*(x).
На каждом конкретном участке метода прогонки С.К.Годунова между точками ортогонализации можно вместо метода Рунге-Кутта пользоваться теорией матриц и выполнять расчет через матрицу Коши:
Y (x
) = K(x
- x
) ∙Y
(x
).
Так выполнять вычисления быстрее, особенно для дифференциальных уравнений с постоянными коэффициентами.
И аналогично через теорию матриц можно вычислять и вектор Y*(x) частного решения неоднородной системы дифференциальных уравнений. Или для этого вектора отдельно можно использовать метод Рунге-Кутта, то есть можно комбинировать теорию матриц и метод Рунге-Кутта.
10 Метод половины констант
Этот метод пока не обсчитан на компьютерах.
Выше было показано, что решение системы линейных обыкновенных дифференциальных уравнений можно искать в виде только с половиной возможных векторов и констант. Была приведена формула для начала вычислений:
Y(0) = М ∙с +
∙
.
Из теории матриц известно, что если матрица ортонормирована, то её обратная матрица есть её транспонированная матрица. Тогда последняя формула приобретает вид:
Y(0) = М ∙с + U
∙u
или
Y(0) = U ∙u
+ М
∙с
или
Y(0) = ∙
,
Таким образом записана в матричном виде формула для начала счета с левого края, когда на левом крае удовлетворены краевые условия.
Далее запишем V∙Y(1) = v и Y(1) = K(1←0) ∙Y(0) + Y*(1←0) совместно:
V∙ [ K(1←0) ∙Y(0) + Y*(1←0) ] = v
V∙ K(1←0) ∙Y(0) = v - V∙Y*(1←0)
и подставим в эту формулу выражение для Y(0):
V∙ K(1←0) ∙ ∙
= v - V∙Y*(1←0).
V∙ K(1←0) ∙ ∙
= p.
Таким образом мы получили выражение вида:
D ∙ = p,
где матрица D имеет размерность 4х8 и может быть естественно представлена в виде двух квадратных блоков размерности 4х4:
∙
= p.
Тогда можем записать:
D1∙ u + D2 ∙ c = p.
Отсюда получаем, что:
c = D2 ∙ ( p - D1∙ u
)
Таким образом, искомые константы найдены.
Далее показано как применять этот метод для решения «жестких» краевых задач.
Запишем
V∙ K(1←0) ∙ ∙
= p.
совместно с K(1←0) = K(1←x2) ∙ K(x2←x1) ∙ K(x1←0) и получим:
V∙ K(1←x2) ∙ K(x2←x1) ∙ K(x1←0) ∙ ∙
= p.
Эту систему линейных алгебраических уравнений можно представить в виде:
[ V∙ K(1←x2) ] ∙ { K(x2←x1) ∙ K(x1←0) ∙ ∙
} = p.
[ матрица ] ∙ { вектор } = вектор
Эту группу линейных алгебраических уравнений можно подвергнуть построчному ортонормированию, которое сделает строчки [матрицы] ортонормированными, {вектор} затронут не будет, а вектор получит преобразование. То есть получим:
[ V∙ K(1←x2) ] {K(x2←x1) ∙ K(x1←0) ∙
} =p
.
И так далее.
В итоге поочередного вычленений матриц слева из вектора и ортонормирования получим систему:
D ∙
= p
,
Отсюда получаем, что:
c = D2 ∙ (p
- D1
∙ u
)
Таким образом, искомые константы найдены.
11 Применяемые формулы ортонормирования
Эти формулы обсчитаны в кандидатской диссертации.
Взято из: Березин И.С., Жидков Н.П. Методы вычислений, том II, Государственное издательство физико-математической литературы, Москва, 1962 г. 635 стр.
Пусть дана система линейных алгебраических уравнений порядка n:
А =
.
Здесь над векторами поставим черточки вместо их обозначения жирным шрифтом.
Будем рассматривать строки матрицы А системы как векторы:
=(
,
,…,
).
Ортонормируем эту систему векторов.
Первое уравнение системы А =
делим на
.
При этом получим:
+
+…+
=
,
=(
,
,…,
),
где =
,
=
,
=1.
Второе уравнение системы заменяется на:
+
+…+
=
,
=(
,
,…,
),
где =
,
=
,
=
-(
,
)
,
=
-(
,
)
.
Аналогично поступаем дальше. Уравнение с номером i примет вид:
+
+…+
=
,
=(
,
,…,
),
где =
,
=
,
=
-(
,
)
-(
,
)
-…-(
,
)
,
=
-(
,
)
-(
,
)
-…-(
,
)
.
Процесс будет осуществим, если система линейных алгебраических уравнений линейно независима.
В результате мы придем к новой системе С =
, где матрица С будет с ортонормированными строками, то есть обладает свойством С*С
= E, где Е – это единичная матрица.
(Таким образом, решение системы можно записать в виде = С
.)
12 Вывод формул, позаимствованный из «Теории матриц» Гантмахера
Система линейных обыкновенных дифференциальных уравнений с постоянными коэффициентами имеет вид:
Y (x) = A Y(x) + F(x). (1)
Разложим Y(x) в ряд Маклорена по степеням x:
Y(x)=Y + Y
x + Y
x
/2! + …, где Y
=Y(0), Y
= Y
(0), … (2).
Из (1) почленным дифференцированием при А=const и F(x)=0 получим:
Y = AY
= A
Y, Y
= A Y
= A
Y, (3)
Положив в (3) x=0 и подставив в (2) получим:
Y(x) = Y + Ax Y
+ A
x
/2! Y
+ … = e
Y
, (4)
где e = E + Ax + A
x
/2! + …, где Е – единичная матрица. (5)
Если принять x=x , то (4) заменится на
Y(x) = e Y(x
), (6)
Рассмотрим случай A=const и F≠0.
Введем в рассмотрение вектор-функцию Ya(x) в виде: Y(x)= e Ya(x). (7)
Продиффренцируем (7) и подставим в (1). Получим:
e Ya
(x) = F(x). (8)
При получении (8) учитывалось, что:
=
= A + A
x + A
x
/2! + … = A e
.
Из (8) следует, что:
Ya(x) = c + . (9)
Подставим в (7) и получаем:
Y(x) = e c + e
. (10)
Положив x=x в (10) получим:
c = e Y(x
). (11)
Окончательно получаем:
Y(x) = e Y(x
) + e
. (12)
Мой отец предложил использовать и другую (гораздо более эффективную по времени счета) матричную формулу вместо матричной экспоненты – что-то на основе Вольтерра. Это есть в статье в журнале «Математическое моделирование»:
Численный метод переноса краевых условий для жестких дифференциальных уравнений строительной механики Журнал "ММ", Том: 14 (2002), Номер: 9, 3 стр. 1409-003r.pdf
Я тут как-то на днях поговорил с отцом и вот что любопытное насчет метода выяснилось.
Когда я сам решал своим методом «переноса краевых условий» «жесткие» краевые задачи, то я в каждой рассматриваемой точке x=x* решал соответствующую систему линейных алгебраических уравнений для нахождения решения Y(x*) в каждой рассматриваемой точке x=x*.
А мой отец утверждает, что «жесткими» бывают только краевые задачи, а начальные задачи «жесткими» не бывают. И поэтому он находил решение Y(x*) в какой-то одной точке x=x* по моему методу, а дальше решал (влево и вправо от рассматриваемой точки x=x*) как задачу Коши (от найденных начальных условий Y(x*) в этой одной точке): Y(x)=K(х←x*)·Y(x*)+Y*(x←x*). И если это так, то так решать, естественно, гораздо быстрее, так как надо только домножать на матрицу Коши (матрициант, матричную экспоненту) вместо решения систем линейных алгебраических уравнений.