2013-07-17 122 views
1

我有一個功能,fitness.m。該函數定義如下:這個MATLAB函數有什麼問題?

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. 

什麼是wr用我的代碼?

+1

是一個字符串還是一個雙精度數組? – am304

+2

請詳細說明您嘗試調試此行爲。這就是說,我認爲你的功能只是'sum(par =='1',2)'... –

+0

@EitanT你是對的,它只是做到了!謝謝你爲我節省了很多空間,但我仍然不明白爲什麼我的功能不起作用。 – roni

回答

1

只需做下面的事情,然後你就不必擔心索引超過矩陣的尺寸。

面值是細胞

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

這確實有這樣的假設面值是包含字符串的單元格,但不應該是一個遠伸

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