2017-02-12 6 views
1

Ich muss ein Skript erstellen, das das Überlapporbital von zwei 1s Orbitalen berechnet. Das Integral wird durchBerechnen des Ergebnisses eines Integrals in Swift

gegeben

Integral

ich dies mit Code versucht, die Berechnung, aber meine Antwort ist bei weitem nicht der analytischen Ergebnis S=(1+R+R^2/3)exp(-R). Könnte mir jemand helfen herauszufinden, wo ich falsch gelaufen bin?

Der Code:

import Foundation 

var sum: Double = 0.0 //The integral result 
var step_size: Double = 0.0000025 
var a: Double = 0.0 
var R: Double = 5.0 
var next_point: Double = 0.0 
var midpoint: Double = 0.0 
var height: Double = 0.0 
var r_val: Double = 0.0 

func psi_func(r_val: Double) -> Double { 

    return exp(-r_val) 
} 

//Integration 

while next_point < R { 

    next_point = a + step_size 
    midpoint = a + step_size/2 
    height = psi_func(r_val: midpoint) 
    sum += psi_func(r_val: midpoint)*step_size 

    a = a + step_size 

} 

print("S = ", 2*3.14159*3.14159*sum) // This is a 3-D orbital, so I multiply by 2*pi*pi 

Für R = 5.0

Meine Antwort: 19.61

Analytic Antwort: 0,097

+0

Beachten Sie, dass Sie die statische Eigenschaft 'Double.pi' verwenden können, anstatt eine eigene Konstante zu definieren. – MathewS

+0

Guter Tipp @Mathews, danke. – loltospoon

+0

Kannst du vielleicht beschreiben, was diese 'psi' und' r' und 'R' und' V' in der Funktionsdefinition sind? Dies würde beim Debuggen des Codes helfen – Alistra

Antwort

0

Zwei Probleme kann ich sehen:

  1. Ich sehe eine einzige Wellenfunktion und nicht das Produkt von zwei im Code
  2. Es ist falsch, von 2 pi^2 am Ende einen 1d integral und multiplizieren, um nur zu tun

Versuchen Sie, ein richtiges 3D-Integral tut mit der richtige Integrand.

Verwandte Themen