声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1903|回复: 13

[综合讨论] 如何实现对一数据序列积分

[复制链接]
发表于 2015-4-27 10:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
比如
t=0:0.001:1;
x=t.^2;
要对t的平方积分,得到y,y应该是三分之一乘以t的三次方这样一个数据序列。
我要积分的数据序列是没有函数表达式的,只有x和t的对应关系,所以用int命令不可行,求大神指点。

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2015-4-27 10:53 | 显示全部楼层
还有一个微分的问题,x对应于t的一个数据序列,如果用diff函数的话,微分一次会少一个数据点,怎么样才能让数据点个数不变呢
Unnamed QQ Screenshot20150427105237.png
发表于 2015-4-27 14:51 | 显示全部楼层
看看cumtrapz的用法

评分

1

查看全部评分

 楼主| 发表于 2015-4-27 15:38 | 显示全部楼层
chybeyond 发表于 2015-4-27 14:51
看看cumtrapz的用法

谢谢,就是它,是我想要的结果
 楼主| 发表于 2015-4-27 15:40 | 显示全部楼层
chybeyond 发表于 2015-4-27 14:51
看看cumtrapz的用法

还有那个微分的问题你知道怎么解决吗?
发表于 2015-4-27 16:00 | 显示全部楼层
hht123 发表于 2015-4-27 15:40
还有那个微分的问题你知道怎么解决吗?

diff出来就是少一个数
发表于 2015-4-27 16:03 | 显示全部楼层
chybeyond 发表于 2015-4-27 16:00
diff出来就是少一个数

你可以在起始位置或终点补零
 楼主| 发表于 2015-4-27 16:24 | 显示全部楼层
chybeyond 发表于 2015-4-27 16:03
你可以在起始位置或终点补零

没有别的办法了吗?就像t的平方微分出来是2t,数据序列长度不要变,补零的话会影响精度的
发表于 2015-4-27 16:32 | 显示全部楼层
hht123 发表于 2015-4-27 16:24
没有别的办法了吗?就像t的平方微分出来是2t,数据序列长度不要变,补零的话会影响精度的

你可以用
  1. syms t;
  2. diff(t.^2);
  3. %然后把t的值带入
复制代码
 楼主| 发表于 2015-4-27 16:59 | 显示全部楼层

不是的,跟积分一样,x和t之间只有对应关系,没有表达式呢
发表于 2015-4-27 17:17 | 显示全部楼层
hht123 发表于 2015-4-27 16:59
不是的,跟积分一样,x和t之间只有对应关系,没有表达式呢

这个不是跟积分一样吗
  1. syms t;
  2. x=t.^2;
  3. y=diff(x);
  4. y=subs(y,0:0.01:1)
复制代码
 楼主| 发表于 2015-4-27 19:28 | 显示全部楼层
哦,明白了,得用符号变量做啊,最后再转为double型就好了,谢谢你
 楼主| 发表于 2015-4-27 20:52 | 显示全部楼层
chybeyond 发表于 2015-4-27 17:17
这个不是跟积分一样吗
  1. T=1;
  2. fs=10;
  3. t=0:1/fs:T;
  4. Sig=sin(2*pi*t);
  5. diff1=diff(Sig)./diff(t);
  6. Diff1=diff1
  7. syms diff1
  8. y=subs(diff1,t);
  9. y=double(y)
  10. 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显然跟它们差很多啊
 楼主| 发表于 2015-4-27 21:17 | 显示全部楼层
del2函数可以,程序如下:
  1. T=1;
  2. fs=100;
  3. t=0:1/fs:T;
  4. Sig=sin(2*pi*t);
  5. sig=-4*pi*pi*sin(2*pi*t);
  6. deri=4*del2(Sig,t);
  7. plot(t,Sig,'r',t,sig,'b',t,deri,'k')
复制代码


但是为什么只有二次积分可以呢,一次积分没有相关的函数
Unnamed QQ Screenshot20150427211822.png
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-5 20:20 , Processed in 0.064974 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表