How to fit multiple data sets?

2 次查看(过去 30 天)
Dear all, I have the following question: I need to determine some coefficients(A,B,C,D,E):
ydata=[1:1:10];
xdata=[0.1:0.1:1];
zdata=[10:10:100];
Y=[A+B*X+C*X^2+D*X^3]*Z^E;
the code look as:
xx=xdata'; % X
yy=ydata'; % Y
zz=zdata'; % Z
vect_ones=(10,1);
%declare function
functionfit=@(x,a)x(1)*vect_ones+x(2)*a(1,:)+x(3)*power(a(1,:),2)+x(4)*power(a(1,:),3))*power(b(1,:),x(5));
initial values;
x0=[1 1 1 1 1]; % how arbitrary should be this value?
[x] = lsqcurvefit(functionfit,x0,XX,ZZ,XX);
Questions:
Why "b" is not recognized as variable as "a" is? Can lsqcurvefit function really work with two (multiple) sets of data)?
Thank you

采纳的回答

Matt J
Matt J 2013-6-17
编辑:Matt J 2013-6-17
Why "b" is not recognized as variable as "a" is?
Because you didn't designate it as a variable. You only designated x and a
functionfit=@(x,a)...
That's the way Anonymous Functions work.
Can lsqcurvefit function really work with two (multiple) sets of data)?
It's not clear what you mean by multiple sets of data. As long as ydata has the same dimensions as the output of functionfit, it should be fine.
  4 个评论
Ionut  Anghel
Ionut Anghel 2013-6-17
The speed seems to be higher (I have about 600 data in one set). However I replace as follow: aa=[xx,zz];
functionfit=@(x,a)((x(1)*vect_ones+x(2)*a(:,1)+x(3)*power(a(:,1),2)+x(4)*power(a(:,1),3))*power(a(:,2)^x(5)));
%
[x] = lsqcurvefit(functionfit,x0,aa,yy);
Still troubles for the "inner matrix dimensions"
Matt J
Matt J 2013-6-17
编辑:Matt J 2013-6-17
I think you want this:
xx=xdata'; % X
yy=ydata'; % Y
zz=zdata'; % Z
M=bsxfun(@power,xx(:), 0:3);
functionfit=@(p,z) ( M*p(1:4) ).*(z.^p(5));
p0=[1 1 1 1 1].';
p = lsqcurvefit(functionfit,p0(:),zz,yy);

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by