Do you mean
function Com_Langmuir(x, p)
?
The syntax for the model is foo(x, params)
. See the documentation: GitHub - JuliaNLSolvers/LsqFit.jl: Simple curve fitting in Julia
julia> import CSV, DataFrames, LsqFit
julia> data = """
CA,CC,qA_293k,qA_303K,qA_313K,qC_293K,qC_303K,qC_313K
3.46,0.34,7.27,7.00,5.50,0.54,0.51,0.48
5.19,0.51,9.67,9.36,7.80,0.77,0.69,0.64
6.93,0.68,12.70,11.44,9.99,1.02,0.94,0.89
8.66,0.85,15.09,13.96,12.44,1.22,1.12,1.03
10.39,1.02,16.88,15.67,14.81,1.42,1.25,1.22
12.12,1.19,20.01,19.36,17.46,1.61,1.51,1.42
"""
"CA,CC,qA_293k,qA_303K,qA_313K,qC_293K,qC_303K,qC_313K\n3.46,0.34,7.27,7.00,5.50,0.54,0.51,0.48\n5.19,0.51,9.67,9.36,7.80,0.77,0.69,0.64\n6.93,0.68,12.70,11.44,9.99,1.02,0.94,0.89\n8.66,0.85,15.09,13.96,12.44,1.22,1.12,1.03\n10.39,1.02,16.88,15.67,14.81,1.42,1.25,1.22\n12.12,1.19,20.01,19.36,17.46,1.61,1.51,1.42\n"
julia> df = CSV.read(IOBuffer(data), DataFrames.DataFrame)
6×8 DataFrame
Row │ CA CC qA_293k qA_303K qA_313K qC_293K qC_303K qC_313K
│ Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float64
─────┼────────────────────────────────────────────────────────────────────────
1 │ 3.46 0.34 7.27 7.0 5.5 0.54 0.51 0.48
2 │ 5.19 0.51 9.67 9.36 7.8 0.77 0.69 0.64
3 │ 6.93 0.68 12.7 11.44 9.99 1.02 0.94 0.89
4 │ 8.66 0.85 15.09 13.96 12.44 1.22 1.12 1.03
5 │ 10.39 1.02 16.88 15.67 14.81 1.42 1.25 1.22
6 │ 12.12 1.19 20.01 19.36 17.46 1.61 1.51 1.42
julia> function Com_Langmuir(x, p)
Ha, bA, bC, Hc = p
CA = @view x[:, 1]
CC = @view x[:, 2]
qA = @. Ha * CA / (1 + bA*CA + bC*CC)
qC = @. Hc * CC / (1 + bA*CA + bC*CC)
return vcat(qA, qC)
end
Com_Langmuir (generic function with 1 method)
julia> xdata = [df.CA df.CC]
6×2 Matrix{Float64}:
3.46 0.34
5.19 0.51
6.93 0.68
8.66 0.85
10.39 1.02
12.12 1.19
julia> ydata = vcat(df.qA_303K, df.qC_303K)
12-element Vector{Float64}:
7.0
9.36
11.44
13.96
15.67
19.36
0.51
0.69
0.94
1.12
1.25
1.51
julia> p0 = [1.983, 0.0067, 0.1951, 1.61]
4-element Vector{Float64}:
1.983
0.0067
0.1951
1.61
julia> ret = LsqFit.curve_fit(Com_Langmuir, xdata, ydata, p0)
LsqFit.LsqFitResult{Vector{Float64}, Vector{Float64}, Matrix{Float64}, Vector{Float64}, Vector{LsqFit.LMState{LsqFit.LevenbergMarquardt}}}([1.9591016841592197, 13.58216904773464, -138.11627273117097, 1.571176537116358], [-0.44929059679496763, 0.30369611921302386, -0.1765545568040796, -0.08488979377925254, 0.7435466251881575, -0.4782080120029555, 0.006248923887321234, 0.0715774743231512, -0.0536302114136612, -0.027791676070707094, 0.04227536237120133, -0.023189712036286503], [3.3437311886808767 -21.903812996616832 -2.1523978086444178 0.0; 4.932717988715785 -47.668295531028825 -4.68416776783525 0.0; … ; 0.0 -10.826815246805841 -1.0628827270494086 0.8224889640699448; 0.0 -14.329863758728356 -1.4069750692351175 0.9463037748263273], true, Iter Function value Gradient norm
------ -------------- --------------
, Float64[])
julia> ret.param
4-element Vector{Float64}:
1.9591016841592197
13.58216904773464
-138.11627273117097
1.571176537116358