计算数学
精细积分法
本节介绍由我国钟万勰院士提出的齐次线性定常微分系统的精细积分方法。 精细积分法看上去简单,但是对于这一类微分方程可以获得非常高精度的计算结果,亦既“计算机上的精确解”。 对于不满足精细积分法的方程,常常可以在此基础上以摄动法等手段进行处理。 精细积分法在控制论与弹性力学中已经取得了很重要的应用。下面介绍这一方法。 对于定常齐次微分方程下面给出对线性定常系统精细积分方法的MATLAB代码
function T=pre_int(t0,tt,A,x0,step,N)
%---------------------------- General M-file comment
% Version : V1.0
% Coded by : song.yz
% Date : 2012-10-16 13:28:39 *星期二*
%-----------------------------------------------------
% Purpose : 精细积分法
% Reference :
% *. 《应用力学对偶体系》
% *. 《状态空间控制理论与计算》
% *. 《应用力学的辛数学方法》
%-----------------------------------------------------
% Parameters :
% *. t0,tt 积分区间
% *. A-----系数矩阵
% *. x0----------初值
% *. K 区间分为多少,亦为输出步长
% *. N 每段上的划分
% *. T-------T矩阵
%----------------------------------------------------
T=A*2;
fid=fopen('fout_pre_int.txt','w+');
%打开文件
Imax=1e8;
%最大允许积分步数
E=eye(size(A));
M=2^N;
tao=step/M;
At=A*tao;
Ta=At+At*At*(E+At/3+At*At/12)/2;
for i=1:N
Ta=Ta*2+Ta*Ta;
end
T=E+Ta;
%获得T矩阵
x1=x0;
for j=1:Imax
t=t0+j*step;
x2=T*x1;
TMP=[t,x2'];
fprintf(fid,'%10.6f %10.6f %10.6f \n',TMP);
if t>tt
break;
end
x1=x2;
end
status= fclose(fid);
%关闭文件,如果status==0,则关闭成功
%如果status==-1则关闭失败
end