// Calculate x - (x_1 + x_2) func AbsErrorBeta(env *tempAll.Environment, variables []string) solve.Diffable { F := func(v vec.Vector) (float64, error) { if v.ContainsNaN() { fmt.Printf("got NaN in AbsErrorBeta (v=%v)\n", v) return 0.0, errors.New("NaN in input") } env.Set(v, variables) if !env.FixedPairCoeffs || !env.PairCoeffsReady { // Before we evaluate error in Beta, Mu_h and D1 should have // appropriate values. eps := 1e-9 _, err := SolveD1Mu_h(env, eps, eps) if err != nil { return 0.0, err } } // Beta equation error = x - x1 - x2 x1 := tempPair.X1(env) x2, err := tempCrit.X2(env) if err != nil { fmt.Printf("error from X2(): %v\n", err) return 0.0, err } lhs := env.X rhs := x1 + x2 return lhs - rhs, nil } h := 1e-5 epsabs := 1e-4 return solve.SimpleDiffable(F, len(variables), h, epsabs) }
// Calculate x - (x_1 + x_2) with Mu_h fixed. func AbsErrorX(env *tempAll.Environment, variables []string) solve.Diffable { F := func(v vec.Vector) (float64, error) { if v.ContainsNaN() { fmt.Printf("got NaN in AbsErrorX (v=%v)\n", v) return 0.0, errors.New("NaN in input") } env.Set(v, variables) // Before we evaluate error in X, Mu_b and D1 should have // appropriate values. system, start := D1Mu_bSystem(env) eps := 1e-9 _, err := solve.MultiDim(system, start, eps, eps) if err != nil { return 0.0, err } if env.Mu_b > 0.0 { fmt.Println("Warning: got Mu_b > 0 in AbsErrorX") env.Mu_b = 0.0 } // evaluate X error x1 := tempPair.X1(env) x2, err := tempCrit.X2(env) if err != nil { fmt.Printf("error from X2(): %v\n", err) return 0.0, err } lhs := env.X rhs := x1 + x2 return lhs - rhs, nil } h := 1e-5 epsabs := 1e-4 return solve.SimpleDiffable(F, len(variables), h, epsabs) }
func AbsErrorMu_h(env *tempAll.Environment, variables []string) solve.Diffable { F := func(v vec.Vector) (float64, error) { env.Set(v, variables) if -env.Mu_b > -2.0*env.Mu_h { // when |Mu_b| is this large, no longer have pairs return env.X - tempPair.X1(env), nil } L := env.PointsPerSide lhs := 0.5 / (env.T0 + env.Tz) rhs := bzone.Avg(L, 2, tempAll.WrapFunc(env, innerMu_h)) return lhs - rhs, nil } h := 1e-5 epsabs := 1e-4 return solve.SimpleDiffable(F, len(variables), h, epsabs) }