作业帮 > 综合 > 作业

matlab中 积分函数quad使用问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/30 15:12:25
matlab中 积分函数quad使用问题
function y=density(x)
xd=[-0.1:0.001:0.1];
h=1.05*std(xd)*(length(xd)^(-1/5));
y=1/(length(xd)*h)*sum(1/sqrt(2*pi)*exp(-(((x-xd)/h).^2)/2));
end
%%%
quad(@density,0,1)
%%运行上述语句发生错误 为什么?
Error using -
Matrix dimensions must agree.
Error in density (line 4)
y=1/(length(xd)*h)*sum(1/sqrt(2*pi)*exp(-(((x-xd)/h).^2)/2));
Error in quad (line 72)
y = f(x,varargin{:});
发生错误的原因主要是由于quad在做积分元算时,每次迭代会给x一组数据而不是一个数,所以x是一个向量,以此计算出的y也是一个向量,再将向量y中元素的差叠加求出积分.
而在你的函数中又有一个求和的运算,导致x-xd这一步中,xd也是一个向量.quad计算给x的向量和xd的向量长度不统一出现错误.
在这里需要将x-xd的x 和xd都拓展成矩阵,然后求和得出y向量
程序改为:
function y=density(x)
xd=[-0.1:0.001:0.1]';
h=1.05*std(xd)*(length(xd)^(-1/5));
y=1/(length(xd)*h)*sum(1/sqrt(2*pi)*exp(-(((ones(length(xd),1)*x-xd*ones(1,length(x)))/h).^2)/2));
end