I am trying to convert some MATLAB code into Julia. For the largest part this went pretty smooth, but I am now stuck with converting the MATLAB [lsqnonlin][1] function.
After scanning available options, I think that the [LsqFit.jl][2] package with its curve_fit
function is the best way to go. Please correct me if I am wrong.
The original MATLAB code looks like this, where a function calc_z
with given lower and upper boundaries (lb
resp. ub
) and initial guess z
should yield optimal values of z
. **kwargs
contains all other function arguments required for calc_z
.
z_opt = lsqnonlin(@calc_z, z, lb, ub, lsq_options, **kwargs)
Internally, the function calc_z
computes the error between initial z
and observed values of z (z_obs
which are part of **kwargs
) plus two additional penalty terms which should be minimized to obtain the optimal values of z, z_opt
.
The question now is how to correctly implement this in Julia. Thus far, I understand that I need something like
using LsqFit
fit = curve_fit(calz_z, xdata, ydata, p0, lower=lb, upper=ub)
# calz_z rewritten in Julia
z_opt = fit.param
What is not clear to me is how to deal with the (kw)args required for calc_z
. Do all **kwargs
go into p0
? And is xdata
equivalent to z
and ydata
equivalent to z_obs
?
It is also unclear to me whether Julia curve_fit
implicitly computes the sum of squares of the components as lsqnonlin
does in MATLAB?
Many thanks for your help!