matlab离散数据积分怎么做?高手请进!!!!!!!!!!!!!

如何对已测得的加速度数据(离散的)进行离散积分,得到速度数据?
问题和下面的积分是一样的:
t=0:0.01:2*pi;
x=sin(t);
如何得到x的积分呢?(结果应该是-cos(t),是一条跟sin(t)相同的曲线!)
用辛普森梯形积分或者求和积分都可以,只要能得到正确的结果就行!
请高手帮忙啊!
需要具体程序~~~~~~~~~~~~~~~~~
囧。。犯糊涂啦,连cos(t)的样子都弄混了,⊙﹏⊙b。。。
多谢matlabguy和greatdju的耐心解答~我估计要把你俩折腾疯了,抱歉哈,小弟愚钝!
非常受益呀,看看能不能都采纳为最佳答案~

t=0:0.01:2*pi;
x=sin(t);
s_x=cumtrapz(t,x);%s_x就是x的数值积分
plot(t,x,t,s_x)
___________
楼主请您明白一点,sin(t)的不定积分是-cos(t)+C,C是任意常数,而用数值方法作出来的是定积分,是sin(t)从0积到t的积分,因此在t=0时,就是0。根据牛顿-莱布尼茨定理,其实积出来的是-cos(t)+cos(0)即1-cos(t),这才是定积分的函数曲线。从你的贴图上看,matlabguy的结果和我的结果也是一样的,都是1-cos(t),而不是您所说的cos(t)+1。你一定要得到-cos(t)的话,就把s_x再减去1即可。还有,-cos(t)和sin(t)的曲线不是重合曲线,是两条不同的曲线,甚至相互正交。要处理离散数据积分,在这几个回答之中也只有我这个方法可行了,因为你没有函数关系,无法调用Simpson函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-18

数值积分有很多种方法, 如下图所示(来自wikipeida)

前面几位的回答,分别对应了里面一种算法,另外,数值积分得到的是一个值,如果你需要画图的话,那是代数积分。

保存为mytest.m

function mytest

a=0;

b=2*pi;

n=100;

f=@(x)sin(x);

y=intSimpsons(f,a,b,n);

t=linspace(a,b,n);

y=intSimpsons(f,a,b,n)

function I = intSimpsons(f,a,b,n)

  h=(b-a)/n; xi=a:h:b;

  I= h/3*(f(xi(1))+2*sum(f(xi(3:2:end-2)))+4*sum(f(xi(2:2:end)))+f(xi(end)));

第2个回答  推荐于2017-11-24
将下面内容保存为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);

我服了你了,sint和-cost曲线重合?sint积分得到的是-cost+C,常数C由初始条件决定,一般我们都认为从0开始积分,此时C=1。
数据积分的话用greatdju的方法就行了,他那个结果对,你自己琢磨吧。

参考资料:http://zhidao.baidu.com/question/206597476.html

本回答被提问者采纳