nim001 发表于 2007-11-8 14:46

关于Simpson积分公式请教大家.

做了一个Simpson积分公式的Matlab仿真程序,却怎么也看不到和所看论文一样的结果,不知道是我错了还是怎么回事,请大家帮忙指点。
多谢,说明:该积分程序就是为了验证直流分量对积分的影响。
程序如下:

clear all;
clc;
fs = 2000;   % 采样频率
f = 50;          % 信号频率
N = 1024;      % 采样点数
n = 0:N-1;

x = sin(2*pi*f/fs*n)+0.2;    % 加有直流量的被积信号
nx0 = length(x);               % 即nx0 = N
x0 = sum(x)/nx0;            % 计算均值.
x1 = x-x0;
% 开始积分
y(1) = x1(1);
y(2) = y(1)+(x1(1)+x1(2))/fs/2;      %第二个点用梯形公式积分.
for k=3:nx0
    y(k) = y(k-1)+1/(3*fs)*(x1(k-2)+4*x1(k-1)+x1(k));
end
plot(n/fs,y)

可画出的积分后的图形的峰值和那篇论文上给的不一样,那篇论文上画的图形,该序列积分后峰值大,分别见下图:

请问大家,我这个积分程序有问题吗?

[ 本帖最后由 zhlong 于 2007-11-8 16:33 编辑 ]

破凰 发表于 2007-11-8 15:54

回复 #1 nim001 的帖子

论文的幅值肯定有问题(算出理论的积分值便知)。你的程序这里 y(k) = y(k-1)+1/(3*fs)*(x1(k-2)+4*x1(k-1)+x1(k))有问题;
应是
y(k) = y(k-1)+1/(6*fs)*(x1(k-2)+4*x1(k-1)+x1(k));

这个问题我也一直没搞懂,按公式应该是除以3,但除6结果才是对的。有没有哪位出来解释一下。

[ 本帖最后由 破凰 于 2007-11-8 15:58 编辑 ]

VibrationMaster 发表于 2007-11-8 16:15

单复频信号除以3;实单频除以6

nim001 发表于 2007-11-8 16:48

非常感谢!!!!

破凰 发表于 2007-11-8 17:28

回复 #3 VibrationMaster 的帖子

能不能解释一下取6的原因呀?按数值分析上的Simpson积分公式应是取3。

ChaChing 发表于 2010-12-18 15:58

同问ls的问题

VibrationMaster 发表于 2010-12-19 11:03

回复 6 # ChaChing 的帖子

抱歉,我也搞错了. 请删掉"板凳".
正确的答案是: 1/(3*fs)*(x1(k-2)+4*x1(k-1)+x1(k))中的1/fs是k点和k+1点之间的间隔,而一般教科书上的积分步长是k点和k+2点之间的间距

VibrationMaster 发表于 2010-12-19 17:32

据说书下周印好,我给您寄过去?

ghxue 发表于 2013-11-12 12:34

本帖最后由 ghxue 于 2013-11-12 12:38 编辑

貌似应该是取6,参见:
辛普森法则(Simpson's rule)是一种数值积分方法,是以二次曲线逼近的方式取代矩形或梯形积分公式,以求得定积分的数值近似解。其近似值如下:
C:\Users\Administrator\Desktop\80ca47af148fedc25f9b42d84725c0b2.png
该方法系由英格兰人汤马士·辛普森所创立。

理由:对f(k-2)、4*f(k-1)、f(k)取均值,因为f(k-1)乘了4,故应该取6.
页: [1]
查看完整版本: 关于Simpson积分公式请教大家.