?? rkf78qs.m
字號:
function [T,X,DT] = RKF78QS(T0,X0,DT0)
% RKF78QS 調用RKF78的子過程,步長控制采用《人造衛星精密軌道確定》
% T 積分時間,s
% X 積分變量:位置和速度_列向量,m m/s
% DT0 積分步長,s
%
% 編寫于2005年06月09日
% 修改于2005年06月09日(No.1):
global NREJ NREJT NSTP MAXREJ DTFAIL DTFIX B BLO BUP REMIN DTINC DTDEC RELERR ABSERR DTOLD
% 調用RKF7(8)------------------------------------------------------------------------------------------
% 判斷是否選擇定步長積分
DT = DT0;
if DTFIX == 'T'
[X,TE] = RKF78(T0,X0,DT);
T = T0 + DT;
else
% 每推進1個DT,步長嘗試的次數低于最大嘗試次數
while NREJ < MAXREJ
[X,TE] = RKF78(T0,X0,DT);
AE = ABSERR/RELERR;
XMAG = abs(X) + abs(X0) + AE;
RTE = max(TE ./ XMAG);
RTE = RTE /(7.5*RELERR);
% 判斷誤差是否滿足精度要求
if RTE >= 1
% 此步長計算失敗
DTFAIL = 'T';
NREJ = NREJ + 1;
NREJT = NREJT + 1;
% 此步長過大,減小步長
PCT = DTDEC ;
if RTE < BUP
PCT = B/(10.*RTE)^.125;
end
DT = PCT * DT;
DTOLD = DT;
else
T = T0 + DT;
break;
end
end
if NREJ >= MAXREJ
X = X0;
T = T0;
error('本次積分嘗試步數過多,積分失敗!IFLAG = 7');
else
% 下一次積分步長
PCT = DTINC;
if RTE > BLO
PCT = B/RTE^.125;
end
if DTFAIL == 'T'
PCT = min(PCT,1.0);
end
DT = DT * PCT;
DTOLD = DT;
end
end
NSTP = NSTP + 1;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -