MATLAB中如何将离散加速度积分求得速度

来源:互联网 发布:淘宝网兼职怎么做 编辑:程序博客网 时间:2024/05/18 02:36

方法一:

E=load('C:\Users\Administrator\Desktop\in.txt');
D=E-sum(E(:,1))/length(E);
figure(1)
plot(D)
 title('滤波前加速度')
%%%%%%%%%%%%%%%%%%%%%%%%%%%


% 积分%%%%%%%%%%%%
dt=0.1;
Sx=0;
for i=1:1:length(D)
Sx=D(i,1)*dt+Sx ;%从最值位置叠加加速度
Vx(i,1)=Sx; %速度矩阵
end
figure(2)
subplot(2,1,1)
plot(Vx)
ylabel('速度')
%%% 直流分量确定和积分基线的标定 %%%%%%%%%%%%%%%%%%%%%
Vx=Vx-sum(Vx(:,1))/length(Vx);
% Sx2=dt*cumtrapz(Vx-0.04) %X方向位移矩阵,其中0.04为通过整周期积分得出的直流分量值。
Sx2=dt*cumtrapz(Vx); %X方向位移矩阵,其中Vx为通过标定后的速度矩阵。
subplot(2,1,2)
plot(Sx2)
ylabel('位移')



方法二:

将下面内容保存为Simpson.m
function y= Simpson(f,a,b,M)
% f被积函数;a积分下限;b积分上限;M子区间个数(将x分为多少个区间)
if M==0
    y=0;
else
h=(b-a)/(2*M);
s1=0;
s2=0;
for i=1:M
    x=a+(2*i-1)*h;
    s1=s1+feval(f,x);
end
for j=1:(M-1)
    x=a+2*j*h;
    s2=s2+feval(f,x);
end
y=h/3*(feval(f,a)+2*s2+4*s1+feval(f,b));
end
在命令行输入
f=@(t)sin(t);
I=[];
M=floor(2*pi/0.01);
for i=0:M
y=Simpson(f,0,2*pi/M*i,i);
I=[I,y];
end
t=0:0.01:2*pi;
plot(t,I);


参考文档:

http://wenku.baidu.com/link?url=Ev0hrBVSJi-0gS98fEx9eEUCOwt6-d5-k30Qm1Tza-Ho2Fv3iif7rGoDD-b3jru9ebuBZzxpK6lCPIiQv00sCdqn_kPjr0XdTOI7AFrNEi7

0 0