'Outliers.m'是从更高级别的.m文件中调用的。变量都在更高级别的文件中定义,并设置为全局变量以供Outliers.m访问。代码的目的是使用Chauvenets Criterion识别异常值,为此,我必须使用Integral函数和函数句柄计算guassian分布的积分。当我输入特定的变量作为测试时,代码可以工作并给出合理的值,但我不能让它在循环中工作。我的数据集由7个单独的样本组成,每个样本1x30,所有这些样本都需要进行分析。我有各种错误,通过积分和功能句柄的指导阅读,但似乎无法找到解决方案...任何帮助或指导将非常感谢....这是我的代码:
n = 7
for x = 1:n
for y = 1:30
z(x,y) = abs((cc(x,y) - mastercc(1,y))/masterccstd(1,y));
xmax(x,y) = mastercc(1,y)+z(x,y)*masterccstd(1,y);
xmin(x,y) = mastercc(1,y)-z(x,y)*masterccstd(1,y);
p(x,y) = 1/(masterccstd(1,y)*(sqrt(2*pi)));
fun(x,y)= @(x,y,z) (exp(-1/2)*z(x,y).^2);
q(x,y) = integral(fun(x,y),xmin(x,y),xmax(x,y),'ArrayValued',true);
pq(x,y) = p(x,y)*q(x,y); % probability
value(x,y) = n*(1/pq(x,y));
count(x,y) = logical(value(x,y) <0.5);
badbins(x)=sum(count(x,:));
end
end
答案 0 :(得分:0)
您的错误似乎是由无效的函数定义引起的。
如果您这样尝试它应该有效:
fun = @(x,y,z) (exp(-1/2)*z(x,y).^2)
现在可以这样调用它,例如:
fun(1,2,magic(4))
答案 1 :(得分:0)
解决循环问题,由Andrei Bobrov通过Matlab Central提供,链接如下:
http://www.mathworks.com/matlabcentral/answers/103958#comment_177000
注意:请注意代码在我在问题描述中解释的目的并不完整,但确实解决了循环错误。