2

if ステートメントの条件が false の場合に自分自身を呼び出すスクリプトがあります。ユーザーが定義する反復の最大回数は、最大 20 回です。

問題は、アルゴリズム自体の内部で変化する変数があり、if ステートメントの条件が false の場合、プロセス全体が最初からやり直すことです。問題は、再起動時に行われる新しい計算は、最初の値ではなく、最後に計算された値に依存する必要があるということです。この時点で、set-get 関数を使用して目的を達成しています。設定値基準の問題は、実行のたびに GUI が更新されることであり、これには非常に時間がかかります。どんなアイデアでも大歓迎です。以下は動作するコードですが、長いです。これは実際のスクリプトの非常に短い要約ですが、目的は果たしていることに注意してください。

FunctionOne
       InitialPrice=str2double(get(handles.StockP,'String'));
       TargetPrice=105;
       T=str2double(get(handles.Time,'String')); %This value is maximum 20 
       StockPrice= InitialPrice*(1+randn) %just for simplicity
       If Time > 0 
            If StockPrice>TargetPrice 
              update the GUI %end
            else 
               set(handles.StockP,(StockPrice))
               set(handles.Time,'String',(T-1))
               FunctionOne  
            end
        end
end
4

2 に答える 2

1

FunctionOneに以下のような引数を取らせることはできますか?FunctionOneの内部から呼び出す場合は、2つの引数を渡しますが、外部から関数を呼び出す場合は、以前のように引数なしで呼び出します。

FunctionOne (StockP,Time)

   if nargin == 2
       InitialPrice = StockP;
       T = Time;
   else 
       InitialPrice=str2double(get(handles.StockP,'String'));
       T=str2double(get(handles.Time,'String')); %This value is maximum 20 
   end

   TargetPrice=105;
   StockPrice= InitialPrice*(1+randn) %just for simplicity

   If T > 0 
        If StockPrice>TargetPrice 
          update the GUI %end
        else 
           FunctionOne(StockPrice,T-1); 
        end
    end
end
于 2013-01-23T05:06:12.763 に答える
0

おそらくStockPrice、グローバル配列に格納し、再帰呼び出しを削除して、すべての計算ステップが完了した後にのみ GUI を更新することができます。何かのようなもの:

FunctionOne(InitialPrice, TargetPrice, Time)
    StockPrice(1) = InitialPrice;
    T = ...;
    i = 1;

    while( T>0 )
        i = i+1;
        T = T-1;
        StockPrice(i) = StockPrice(i-1)*(1+randn);
    end

    Update the GUI %not sure if you want to only use certain StockPrice values or all of them
end
于 2013-01-23T05:21:31.753 に答える