Простой пример
Рассмотрим колебательную систему с одной степенью свободы. Тело массы \(m\) соединяется с неподвижным основанием посредством упругой пружины. Его движение происходит в среде с вязким сопротивлением под действием внешней силы (рис. 1.1.).
Рис. 1.1
Для начального момента времени заданы положение тела в пространстве и его начальная скорость. Требуется для каждого момента времени в интервале от \(t_0\) до \(t_{конеч}\) определить перемещение, скорость и ускорение тела.
Поскольку необходимо проиллюстрировать решение нелинейной задачи, будем считать, что сила вязкого сопротивления пропорциональна квадрату относительной скорости концов демпфера (рис. 1.2.б). Сила упругости пружины линейно зависит от смещения (рис. 1.2.а), воздействующая сила имеет синусоидальный характер (рис. 1.2.в).
Рис. 1.2
Зависимости, позволяющие получить дифференциальное уравнение движения, в соответствии со вторым законом Ньютона имеют вид:
\[ma = F^c + F^y + F^в ~~~~~~~~ (1.1)\]или
\[F^с + F^y + F^в + F^u = 0, ~~~~~~~~ (1.2)\]
где с учетом выбранных направлений (рис.1.3):
Рис. 1.3
\[\begin{split}\begin{matrix} F^c=Q \sin \frac{2\pi }{T} t \\ F^у = -kx \\ F^в = -\mu \nu \left | \nu \right | \\ F^u = -ma \end{matrix} ~~~~~~~~ (1.3)\end{split}\]
Здесь \(x\), \(\nu\) и \(a\) - соответственно, перемещение, скорость и ускорение тела.
Подстановка соотношений (1.3) в уравнение (1.2) дает:
\[-kx-\mu \nu\left | \nu \right |-ma+Q\sin\frac{2\pi }{T}t=0 ~~~~~~~~ (1.4)\]
Учитывая, что
\[\nu=\frac{dx}{dt},~~~~~ a=\frac{ d^{2}x}{dt^{2}}, ~~~~~~~~ (1.5)\]
получаем дифференциальное уравнение движения тела:
\[kx+\mu \frac{dx}{dt}\left | \frac{dx}{dt} \right |+m\frac{d^{2}x}{dt^{2}}-Q\sin \frac{2\pi }{T}t=0 ~~~~~~~~ (1.6)\]
Использование численного подхода к интегрированию уравнения (1.6) предполагает нахождение приближенного решения для определенных моментов времени, т.е., временная ось представляется совокупностью точек \(t_0\), \(t_1\) \(t_2\), … \(t_i\), \(t_{i+1}\), … \(t_n\) (рис. 1.4), в каждой из которых ищется приближенное решение уравнения (1.6).
Рис. 1.4
Интегрирование осуществляется последовательно, выбор величины очередного шага \(\Delta t_i\) зависит как от требуемых показателей точности, так и от результатов интегрирования по уже пройденным временным точкам.
Таким образом, использование численного подхода к решению уравнения (1.6) позволяет перейти от непрерывных значений \(x\), \(\nu\), \(a\) на всем промежутке времени от \(t_0\) до \(t_{конеч}\) к совокупности дискретных значений \(x_i\) , \(\nu_i\) , \(a_i\) для определенных моментов времени \(t_i\). При этом алгебраические формулы выбранного метода интегрирования заменяют дифференциальные соотношения (1.5). Так, формулы неявного одношагового метода Штермера устанавливают следующую зависимость для переменных \(x_i\) , \(v_i\) по известным с предыдущего шага значениям \(x_{i-1}\) , \(v_{i-1}\) [1]:
\[\begin{split}\begin{matrix} x_{i}=x_{i-1}+\nu_{i-1}\Delta t_{i}+a_{i}\frac{\Delta t_{i}^{2}}{2}\\ \nu_{i}=\nu_{i-1}+a_{i}\Delta t_{i}, \end{matrix}~~~~~~~(1.7)\end{split}\]
где
\[\Delta t_{i}=t_{i}-t_{i-1},\]\[i=1,n\]
\(t_0\) - начальное время,
\(x_0\), \(\nu_0\) - начальные значения перемещения и скорости,
\(t_n\) - конечное время.
Для начального момента времени \(t_0\) значения \(x_0\) и \(\nu_0\) должны быть известны. Оставляя пока в стороне вопрос выбора величины шага интегрирования \(t_i\), определим значения \(x_1\), \(\nu_1\), \(a_1\) для момента времени \(t_1=t_0+\Delta t_1\).
Уравнение (1.4) для момента времени \(t_i\) имеет вид:
\[kx_{i}+\mu \nu_{i}\left | \nu_{i} \right |+ma_{i}-Q\sin \frac{2\pi }{T}t_{i}=0 ~~~~~~~~ (1.8)\]
Дополняем это соотношение формулами выбранного метода интегрирования (1.7) и получаем для момента времени \(t_1\) замкнутую систему уравнений:
\[kx_{1}+\mu \nu_{1}\left | \nu_{1} \right |+ma_{1}-Q\sin \frac{2\pi }{T}t_{1}=0\]\[x_{1}=x_{0}+\nu_{0}\Delta t_{1}+a_{1}\frac{\Delta t_{1}^{2}}{2} ~~~~~~~~ (1.9)\]\[\nu_{1}=\nu_{0}+a_{1}\Delta t_{1}\]
Приведем полученную систему к одному уравнению, выразив неизвестные \(x_1\) и \(a_1\) через \(\nu_1\):
\[\begin{split}\begin{matrix} a_{1}=\frac{\nu_{1}-\nu_{0}}{\Delta t_{1}}\\ x_{1}=x_{0}+\frac{\nu_{0}+\nu_{1}}{2}\Delta t_{1} \end{matrix}~~~~~~~(1.10)\end{split}\]
Получаем:
\[k(x_{0}+\frac{\nu_{{0}}+\nu_{1}}{2}\Delta t_{1})+\mu \nu_{1}\left | \nu_{1} \right |+m\frac{\nu_{1}-\nu_{0}}{\Delta t_{1}}-Q\sin \frac{2\pi }{T}t_1=0\]
Группируя сомножители при одинаковых степенях неизвестного \(\nu_1\), соотношение (1.11) можно записать в виде:
\[\alpha \nu_{1}\left | \nu_{1} \right |+\beta \nu_{1}+\gamma =0, ~~~~~~~~ (1.12)\]где
\[\alpha =\mu\]\[\beta =\frac{k\Delta t_{1}}{2}+\frac{m}{\Delta t_{1}} ~~~~~~~~ (1.12а)\]\[\gamma =kx_{0}+k\frac{\nu_{0}\Delta t_{1}}{2}-\frac{{m\nu_{0}}}{\Delta t_{1}}-Q\sin \frac{2\pi }{T}t_{1}\]
Заметим, что соотношение (1.12) сохраняет свой вид для любого момента времени ti при соответствующей замене подстрочных индексов (1 на \(i\), 0 на \(i-1\)).
Итак, использование формул метода интегрирования позволяет уйти от дифференциальных соотношений по времени и преобразует исходное дифференциальное уравнение (1.6) к нелинейному уравнению вида (1.12),которое нужно решать на каждом шаге по времени.
Уравнение (1.12) решается методом Ньютона. Позволим себе напомнить последовательность действий при решении нелинейного уравнения методом Ньютона.
Рассматривается уравнение вида:
\[f(z)=0, ~~~~~~~~ (1.13)\]
где \(f(z)\) - нелинейная функция относительно неизвестного z.
Рис. 1.5
Алгоритм численного решения включает следующие шаги:
выбор начального приближения к решению - величины \(z^0\);
2. организация последовательности итераций, на каждой из которых уточняется полученное на предыдущей итерации значение z по схеме (рис. 1.5a):
\[\begin{split}\begin{matrix} z^{j}=z^{j-1}+\Delta z^{j}\\ \Delta z^{j}=-\frac{f(z^{j-1})}{{f}'(z^{j-1})} \end{matrix}~~~~~~~(1.14)\end{split}\]
где \(f(z^{j-1})\) - значение функции f(z) при \(z=z^{j-1}\), \({f}'(z^{j-1})\) - значение производной f(z)/dz при при \(z=z^{j-1}\);
проверка на каждой итерации условия прекращения итераций (рис.1.5б):
\[\left | z^{j}-z^{j-1} \right |=\left | \Delta z^{j} \right |\leq \delta _{z} ~~~~~~~~ (1.15)\]\[\left | f(z^{j}) \right |\leq \delta _{f}\]
где \(\delta _{f}\) - допустимая невязка (отклонение от нуля) правой части уравнения (1.13);
\(\delta _{z}\) - допустимая величина отличия решения на двух соседних итерациях;
проверка ограничения на максимально допустимое количество итераций:
\[j\leq j_{max} ~~~~~~~~ (1.16)\]
Геометрически решение уравнения (1.13) сводится к отысканию абсциссы точки пересечения с осью z кривой f(z). На каждой j-й итерации метода Ньютона решение этой задачи заменяется отысканием точки пересечения касательной к кривой f(z) с осью z, при этом касательная строится для \(z=z^{j-1}\).
Возвращаемся к численному решению уравнения (1.12). Обозначив \(z=\nu_1\), имеем:
\[\alpha z\left | z \right |+\beta z+\gamma =0 ~~~~~~~~ (1.17)\]или
\[f(z)=0,\]где
\[f(z)=\alpha z\left | z \right |+\beta z+\gamma ~~~~~~~~ (1.18)\]
Для решения уравнения (1.17) методом Ньютона нам потребуется выражение для производной функции f(z):
\[{f}'(z)=2\alpha \left | z \right |+\beta ~~~~~~~~ (1.19)\]
Зададимся исходными данными, чтобы подсчитать значения коэффициентов \(\alpha \beta \gamma\) уравнения (1.17):
k = 20000 Н/м,
\[\mu =1000\frac{Hc^{2}}{м^{2}} ,\]m = 0.1 кг,
Q = 1000, T = 0.2π, F = 1000sin 10t,
Начальные условия и шаг интегрирования:
\[x_{0}=0,\nu_{0}=0,\Delta t_{1}=0.001c\]
Тогда, согласно (1.12)
\[\alpha =1000\]\[\beta =\frac{20000\cdot 0.001}{2}+\frac{0.1}{0.001}=110\]\[\gamma =20000\cdot 0+20000\cdot \frac{0\cdot 0.001}{2}-\frac{0.1\cdot 0}{0.001}-1000\sin 0.01=-10\]
Таким образом,
\[f(z)=1000z\left | z \right |+110z-10 ~~~~~~~~ (1.20)\]\[{f}'(z)=2000\left | z \right |+110 ~~~~~~~~ (1.21)\]
Зададим значения допустимых погрешностей для проверки условий (1.15):
\[\delta _{z}=0.001\]\[\delta _{f}=0.1 ~~~~~~~~ (1.22)\]
Максимально допустимое количество итераций примем равным 5.
Начальное приближение к решению выберем
\[z^{0} = 0\]
Первая итерация.
\[z^{1}=z^{0}+\Delta z^{1}\]\[\Delta z^{1}=-\frac{f(z^{0})}{{f}'(z^{0})}=-\frac{1000\cdot 0\cdot 0+110\cdot 0-10}{2000\cdot \left | 0 \right |+110}=0.09091\]\[z^{1}=0+0.09091=0.09091\]
Проверка завершения итераций:
\[\left | \Delta z^{1} \right |>\delta _{z}\]\[f(z^{1}) = 1000\cdot 0.09091\cdot \left | 0.09091 \right |+110\cdot 0.09091-10=8.26\]\[\left |f(z^{1}) \right | > \delta _{f}\]
Переход на следующую итерацию.
Вторая итерация.
\[z^{2} = z^{1} + \Delta z^{2}\]\[\Delta z^{2} = -\frac{f(z^{1})}{f{}'(z^{1})} = -\frac{8.26}{2000\cdot 0.09091 +110}=-0.02831\]\[z^{2} = 0.09091-0.02831=0.06260\]
Проверка завершения итераций:
\[\left | \Delta z^{2} \right |>\delta _{z}\]\[f(z^{2}) = 1000\cdot 0.0626\cdot \left | 0.0626 \right |+110\cdot 0.0626-10=0.80\]\[\left |f(z^{2}) \right | > \delta _{f}\]
Переход на следующую итерацию.
Третья итерация.
\[\Delta z^{3}=-0.00341\]\[z^{3}=0.05918\]\[\left | \Delta z^{3} \right |>\delta _{z}\]\[\left | f(z^{3}) \right |=0.012<\delta _{f}\]
Четвертая итерация.
\[\Delta z^{4}=-0.00005\]\[z^{4}=0.05913\]\[\left | \Delta z^{4} \right |<\delta _{z}\]\[\left | f(z^{4}) \right |=0.0006<\delta _{f}\]
Оба условия (1.15) удовлетворены, ограничение (1.16) не превышено. Решение достигнуто. Мы вычислили значение скорости для момента времени \(t_{1}\), получив
\(\nu_{1}=0.05913~м/с\)
Воспользовавшись формулами (1.10), определим значения ускорения и перемещения для этого же момента времени.
\(a_{1} = \frac{0.05913-0}{0.001}=59.13~м/с^2\)
\(x_{1}=0+\frac{0+0.05913}{2}\cdot 0.001=2.96e-5~м\)
Решение для момента времени \(t_{1}\) получено. Сделаем еще один шаг по времени для того, чтобы проиллюстрировать теперь выбор величины шага. Уравнения (1.9) - (1.12) справедливы для любого момента времени с учетом соответствующей замены подстрочных индексов. Для 2-го шага по времени имеем:
\[kx_{2}+\mu \nu_{2}\left | \nu_{2} \right |+ma_{2} - Q sin\frac{2\pi }{T}t_{2}=0\]\[x_{2}=x_{1}+\nu_{1}\Delta t_{2}+a_{2}\frac{\Delta t_{2}^{2}}{2} ~~~~~~~~~~ (1.23)\]\[\nu_{2}=\nu_{1}+a_{2}\Delta t_{2}\]
Так же, как и на первом шаге, приводим эту систему к одному уравнению относительно скорости:
\[\alpha \nu_{2}\left | \nu_{2} \right |+\beta \nu_{2} +\gamma =0\],где
\[\alpha =\mu\]\[\beta =\frac{k\Delta t_{2}}{2}+\frac{m}{\Delta t_{2}}\]\[\gamma =kx_{1}+k\frac{\nu_1\Delta t_2}{2}-\frac{m\nu_1}{\Delta t_2}-Qsin\frac{2\pi}{T}t_2 ~~~~ (1.24)\]
Предварительно величину шага \(\Delta t_{2}\) принимаем равной \(\Delta t_{1}\), т.е. 0.001 с. Тогда, с учетом исходных данных и полученного на первом шаге решения, можно подсчитать коэффициенты α , β , γ:
\[\alpha =1000\]\[\beta = \frac{20000\cdot0.001}{2}+\frac{0.1}{0.001}=110\]\[\gamma = 20000\cdot2.96e-5+20000\frac{0.05913\cdot0.001}{2}-\frac{0.1\cdot0.05913}{0.001}-\]\[-1000sin(\frac{2\pi}{0.2\pi}\cdot0.002)=-24.7\]
Опять имеем нелинейное уравнение:
\[1000\nu_2\left | \nu_2 \right |+110\nu_2-24.7=0,~~~~~~~~~~~(1.25)\]
которое решаем методом Ньютона.
В этом месте плавный повтор наших выкладок необходимо прервать и обратить особое внимание на выбор начального приближения к решению в алгоритме метода Ньютона.
За начальное приближение к решению примем такое значение скорости, которое тело имело бы в момент времени \(t_{2}\), если бы ускорение тела с момента времени \(t_{1}\) не изменилось, т.е., считаем, что
\[\nu_{2}^{0}=\nu_1+a_1\Delta t_2~~~~~~~~~~~~~~~~(1.26)\]
Это так называемый явный шаг (или прогноз), когда в формулу для скорости входит уже известное ускорение. Величина скорости, полученная явным шагом, будет использована нами не только как начальное приближение в методе Ньютона, но и при оценке величины выбранного шага по времени.
Итак, начальное приближение (прогноз):
\[\nu_{0}^{2}=0.05913+59.13\cdot0.001=0.11826\]
Опуская подробные выкладки (они аналогичны приведенным для первого шага по времени), итерации метода Ньютона приводят к следующей последовательности значений:
начальное приближение: \(\nu_{2}^{0}=0.11826\)
первая итерация: \(\nu_{2}^{2}=0.11172\)
вторая итерация: \(\nu_{2}^{2}=0.11159\), решение достигнуто.
Мы получили, что при величине шага \(\Delta t_{2}=0.001\), скорость для момента времени \(t_{2}\)
\[\nu_{2}=0.11159~м/c^2\]
Пришло время оценить погрешность сделанного шага по времени.
Погрешность метода интегрирования на \(i\)-м шаге, называемую локальной погрешностью, будем оценивать по следующей формуле:
\[lp_{i}= \left | \frac{\nu_{i}^{p}-\nu_{i}^{c}}{2} \right | ~~~~~~~~~~~~~(1.27)\]
где \(\nu_{i}^{p}\) - явный прогноз величины скорости на \(i\)-м шаге, определяемый формулой
\[\nu_{i}^{p}=\nu_{i-1}+a_{i-1}\Delta t_{i} ~~~~~~~~~~~~~(1.28)\]
\(\nu_{i}^{c}\) - значение скорости, которое мы получили в результате итерационного решения, используя неявную формулу
\[\nu_{i}^{c}=\nu_{i-1}+a_{i}\Delta t_{i} ~~~~~~~~~~~~~(1.29)\]Рис. 1.6
Заметим, что соотношение (1.28) уже применялось нами при выборе начального приближения к решению в алгоритме метода Ньютона (смотри зависимость (1.26)).
Вычисление скоростей по формулам (1.28) и (1.29) и суть оценки локальной погрешности по формуле (1.27) поясняет рис. 1.6.
В момент времени \(t_{i-1}\) мы находимся в точке \(\nu_{i-1}\). Если для вычисления значения \(\nu_{i}\) мы воспользуемся явной формулой (1.28), то точка \(\nu_{i}=\nu_{i}^{p}\) будет лежать на касательной, проведенной к кривой \(\nu(t)\) в точке \(t_{i-1}\), поскольку \(a_{i-1}\) есть тангенс угла наклона этой касательной к оси абсцисс.
При вычислении \(\nu_{i}\) с использованием формулы (1.29) нам требуется значение \(a_{i}\), т.е. тангенса угла наклона касательной, проведенной к кривой \(\nu(t)\) уже в точке \(t_{i}\). Так как в момент времени \(t_{i-1}\) мы ничего не знаем о поведении функции \(\nu(t)\) при \(t=t_{i}\) и касательную к кривой \(\nu(t)\) в точке \(t_{i}\) тоже провести не можем, то мы вычисляем \(\nu_{i}=\nu_{i}^{c}\) не непосредственно по формуле (1.29), а путем совместного решения системы уравнений (1.7), куда входит и соотношение (1.29). При этом нам приходится последовательно приближаться к решению (т.е., к \(\nu_{i}^{c}\)) за несколько Ньютоновских итераций.
Рисунок 1.6. показывает, что явный прогноз \(\nu_{i}^{p}\) и скорректированное решение \(\nu_{i}^{c}\) лежат по разные стороны от кривой \(\nu(t)\), проходящей через точку \(t_{i-1}\). Чем больше разница между \(\nu_{i}^{c}\) и \(\nu_{i}^{p}\), тем сильнее на текущем шаге отличается график скорости от прямой и тем выше погрешность интегрирования на шаге. Рисунок также позволяет понять, что уменьшение величины шага \(t_{i}\) приводит к уменьшению локальной погрешности, оцениваемой по формуле (1.27), поскольку уменьшается расхождение значений \(\nu_{i}^{p}\) и \(\nu_{i}^{c}\).
Расчет локальной погрешности важен нам не столько сам по себе, сколько как средство, позволяющее оценить приемлемость сделанного шага по времени и рекомендовать величину следующего шага.
Механизм определения величины шага, исходя из критерия локальной погрешности, достаточно прост. Задается значение предельно допустимой локальной погрешности на шаге интегрирования \(\delta_{l}\). По результатам очередного \(i\)-го шага сравниваются значения допустимой (\(\delta_{l}\)) и фактически полученной локальной погрешности (\(lp_{i}\)). Если \(lp_{i}\leq \delta_{l}\) , то сделанный шаг признается успешным. Осуществляется переход на следующий шаг по времени; величина его для одношаговых методов интегрирования первого порядка точности, которым соответствуют используемые нами формулы (1.7), выбирается по зависимости:
\[\Delta t_{i+1}=c\Delta t_{i}\sqrt{\frac{\delta_l}{lp_{i}}}~~~~~~~~~~~~(1.30)\]где \(\Delta t_{i}\) - величина совершенного шага по времени,
\(\Delta t_{i+1}\) - рекомендуемое значение следующего шага,
\(c\) - поправочный коэффициент, \(c<1\).
Если же \(lp_{i}>\delta_{l}\) , то значение сделанного шага \(\Delta t_{i}\) слишком велико и не обеспечивает требуемой точности. Поэтому необходимо провести расчет на \(i\)-м шаге еще раз, используя с уменьшенным значением \(\Delta t_{i}\). В этом случае для выбора величины \(\Delta t_{i}\) также используется формула (1.30), только получаемое по ней значение шага используется не для следующего \((i+1)\) -го шага, а для повторного расчета на текущем \(i\)-м шаге.
Возвращаясь к разбираемому примеру численного решения уравнения (1.6), проведем для 2-го шага интегрирования оценку локальной погрешности и величины шага.
В ходе расчета мы получили значения:
\[\nu_{2}^{p}=0.11826\]\[\nu_{2}^{c}=0.11159\]
Локальная погрешность на шаге:
\[lp_{2}=\left | \frac{0.11826-0.11159}{2} \right |=0.00333\]
Приняв допустимую погрешность на шаге:
\[\delta_l=0.001\]
, мы вынуждены констатировать, что \(lp_{2}>\delta_{l}\), т.е. выполненный шаг со значением \(\Delta t_2=0.001\) с не обеспечивает требуемой точности результатов и необходимо повторить расчет на 2-м шаге с уменьшенным значением \(\Delta t_2\). Рекомендуемое значение \(\Delta t_2\) для повторного расчета определим с помощью формулы (1.30), используя коэффициент \(c=0.8\):
\[\Delta t_2=0.8\cdot0.001\cdot\sqrt{\frac{0.001}{0.00333}}=0.438e-3\]
Результаты повторного расчета с шагом \(\Delta t_2=0.438e-3\) дают следующие значения прогноза скорости, скорректированного решения и локальной погрешности:
\[\nu_{2}^{p}=0.08505\]\[\nu_{2}^{c}=0.08509\]\[lp_2=\left | \frac{0.08505-0.08509}{2} \right |=0.00002\]
Поскольку полученное теперь значение \(lp_2<\delta_l\), то второй шаг можно считать успешным с точки зрения заданной точности решения. Теперь дополним вычисленное значение скорости \(\nu_2=0.08509\) м/с значениями ускорения \(a_2\) и перемещения \(x_2\), воспользовавшись формулами связи (1.7):
\[a_2=\frac{\nu_2-\nu_1}{\Delta t_2}=\frac{0.08509-0.05913}{0.438e-3}=59.21 м/с^2\]\[x_2=x_1+\nu_1\Delta t_2+a_2\frac{\Delta t_{2}^{2}}{2}=2.96e-5+\]\[+0.05913\cdot0.438e-3+59.21\frac{(0.438e-3)^{2}}{2}=6.12e-5 м\]
К настоящему моменту мы получили численное решение для двух точек временной оси:
Рис. 1.7
Следуя приведенному алгоритму, можно продолжить расчет и получить решение для всего интервала времени, который интересует исследователя.
Прежде чем подводить первые итоги, хотелось бы вернуться к рис. 1.6. для некоторых пояснений. В момент времени \(t_{i-1}\) мы находимся в точке \(\nu_{i-1}\). Через нее проходит кривая \(\nu(t)\) . Она представляет собой так называемую интегральную кривую для момента времени \(t_{i-1}\), т.е., график скорости, соответствующий точному решению уравнения (1.6) при начальном условии
\(\nu\mid _{t=t_{i-1}}=\nu_{i-1}\) (1.31)
Поскольку уравнение (1.6) мы решаем приближенно, то фактически на каждом \(i\)-м шаге численного интегрирования по времени мы переходим с одной интегральной кривой, удовлетворяющей начальному условию (1.31), на другую интегральную кривую, которая уже представляет собой точное решение уравнения (1.6) при начальном условии
\(\nu\mid _{t=t_{i-1}}=\nu_{i}\) (1.32)
(на рис. 1.6 интегральная кривая для \(t=t_{i}\) обозначена пунктирной линией).
Поэтому результатом численного решения служит ломанная, проходящая через совокупность интегральных кривых, каждая из которых является точным решением уравнения (1.6) при начальных условиях, определяемых численным решением на текущем шаге (рис. 1.8).
Рис. 1.8
Подытожим основные моменты, существенные с точки зрения численного анализа рассмотренного примера.
Последовательность наших действий сводилась к следующему:
1. Сформировали дифференциальное уравнение, описывающее поведение системы:
\[kx+\mu\frac{dx}{dt}\left | \frac{dx}{dt} \right |+m\frac{d^2x}{dt^2}-Qsin\frac{2\pi}{T}t=0\]
При формировании уравнения использовали 2-й закон Ньютона, являющийся одним из способов записи условия динамического равновесия.
2. Представили полученное уравнение в форме, не содержащей явно дифференциальных соотношений, записав последние отдельно:
\[kx+\mu\nu\left | \nu \right |+ma-Qsin\frac{2\pi}{T}t=0\]\[\nu=\frac{dx}{dt}\]\[a=\frac{d\nu}{dt}=\frac{d^2x}{dt^2}\]
3. Заменили дифференциальную связь между \(x\), \(\nu\) и \(a\) алгебраическими уравнениями связи, справедливыми для выбранного метода интегрирования, сведя тем самым задачу получения решения в виде непрерывных функций к задаче отыскания совокупности значений неизвестной функции в отдельных точках временной оси:
\[kx_i+\mu\nu_i\left | \nu_i \right |+ma_i-Qsin\frac{2\pi}{T}t_i=0\]\[x_i=x_{i-1}+\nu_{i-1}\Delta t_i + a_i\frac{\Delta t_{i}^{2}}{2}\]\[\nu_i=\nu_{i-1}+a_i\Delta t_i,\]где \(\Delta t_i\) - величина \(i\)-го шага по времени
\[(\Delta t_i = t_i- t_{i-1});\]\(x_i\), \(\nu_i\), \(a_i\) - значения \(x\), \(\nu\) и \(a\) при \(t=t_i\).
4. Полученную систему привели к одному уравнению, выразив \(x_i\) , \(a_i\) через \(\nu_i\):
\[a\nu_i\left | \nu_i \right |+\beta\nu_i+\gamma=0\]
Таким образом, на каждом шаге по времени расчет сводился к решению нелинейного алгебраического уравнения вида \(f(z)=0\), где \(z=\nu_i\).
5. Решение нелинейного уравнения проводили методом Ньютона. Это итерационный численный метод (решение получаем приближенное, с заранее заданной точностью, за несколько проходов). Для получения решения на каждом проходе необходимо вычислять значения функции \(f(z)=0\) и ее производной \(df(z)/dz\). Начальное приближение к решению определяем, используя формулу явного прогноза.
6. Точность численного интегрирования по времени оценивали путем контроля локальной погрешности на шаге интегрирования, зависящей от разности явного и неявного решения. При неудовлетворительной величине локальной погрешности повторяли расчет на текущем шаге с уменьшенным значением шага \(\Delta t_i\).
7. Если локальная погрешность на шаге лежала в пределах допустимой, то считали шаг успешным и, используя вычисленное значение скорости \(\nu_i\), подсчитывали ускорение \(a_i\) и перемещение \(x_i\) по уравнениям связи, справедливым для выбранного метода интегрирования.
8. Величину очередного шага по времени выбирали, исходя из соотношения допустимой и фактически полученной локальной погрешности на текущем шаге интегрирования.
На этом простом примере мы хотели достаточно крупными мазками обозначить канву численного решения, которой придерживается алгоритм вычислительного ядра PRADIS. Естественно, что масса важных вопросов осталась вне области рассмотрения. Ко многим из них мы вернемся позднее, разъяснения по другим лучше получить в специальной литературе, ссылки на которую при каждом удобном случае мы будем приводить.
Мы надеемся, что приведенный пример позволяет понять сущность численного решения дифференциального уравнения движения тела, сформированного в соответствии с принятой расчетной схемой. Однако следует заметить, что само формирование дифференциального уравнения проводилось “вручную” и некоторые вопросы в ходе расчета тоже решались неформально (например, аналитическое определение вида функции, являющейся производной \(df(z)/dz\) в алгоритме метода Ньютона). Поэтому мы продолжаем рассмотрение методов и алгоритмов PRADIS с выяснения принципов автоматического формирования системы дифференциальных уравнений (для рассматриваемого примера - одного уравнения), описывающих поведение исследуемого объекта.
Механизм формирования математической модели
Вернемся к рассмотрению системы на рис.1.1.
- Перепишем еще раз уравнение равновесия:
- \[F^c +F^y+F^в+F^u=0~~~~~~~(2.1)\]
Поскольку при численном интегрировании мы получаем решение в отдельных точках временной оси, то для каждого \(i\)-го момента времени уравнение (2.1) может быть записано в виде:
\[F_i^c +F_i^y +F_i^в+ F_i^u =0~~~~~~~(2.2)\]
где
\[\begin{split}\begin{matrix} F_i^c=-Qsin\frac{2\pi}{T}t,\\ F_i^y=kx_i,\\ F_i^в=\mu\nu_i\left | \nu_i \right |,\\ F_i^u=ma_i \end{matrix}~~~~~~~(2.3)\end{split}\]
Считаем также, что для \(i\)-го момента времени значения \(x_i\), \(\nu_i\), \(a_i\) связаны уравнениями (1.7), которые ввиду их использования в наших дальнейших выкладках воспроизведем еще раз:
\[x_i=x_{i-1}+\nu_{i-1}\Delta t_i + a_i\frac{\Delta t_i^2}{2}~~~~~~~~(2.4)\]\[\nu_i=\nu_{i-1}+a_i\Delta t_i\]
Обратите внимание, что уравнения (2.3) отличаются от аналогичных выражений (1.3) знаком. Это связано с тем, что в PRADIS при рассмотрении условий равновесия суммируются усилия, действующие со стороны системы на элементы, а не усилия со стороны элементов, как это было принято нами при выборе положительного направления для сил в соответствии с рис. 1.3.
Подстановкой (2.3) в (2.2) можно было бы получить уравнение вида (1.8), но мы этого делать не будем, поскольку нам нужно формировать и анализировать математическую модель по универсальному алгоритму. Итак, имеем достаточно универсальное уравнение равновесия вида (2.2), справедливое для каждого \(i\)-го момента времени. Заметим, что переход от записи уравнения равновесия в форме (2.1) к записи в форме (2.2) ознаменовал собой качественное изменение типа уравнения. Если соотношение (2.1) представляет собой дифференциальное уравнение (поскольку входящие в него зависимости для сил используют производные перемещения по времени), то соотношение (2.2) есть уже просто алгебраическое нелинейное уравнение (поскольку связь между \(x_i\), \(\nu_i\) , \(a_i\) определяется алгебраическими уравнениями (2.4)). А с нелинейным уравнением в форме (2.2) можно поступать также, как мы поступаем с уравнением (1.12), а именно: решать его методом Ньютона.
Имеем
\(f(z)=0\), (2.5)
где
\[f(z)=F_i^c+F_i^y+F_i^в+F_i^u\]
Переменной \(z\) мы можем обозначить любую из компонент \(x_i\) , \(\nu_i\) или \(a_i\), поскольку они взаимосвязаны соотношениями (2.4). Примем, как и раньше, \(z=\nu_i\).
На каждой итерации, в соответствии с формулами (1.14), нам необходимо вычислить значение \(f(z)\) и ее производной \(df(z)/dz\).
Вычисление \(f(z)\) сводится к суммированию текущих значений сил при текущих значениях \(x_i\) , \(\nu_i\), \(a_i\) (\(i\) - номер шага по времени, \(j\) - номер итерации по Ньютону). Фактически, вычисляемое значение \(f(z)\) представляет собой погрешность выполнения условия равновесия, которую ньютоновскими итерациями необходимо “загнать” в допустимые пределы.
Теперь распишем производную \(df(z)/dz\).
\[\frac{df(z)}{dz}=\frac{d(F_i^c+F_i^y+F_i^в+F_i^u)}{dz}=\frac{dF_i^c}{dz}+\frac{dF_i^y}{dz}+\frac{dF_i^в}{dz}+\frac{dF_i^u}{dz}~~~~(2.6)\]
Действуя строго по науке, каждую из производных в выражении (2.6) мы должны представить как производную сложной функции.
\[\frac{dF_i^c}{dz}=\frac{\frac{\partial F_i^c}{\partial x_i}dx_i+\frac{\partial F_i^c}{\partial \nu_i}d\nu_i+\frac{\partial F_i^c} {\partial a_i}da_i}{dz}=\frac{\partial F_i^c}{\partial x_i}\frac{dx_i}{dz}+\frac{\partial F_i^c}{\partial \nu_i}\frac{d\nu_i}{dz}+\frac{\partial F_i^c}{\partial a_i}\frac{da_i}{dz}\]
Так как \(z=\nu_i\), то
\[\frac{dF_i^c}{dz}=\frac{dF_i^c}{d\nu_i}=\frac{\partial F_i^c}{\partial x_i}\frac{dx_i}{d\nu_i}+\frac{\partial F_i^c}{\partial \nu_i}\frac{d\nu_i}{d\nu_i}+\frac{\partial F_i^c}{\partial a_i}\frac{da_i}{d\nu_i}~~~~~~~~(2.7)\]
Аналогично:
\[\frac{dF_i^y}{dz}=\frac{dF_i^y}{d\nu_i}=\frac{\partial F_i^y}{\partial x_i}\frac{dx_i}{d\nu_i}+\frac{\partial F_i^y}{\partial \nu_i}\frac{d\nu_i}{d\nu_i}+\frac{\partial F_i^y}{\partial a_i}\frac{da_i}{d\nu_i}\]\[\frac{dF_i^в}{dz}=\frac{dF_i^в}{d\nu_i}=\frac{\partial F_i^в}{\partial x_i}\frac{dx_i}{d\nu_i}+\frac{\partial F_i^в}{\partial \nu_i}\frac{d\nu_i}{d\nu_i}+\frac{\partial F_i^в}{\partial a_i}\frac{da_i}{d\nu_i}~~~~~~(2.7a)\]\[\frac{dF_i^u}{dz}=\frac{dF_i^u}{d\nu_i}=\frac{\partial F_i^u}{\partial x_i}\frac{dx_i}{d\nu_i}+\frac{\partial F_i^u}{\partial \nu_i}\frac{d\nu_i}{d\nu_i}+\frac{\partial F_i^u}{\partial a_i}\frac{da_i}{d\nu_i}\]
Используем уравнения связи (2.4) для получения зависимостей \(a_i\) и \(x_i\) от \(\nu_i\):
\[a_i=\frac{\nu_i-\nu_{i-1}}{\Delta t_i}\]\[x_i=x_{i-1}+\frac{\nu_i+\nu_{i-1}}{2}\Delta t~~~~~~~~~(2.8)\]
Продифференцируем выражения (2.8) \(\nu_i\):
\[\frac{dx_i}{d\nu_i}=\frac{\Delta t_i}{2}\]\[\frac{d\nu_i}{d\nu_i}=1~~~~~~~~~~~~(2.9)\]\[\frac{da_i}{d\nu_i}=\frac{1}{\Delta t_i}\]
Теперь вычислим частные производные в выражениях (2.7), (2.7а), пользуясь зависимостями (2.3):
Для силы \(F_i^c\):
\[\frac{\partial F_i^c}{\partial x_i}=0\]
(\(F_i^c\) не зависит от перемещения тела)
\[\frac{\partial F_i^c}{\partial \nu_i}=0\]
(\(F_i^c\) не зависит от скорости тела) (2.10)
\[\frac{\partial F_i^c}{\partial a_i}=0\]
(\(F_i^c\) не зависит от ускорения тела)
Для силы \(F_i^y\):
\[\frac{\partial F_i^y}{\partial x_i}=k\]
(\(F_i^y\) не зависит от скорости тела) (2.11)
\[\frac{\partial F_i^y}{\partial \nu_i}=0\]
(\(F_i^y\) не зависит от ускорения тела)
\[\frac{\partial F_i^y}{\partial a_i}=0\]
Для силы \(F_i^в\):
\[\frac{\partial F_i^в}{\partial x_i}=0\]
(\(F_i^в\) не зависит от перемещения тела)
\[\frac{\partial F_i^в}{\partial \nu_i}=2\mu\left | \nu_i \right |~~~~~~~~~~~(2.12)\]\[\frac{\partial F_i^в}{\partial a_i}=0\]
(\(F_i^в\) не зависит от ускорения тела)
Для силы \(F_i^u\):
\[\frac{\partial F_i^u}{\partial x_i}=0\]
(\(F_i^u\) не зависит от перемещения тела)
\[\frac{\partial F_i^u}{\partial \nu_i}=0\]
(\(F_i^u\) не зависит от скорости тела) (2.13)
\[\frac{\partial F_i^u}{\partial a_i}=m\]
Подставляем полученные значения частных производных от усилий и значения коэффициентов (2.9) в формулы (2.7), (2.7а):
\[\frac{\partial F_i^c}{\partial z}=0\]\[\frac{\partial F_i^y}{\partial z}=\frac{k\Delta t}{2}~~~~~~~~~~~~~(2.14)\]\[\frac{\partial F_i^в}{\partial z}=2\mu\left | \nu_i \right |\]\[\frac{\partial F_i^u}{\partial z}=\frac{m}{\Delta t_i}\]
- Суммируем слагаемые формулы (2.6):
- \[\frac{\partial f(z)}{\partial z}=\frac{k\Delta t_i}{2}+2\mu\left | \nu_i \right |+\frac{m}{\Delta t_i}~~~~~~~~~~~(2.15)\]
Сравнивая результат с ранее полученной формулой (1.19), для которой коэффициенты берутся из соотношений (1.12), можно констатировать, что они похожи.
Теперь, имея возможность вычислять \(f(z)\) и \(df(z)/dz\) продолжить расчет по описанному ранее алгоритму не представляет труда. Однако, как говорил один их героев Толкиена, “ситуация в настоящий момент может представляться требующей некоторых разъяснений “. Продравшись через частокол полных и частных производных, мы получили тот же результат, что и ранее, но терпения у читателя эти выкладки наверняка изрядно поубавили. Какими же приобретениями окупаются эти трудозатраты?
Дифференциальное уравнение движения выписывать вообще не пришлось.
2. Развернутая форма нелинейного уравнения вида (1.12), к решению которого сводится расчет на каждом шаге по времени, тоже оказалась невостребованной.
3. Функциональная зависимость для производной \(df(z)/dz\) не понадобилась.
Рис. 2.1
Если внимательно просмотреть наши рассуждения, то мы использовали следующую информацию (приводимый ниже список необходимой для формирования математической модели информации будем далее называть “перечнем”):
Сведения о стыковке элементов схемы (рис. 2.1).
2. Условие равновесия сил, записанное для \(i\)-го момента времени, и представляющее собой нелинейное алгебраическое уравнение относительно \(x_i\), \(\nu_i\), \(a_i\) вида:
\[\sum_{k=1}^{4}F_i^{(k)}=0,~~~~~~~~~~~(2.16)\]
где 4 - количество сил, сходящихся в узле стыковки (количество стыкующихся ветвей элементов).
Уравнение (2.16) еще называют топологическим, поскольку оно определяется топологией, т.е., структурой связей в схеме.
3. Выражения, позволяющие определить усилия в каждом элементе как функцию перемещения, скорости, ускорения и времени - (2.3). Это так называемые компонентные уравнения, описывающие поведение отдельной компоненты (элемента) схемы.
4. Выражения для частных производных от усилий, действующих в элементе, по перемещению, скорости, ускорению - см. зависимости (2.10)-(2.14).
5. Алгебраические уравнения связи \(x\), \(\nu\), \(a\) для текущего момента времени - формулы метода интегрирования (2.4).
6. Указание, относительно какой из переменных - \(x\), \(\nu\) или \(a\) - вести решение нелинейного уравнения, т.е., что выбирается в качестве переменной \(z\) функции \(f(z)\) в формуле (2.5).
Перечисленной информации достаточно для реализации машинных алгоритмов формирования математической модели объекта.
Чтобы у читателя не осталось темных мест и белых пятен, мы еще раз более детально пройдемся по уже неоднократно разобранному в этом документе примеру.
Итак, пусть имеется техническая система, процессы в которой требуют анализа. Расчетная схема соответствует рис.1.1.
Систему необходимо представить в виде совокупности элементов,стыкующихся по общим степеням свободы (узлам). Количество степеней свободы (узлов) у каждого элемента определяется разновидностью элемента (рис. 2.2).
Рис. 2.2
Существует понятие модели элемента. Пользователь собирает модель системы из моделей отдельных элементов, как игрушку в детском конструкторе. Его (пользователя) должна заботить только правильность сборки, остальные вопросы формирования математической модели - головная боль разработчиков программного обеспечения. Имея перед собой расчетную схему (рис. 1.1) и вычленив из нее элементы (рис. 2.2), пользователь находит модели соответствующих элементов в библиотеке моделей элементов программного комплекса и описывает структуру исследуемой схемы.
Описание структуры заключается в соединении элементов по общим степеням свободы и указании закрепленных узлов. Для полноты картины приведем кусок текста описания структуры на входном языке PRADIS:
$ FRAGMENT: Пример
# BASE: 1
# STRUCTURE:
Пружина' K (1 2; Коэффициент жесткости)
Нелинейный демпфер ' MUNL (1 2; Коэффициент вязкости)
Масса ' M (2; Масса тела)
Воздействие ' FSIN (2 1; Q, T, начальная фаза)
Подготовкой приведенного описания пользователь сообщил программному комплексу PRADIS всю необходимую информацию по стыковке элементов схемы (см. пункт 1 перечня необходимой информации для формирования математической модели объекта). Пользователь, во-первых, подобрал модели элементов из библиотеки моделей - это модели K, MUNL, M, FSIN. Во-вторых, соединил их надлежащим образом, приложив воздействие к массе в узле 2, к которому также присоединил концы пружины и демпфера. Наконец, описал узел 1 как неподвижный, закрепив тем самым свободные концы пружины и демпфера.
Рассмотрим теперь те действия программы, которые позволяют в целом представить механизм работы вычислительного алгоритма.
В процессе обработки описания структуры модели определяется размерность системы уравнений, т.е., количество узлов, в которых должны выполняться условия равновесия. В рассматриваемом примере два узла, один из которых закреплен. На стадии формирования математической модели структура данных будет готовиться по обоим узлам, однако на этапе расчета уравнение, соответствующее закрепленному узлу, исключается из рассмотрения, и все кинематические характеристики закрепленного узла (перемещение, скорость, ускорение) устанавливается в ноль.
Этап численного интегрирования представляет собой последовательность шагов по времени, каждый из которых сводится к решению нелинейного уравнения равновесия вида (2.16). Для решения этого уравнения необходима информация, приведенная выше в пунктах 3-6 перечня.
Сейчас самое время обратить внимание на модели элементов и выяснить, какова их роль в вычислительном алгоритме. Входными данными для любой модели элемента являются:
неизменный список параметров модели элемента;
текущие значения перемещений, скоростей и ускорений тех узлов, с
которыми этот элемент соединен.
По этим данным модель элемента обязана для текущего момента времени вычислить:
1) усилия, которые действуют со стороны системы на элементы, т.е., вектор усилий элемента (см. пункт 3 перечня);
2) частные производные вычисляемых усилий по перемещениям, скоростям и ускорениям узлов элемента, т.е., так называемую матрицу Якоби (якобиан) элемента (см. пункт 4 перечня).
Если элемент имеет N степеней свободы, то длина вектора усилий элемента также N, а якобиан элемента имеет длину N*N*3.
Рис. 2.3
Как это выглядит? Например, разработчик двухузловой модели одномерной безразмерной безинерционной идеально упругой пружины, которую мы используем в своем примере,
реализовал следующие зависимости для усилий и якобиана элемента (рис. 2.3):
\[F_1=k(x_1-x_2)\]\[F_2=k(x_2-x_1)~~~~(2.17)\]\[\frac{\partial F_1}{\partial x_1}=k,~~~\frac{\partial F_1}{\partial x_2}=-k~~~~~(2.18)\]\[\frac{\partial F_2}{\partial x_1}=-k,~~~\frac{\partial F_2}{\partial x_2}=k\]\[\frac{\partial F_1}{\partial \nu_1}=\frac{\partial F_1}{\partial \nu_2}=\frac{\partial F_2}{\partial \nu_1}=\frac{\partial F_2}{\partial \nu_2}=0~~~(2.19)\]\[\frac{\partial F_1}{\partial a_1}=\frac{\partial F_1}{\partial a_2}=\frac{\partial F_2}{\partial a_1}=\frac{\partial F_2}{\partial a_2}=0~~~(2.20)\]
В соответствии с приведенными зависимостями, для любого момента времени модель элемента по переданным в нее текущим значениям перемещений, скоростей и ускорений (хотя для рассматриваемого элемента важны только перемещения) вычисляет значения усилий, действующих на концы пружины, и значения частных производных от усилий по перемещениям, скоростям и ускорениям обоих узлов. Вектор усилий состоит их 2 элементов, якобиан - из 12.
Поскольку в рассматриваемой расчетной схеме объекта узел 1 пружины закреплен, то в данном конкретном случае из всей информации, вычисляемой моделью и передаваемой “наверх”, востребуется только та часть, которая связана с незакрепленным вторым узлом:
\[F_2=k(x_2-x_1)~~~~(2.21)\]\[\frac{\partial F_2}{\partial x_2}=k\]\[\frac{\partial F_2}{\partial \nu_2}=\frac{\partial F_2}{\partial a_2}=0~~~~~~~~~(2.22)\]
Эта информация позволяет учесть вклад пружины при решении нелинейного уравнения вида (2.5) по алгоритму, изложенному при выводе соотношений (2.6)-(2.15). Вклад остальных элементов (демпфер, масса, внешнее воздействие) учитывается аналогичным образом.
Чтобы конкретизировать сказанное, продолжим ранее начатое интегрирование примера, сделав очередной 3-й шаг по времени. При этом будем использовать формальный алгоритм, базирующийся на последовательности вычислений по формулам (2.5)-(2.15).
Напомним, что по результатам 2-го шага по времени (при \(t_2=1.438e-3 c\) ) мы получили следующие значения неизвестных:
\(x_2=6.12e-5\) м
\(\nu_2=0.08509\) м/с
\(a_2=59.21\) м/ \(с^2\)
Величина шага равнялась \(\Delta t_2=0.438e-3 c\), полученное на шаге значение локальной погрешности составило \(lp_2=0.000018\).
Рекомендуемое значение \(\Delta t_3\) для следующего шага определяем по формуле (1.30) с учетом \(c=0.8\) и \(\delta_l =0.001\):
Дальше действуем по схеме, представленной на рисунках 2.4а-2.4в. Из рис. 2.4.а следует, что перед \(i\)-м шагом по времени должны быть известны значения \(t_{i-1}\) , \(x_{i-1}\) , \(\nu_{i-1}\) , \(a_{i-1}\) , \(\Delta t_{i}\). Можно убедиться, что перед началом 3-го шага мы действительно располагаем информацией о значениях \(t_2\) , \(x_2\) , \(\nu_2\) , \(a_2\) , \(\Delta t_3\).
Подробности алгоритма выполнения отдельного шага почерпнем из рис. 2.4.б.
1. Определяем значения коэффициентов приведения якобиана - \(\partial x_i/dz\), \(\partial \nu_i/dz\), \(\partial a_i/dz\) (см. формулы (2.7), (2.7а)), зависящие от величины шага. Поскольку при расчетах на первых двух шагах за базисную переменную мы уже приняли скорость (т.е., \(z=\nu_i\)), то суммирование якобиана проводится по формулам (2.7), (2.7а), для которых коэффициенты приведения вычисляются по зависимостям (2.9):
\[\frac{dx_3}{d\nu_3}=\frac{\Delta t_3}{2}=\frac{2.63e-3}{2}=1.31e-3\]\[\frac{d\nu_3}{d\nu_3}=1\]\[\frac{da_3}{d\nu_3}=\frac{1}{\Delta t_3}=\frac{1}{2.63e-3}=380.2\]
Напомним, что соотношения (2.9) определяются формулами метода интегрирования (2.4).
2.Вычисляем начальное приближение к решению по формуле явного прогноза (1.28):
\[\nu_3^0=\nu_2+a_2\Delta t_3=0.08509+59.21\cdot2.63e-3=0.24081\]
Обратите внимание, что в качестве начального приближения должно быть вычислено не только значение \(\nu_i^0\), но и значения \(x_i^0\), \(a_i^0\), необходимые для расчета в моделях элементов.
Поэтому:
\[a_3^0=a_2=59.21\]\[x_3^0=x_2+\nu_2\Delta t_3+a_3\frac{\Delta t_3^2}{2}=6.12e-5+0.08509\cdot2.63e-3+\]\[+59.21\frac{(2.63e-3)^2}{2}=46.5e-5\]
3. Установив счетчик итераций равным 1, реализуем последовательность действий на 1-й итерации Ньютона (см. рис. 2.4в).
4. Обращение к моделям элементов. Вычисление вектора сил и якобиана каждого элемента по текущим значениям \(x_3^0\) , \(\nu_3^0\) , \(a_i^0\).
В настоящий момент ограничимся анализом информации только по незакрепленному узлу:
Рис. 2.4а
Рис. 2.4б
Рис. 2.4в
Пружина:
\[F^y=kx=20000\cdot46.5e-5=9.3\]\[\frac{\partial F^y}{\partial x}=k=20000\]\[\frac{\partial F^y}{\partial \nu}=\frac{\partial F^y}{\partial a}=0\]
Демпфер:
\[F^в=\mu \nu\left | \nu \right |=1000\cdot0.24081\cdot\left | 0.24081 \right |=58.0\]\[\frac{\partial F^в}{\partial x}=0\]\[\frac{\partial F^в}{\partial \nu}=2\mu \left | \nu \right |=2\cdot1000\cdot\left | 0.24081 \right |=481.6\]\[\frac{\partial F^y}{\partial a}=0\]
Точечная масса:
\[F^u=ma=0.1\cdot59.21=5.9\]\[\frac{\partial F^u}{\partial x}=\frac{\partial F^u}{\partial \nu}=0\]\[\frac{\partial F^u}{\partial a}=m=0.1\]
Прикладываемая сила:
\[F^c=Qsin\frac{2\pi}{T}t=-1000sin\frac{2\pi}{0.2\pi}(1.438e-3+2.63e-3)=-40.6\]\[\frac{\partial F^c}{\partial x}=\frac{\partial F^c}{\partial \nu}=\frac{\partial F^c}{\partial a}=0\]
5. Суммируем силы, вычисленные в моделях элементов и сходящиеся в незакрепленном узле
\[\sum F=F^y+F^в+F^u+F^c=-40.6+9.3+58.0+5.9=32.6\]
Полученная сумма является значением функции \(f(z)\) на текущей итерации (см. выражение (2.5)).
Вычислим теперь \(df(z)/dz\), используя соотношения (2.6), (2.7), (2.7а):
\[\frac{df(z)}{dz}=\frac{dF_i^c}{dz}+\frac{dF_i^y}{dz}+\frac{dF_i^в}{dz}+\frac{dF_i^u}{dz}\]\[\frac{dF^c}{dz}=0\cdot1.31e-3+0\cdot1+0\cdot380.2=0\]\[\frac{dF^y}{dz}=20000\cdot1.31e-3+0\cdot1+0\cdot390.2=26.2\]\[\frac{dF^в}{dz}=0\cdot1.31e-3+4.81.6\cdot1+0\cdot380.2=481.6\]\[\frac{dF^u}{dz}=0\cdot1.31e-3+0\cdot1+0.1\cdot380.2=38.0\]\[\frac{df(z)}{dz}=0+26.2+481.6+38.0=545.8\]
6.Определяем приращение \(\Delta z^1\):
\[\Delta z^1 = \frac{f(z^0)}{{f}'(z^0)}=-\frac{32.6}{545.8}=-0.05973\]
Вычисляем очередное приближение к решению
\[z^1=z^0+\Delta z^1=0.24081-0.05973=0.18108\]
8. По полученному значению \(z^1\) уточняем текущие значения \(x_3^1\) , \(\nu_3^1\) , \(a_3^1\), используя формулы (2.81):
\[\nu_3^1=z^1=0.18108\]\[a_3^1=\frac{\nu_3^1-\nu_2}{\Delta t_3}=\frac{0.18108-0.08509}{2.63e-3}=36.5\]\[x_3^1=x_2+\frac{\nu_2+\nu_3^1}{2}\Delta t_3=6.12e-5+\frac{0.08509+0.18108}{2}\cdot2.63e-3=41.1e-5\]
Вычисления на первой итерации Ньютона закончены.
9. Проверяем условия завершения ньютоновских итераций. Напомним, что ранее мы приняли следующие значения допустимых погрешностей для проверки условий (1.15):
\[\delta_z=0.001\]\[\delta_f=0.1\]
Исходя из этих значений, заключаем, что
\[\left | f(z^0) \right |>\delta_f\]\[\left | \Delta z^1 \right |>\delta_z\]
Таким образом, ньютоновские итерации на текущем шаге по времени необходимо продолжить.
10. Прежде, чем перейти на следующую итерацию, проверяем, не исчерпано ли предельное количество итераций:
\[j=1<j_{max}=5\]
Увеличиваем счетчик номера итераций:
\[j=j+1=1+1=2\]
12. Проверяем последовательность действий на рис. 2.4в для второй итерации метода Ньютона. Эти действия приведут нас к следующему решению:
\[f(z^1)=\sum F=-3.6\]\[\Delta z^2=-0.00858\]\[x_3^2=39.8e-4\]\[\nu_3^2=0.17250\]\[a_3^2=33.2\]
Проверка условий окончания итераций покажет, что итерации еще не закончены:
\[\left | f(z^1) \right |>\delta_f\]\[\left | \Delta z^2 \right |>\delta_z\]
Проверка:
\[j=2<j_{max}=5\]
устраняет последние преграды с пути выполнения очередной, третьей итерации.
13. Третья итерация окажется последней. Будет получен следующий результат:
\[\left | f(z^2) \right |=\left | -0.07 \right |<\delta_f\]\[\left | \Delta z^3 \right |=\left | -0.00018 \right |<\delta_z\]\[x_3^3=39.8e-4\]\[\nu_3^3=0.17232\]\[a_3^3=33.2\]
14. В соответствии со схемой 2.4б, после успешного завершения ньютоновских итераций необходимо оценить величину локальной погрешности на шаге интегрирования
\[lp_3=\left | \frac{\nu_3^p-\nu_3^c}{2} \right |=\left | \frac{0.24081-0.17232}{2} \right |=0.034\]
15. Вычисляем рекомендуемое по критерию локальной погрешности значение следующего шага.
Здесь следует вставить одну ремарку. Практика расчетов показала, что формула (1.30) приемлема только в определенном диапазоне соотношений \(\delta l/lp_i\), а именно - вблизи единицы. При значительных отличиях \(\delta l/lp_i\) от единицы рекомендуемое формулой (1.30) значение шага, как правило, завышено и приводит к неоправданной потере шагов из-за неудовлетворения требованиям точности интегрирования. В этом мы убедимся уже сейчас, поскольку для выбора величины текущего шага использовали формулу (1.30) при соотношении \(\delta l/lp_i=0.001/0.000018=55.5\) Как следствие этого, сделанный шаг с рекомендуемым формулой (1.30) значением шага \(\Delta t_3=2.63e-3\) привел нас к результату, когда сравнение фактически полученной (\(lp_3=0.034\)) и предельно допустимой (\(\delta_l=0.001\)) локальных погрешностей определяет необходимость повторения расчетов на 3-м шаге с уменьшенным значением шага.
Скорректируем правило выбора шага по критерию локальной погрешности. Оно выглядит следующим образом:
\[\begin{split}\Delta t_{рек}=\begin{cases} c\cdot\Delta t_i\frac{\delta_l}{lp_i} & \text{ при } \frac{\delta_l}{lp_i}<0.25 \\ c\cdot\Delta t_i\sqrt[4]{\frac{\delta_l}{lp_i}} & \text{ при } \frac{\delta_l}{lp_i}>0.25 \\ c\cdot\Delta t_i\sqrt{\frac{\delta_l}{lp_i}} & \text{ при } 0.25\leq \frac{\delta_l}{lp_i}\leq 7 \end{cases}~~~~~~~(2.23)\end{split}\]
Тогда, продолжая обсуждение алгоритма с прерванного места, рекомендуемое значение шага для повторного расчета на 3-м шаге определим с учетом (2.23):
\[\frac{\delta_l}{lp_3}=\frac{0.001}{0.034}=0.03\]
Поскольку \(\delta_l/lp_3<0.25\), то
\[\Delta t_{рек}=c\cdot\Delta t_3\cdot\frac{\delta_l}{lp_3}=0.8\cdot2.63e-3\cdot\frac{0.001}{0.034}=0.061e-3c\]
16. Устанавливаем \(\Delta t_3=0.061\cdot e-3c\) и повторяем вычисления на 3-м шаге, начиная с пункта 1.
Повторный расчет с этим значением шага приводит к следующим результатам для момента времени \(t_3=t_2+t_3=1.499\cdot e-3c\):
\[x_3=6.64e-5 м\]\[\nu_3=0.08862 м/с\]\[a_3=58.1 м/с^2\]
Локальная погрешность в пределах нормы. Рекомендуемое значение для следующего шага \(\Delta t_{рек}=0.264\cdot e-3c\).
Расчет на третьем шаге по времени закончен.
Основное, на что хотелось бы обратить внимание по завершении разбора примера, - это разделение функций между собственно программой интегрирования и программами реализации моделей элементов. Программе интегрирования, работающей по алгоритму рис. 2.4а-2.4в, вообще говоря, все равно, какие процессы интегрировать. Ее зависимость от моделей элементов сводится только к своевременному получению от них векторов сил и матриц якобианов. А какие свойства отдельных элементов эта информация отражает, программу интегрирования это касаться не должно. Модели элементов, в свою очередь, имеют свой уровень независимости информации при вполне очерченных обязанностях перед “верхами”. То есть, физические свойства отдельного элемента объекта отражаются в компонентных уравнениях на уровне модели элемента, а программа интегрирования работает на уровне уравнений равновесия потоков, не касаясь, по каким соотношениям составляющие этих потоков вычисляются. Такое разграничение функций определяет универсальность вычислительного ядра PRADIS, т.е. принципиальную возможность расчета любых объектов, процессы в которых подчиняются законам равновесия потоковых переменных (равновесие сил, электрических и тепловых потоков, расходов жидкости и газа).
Кратко об угловых степенях свободы, используемых в пространственных элементах PRADIS
Известно, что твердое тело из одного углового положения в другое можно перевести одним поворотом вокруг некоторой оси, называемой осью конечного вращения (теорема Эйлера). Обозначим \(e_1\), \(e_2\), \(e_3\) - направляющие косинусы оси конечного вращения, \(F_i\) - угол конечного вращения. Тогда можно ввести четыре кинематических параметра, описывающих угловое движение твердого тела [1,2]:
\[x_1=e_1\cdot sin(\frac{F_i}{2}),\]\[x_2=e_2\cdot sin(\frac{F_i}{2}),~~~~~~~(1)\]\[x_3=e_3\cdot sin(\frac{F_i}{2}),\]\[x_4=cos(\frac{F_i}{2}),\]
и одно уравнение связи для этих параметров:
\[x_1\cdot x_1+x_2\cdot x_2 + x_3\cdot x_3 + x_4\cdot x_4=1~~~~~~~(2)\]
В отличие от любой совокупности трех кинематических параметров (в частности - углов Эйлера) указанные четыре параметра не вырождаются при любом положении твердого тела, (т.е. не обращаются в бесконечность ни сами параметры, ни скорости их изменения).
Угловые степени свободы, принятые в пространственных элементах PRADIS, выражаются через кинематические параметры (1) следующим образом:
q1 = x1 * Lq,
q2 = x2 * Lq, (3)
q3 = x3 * Lq,
q4 = x4 * Lq,
где
Lq = sqrt(q1*q1+q2*q2+q3*q3+q4*q4). (4)
Первые три степени свободы являются внешними для моделей элементов, четвертая - внутренняя, скрытая от пользователя. Начальное значение потенциальной переменной, соответствующей внутренней степени свободы, устанавливается в моделях элементов равным 1.
Потоковыми переменными для первых трех степеней свободы являются моменты по глобальным осям X, Y, Z. Четвертая (внутренняя) потоковая переменная сдерживает изменение во времени величины Lq (4):
i4 = Mu * d(Lq)/dT, (5)
где Mu - коэффициент пропорциональности, одинаковый для всех степеней свободы такого рода и принимаемый в моделях элементов равным
Mu = DABSI/sqrt(MSHEPS). (6)
Какие операции, с точки зрения пользователя, корректны при работе с тремя внешними угловыми степенями свободы моделей элементов ? Почти все приемы, характерные для поступательного движения, остаются справедливыми и в этом случае.
В частности:
можно запрещать (базируя соответствующие узлы) движение по выбранным угловым степеням свободы, что равносильно сокращению размерности вектора, направленного по оси конечного вращения (например, при двух закрепленных угловых степенях свободы, точка может вращаться только вокруг оси, соответствующей незакрепленному узлу);
связь по вращению между точками стыкуемых элементов тоже можно осуществлять (если это необходимо) не по всем трем степеням свободы, а только по выбранным.
С чем нужно быть осторожнее? В отличие от плоского вращения, первая и вторая производные от потенциальных переменных (3) не будут являться угловой скоростью и угловым ускорением соответственно. Поэтому, например, начальные условия, задаваемые моделью VN, не будут, в общем случае, определять начальную угловую скорость. Естественно, что и ПРВП типа V и A будут выводить не угловую скорость, а текущие значения первой и второй производной от потенциальной переменной. Значения же угловых скоростей и ускорений доступны из рабочего вектора некоторых моделей элементов, в частности J3O.
Литература:
Виттенбург Й. Динамика систем твердых тел. - М.: Мир, 1980.