2

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

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);

它运作良好

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

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 获得的输入 time-c 数据,它们具有相同的大小,所以我看不出输入数据有什么问题。我怀疑 fit 函数不起作用是函数的问题。谁能帮我解决这个问题?另外,YDATA是什么意思?先感谢您 !

4

0 回答 0