Coding

## Julia 101 – 0.1. Least-Square fitting

``````year = Float64[0]

for i in 1:6
push!(year, i)
end

year = year .+ 2013``````
```7-element Array{Float64,1}:
2013.0
2014.0
2015.0
2016.0
2017.0
2018.0
2019.0```
``````year_x = collect(Float64, 2013:1:2020);
h = [2, 2, 2, 3, 4, 6, 8, 12];``````
``````using Plots
scatter(year_x, h,
xlab = "year", ylab = "h-index",
xlim = [2012, 2023], ylim = [0,15], framestyle = :box)

scatter!(year_x[3:end], h[3:end])``````
``````using LsqFit

@. model(x, p) = p[1] + x*p[2] + x^2.0*p[3]
fit = curve_fit(model, year_x, h, [2.0, 0.5, -3.0])``````
`LsqFit.LsqFitResult{Array{Float64,1},Array{Float64,1},Array{Float64,2},Array{Int64,1}}([1.1832864618761656e6, -1174.946148708822, 0.2916665972735931], [0.20833284547552466, -0.19642864260822535, -0.017856936203315854, -0.2559520348440856, 0.08928606053814292, 0.017857350641861558, 0.5297618352342397, -0.3750004852190614], [1.0000000000082452 2012.9999999932165 4.05216899997484e6; 1.0000000000082452 2014.0000000073403 4.05619599998367e6; … ; 1.0000000000082452 2018.9999999797847 4.076360999975335e6; 1.0000000000082452 2019.9999999939084 4.08039999999393e6], true, Int64[])`
``````T = typeof(fit)
for (name, typ) in zip(fieldnames(T), T.types)
println("type of the fieldname typ")
end``````
```type of the fieldname param is Array{Float64,1}
type of the fieldname resid is Array{Float64,1}
type of the fieldname jacobian is Array{Float64,2}
type of the fieldname converged is Bool
type of the fieldname wt is Array{Int64,1}
```
``?fit``
```search: fit LsqFit filter filter! curve_fit first firstindex isfinite popfirst!

```

No documentation found.

`fit` is of type `LsqFit.LsqFitResult{Array{Float64,1},Array{Float64,1},Array{Float64,2},Array{Int64,1}}`.

# Summary

``struct LsqFit.LsqFitResult{Array{Float64,1},Array{Float64,1},Array{Float64,2},Array{Int64,1}} &lt;: Any``

# Fields

``````param     :: Array{Float64,1}
resid     :: Array{Float64,1}
jacobian  :: Array{Float64,2}
converged :: Bool
wt        :: Array{Int64,1}``````
``fitted_p = fit.param``
```3-element Array{Float64,1}:
1.1832864618761656e6
-1174.946148708822
0.2916665972735931```
``````new_x = collect(Float64, 2013:1:2025)
new_y = fitted_p[1] .+ new_x.*fitted_p[2] .+ (new_x.^2).*fitted_p[3]
plot!(new_x, new_y, ylim = [0,30], seriestype =:line)``````
``fit.resid``
```8-element Array{Float64,1}:
0.20833284547552466
-0.19642864260822535
-0.017856936203315854
-0.2559520348440856
0.08928606053814292
0.017857350641861558
0.5297618352342397
-0.3750004852190614```
``fit.jacobian``
```8×3 Array{Float64,2}:
1.0  2013.0  4.05217e6
1.0  2014.0  4.0562e6
1.0  2015.0  4.06022e6
1.0  2016.0  4.06426e6
1.0  2017.0  4.06829e6
1.0  2018.0  4.07232e6
1.0  2019.0  4.07636e6
1.0  2020.0  4.0804e6```
``fit.wt``
`0-element Array{Int64,1}`
``fit.converged``
`true`