Пример #1
0
    def findChiParams(self):
        dataFileName = 'testData.txt'
        function = Function()
        chiLinear = ChiSquare(function.evalLinear, dataFileName)
        optimiser = Optimise()

        #m = params[0]
        #c = params[1]
        paramsGuess = [0., 1.]
        paramsAccuracy = [0.000000001, 0.000000001]
        paramsJump = [1., 1.]
        #evals minimum m and c for our ChiSquare
        params = optimiser.min(chiLinear.evalChiSquare, paramsGuess,
                               paramsJump, paramsAccuracy, [])

        minM = params[0]
        minC = params[1]
        minChi = chiLinear.evalChiSquare(params)

        #finding err of values in params by finding where the chiSquare
        #increases by 1 either side of the minimum
        mRootParamGuess = [minM + 1., minC]
        cRootParamGuess = [minM, minC + 1.]
        rootParamsJump = [0.0001, 0.001]
        rootParamsAccuracy = [0.000001, 0.000001]
        mErrPos = abs(
            optimiser.equalTo(
                (minChi + 1), chiLinear.evalChiSquare, mRootParamGuess,
                rootParamsJump, rootParamsAccuracy, [1])[0] - minM)
        cErrPos = abs(
            optimiser.equalTo(
                (minChi + 1), chiLinear.evalChiSquare, cRootParamGuess,
                rootParamsJump, rootParamsAccuracy, [0])[1] - minC)
        mErrNeg = abs(
            optimiser.equalTo(
                (minChi + 1), chiLinear.evalChiSquare, [minM - mErrPos, minC],
                rootParamsJump, rootParamsAccuracy, [1])[0] - minM)
        cErrNeg = abs(
            optimiser.equalTo(
                (minChi + 1), chiLinear.evalChiSquare, [minM, minC - cErrPos],
                rootParamsJump, rootParamsAccuracy, [0])[1] - minC)

        mErrMean = (mErrPos + mErrNeg) / 2.
        cErrMean = (cErrPos + cErrNeg) / 2.

        print("")
        print("[m,c]:\t" + str(np.around(np.array(params), 6)) + "\n")
        print("mErr:\t+" + str(np.round(mErrPos, 6)) + "\t-" +
              str(np.round(mErrNeg, 6)))
        print("mean:\t" + str(np.round(mErrMean, 6)) + "\n")
        print("cErr:\t+" + str(np.round(cErrPos, 6)) + "\t-" +
              str(np.round(cErrNeg, 6)))
        print("Mean:\t" + str(np.round(cErrMean, 6)))
        print("")

        #self.plotChiAroundMin(chiLinear.evalChiSquare, params, [mErrPos, cErrPos], [mErrNeg, cErrNeg])
        plotter = Plot()
        plotter.plotChiAroundMin(chiLinear.evalChiSquare, params,
                                 [mErrPos, cErrPos], [mErrNeg, cErrNeg])