2015-03-13 4 views
0

В Matlab я пытаюсь перераспределить глобальный массив структур. 1. Превращение ключевого слова global получает ошибку. 2. Я получаю сообщение об ошибке, чтобы перераспределить объектКак перераспределить глобальный массив структур в Matlab

E.g. - Несоответствие размеров подзапросов.

Ошибка в IronCondor (строка 41) ОпцииChain (MaxOptions + 1) = s; % Убеждаться совместимости

MaxOptions = 3000; 
OptionsChain = struct('symbol', {}, 'expiration', {}, 'strike_price', {}, 'bid', {}, 'ask', {}, 'last', {}, 'volume', {}, 'last_time', {}); 

if ~isempty(OptionsChain) && isstruct(OptionsChain) 
    OptionsChain(MaxOptions+1) = s; % make sure compatibility 
end 
+0

Hi! Помог ли мой ответ? – rayryeng

ответ

1

ли это вместо:

MaxOptions = 3000; 
OptionsChain = struct('symbol', {}, 'expiration', {}, 'strike_price', {}, 'bid', {}, 'ask', {}, 'last', {}, 'volume', {}, 'last_time', {}); 
OptionsChain = repmat(OptionsChain, MaxOptions, 1); 

Ваш код не работает, потому что OptionsChain изначально структура размера 1. Doing OptionsChain(MaxOptions + 1) означает, что вы пытаетесь поставить структуру на место 3001, где это выходит за пределы.

Таким образом, вы можете делать то, что я сделал выше, используя repmat дублировать OptionsChain 3000 раз, так что вы получите 3000 элементов этой структуры, или в менее изящным способом, вы можете это сделать в for цикле:

OptionsChain = struct('symbol', {}, 'expiration', {}, 'strike_price', {},  'bid', {}, 'ask', {}, 'last', {}, 'volume', {}, 'last_time', {}); 
s = OptionsChain; 
for idx = 1 : MaxOptions-1 
    OptionsChain(end+1) = s; 
end 

end+1 позволяет вам делать что-то в конце массива, и нам нужно всего лишь сделать это за MaxOptions-1 раз, так как у нас уже есть один экземпляр его созданного.

Смежные вопросы