2016-11-16 35 views
-3

我的內循環未使用外循環中的新值。 怎麼回事,我該如何解決?變量值沒有進入循環的內部

import numpy as np 
a = 0.0000001 
b = 15. 
d = 0.1 
TOL = 1.0e-6 
a1 = [] 
dd = 0.1 
da1 = [] 
for i in range(0,10): 
    def f(v): 
     return np.cosh(d * v) - (1./v) * np.sinh(d * v) - 1. 
    FA = f(a) 
    FB = f(b) 
    for I in range(0,1000): 
     p = a + (b - a)/2.0 
     FP = f(p) 
     if FA == 0 or (b - a)/2.0 < TOL: 
      break   
     I = I + 1 
     if FA * FP > 0: 
      a = p 
      FA = FP 
     if FA * FP < 0: 
      b = p 
    a1.append(p) 
    da1.append(d) 
    d = d + dd 
print a1 
print da1 

這是第二個實現。變量d顯示新值,但內部循環不斷給我相同的結果結果,就像它沒有註冊新的d值。

import numpy as np 
a = 0.00001 
a1 = [] 
dd = 0.1 
da = 1.e-5 
d = 0.1 
yvs=[] 
ds = [] 
EE = [] 
while d <= 1.: 
    dnew = d 
    print dnew 
    for i in range(0,1000000): 
     dnew = d 
     yv = np.cosh(dnew * a) - (1./a) * np.sinh(dnew * a) - 1. 
     yvs.append(yv) 
     a = a + da 
     a1.append(a) 
     i = i + 1 
    for ii in range(0,999999): 
     As = (a1[ii]+a1[ii+1])/2. 
     E = -1. * As**2  
     if yvs[ii]*yvs[ii+1] < 0: 
      EE.append(E) 
      print As, E 
     ii = ii + 1 
    d = dnew + dd 
+0

你爲什麼要在循環中定義一個方法?沒有辦法高效。 –

+1

這是難以辨認的。請閱讀[如何提問](http://stackoverflow.com/help/how-to-ask),並將該代碼編輯到您的問題中。 –

+0

那些小小的,難以理解的變量名稱讓我想起了從雜誌手動複製到我的[TI-99/4A](https://en.wikipedia.org/wiki/Texas_Instruments_TI-99/4A)中的TI BASIC程序八十年代。自我記錄的名稱確實值得額外的擊鍵,特別是如果你以後需要在代碼上做更多的工作。 –

回答

1

我刪除了我較早的答案;這不是你遇到的主要問題。

您追查了錯誤的值:ddnew確實發生了變化。但是,它們不是您擔心的值的數據流的一部分。

在上部程序,d完全取決於其開始值和遞增值,兩者0.1,並且DD不改變。 p僅取決於ab的值,其也不會改變。

是的,你做了一些很好的工作來計算FA,FB,FP - 但是然後你打到循環的底部,你不會將它們保存到任何地方,然後在下一個循環中覆蓋tehm。

如果下部程序,你有作爲Ë同樣的問題:你永遠不會改變它們所依賴的參數(這是所有在YVS,你永遠不會打印出來),所以輸出端每個循環都是一樣的。

由於您使用的是單字母和雙字母變量,並且沒有記錄您的代碼,所以我不知道如何解決這個問題:雖然我不知道程序應該做什麼,但它似乎想要收斂一些計算系列。

+0

謝謝,我修好了.. –