作业帮 > 综合 > 作业

MATLAB中quad的误差问题

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/05/15 09:40:27
MATLAB中quad的误差问题
y = @(s)sin(0.5*s.^2);
quad(y, 0, 26.9);
结果误差远远超过了缺省值,这是为什么?
而如果将上限增减0.01,即:
quad(y, 0, 26.89);
或quad(y, 0, 26.91);
误差就突然很小了,这到底是什么原因啊,百思不得其解,望各位高手指点一下啊,谢谢!
即使只增加0.001,
即quad(y, 0, 26.901);
就没误差了,但是加0.0001误差就产生了~
MATLAB中quad的误差问题
你这个问题非常好,我测试了一下,发现quad(y, 0, 26.9)=-0.3410要计算1873次函数,而quad(y, 0, 26.89)=0.9222是1997次,quad(y, 0, 26.91)=0.9124是2017次.
不出意外的话quad(y, 0, 26.9)原本应该计算2007次左右才对.在这里出现了程序bug,要深入到quad的源代码中才能排除问题.
另,quad(y, 26.9, 26.89)=0.0038计算了函数13次,数值0.0038,基本正确;quad(y, 26.91, 26.9)=0.0061计算了函数13次,数值0.0061也基本正确.
因此有quad(y, 0, 26.9)=quad(y, 0, 26.89)-quad(y, 26.9, 26.89)=0.9184;或quad(y, 0, 26.9)=quad(y, 0, 26.91)+quad(y, 26.91, 26.9)=0.9185;或者取两个值得平均有quad(y, 0, 26.9)=0.91845.