Вот полное сообщение об ошибке:«неопределенная функция или переменная». 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
конец
Пожалуйста, сообщите полное сообщение об ошибке и, кстати, вы создали 'created in mutation', что было, вероятно, комментарием. – Oleg
Несколько вещей. Должен 'Start_Index = size (Index);' фактически быть 'Start_Index = length (Index);', 'Start_Index = size (Index, 1);' или 'Start_Index = numel (Index);' и т. Д.? И в строке, которая вызывает ошибку, у вас есть 'Indicator (i + 1)' -is 'i' всегда меньше, чем количество элементов в этом массиве? – horchler
попробуйте 'dbstop if error' перед запуском багги-кода, который в следующий раз выведет вас в режим отладки, и вы можете проверить, какая переменная отсутствует. –