设置正弦函数采样时间为0.1,仿真时间30.幅值为10.
图1
从上图看出数值误差为零,积分误差为(-0.5,0.5)之间。
设置正弦函数采样时间为0.1,仿真时间30.幅值为100.
图2
从上图看出,正弦函数值误差为0,正弦函数积分误差为(-5,5).
从图1图2看出函数值越大,函数积分误差值越大。
图3
图3为采样时间0.1,仿真时间30.幅值为100的正弦函数图。
结合图1到图3看出,积分误差的波动趋势和正弦函数走势一致,
因此得到积分误差与函数值比值图
幅值为100采样间隔为0.1的比值图
图4
幅值为10采样间隔为0.1的比值图
图5
从图4图5可以看出幅值不同,采样间隔相同,积分误差与函数值的比值相同。这表明在采样间隔不变的情况下不同的函数值并不会影响积分误差值,并且积分误差值为函数值的0.05倍。
设置采样间隔为0.01
图6
从图5和图6看出间隔变小一个数量级,比值也随着变小一个数量级。当仿真间隔为0.01时比值为0.005.这表明,仿真时间越小,积分误差值越小,当仿真间隔为0.01,积分误差值为函数值的0.005倍。
综上所述,通过脚本与simulink运算结果的对比得出,下面代码在求函数积分时是可以使用的。
t=30;
ts=0.01;
xdf(1)=0;%积分初始值
load('matlab.mat');
for k=1:1:t/ts+1
if k==1
K=k-1;
times(k)=K*ts;
xd(k)=100*sin(K*ts);
else
K=k-1;
times(k)=K*ts;
xd(k)=100*sin(K*ts);
xdf(k)=xdf(k-1)+(xd(k-1)+xd(k))*ts/2;
end
end
figure(1)
plot(xd'-z(:,1));
figure(2)
plot(times,(xdf'-z(:,2))./xd')
figure(3)
plot(xd);
figure(4)
plot((xdf'-z(:,2)))