0

完全なエラー メッセージは次のとおりです。

??? 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);

以下の関数が呼び出されると、非常にまれに、???Undefined Function or variable Indicator というエラーが表示されます。

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

終わり

4

1 に答える 1

1

変数 (Indicator) が作成される前にアクセスしているだけです。

Matlab は Indicator(i+1) が関数または変数を参照しているかどうかを認識していないため、取得しているあいまいなエラー メッセージが生成されます。

ループコードの最初の実行中に、

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

は false です。

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

変数 Indicator が作成される前に実行されます。

Horchlerがコメントしたように、エラーはコードが原因です

Start_Index=size(Index);

どちらであるべきか

Start_Index=length(Index);

コメントしたように、行ベクトルで vidya を呼び出すことでエラーを再現できます。例えば:

vidya(1:10,3,4)
于 2013-08-13T22:56:19.143 に答える