Я пытался получить численное решение для следующей системы обыкновенных дифференциальных уравнений:
Уравнения для движения тела по воздуху в наклонном обеде:
(очевидно, LaTeX не делаетработа над переполнением стека)
u'= -F(u, theta, t)*cos(theta)
v'= -F(v, theta, t)*sin(theta)-mg
по алгоритму Рунге-Кутта-Фельберга, но в середине вычисления мне нужно вычислить тета, который вычисляется как
arccos(u/sqrt(u^2+v^2)) or arcsin(v/sqrt(u^2+v^2)),
, но в конечном итоге theta
становится слишком маленьким, и мне нужно, чтобы он решил функцию F( v, theta, t)
и нашел значение V = sqrt(v^2 + u^2)
. Я использую V = (v/sin(theta))
, но когда theta
становится маленьким, то и sin(theta)
и я получаю числовую ошибку от данной итерации вперед -1.IND00
, вероятно, потому что theta
слишком мал, я попытался заставить theta
перейти от небольшого положительного угла, например 0.00001
, к маленькому отрицательному углу, например -0.00001
(if(fabs(theta)<0.00001) theta = -0.00001
), но кажется, что theta
попадает в ловушку этого отрицательного значения, есть ли у кого-нибудь указания на то, что нужно сделать, чтобы устранить эту числовую нестабильность?