我想使用两个相关的表达式创建自定义fittype
:
(f1/(1+ksv1*Q))+(f2/(1+ksv2*Q)) == I/I0
和f1 + f2 == 1
。
我使用第一个表达式创建了fittype
,现在将f1
和f1
设置为使用'problem'
参数手动定义。显然,将它们作为普通系数拟合不会导致f1 + f2 = 1
。
有没有办法将这第二个条件添加到fittype?
Q = [ 0; 1; 10; 21;];
I = [ 2376.4; 2148.6; 1000.8; 736.52;];
% (f1/(1+ksv1*Q))+(f2/(1+ksv2*Q))== I/I0
g = fittype('2376.4*((f1/(1+ksv1*Q))+(f2/(1+ksv2*Q)))','dependent',{'I'},'independent',{'Q'},'problem',{'f1','f2'}','coefficients',{'ksv1','ksv2'});
myfit = fit(Q,I,g,'problem',{.23,.77})
plot(myfit,Q,I)
答案 0 :(得分:0)
我最终将第二个表达式插入第一个表达式并设置系数的上限和下限。
Q = [ 0; 1; 10; 21;];
I = [ 2376.4; 2148.6; 1000.8; 736.52;];
% (f1/(1+ksv1*Q))+(1-f1/(1+ksv2*Q))== I/I0 ; f1+f2=1, f2=1-f1 ; I0 = 2376.4
g = fittype('2376.4*((f1/(1+ksv1*Q))+((1-f1)/(1+ksv2*Q)))',...
'independent',{'Q'},'dependent','I')
myfit = fit(Q,I,g,'lower',[0 0 0],'upper',[1 inf inf]) % bounds for [f1 ksv1 ksv2]
figure
plot(myfit,Q,I)