Browse Source

Correct treatment of negative derivatives in log-normal convolution

Andrej 2 years ago
parent
commit
acbbe623ee
1 changed files with 5 additions and 2 deletions
  1. 5 2
      pythonScripts/propagateErrorLN.py

+ 5 - 2
pythonScripts/propagateErrorLN.py

@@ -29,8 +29,11 @@ def calculateDistribution(fy,muTarget,mu,cv,dydp):
    qa*=muTarget/A
    cvPrime=cv*A/muTarget
    sigmaS=numpy.sqrt(numpy.log(1+cvPrime*cvPrime))
-   muS=numpy.log(qa/numpy.sqrt(1+cvPrime*cvPrime))
-   y=convolveLN.convolveLN(fy,sigmaS,muS)
+   sign=qa>=0
+   muS=numpy.zeros(qa.shape)
+   muS[sign]=numpy.log(qa[sign]/numpy.sqrt(1+cvPrime[sign]*cvPrime[sign]))
+   muS[~sign]=numpy.log(-qa[~sign]/numpy.sqrt(1+cvPrime[~sign]*cvPrime[~sign]))
+   y=convolveLN.convolveLN(fy,sigmaS,muS,sign)
    return y/numpy.sum(y)
 
 def generateDistribution(fx,muTarget,mu,cv,dydp, dbg=0):