# Exponential Curve Fit Equation

I am trying to fit my data in figure 1

to be like figure 2 (exponential fit)

but my code does not do that

``````using LsqFit
#days = [1,2,3,4,5,6,7,8,9 ,...........]
#y = some code to update y value
@. model(days, p) =  p[1] * days.^(-p[2])
fit = curve_fit(model, days, y, [0.5,0.5]) #
@show fit.param
plot(days, model(days, fit.param))
``````

Fitting exponential data is a bit tricky.
If you want a quick fit try fitting the logarithm of the data. To get a correct uncertainty estimation, however, one has to use nonuniform weights.

This fit you can then use to get a better initial value.

Also your data does not look like to follow an exponential function. Maybe one could fit a sigmoid function or restrict the data range.

The function you use is also not an exponential.I would have expected something like this

``````@. model(days,p) = p[1] + exp(days*p[2])
``````

For restricting the data range you can introduce a mask like this.

``````mask=y.<=50
``````

In addition, I noticed that in your example there is a missing `]` for the initial value array.

One thing I wanted to do for some time was figuring out how to use GLM.jl for such applications. I think by selecting the correct link function this might work.

I hope my comments help somewhat.

3 Likes

This seems much easier to do by using blackbox optimization (via Optim) with the actual functional form you want that provides a closure over your data. Itβs true that you can make this into a LsqFit problem, but the more general approach of blackbox optimization is easier once youβre used to it.

1 Like

Here is a function that might work.

``````
julia> using UnicodePlots

julia> scaled_sigmoid(x,low,high,a,b) = low+(high-low)*(1/(1+exp(a+b*x)))
scaled_sigmoid (generic function with 1 method)

julia> lineplot((x)->scaled_sigmoid(x,0,2,3,-1))
ββββββββββββββββββββββββββββββββββββββββββ
2 ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β β β β β β β£β €β β β β β β β β #9(x)
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β β β β β’β‘β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β β β β’β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β β β β‘β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β β β‘Έβ β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β β’β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β β‘β β β β β β β β β β β β β β
f(x)   ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β’ β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β β‘β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β’°β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β β‘β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β β‘Έβ β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β β‘°β β β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘β‘β β β β β β β β β β β β β β β β β β β
0 ββ£β£β£β£β£β£β£β£β£β£β£β£β£β£β£β£β£β£β €β β‘β β β β β β β β β β β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββββ
β -10β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β 10β 

``````

At the high and low ends this can also be approximated by an exponential function. (See Fermi-Dirac statistics)

1 Like

How to use it with vectors like
x=[1,2,3,4,5,6,7,β¦]
y=[2,3,3,4,6,7,8,β¦]

``````using LsqFit
using Plots
x=[1,2,3,4,5,6,7]
y=[2,3,3,4,6,7,8]

@. scaled_sigmoid(x,low,high,a,b) = low+(high-low)*(1/(1+exp(a+b*x)))
scaled_sigmoid(x,p) = scaled_sigmoid(x,p...)

p0 = [0,100,0.1,-1]
fit = curve_fit(scaled_sigmoid,x,y,p0)

scatter(x,y,label="data",xlabel="x",ylabel="y")
plot!((x)->scaled_sigmoid(x,p0),label="initial")
plot!((x)->scaled_sigmoid(x,coef(fit)),label="fit")
``````

1 Like

Easy, like this

``````using UnicodePlots
x = [1, 2, 3, 4, 5, 6, 7]
y = [2, 3, 3, 4, 6, 7, 8]
lineplot(x, y)

# result will be
ββββββββββββββββββββββββββββββββββββββββββ
8 ββ β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β’β β β
ββ β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β’β‘ β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β£β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β β β β β β β β’β €β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β β β β β β‘ β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β β β β’ β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β β β‘°β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β β’β β β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β β’ β β β β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β β β β‘°β β β β β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β β β β’β β β β β β β β β β β β β β β β β β β β β β β
ββ β β β β β β β β β β β β β β’β‘ β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β β β β β’β‘ β €β €β €β €β €β €β β β β β β β β β β β β β β β β β β β β β β β β β β β β
ββ β β β‘ β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
2 ββ£β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββββ
β 1β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β 7β 
``````

I recommend you check the docs, they are nice:

Or have a look at `methods(lineplot)`.

Good luck with Julia)

2 Likes