1

機能がありfitness.mます。関数は次のように定義されています。

function A = fitness(par)
    n = size(par,1)
    l = size(par,2)
    fitness_val = zeros(1,n);
    for i=1:n
        for j=1:l
            fitness_val(i) = fitness_val(i) + str2num(par(i,j));
        end
    end
    A = fitness_val

私は今、このコードを実行しています:

%par is a char array
par =

1110001101
0110010001
1100010100
0110010111
1100111100
1100000101

fitness(par)

私の出力は

A =

 6     4     4     6     6     4

代わりに、次のような奇妙なエラーがスローされます。

>> fitness(par)
Index exceeds matrix dimensions.

コードの何が問題になっていますか?

4

1 に答える 1

1

次のようなことを行うだけで、インデックスがマトリックスの次元を超えることを心配する必要はありません。

パーはセルです

for i = 1:numel(par) 
    fitness_val(i) = sum(par{i}=='1');
end

これは、par が文字列を含むセルであると仮定しますが、それは大げさではありません。

またはfunction形式で

function fitVal = fitness(par);
    fitVal = zeros(1,numel(par));
    for i = 1:numel(par)
        fitVal(i) = sum(par{i}=='1');
    end
end

par は行列です

function fitVal = fitness(par)
    fitVal = sum(par == '1',2).';
end
于 2013-07-17T14:34:58.403 に答える