如何实现对一数据序列积分
比如t=0:0.001:1;
x=t.^2;
要对t的平方积分,得到y,y应该是三分之一乘以t的三次方这样一个数据序列。
我要积分的数据序列是没有函数表达式的,只有x和t的对应关系,所以用int命令不可行,求大神指点。
还有一个微分的问题,x对应于t的一个数据序列,如果用diff函数的话,微分一次会少一个数据点,怎么样才能让数据点个数不变呢
看看cumtrapz的用法 chybeyond 发表于 2015-4-27 14:51
看看cumtrapz的用法
谢谢,就是它,是我想要的结果 chybeyond 发表于 2015-4-27 14:51
看看cumtrapz的用法
还有那个微分的问题你知道怎么解决吗?
hht123 发表于 2015-4-27 15:40
还有那个微分的问题你知道怎么解决吗?
diff出来就是少一个数 chybeyond 发表于 2015-4-27 16:00
diff出来就是少一个数
你可以在起始位置或终点补零 chybeyond 发表于 2015-4-27 16:03
你可以在起始位置或终点补零
没有别的办法了吗?就像t的平方微分出来是2t,数据序列长度不要变,补零的话会影响精度的 hht123 发表于 2015-4-27 16:24
没有别的办法了吗?就像t的平方微分出来是2t,数据序列长度不要变,补零的话会影响精度的
你可以用syms t;
diff(t.^2);
%然后把t的值带入 chybeyond 发表于 2015-4-27 16:32
你可以用
不是的,跟积分一样,x和t之间只有对应关系,没有表达式呢 hht123 发表于 2015-4-27 16:59
不是的,跟积分一样,x和t之间只有对应关系,没有表达式呢
这个不是跟积分一样吗syms t;
x=t.^2;
y=diff(x);
y=subs(y,0:0.01:1) 哦,明白了,得用符号变量做啊,最后再转为double型就好了,谢谢你{:{03}:} chybeyond 发表于 2015-4-27 17:17
这个不是跟积分一样吗
T=1;
fs=10;
t=0:1/fs:T;
Sig=sin(2*pi*t);
diff1=diff(Sig)./diff(t);
Diff1=diff1
syms diff1
y=subs(diff1,t);
y=double(y)
truediff=2*pi*cos(2*pi*t)
结果如下:
Diff1 =
5.8779 3.6327 0 -3.6327 -5.8779 -5.8779 -3.6327 -0.0000 3.6327 5.8779
y =
Columns 1 through 10
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000
Column 11
1.0000
truediff =
Columns 1 through 10
6.2832 5.0832 1.9416 -1.9416 -5.0832 -6.2832 -5.0832 -1.9416 1.9416 5.0832
Column 11
6.2832
y显然跟它们差很多啊 del2函数可以,程序如下:
T=1;
fs=100;
t=0:1/fs:T;
Sig=sin(2*pi*t);
sig=-4*pi*pi*sin(2*pi*t);
deri=4*del2(Sig,t);
plot(t,Sig,'r',t,sig,'b',t,deri,'k')
但是为什么只有二次积分可以呢,一次积分没有相关的函数
页:
[1]