# How to implement a piece-wise defined function in JuMP

**URL:** <https://discourse.julialang.org/t/how-to-implement-a-piece-wise-defined-function-in-jump/76095>\
**Category:** Optimization (Mathematical)\
**Tags:** jump\
**Created:** [February 9, 2022, 3:52pm UTC](https://discourse.julialang.org/t/how-to-implement-a-piece-wise-defined-function-in-jump/76095 "2022-02-09T15:52:55Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [February 9, 2022, 6:40pm UTC](https://discourse.julialang.org/t/how-to-implement-a-piece-wise-defined-function-in-jump/76095/4 "2022-02-09T18:40:38Z")

</div>

Option 1:

```julia
using JuMP, Ipopt
α_0 = 1.0
Lmin = -1.0
Lnom = 0.0
Lmax = 1.0
a = 0.0019727939
b = 0.0078887

model = Model(Ipopt.Optimizer)
@variable(model, Lmin <= x[1:2] <= Lmax)
@constraint(model, sum(x) == 1)
@NLobjective(
    model, 
    Min,
    ifelse(
        x[1] < Lnom,
        a * (x[1]-Lnom)^2 + α_0,
        b * (x[1]-Lnom)^2 + α_0,
    ),
)
optimize!(model)

```

Option 2:

```julia
using JuMP, Ipopt
Lmin = -1.0
Lmax = 1.0
function α(x...)
    α_0 = 1.0
    Lnom = 0.0
    a = 0.0019727939
    b = 0.0078887
    if Lmin <= x[1] < Lnom
        return a * (x[1]-Lnom)^2 + α_0
    else
        return (b * (x[1]-Lnom)^2 + α_0)
    end
end        
model = Model(Ipopt.Optimizer)
@variable(model, Lmin <= x[1:2] <= Lmax)
@constraint(model, sum(x) == 1)
register(model, :α, 2, α; autodiff = true)
@NLobjective(model, Min, α(x...))
optimize!(model)

```

---

_[View the full topic](https://discourse.julialang.org/t/how-to-implement-a-piece-wise-defined-function-in-jump/76095)._
