## how can I fit a composite function

### Edoardo Vicentini (view profile)

on 9 Jul 2019
Latest activity Edited by Dheeraj Singh

### Dheeraj Singh (view profile)

on 24 Jul 2019
I have (x,y) data and i would like to fit the function of parameter()
with
with
How can I do it?

Rik

### Rik (view profile)

on 9 Jul 2019
What have you tried so far? Can you provide a realistic sample of data so we can show how different fitting methods perform?

### Dheeraj Singh (view profile)

on 24 Jul 2019
Edited by Dheeraj Singh

### Dheeraj Singh (view profile)

on 24 Jul 2019

There are many ways of fitting parameters to the data.
Firstly, you can form the equations in the following manner:
z= @(x0,w,x) (x-x0)/w;
X= @(x0,w,m,x) 1-z(x0,w,x).^2+m^2;
r= @(x0,w,m,x) sqrt(X(x0,w,m,x).^2+4*z(x0,w,x).^2);
S1= @(a0,x0,w,m,x) (1- a0*sqrt(r(x0,w,m,x)+X(x0,w,m,x))./r(x0,w,m,x));
S2= @(a0,x0,w,m,x) a0.*(-z(x0,w,x).*sqrt(r(x0,w,m,x)+X(x0,w,m,x))+sign(z(x0,w,x)).*sqrt(r(x0,w,m,x)-X(x0,w,m,x)))./(m*r(x0,w,m,x));
yfunc= @(params,x) params(1)*S1(params(3),params(4),params(5),params(6),x) + params(2)*S2(params(3),params(4),params(5),params(6),x);
For fitting the parameters, you can do in the following manner depending upon your data:
%size of x and y =200
y=linspace(0,200,200);
x=rand(200,1);
%initial values of parameters
params0=rand(6,1);
params=fminsearch(@(params) norm(y-yfunc(params,x)),params0);