Effacer les filtres
Effacer les filtres

Lsqcurvefit - multiple parameters - two variables

33 vues (au cours des 30 derniers jours)
Cyril GADAL
Cyril GADAL le 15 Mai 2017
Commenté : Cyril GADAL le 16 Mai 2017
Hello,
I'm currently working on a function of two variables of the type z=f(x,y), controlled by 4 parameters, and I would like to fit data I obtained to my theoretical function. I read detailed post about how to dit with lsqcurvefit, but a problem remains. This is how I did :
function Sigma = Sigma_funct(p,Var)
Sigma = f(p(1),p(2),p(3),p(4), x,y)
end
with lets say Var(1) = x and Var(2) = y. Then, I'm supposed to use the following syntax :
p0 = [3,1,2,10] ;
x = lsqcurvefit(@Sigma_funct,p0,[x y],Sigma_data) ;
However, my problem is that x and y have different size, meaning that Sigma_data isn't a squared matrix : I can't concatenate x and y. How am I supposed to do ?
Thanks for your answers !
P.S : Just to say it, f is linear neither in parameters nor in variables.
  2 commentaires
Torsten
Torsten le 16 Mai 2017
It's not clear what the size of the matrix "Sigma_data" is and what it contains.
Best wishes
Torsten.
Cyril GADAL
Cyril GADAL le 16 Mai 2017
Modifié(e) : Cyril GADAL le 16 Mai 2017
You're right. So I have a vector x of size N and y of size M such that Sigma_data is of size N*M : I would then have for the theoretical values Sigma(i,j) = f(xi, xj) and then would like to fit this to Sigma_data using lsqcurvefit.

Connectez-vous pour commenter.

Réponse acceptée

Torsten
Torsten le 16 Mai 2017
p0 = [3,1,2,10] ;
xdata = zeros(numel(x)*numel(y),1);
ydata = reshape(Sigma_data,[numel(x)*numel(y),1]);
p_sol = lsqcurvefit(@(p,xdata)Sigma_funct(p,xdata,x,y),p0,xdata,ydata);
function Sigma = Sigma_funct(p,xdata,x,y)
Sigma_mat = f(p(1),p(2),p(3),p(4),x,y)
Sigma = reshape(Sigma_mat,[numel(x)*numel(y),1]);
end
Best wishes
Torsten.
  5 commentaires
Torsten
Torsten le 16 Mai 2017
Modifié(e) : Torsten le 16 Mai 2017
The only thing that matters for "lsqcurvefit" is how the ydata-vector depends on the parameter vector.
The xdata-vector is only introduced to make things easier for you if the relationship between parameter vector and ydata-vector can be established easily by an equation of the form
ydata(i) = func(p,xdata(i)) (i=1,...,N*M)
e.g. for linear regression ydata(i) = p(1)+p(2)*xdata(i).
But this is not the case for your problem - so don't worry about the "xdata"-vector.
Best wishes
Torsten.
Cyril GADAL
Cyril GADAL le 16 Mai 2017
Understood.
Thank you very much for your time !

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Get Started with Curve Fitting Toolbox dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by