# OptimizationFindFitObjectiveFunction and PenaltyFunction

Consider the following toy example:

model = a  Cos[w t];
data = Table[{t, Cos[2.1 t]}, {t, 0, 10, .25}] + RandomReal[.1, 41];


as both an unconstrained problem:

fit1 = FindFit[data, model, {a, w}, t]
(* {a -> -0.0768602, w -> 0.986448} *)


and a constrained problem:

fit2 = FindFit[data, {model, a > 0, 1 < w < 2}, {a, w}, t]
(* {a -> 0.875427, w -> 2.} *)


In @ilian's answer to this question I found out about the usage of OptimizationFindFitObjectiveFunction as a neat way to get hold of the objective function that is used internally.

Compare both objective functions:

obj1 = OptimizationFindFitObjectiveFunction[data, model, {a, w}, t];
obj2 = OptimizationFindFitObjectiveFunction[data, {model, a>0, 1<w<2}, {a, w}, t];

Table[{a, w, obj1[{a, w}]}, {a, 0.7, 0.8, 0.01}, {w, 0.5, 2.5, 0.1}] ==
Table[{a, w, obj2[{a, w}]}, {a, 0.7, 0.8, 0.01}, {w, 0.5, 2.5, 0.1}]
(* True  *)


and have a look at a plot of the objective function of the constrained problem (and notice no penalty-/barrier- behavior) # Question:

Is there an representation of the used penalty-/barrier- function as well? General resources about the functions used to convert from a constrained problem into the appropriate unconstrained version with penalty-/barrier- functions are welcome too.