0

「Outliers.m」は、上位レベルの .m ファイルから呼び出されます。変数はすべて上位レベルのファイルで定義され、Outliers.m によるアクセスのためにグローバルとして設定されます。このコードの目的は、Chauvenets Criterion を使用して外れ値を識別することです。そのためには、Integral 関数と関数ハンドルを使用して、ガウス分布の積分を計算する必要があります。テストとして特定の変数を入力すると、コードが機能し、適切な値が得られますが、ループで機能させることはできません。私のデータ セットは、それぞれ 1x30 の 7 つの個別のサンプルで構成されており、そのすべてを分析する必要があります。さまざまなエラーが発生し、積分ハンドルと関数ハンドルに関するガイダンスを読みましたが、解決策が見つからないようです...ヘルプやガイダンスをいただければ幸いです....ここに私のコードがあります:

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

ループ問題の解決策、Matlab Central 経由の Andrei Bobrov 提供、以下のリンク:

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

注意: コードは、問題の説明で説明した目的に対して完全ではありませんが、ループ エラーは解決します。

于 2013-10-29T15:50:51.460 に答える
0

あなたのエラーは、無効な関数定義が原因のようです。

このように試してみると、うまくいくはずです:

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

たとえば、次のように呼び出すことができます。

fun(1,2,magic(4))
于 2013-10-25T11:13:04.787 に答える