2013-01-23 79 views
2

我有一個自稱在當if語句的條件爲假的腳本。用戶定義的最大迭代次數可以達到20次。替代「設置值」

的問題是,存在該算法本身的內部變化的變量(一個或多個),如果if語句的條件爲假,整個過程將重新開始。事情是,當它再次啓動時要進行的新計算應取決於最後計算的值,而不是最初計算的值。在這一點上,我正在通過使用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 

回答

1

你可以有FunctionOne參數如下?當從FunctionOne內部調用時,您傳遞了兩個參數,但是當從外部調用該函數時,您可以像以前那樣不帶參數地調用它。

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 
+0

非常感謝Karthik的回答。我很快就會應用這些代碼(在幾個小時內或者明天最大的時刻,因爲有緊急事情發生),並在這裏發佈更新。請注意,真實的代碼長度超過100行,並且會添加更多的輸入內容,以及更多嵌套的if語句。我相信,您的解決方案應該努力 - - 再次感謝所有最好// –

+0

大家好,非常感謝 - 其實稍加編輯後,它的工作原理perfectly--它仍然會消耗一些時間,但似乎是在這個過程中,而不是在該方法遵循。 再次感謝所有與最佳 –

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 
+0

非常感謝M0nk3y您的幫助,我會嘗試你的代碼與一個由Karthic發佈不久沿,並會爲您提供一次可用的更新。您的代碼看起來很血統,但我怕我會運用它的困難我真正的代碼很長,有很多嵌套如果內 - 但我讓你知道的結果反正。 再次感謝 - 你的幫助是非常讚賞。 –

+0

你好, 我真的很感激你的答案,它的工作方式太好了,但我只能選擇一個答案,因爲那是我必須選擇的第一個答案; 很多再次感謝和所有最好的// –