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 とはどういう意味ですか? 前もって感謝します !