Lsqcurvefit - multiple parameters - two variables

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 件のコメント

Torsten
Torsten 2017 年 5 月 16 日
It's not clear what the size of the matrix "Sigma_data" is and what it contains.
Best wishes
Torsten.
Cyril GADAL
Cyril GADAL 2017 年 5 月 16 日
編集済み: Cyril GADAL 2017 年 5 月 16 日
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.

サインインしてコメントする。

 採用された回答

Torsten
Torsten 2017 年 5 月 16 日

0 投票

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 件のコメント

Cyril GADAL
Cyril GADAL 2017 年 5 月 16 日
Oh right. So everything has to be column vectors. I just do not understand why xdata is full of zeros ?
Torsten
Torsten 2017 年 5 月 16 日
Because in your case, there is no senseful "xdata" vector.
Sigma_data depends on x and y, but what scalar value could you choose that Sigma_mat(i,j) depends on ?
Anyway, you can define "xdata" to be an arbitrary N*M-vector - it has no influence on the parameter estimation.
Best wishes
Torsten.
Cyril GADAL
Cyril GADAL 2017 年 5 月 16 日
I'm sorry, I don't get it ... Are xdata not supposed to be representing the variables leading to ydata ? As the time for example if I look at a time serie, or the distance if I look at a 2D topography ?
Thank you for your answers by the way, that was really helpfull !
Torsten
Torsten 2017 年 5 月 16 日
編集済み: Torsten 2017 年 5 月 16 日
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 2017 年 5 月 16 日
Understood.
Thank you very much for your time !

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeGet Started with Curve Fitting Toolbox についてさらに検索

質問済み:

2017 年 5 月 15 日

コメント済み:

2017 年 5 月 16 日

Community Treasure Hunt

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

Start Hunting!

Translated by