MATLAB: Nonlinear data fitting using lsqnonlin for multiple variables

fittinglsqnonlinmultiple variablesnon linear fittingobjective functions

Hello I am trying to fit multiple variables with multiple parameters and objective functions to experimental data using lsqnonlin function and I am having difficulty to generalize the code for this.
For example consider x1, x2, x3 and x4 as the 4 variables that I want to fit. The input data/parameters is a matrix 10×2 where each column is a independent variable a and b having 10 data points corresponding to the output data Y. further I have 2 objective functions f1 and f2.
The first 5 datapoints correspond to the output with respect to variables x1 x2 and their objective function f1. The next 5 data points correspond to the output with respect to variables x3 x4 and their objective function f2 as below
f1 = (x1 + x2*a(1:5) + b*x2(1:5)^3) – y(1:5)
f2 = (x3 + x4*a(5:10) + x4*b(5:10)^2) – y(5:10)
The number of variables, parameters and functions in this expample is just for explanation and in practice may be more.
Kindly suggest how I can generalize to code to accept multiple variables, parameters and functions.Also the function above is hypothetical, so you may use a different function in your answers
Thank you

Best Answer

There's nothing special involved,
a=___
b=___
y=___
x0=___
xlsq =lsqnonlin(@(x) modelfun(x,a,b,y), x0)
function F=modelfun(x,a,b,y)
f1 = (x(1) + x(2)*a(1:5) + x(2)*b(1:5)^3) - y(1:5);
f2 = (x(3) + x(4)*a(5:10) + x(4)*b(5:10)^2) - y(5:10);
F=[f1,f2];
end