0

'Outliers.m' 从更高级别的 .m 文件中调用。这些变量都在更高级别的文件中定义,并设置为全局变量以供 Outliers.m 访问。代码的目的是使用 Chauvenets Criterion 识别异常值,为此,我必须使用 Integral 函数和函数句柄来计算高斯分布的积分。当我输入特定变量作为测试时,代码可以工作并给出合理的值,但我无法让它在循环中工作。我的数据集由 7 个单独的样本组成,每个 1x30,所有这些都需要分析。我遇到了各种错误,阅读了关于 Integral 和函数句柄的指南,但似乎找不到解决方案......非常感谢任何帮助或指导......这是我的代码:

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
4

2 回答 2

0

您的错误似乎是由无效的函数定义引起的。

如果你像这样尝试它应该可以工作:

fun = @(x,y,z) (exp(-1/2)*z(x,y).^2)

现在可以像这样调用它,例如:

fun(1,2,magic(4))
于 2013-10-25T11:13:04.787 回答
0

循环问题的解决方案,由 Andrei Bobrov 通过 Matlab Central 提供,链接如下:

http://www.mathworks.com/matlabcentral/answers/103958#comment_177000

注意:请注意,我在问题描述中解释的目的代码并不完整,但它确实解决了循环错误。

于 2013-10-29T15:50:51.460 回答