2013-08-13 2 views
0

Вот полное сообщение об ошибке:«неопределенная функция или переменная». Matlab

??? Undefined function or variable "Indicator". 

Error in ==> vidya at 44 
      Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1); 

Error in ==> PnL at 22 
[Fast] = vidya(Indicator,Shorter_Fast,Longer_Fast); 

Error in ==> DEVolSys at 139 
      Ftemp=OF(data.Indicator,data.Daily_PnL,Pu(1,ii),Pu(4,ii),Pu(2,ii),Pu(5,ii),Pu(3,ii),Pu(6,ii),MinVol); 

Error in ==> Optimser at 15 
MA_lengths=DEVolSys(de,dataList,@PnL); 

Очень редко я получаю ошибку ??? Неопределенная функция или переменная индикатора, когда функция ниже называется.

Согласно MatLab компилятора эта строка вызывает проблему

Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1); 

Это странно, потому что обычно эти проблемы связаны с функциями файлы хранятся в неправильном месте или переменных используется без инициализации.

Однако эта функция неоднократно называется частью схемы оптимизации, и кажется, что большую часть времени она работает отлично, но иногда я получаю ошибку выше?

Похоже, что набор проблемных проблем может вызвать проблему, но я не могу понять, как набор параметров проблемы может вызвать такую ​​проблему? Также с буквально тысячами параметров для тестирования каждого из них требуются сотни шагов, которые мне нужно пройти. Я хотел бы попытаться понять, что может вызвать проблему, поэтому, если я ничего не знаю, что искать.

Так что, если кто-нибудь может объяснить, что может быть причиной такого рода проблемы или хороший способ отладки таких проблем, это было бы здорово,

function [Indicator] = vidya(Index,Short,Long) 


End_Index=1; 

Start_Index=size(Index); 

if Short>Long 
    TestVal=Short; 
else 
    TestVal=Long; 
end 



    for i=Start_Index:-1:End_Index 

      if(i>Start_Index-(TestVal+2))  
         Indicator(i)=Index(i); 
     else 


     Slow=std(Index(i:i+Long-1)); 
     Fast=std(Index(i:i+Short-1)); 

     k=Fast/Slow; 
     sc=2/(Short+1); 

     Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1); 
     end 

    end 

конец

+2

Пожалуйста, сообщите полное сообщение об ошибке и, кстати, вы создали 'created in mutation', что было, вероятно, комментарием. – Oleg

+0

Несколько вещей. Должен 'Start_Index = size (Index);' фактически быть 'Start_Index = length (Index);', 'Start_Index = size (Index, 1);' или 'Start_Index = numel (Index);' и т. Д.? И в строке, которая вызывает ошибку, у вас есть 'Indicator (i + 1)' -is 'i' всегда меньше, чем количество элементов в этом массиве? – horchler

+0

попробуйте 'dbstop if error' перед запуском багги-кода, который в следующий раз выведет вас в режим отладки, и вы можете проверить, какая переменная отсутствует. –

ответ

1

Вы только к переменной (индикатор), прежде чем он будет создан.

Matlab не знает, относится ли индикатор (i + 1) к функции или переменной и генерирует неоднозначное сообщение об ошибке, которое вы получаете.

Если во время первого выполнения вашего кода петли,

if(i>Start_Index-(TestVal+2)) 

ложно, то

Indicator(i)=k*sc*Index(i)+(1-k*sc)*Indicator(i+1); 

будет выполняться до того была создана переменная индикатора.

Как прокомментировал Horchler, ошибка вызвана кодом

Start_Index=size(Index); 

, который должен быть

Start_Index=length(Index); 

Как я заметил, вы можете воспроизвести ошибку, вызвав видье с вектором строки. Например:

vidya(1:10,3,4) 
Смежные вопросы