첫 번째 읽기 : 문제는 단순히 절대 값의 괄호가 실제 점수 주변에 있어야한다는 것입니다. 문제는 실제로 실제로는 정확하지 않고 0.000001을 무시하고 0.0001은 허용 오차 (54.994397921372205로 끝나고 55에 가까워 질 때까지 멈 춥니 다. 나는 관용을 0의 미친 양에 1을 더해서 증가시켰다. 그러나 예를 들면 50에 가깝다, 그것은 49.14를 추측한다 !! 무서운! 왜 이런 일이 생길까요?Python에서 Newton Raphson 알고리즘이 작동하지 않습니다. 한 방향으로 만 추정
업데이트 : 내가 몇 가지 벡터 기반의 기능에 속하는 세타를 찾기 위해 노력 오전 float()
로 NEES. 나는이 코드를 R로 실행 시켰고, 이것을 문자 그대로 R에서 Python으로 변환하려고 시도했다. grensscore는 I 세타 = 0.5의 시작 값이 50 같을 때
는 I 세타 값을 근사 할 다음은 R. 로를 반복 그것은 단지에 도착 R의 약 11 번 반복 소요 포인트.
슬프게도 이것은 파이썬에서 작동하지 않습니다. 그리고 나는 이것을 많이 격리 시켰습니다 : 어떤 이유로 값은 0.5 이하로 갈 수 있지만 위에 갈 수는 없습니다. 그 자리에서 인쇄물을 사용하면 코드에서 #a
부분을 실행하지 않고 #b
부분 만 실행하는 것으로 나타납니다. 이것은 값이 절대로 올라갈 수 없다는 것을 보여줍니다. 따라서 0.4와 같은 값을 찾을 수 없습니다 (0.5, 0.25, 0.37.5, 0.4375 등이되어야하기 때문에 0.5, 0.25, 0.125 만 내려갈 수 있습니다). 조만간 중지합니다)
#b를 실행하는 것을 볼 수 있습니다. 그것이 내려 가야 할 때가 여러 번 있지만, 결코 올라가지 않습니다. 주문 효과가 있는지를보기 위해 주위를 바꿨지 만, 그렇지 않다는 것을 알았을 때 (심지어 그것이 내가 아는 경우 라 할지라도) 그것이 사실로 평가되지는 않는다. 누군가가 무엇이 잘못되었는지를 볼 수 있는가? R에서 일하고 있습니까?
def CalcTheta(grensscore, alpha, beta):
theta = 0.5
estimate = [10000] # I just set this to not error on the check
up = 1
down = 0
while((math.fabs(sum(estimate)) - grensscore) > 0.00001):
if estimate == [10000]: # I set it like this,
estimate = [grensscore] # so it will skip the first run
# a.
if (sum(estimate) - grensscore) < 0:
down = theta
print(down)
theta = (theta + up)/2
print(theta)
#b.
if (sum(estimate) - grensscore) > 0:
print(up, down, theta)
up = theta
theta = (theta + down)/2
print(up, down, theta)
for x in range(len(beta)):
if x == 0:
estimate = []
estimate.append(math.exp(alpha[x] * (theta - beta[x]))/(1 + math.exp(alpha[x] * (theta - beta[x]))))
return(theta)
CalcTheta(50, data[:,1], data[:,2])
본인이이 질문을 스스로 해결했는지 여부는 분명하지 않습니다. 이 질문을 해결했다면 자신의 질문에 대한 답변을 작성하면 좋을 것입니다. – nograpes
여기에 오타가 있는지, 실제 코드가 corerct인지 확실하지 않지만'while' 문이있는 행은 열리는 괄호보다 더 많은 괄호를 닫습니다. 구문 오류가 발생할 것이라고 확신합니다. –