2012-01-23 20 views
0

Iは、MATLAB関数を書かれている。私はそれをシミュレートするように以下のエラーがアクセスする配列要素

h(n) = (str.(n)); 

を発生? 非構造体配列の参照フィールドへの試み。 私はそれを理解できませんでした。誰も助けることができますか?

機能制御(のvarargin)

str = { 
    'violet'; 
    'indigo'; 
    'blue'; 
    'green'; 
    'yellow'; 
    'orange'; 
    'red'; 
    }; 

N = length(str); 
h = zeros(N,1); 
for n =1:N 
    h(n) = str.(n); 
end 

ステートメントH(N)の問題点は何ですか? str要素をh(n)に格納したい。私はまた、別の関数から値をvibgyorに渡したいと思っています。他の機能からどのように呼び出すのですか?

答えて

1

変数strは構造体ではなく、文字列の配列です。あなたにこれを与えるだろうしかし

h(n) = str(n); 

strは構造がされていません述べたように あなたはあなたがちょうどこのライン上のドットを除去するであろうn番目の要素を参照するために

str = { 
    'violet'; 
    'indigo'; 
    'blue'; 
    'green'; 
    'yellow'; 
    'orange'; 
    'red'; 
    }; 

N = length(str); 
h = zeros(N,6); 

for n =1:N 
    X=cell2mat(str(n)); 

    for m=1:length(X) 
     h(n,m) = X(m); 
    end; 
end 

h 
1

以下のように変換することができますエラー:あなたがゼロにhを初期化し、あなたはそれセルアレイ作るしようとしているためである

??? The following error occurred converting from cell to double: Error using ==> double Conversion to double from cell is not possible.

。だから、次のように変更する必要があります。

str = { 
    'violet'; 
    'indigo'; 
    'blue'; 
    'green'; 
    'yellow'; 
    'orange'; 
    'red'; 
    }; 

N = length(str); 
h = cell(N,1); 
for n =1:N 
    h(n) = str(n); 
end 

しかし、あなたがやっているすべてはstrhを割り当てている場合は、なぜあなたはforループをスキップしないだろうし、ちょうどこの

h = str; 
を行います