(define i 0+1i) (define pi (* 4 (atan 1))) (define (sq x) (* x x)) (define (pw x n)(if (= n 0) 1 (* x (pw x (- n 1))))) (define (ph x t p) (* (p t) (exp (- (sq (* (p t) x)))))) (define (int t p) (let ((dx 0.05)) (let inj ((s 0)(x -10)) (if (> x 10) (/ (* s dx) (sqrt pi)) (inj (+ s (ph x t p)) (+ x dx)))))) ; (define (p t) (+ 1 (* t i))) ; not convergent unless |t| < 1 (define (p t) (/ (* 2 (sqrt t)))) ; heat solution (define (p t) (/ (sqrt (+ 1 (* 4 i t))))) ; Schrödinger solution (define (ex x t) (exp (- (sq (* (p t) x))))) (define (dpdt x t) (let ((dt 0.000001)) (/ (- (ph x (+ t dt) p)(ph x t p)) dt))) (define (d2pdx2 x t) (let ((dx 0.00001)) (/ (- (+ (ph (+ x dx) t p) (ph (- x dx) t p)) (* 2 (ph x t p))) (sq dx)))) (define (zz r) (list (/ (dpdt r 1) (d2pdx2 r 1)) (/ (dpdt r 2) (d2pdx2 r 2)))) (zz 1) ; => (1.0000018469521585 0.999976322231711) (zz 1.3) ; => (1.000027412021858 0.9999822685508571) (zz 2.1) ; => (1.0000026843589063 0.9999395481127061) (define (pp t) (* -1/4 (/ (sqrt t) (sq t)))) (define (dpdt2 x t) (- (* (pp t)(ex x t)) (* 2 (sq (p t)) (pp t) (sq x) (ex x t)))) (define (dpdt3 x t) (* (pp t) (- 1 (* 2 (sq (* (p t) x))))(ex x t))) (define (d2pdx23 x t) (let ((sw (lambda (x t) (- (* (pw (p t) 3) 2 x (ex x t))))) (dx 0.000001)) (/ (- (sw (+ x dx) t) (sw x t)) dx))) (define (d2pdx27 x t) (- (* 2 (pw (p t) 3) (- 1 (* 2 (sq (* x (p t)))))(ex x t)))) (d2pdx27 2/3 3/4) ; => -0.23355976366975803 (dpdt3 2/3 3/4) ; => -0.2335597636697579