Hallo alle miteinander
Ich habe ein Problemchen, das meine mathematischen Fähigkeiten anscheinend übersteigt, und möchte euch gerne um Rat bitten.
Eine größere Kalkulation soll erweitert werden und aus Excel in ein eigenständiges Programm in vb.net geschrieben werden.
Dafür benötige ich eine Funktion, welche mir das gleiche Ergebnis liefert, wie NORMINV in Excel es würde.
Ich habe folgende Ausgangswerte:
Ertrag aus Gutachten: 15.217.383
Standardabweichung: 228.260,745
Wahrscheinlichkeit: 75% -> 0,25
Gesucht: neuer Ertragswert (Normalverteilt)
In Excel gibt es nun die Funktion NORMINV(Wahrsch.;Mittelwert;Standardabweichung) welche mir "Quantile der Normalverteilung" zurückgibt.
So liefert mir die Funktion NORMINV(0,25;15217383;228260,745) das Ergebnis 15.063.423,50
Kann mir dort jemand unter die Arme greifen und mir mit vb.net-code oder pseudo-code behilflich sein ?
Viele Dank & mfg
EDIT: hier die Lösung dank langem googlen:
Function NormInv(ByVal Probability As Double, ByVal Mu As Double, ByVal _
Sigma As Double)
Dim x As Double Dim p As Double
Dim c0 As Double, c1 As Double, c2 As Double
Dim d1 As Double, d2 As Double, d3 As Double
Dim t As Double
Dim q As Double
q = Probability
If (q = 0.5) Then
NormInv = Mu
Else
q = 1.0# - q
If ((q > 0) And (q < 0.5)) Then
p = q
Else
If (q = 1) Then
p = 1 - 0.9999999 ' JPR - attempt to fix divide by zero
' below, what is NormInv(1,x,y)?
Else
p = 1.0# - q
End If
End If
t = Sqrt(Log(1.0# / (p * p)))
c0 = 2.515517
c1 = 0.802853
c2 = 0.010328
d1 = 1.432788
d2 = 0.189269
d3 = 0.001308
x = t - (c0 + c1 * t + c2 * (t * t)) / (1.0# + d1 * t + d2 * (t * _
t) + d3 * (t ^ 3))
If (q > 0.5) Then
x = -1.0# * x
End If
End If
NormInv = (x * Sigma) + Mu
End Function
Alles anzeigen