Matlab拟合函数误差:函数值和YDATA大小不相等

时间:2013-11-28 08:57:09

标签: matlab debugging curve-fitting nonlinear-optimization

我正在尝试使用fit函数来估计4参数模型(P B A R)并在消息后遇到错误,我不知道它是什么意思。

Error using fit>iFit (line 367)
Function value and YDATA sizes are not equal.

Error in fit (line 108)
[fitobj, goodness, output, convmsg] = iFit( xdatain, ydatain, fittypeobj, ...

基本功能是

function c1 = c1(x,T,P,B,A,R)

if T == 0
    c1=0;
else
    G = @(t) 0.5*erfc((P./(4*B*R*t)).^0.5.*(B*R*x-t))...
        -1/2*(1+P*x+P*t/(B*R))*exp(P*x).*erfc((P./(4*B*R*t)).^0.5.*(B*R*x+t))...
        +(P*t/(pi*B*R)).^0.5.*exp(-P*(B*R*x-t).^2./(4*B*R*t)); %first term in the solution
    u = @(t) A*t/(B*R);%.
    v = @(t) A*(T-t)/(1-B)/R; %.
    e = @(t) 2*(u(t.*v(t))).^0.5; %.
    H1 = @(t) exp(-u(t)-v(t)).*(besseli(0,e(t))/B+besseli(1,e(t)).*((u(t)./v(t)).^0.5)/(1-B));
    GH = @(t) G(t).*H1(t);
    c1 = G(T).*exp(-A*T/(B*R))+A/R*integral(GH,0,T); %int((g*H1),0,T);
end

和基于上述函数c1的另一个函数是

function cm = cm(x,time,P,B,A,R,T1)
for i=1:length(time);
    if time(i)<T1
        cm(i)=c1(x,time(i),P,B,A,R);
    else 
        cm(i)=c1(x,time(i),P,B,A,R)-c1(x,time(i)-T1,P,B,A,R);
    end
end

该功能主要将数据分为两部分进行不同的计算。 我试着给一个合理的任意四个参数来运行cm来获取一组time-c数据,使用下面的代码

x=2;
time=0.1:0.1:10;
T1=2;
c=cm(x,time,0.8,0.8,0.8,0.8,T1);

并且效果很好

之后我尝试使用fit函数来拟合数据集以获取四个参数,使用以下代码

ft = fittype('cm(x,time,P,B,A,R,T1)','independent','time','problem','x'); % independent variable is time, fixed parameter x
>> [f, gof] = fit( time', c', ft, 'Lower', [0, 0, 0, 1,2], 'Upper', [1, 1, 1, 1,2],'problem',x);

那是我遇到错误的时候

Error using fit>iFit (line 367)
Function value and YDATA sizes are not equal.

我检查了从函数cm获得的输入时间-c数据,它们具有相同的大小,所以我不会看到输入数据有任何问题。我怀疑这是函数的问题,适合函数不起作用。 任何人都可以帮我解决这个问题吗?此外,YDATA是什么意思? 先感谢您 !

0 个答案:

没有答案