2017-02-12 3 views
1

2つの1軌道の重なり軌道を計算するスクリプトを作成する必要があります。積分はSwiftの積分結果を計算する

Integral

によって与えられ、私は、この使用してコードを計算してみましたが、私の答えはS=(1+R+R^2/3)exp(-R)の解析結果の近くにどこにもありません。誰かが私がどこに間違っていたかを教えてくれるでしょうか?

コード:

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 

R = 5.0

のためには、私の答えは:19.61は

分析の答え:0.097

+0

あなた自身の定数を定義するのではなく、静的プロパティ 'Double.pi'を使うことができます。 – MathewS

+0

良いヒント@MathewS、ありがとう。 – loltospoon

+0

'psi'と' r'と 'R'と' V'は関数定義に何が記述できるのでしょうか?これは、コードのデバッグに役立ちます – Alistra

答えて

0

2つの問題は、私が見ることができます:

  1. 私はあなたのコードでは、単一の波動関数ではなく2の製品を参照してください
  2. ちょうど1dの積分を行うと

はとの適切な三次元の積分をやってみ最後に2PI^2を掛けることが間違っています正しい被積分関数。