2016-11-16 1 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 프로그램을 상기시켜줍니다. 1980 년대. 자체 문서화하는 이름은 특히 나중에 코드에 대해 더 많은 작업을해야하는 경우에 추가 키 누를 가치가 있습니다. –

답변

1

이전의 대답을 삭제했습니다. 당신이 가진 주요 문제가 아닙니다. Ddnew 할, 참으로, 변경 :

당신은 잘못된 값을 추적. 그러나이 값은 걱정되는 값의 데이터 흐름에 포함되지 않습니다. 상부 프로그램에서

, D 그들 모두 0.1, 시작 값 및 증분 값에만 의존하고 DD는 변화하지 않는다. pb의 값에만 의존하며이 값도 변경되지 않습니다.

그렇습니다. FA, FB, FP를 계산할 때 좋은 일을합니다. 그러나 루프의 맨 아래를 치면 어디에도 저장하지 않고 다음 루프에서 tehm을 덮어 씁니다.

낮은 프로그램, 당신은 E으로하고 와 같은 문제가있는 경우 : 당신은 그들이 의존하는 매개 변수 (즉, yvs, 당신은 인쇄 결코 모든입니다) 그래서 출력을 변경하지 않을를 모든 루프마다 동일합니다.

1 문자 및 2 문자 변수를 사용하고 코드를 문서화하지 않았기 때문에이 문제를 해결할 수있는 좋은 방법이 없습니다. 프로그램에서 수행해야 할 작업이 거의 없습니다. 어떤 계산 시리즈를 수렴하기를 원한다.

+0

고마워요, 제가 고쳤습니다 .. –

관련 문제