2012-09-08 57 views
0

我得到一個錯誤有:MATLAB:錯誤的subsref

b = cellfun(@(x) nansum(mag.*subsref(cross(u{1},x), struct('type', '()', 'subs', {':',':',3}))),r,'UniformOutput',false); 

??? Error using ==> subsref 
The "subs" field for the subscript argument to SUBSREF and SUBSASGN must be a cell or character array. 

Error in ==> cellcross>@(x)nansum(mag.*subsref(cross(u{1},x),struct('type','()','subs',{':',':',3}))) at 2 
    b = cellfun(@(x) nansum(mag.*subsref(cross(u{1},x), struct('type', '()', 'subs', {':',':',3}))),r,'UniformOutput',false); 

Error in ==> cellcross at 2 
    b = cellfun(@(x) nansum(mag.*subsref(cross(u{1},x), struct('type', '()', 'subs', {':',':',3}))),r,'UniformOutput',false); 

誰能告訴我爲什麼?

我用Matlab 2011年

+0

你能不能給一個最小的工作的例子嗎? – Egon

回答

3

如果調用結構與單元陣列中的一個字段,你是哪裏單元陣列的內容分佈在要素結構的數組。這發生在struct('type', '()', 'subs', {':',':',3})

我曾經寫過一些代碼來解決這個「功能」:

function newStruct = structWithCell(varargin) 
    % Constructs a structure with cell variables as MATLAB would make a struct 
    % array by using the equivalent struct() call 
    % Setting values to cell() straight away doesn't work unfortunately 
    % as MATLAB(R) interprets structs with cell values as a cell array of structs. 
    assert(mod(nargin,2)==0,'An even number of arguments is expected'); 
    newStruct = struct(); 
    keys  = varargin(1:2:end-1); 
    values = varargin(2:2:end); 
    for iKV = 1:numel(keys) 
     newStruct.(keys{iKV}) = values{iKV}; 
    end 
end 

如果你有上面的一個函數調用替換您到struct通話,應該不會有問題的工作。

或者,你也可以是部分更改爲struct('type', '()', 'subs', {{':',':',3}})。這樣,你傳遞一個包含單個單元格數組的單元格數組。這會讓你得到你想要的。

+0

只是想你替代建議(因爲我還沒有完全得到我的頭周圍已創建尚未功能)。替代解決方案導致相同的錯誤。接下來會嘗試你的功能。謝謝你的幫助。 – brucezepplin

+0

那麼,那個函數'structWithCell'和'struct'幾乎有相同的參數。它只是對它的參數進行迭代並將它們添加到新創建的結構體中,而沒有對單元數組進行任何特殊行爲(這是由'struct'專門處理的)。 – Egon

+1

來解決這個結構與細胞的說法,最簡單的方法是使用雙大bracets:'結構( '型', '()', '潛艇',{{ ':', ':',3}})' – Shai