- •Москва, июль 2013
- •1. Введение.
- •2. Случай переменных коэффициентов.
- •4.2. Программа на С++ расчета цилиндрической оболочки.
- •ПРОГРАММА НА С++ (РАСЧЕТ ЦИЛИНДРА):
- •4.3. Программа на С++ расчета сферической оболочки (переменные коэффициенты).
- •5. Второй вариант метода «переноса краевых условий» в произвольную точку
- •6. Метод дополнительных краевых условий.
- •7. Формула для начала счета методом прогонки С.К.Годунова.
- •8. Второй алгоритм для начала счета методом прогонки С.К.Годунова.
- •9. Замена метода численного интегрирования Рунге-Кутта в методе прогонки С.К.Годунова.
- •10. Метод половины констант.
- •11. Применяемые формулы ортонормирования.
- •12. Вывод формул, позаимствованный из «Теории матриц» Гантмахера.
- •ЛИТЕРАТУРА
- •13. Метод Вольтерра. (P.S. 28 февраля 2010):
- •16. 18 сентября 2010: Еще кой о чем вспомнил – вычисление матрицы Коши методами типа Рунге-Кутта.
- •17. 19 сентября 2010: еще об ускорении вычислений – применение «параллельных»
- •19. 02 октября 2011: Авторство.
- •20.2. Программа на С++ расчета цилиндра.
- •ПРОГРАММА НА С++ (ЦИЛИНДР):
- •21. 19 декабря 2012: Случай переменных коэффициентов (ошибка).
- •До статьи моего отца это можно было делать так:
- •Новый материал (ошибка):
- •17 июля 2013: Исправление ошибок.
- •19 июля 2013: Исправление исправленного.
37
angle=start_angle;//начальное значение угловой координаты for(int ii=0;ii<=100;ii++){
Moment[ii]+=Y[ii][4]*( nju*nn2/sin(angle)/sin(angle))+Y[ii][5]*(nju/tan(angle))+Y[ii][6]*(1.0);//Момент M1 в
точке [ii]
angle+=step;
//U[2][4]= nju*nn2/sin(start_angle)/sin(start_angle);
//U[2][5]=nju/tan(start_angle); //U[2][6]=1.0; Момент
}
}//ЦИКЛ ПО ГАРМОНИКАМ ЗДЕСЬ ЗАКАНЧИВАЕТСЯ
for(int ii=0;ii<=100;ii++){ fprintf(fp,"%f\n",Moment[ii]);
}
fclose(fp);
printf( "PRESS any key to continue...\n" ); _getch();
return 0;
}
5. Второй вариант метода «переноса краевых условий» в произвольную точку
интервала интегрирования.
Этот вариант метода еще не обсчитан на компьютерах.
Предложено выполнять интегрирование по формулам теории матриц [Гантмахер] сразу от некоторой внутренней точки интервала интегрирования к краям:
Y(0) = K(0←x) ∙ Y(x) + Y*(0←x) ,
Y(1) = K(1←x) ∙ Y(x) + Y*(1←x) .
Подставим эти формулы в краевые условия и получим:
U∙Y(0) = u,
U∙[ K(0←x) ∙ Y(x) + Y*(0←x) ] = u,
38
[ U∙ K(0←x) ] ∙ Y(x) = u - U∙Y*(0←x) .
и
V∙Y(1) = v,
V∙[ K(1←x) ∙ Y(x) + Y*(1←x) ] = v,
[ V∙ K(1←x) ] ∙ Y(x) = v - V∙Y*(1←x) .
То есть получаем два матричных уравнения краевых условий, перенесенные в рассматриваемую точку x:
[ U∙ K(0←x) ] ∙ Y(x) |
= u - U∙Y*(0←x) , |
[ V∙ K(1←x) ] ∙ Y(x) |
= v - V∙Y*(1←x) . |
Эти уравнения аналогично объединяются в одну систему линейных алгебраических уравнений с квадратной матрицей коэффициентов для нахождения решения Y(x) в любой рассматриваемой точке x:
|
U K(0 x) |
|
∙ Y(x) = |
u - U Y*(0 x) |
. |
|
|
||||
|
V K(1 x) |
|
v - V Y* (1 x) |
||
|
|
|
|
||
|
|
|
|
|
|
В случае «жестких» дифференциальных уравнений предлагается следующий алгоритм.
Используем свойство перемножаемости матриц Коши:
K(x i ←x) = K(x i ←x i 1 ) ∙ K(x i 1 ←x i 2 ) ∙ … ∙ K(x 2 ←x1 ) ∙ K(x1 ←x)
и запишем выражения для матриц Коши, например, в виде:
K(0←x) = K(0←x 2L ) ∙ K(x 2L ←x1L ) ∙ K(x1L ←x),
K(1←x) = K(1←x 3R ) ∙ K(x 3R ←x 2R ) ∙ K(x 2R ←x1R ) ∙ K(x1R ←x),
39
Тогда перенесенные краевые условия можно записать в виде:
[ U∙ K(0←x 2L ) ∙ K(x 2L ←x1L ) ∙ K(x1L ←x) ] ∙ Y(x) = u - U∙Y*(0←x) ,
[ V∙ K(1←x 3R ) ∙ K(x 3R ←x 2R ) ∙ K(x 2R ←x1R ) ∙ K(x1R ←x) ] ∙ Y(x) = v - V∙Y*(1←x)
или в виде:
[ U∙ K(0←x 2L ) ∙ K(x 2L ←x1L ) ∙ K(x1L ←x) ] ∙ Y(x) = u* ,
[ V∙ K(1←x 3R ) ∙ K(x 3R ←x 2R ) ∙ K(x 2R ←x1R ) ∙ K(x1R ←x) ] ∙ Y(x) = v* .
Тогда рассмотрим левое перенесенное краевое условие:
[ U∙ K(0←x |
2L ) ∙ K(x 2L ←x1L ) ∙ K(x1L ←x) ] ∙ Y(x) |
= u* , |
|
[ U∙ K(0←x |
2L ) ] ∙ { K(x 2L ←x1L ) ∙ K(x1L ←x) ∙ Y(x) } = u* , |
||
[ матрица ] ∙ { |
вектор |
} = вектор . |
|
Эту группу линейных алгебраических уравнений можно подвергнуть построчному ортонормированию, которое сделает строчки [матрицы] ортонормированными, {вектор}
затронут не будет, а вектор получит преобразование. То есть получим:
[ U∙ K(0←x 2L ) ] орто ∙ { K(x 2L ←x1L ) ∙ K(x1L ←x) ∙ Y(x) } = u* орто .
Далее последовательно можно записать:
[[ U∙ K(0←x 2L ) ] орто ∙ K(x 2L ←x1L ) ] ∙ { K(x1L ←x) ∙ Y(x) } = u* орто ,
[ матрица ] ∙ { вектор } = вектор .
Аналогично и эту группу линейных алгебраических уравнений можно подвергнуть построчному ортонормированию, которое сделает строчки [матрицы]
ортонормированными, {вектор} затронут не будет, а вектор получит преобразование. То есть получим:
40
[[ U∙ K(0←x 2L ) ] орто ∙ K(x 2L ←x1L ) ] орто ∙ { K(x1L ←x) ∙ Y(x) } = u* 2 орто ,
Далее аналогично можно записать:
[[[ U∙ K(0←x 2L ) ] орто ∙ K(x 2L ←x1L ) ] орто ∙ K(x1L ←x) ] ∙ { Y(x) } = u* 2 орто ,
[ матрица ] ∙ { вектор} = вектор .
Аналогично и эту группу линейных алгебраических уравнений можно подвергнуть построчному ортонормированию, которое сделает строчки [матрицы]
ортонормированными, {вектор} затронут не будет, а вектор получит преобразование. То есть получим:
[[[ U∙ K(0←x 2L ) ] орто ∙ K(x 2L ←x1L ) ] орто ∙ K(x1L ←x) ] орто ∙ Y(x) = u* 3 орто .
Аналогично можно проортонормировать матричное уравнение краевых условий и для правого края независимо от левого края.
Далее проортонормированные уравнения краевых условий:
[ U∙ K(0←x) ] 3 орто |
∙ Y(x) |
= u* 3 орто , |
[ V∙ K(1←x) ] 4 орто |
∙ Y(x) |
= v* 4 орто |
как и ранее объединяются в одну обычную систему линейных алгебраических уравнений с квадратной матрицей коэффициентов для нахождения искомого вектора Y(x) :
|
U K(0 x) 3орто |
|
|
|
u* |
орто |
|
|
|
|
|
||||
|
|
|
|
∙ Y(x) = |
3 |
. |
|
|
V K(1 x) 4 орто |
|
|
v*4 |
орто |
||
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
6. Метод дополнительных краевых условий.
Этот метод еще не обсчитан на компьютерах.
Запишем на левом крае ещё одно уравнение краевых условий:
41
M ∙ Y(0) = m .
В качестве строк матрицы M можно взять те краевые условия, то есть выражения тех физических параметров, которые не входят в параметры краевых условий левого края L или линейно независимы с ними. Это вполне возможно, так как у краевых задач столько независимых физических параметров какова размерность задачи, а в параметры краевых условий входит только половина физических параметров задачи. То есть, например, если рассматривается задача об оболочке ракеты, то на левом крае могут быть заданы 4
перемещения. Тогда для матрицы М можно взять параметры сил и моментов, которых тоже
4, так как полная размерность такой задачи – 8. Вектор m правой части неизвестен и его надо найти и тогда можно считать, что краевая задача решена, то есть сведена к задаче Коши, то есть найден вектор Y(0) из выражения:
U |
|
∙ Y(0) = |
u |
, |
|
M |
m |
||||
|
|
|
то есть вектор Y(0) находится из решения системы линейных алгебраических уравнений с квадратной невырожденной матрицей коэффициентов, состоящей из блоков U и M.
Аналогично запишем на правом крае ещё одно уравнение краевых условий:
N ∙ Y(0) = n ,
где матрица N записывается из тех же соображений дополнительных линейно независимых параметров на правом крае, а вектор n неизвестен.
Для правого края тоже справедлива соответствующая система уравнений:

VN 
∙ Y(1) = nv .
Запишем Y(1) = K(1←0) ∙Y(0) + Y*(1←0) и подставим в последнюю систему линейных алгебраических уравнений:
42

VN 
∙ [ K(1←0) ∙Y(0) + Y*(1←0) ] = nv ,
V |
|
∙ K(1←0) ∙Y(0) = |
v |
- |
|
V |
|
∙ Y*(1←0), |
|
N |
n |
N |
|||||||
|
|
|
|
|
|
|
V |
|
∙ K(1←0) ∙Y(0) = |
v - V Y* (1 0) |
, |
|
|
||||
|
N |
|
n - N Y* (1 0) |
||
|
|
|
|
||
|
|
|
|
|
|
V ∙ K(1←0) ∙Y(0) =
N
Запишем вектор Y(0) через обратную матрицу:
Y(0) = 
MU 
-1 ∙ mu
s .
t
и подставим в предыдущую формулу:
|
V |
|
∙ K(1←0) ∙ |
|
U |
|
|
|
-1 |
∙ |
|
u |
|
= |
|
s |
|
. |
|
|
|
|
|
|
|
|
|
||||||||||
|
N |
|
|
M |
|
|
|
|
|
m |
|
|
|
t |
|
|
Таким образом, мы получили систему уравнений вида:
В ∙ |
|
u |
|
= |
|
s |
|
, |
|
|
|
|
|||||
|
m |
|
|
|
t |
|
|
где матрица В известна, векторы u и s известны, а векторы m и t неизвестны.
Разобьем матрицу В на естественные для нашего случая 4 блока и получим:
В11 |
В12 |
|
∙ |
|
u |
|
= |
|
s |
|
, |
|
|
|
|
|
|||||||
В21 |
В22 |
|
|
m |
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43
откуда можем записать, что
В11 ∙ u + B12 ∙ m = s, B21 ∙ u + B22 ∙ m = t.
Следовательно, искомый вектор m вычисляется по формуле:
m = B12 -1 ∙ (s – B11∙ u).
А искомый вектор n вычисляется через вектор t:
t = B21 ∙ u + B22 ∙ m,
n= t + N ∙ Y*(1←0).
Вслучае «жестких» дифференциальных уравнений предлагается выполнять поочередное построчное ортонормирование.
Запишем приведенную выше формулу |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
V |
|
U |
|
|
|
-1 |
|
u |
|
|
|
s |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
∙ K(1←0) ∙ |
|
|
∙ |
|
= |
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
N |
M |
|
|
|
|
|
m |
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|||||
в виде: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
V |
|
∙ K(1←x2) ∙ K(x2←x1) ∙ K(x1←0) ∙ |
|
U |
|
|
|
-1 |
∙ |
|
u |
|
= |
|
s |
|
. |
||||||||||||
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
N |
|
|
M |
|
|
|
|
|
m |
|
|
|
t |
|
|
||||||||||||||
Эту формулу можно записать в виде разделения левой части на произведение матрицы на
вектор: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
V |
|
|
|
|
|
|
U |
|
-1 |
|
u |
|
|
s |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
[ |
|
|
|
∙ K(1←x2) ] |
∙ { K(x2←x1) ∙ K(x1←0) ∙ |
|
|
|
∙ |
|
|
} |
= |
|
|
||
|
N |
|
|
M |
|
m |
t |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
[ |
|
|
матрица |
] |
∙ { |
вектор |
|
|
|
|
|
} |
= вектор |
||||
44
Эту группу линейных алгебраических уравнений можно подвергнуть построчному ортонормированию, которое сделает строчки [матрицы] ортонормированными, {вектор}
затронут не будет, а вектор получит преобразование. То есть получим:
[ |
|
V |
|
∙ K(1←x2) ] орто |
∙ { K(x2←x1) ∙ K(x1←0) ∙ |
|
U |
|
-1 |
∙ |
|
u |
|
} = |
|
s |
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
орто |
|||||
|
N |
|
|
M |
|
|
|
m |
|
? |
||||||||
Здесь следует сказать, что подвектор t подвергать преобразованию не нужно, так как невозможно, так как его первоначальное значение не известно. Но подвектор t нам оказывается и не нужен для решения задачи.
Далее запишем: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
[[ |
|
V |
|
∙ K(1←x2) ] орто |
∙ K(x2←x1)] |
∙ |
{ K(x1←0) ∙ |
|
U |
|
|
|
-1 |
∙ |
|
u |
|
} |
= |
|
s |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
орто |
|||||||||
|
N |
|
M |
|
|
|
|
m |
|
? |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
[ |
|
|
|
матрица |
] |
∙ |
{ |
вектор |
|
|
|
} |
= |
вектор |
|||||||||
Аналогично и эту группу линейных алгебраических уравнений можно подвергнуть построчному ортонормированию, которое сделает строчки [матрицы]
ортонормированными, {вектор} затронут не будет, а вектор получит преобразование. То есть получим:
|
V |
|
|
|
|
|
U |
|
|
|
|
-1 |
|
|
u |
|
s |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
[[ |
|
|
∙ K(1←x2) ] орто ∙ K(x2←x1)] |
орто |
∙ { K(x1←0) ∙ |
|
|
|
|
|
|
∙ |
|
|
|
} = |
|
2 орто . |
N |
|
M |
m |
? |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
И так далее.
В результате поочередного ортонормирования получим:
В орт ∙ |
|
u |
|
= |
|
s |
|
орт |
, |
|
|
|
|
||||||
|
|
m |
|
|
|
t |
|
|
|
В11 |
В12 |
|
орт ∙ |
|
u |
|
= |
|
s |
|
орт |
. |
|
|
|
|
|
||||||||
В21 |
В22 |
|
|
m |
|
|
|
t |
|
|
||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Следовательно, искомый вектор m вычисляется по формуле:
