2013-09-21 1 views
1

나는 정확한 결과를 얻는 것처럼 보일 수는 없지만 다른 방법으로 내 nth 값을 설정하는 법을 알지 못합니다 ... 그것은 0th와 1 차 미분을 정확히합니다. 그러면 그것은 저에게 미친 음수를줍니다. 무슨 문제인지 알아?내 계획 프로그램에서 n 번째 미분을 얻으려면 어떻게해야합니까?

코드 :

(define (der f h) 
    (lambda (x) (/ (- (f (+ x h)) (f x)) 
          h) 
        ) 
       ) 
    (define (cube x) (* x x x)) 

    (define (many-der f h n) 
     (if (= n 0) 
      f 
      (many-der (der f h) h (- n 1)))) 

    (define der-of-cube-n (many-der cube .00000000000001 2)) 
(der-of-cube-n 5) 

-142108547152020.03

내가 그렇게 한 다음 다른 문 데르 시작 rearange을 시도했지만 나는 같은 출력 N = 2를 얻을 수 ..

도움을 주시면 대단히 감사하겠습니다 !!

답변

3

h.00000000000001이 너무 작습니다. 너무 작아서 반올림 오류가 발생합니다. 여기에 또 다른 h

(define der-of-cube-n (der-n cube 0.0001 2)) 
> (der-of-cube-n 5) 
30.000597917023697 

참고로 결과이다 x^3의 초 미분 6x이다.

물론 Scheme의 중요한 속성 중 하나는 정확한 임의의 정밀도를 지원한다는 것입니다. 그래서 만약 당신이 정말로 h을 작게하고 싶다면 입력을 '정확한'것으로 공식화 할 수 있습니다. 좋아요 :

> (define der-of-cube-n (der-n cube (/ 10000000000000) 2)) 
> (der-of-cube-n 5) 
150000000000003/5000000000000 
> (rationalize (der-of-cube-n 5) 0.01) 
3e1 
관련 문제