-2

私は次のコード(より大きなプログラムの一部)を持っていますmatlab

while(k<n)
C.(sprintf('Cnew')) = C.(sprintf('C%d',k));
d1 = equalize_dimension(a.F, C.(sprintf('Cnew')));
distance_new = distance(d1.x, d1.y);
k = k + 1;
end

プログラムの一部を含めたので値を置き換えたい場合、これは次のようになります。

C.(sprintf('Cnew')):

78

そして、a.Fそれは次のとおりです。

78 82 84 80

80 84 86 82

82 87 88 85

82 87 89 86

関数についてequalize_dimension(x,y)は、次のとおりです。

function n = equalize_dimension (x,y)
        [r1 c1] = size(x);
        [r2 c2] = size(y);

        if r1<r2
        e= r2-r1;
        for i=1:e
        x(r1+1,1)=0;
        r1 = r1 + 1;
        end
        [r1 c1] = size(x);
        n.x =x;
        n.y = y;
        end

        if r1>r2
        e = r1-r2;
        for i=1:e
        y(r2+1,1)=0;
        r2 = r2 + 1;
        end
        [r2 c2] = size(y);
        n.x = x;
        n.y = y;
        end

        if c1<c2
        e= c2-c1;
        for i=1:e
        x(1,c1+1)=0;
        c1 = c1 + 1;
        end
        [r1 c1] = size(x);
        n.x = x;
        n.y = y;
        end

        if c1>c2
        e = c1-c2;
        for i=1:e
        y(1,c2+1)=0;
        c2 = c2 + 1;
        end
        [r2 c2] = size(y);
        n.x = x;
        n.y = y;
        end

        if r1==r2 && c1==c2
        n.x =  x;
        n.y = y;
        end

また、distance(x,y)関数は次のようになります。

function m = distance(x,y)
[r c] = size(x);
for i=1:r
     for j=1:c
     summation = (sum(sum(pdist2(x,y))));
     end
end
     m=summation;
end

プログラムを実行すると、次のエラーが発生します。

??? Index exceeds matrix dimensions.

Error in ==> fs at 36
distance_new = distance(d1.x, d1.y);

何故ですか?

ありがとう。

4

1 に答える 1

3

まず、行distance_new = distance(d1.x, d1.y); とタイプの前にデバッガーで停止します

>> which distance

私はあなたが出力として得るだろうと思う

距離は変数です。

distance同じ名前の変数を使用して関数をオーバーライドすることを意味します。

第二に、関数では、ネストされdistanceたループの理由は何ですか?これらの変数は使用しておらず、ネストされたループに関係なく計算されます。また、変数として使用ないようにして ください。ijsummation
ij

于 2013-02-13T10:18:41.353 に答える