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

この関数は、主にデータを 2 つの部分に分割して異なる計算を行います。cm を実行して一連の time-c データを取得するために、適切な任意の 4 つのパラメーターを指定しようとしました。次のコードを使用します。

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

そしてそれはうまくいきます

その後、次のコードを使用して、fit関数を使用してデータのセットに適合させ、4つのパラメーターを取得しようとしました

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