自定义fittype,在matlab中有两个表达式

时间:2015-06-25 16:55:06

标签: matlab

我想使用两个相关的表达式创建自定义fittype

(f1/(1+ksv1*Q))+(f2/(1+ksv2*Q)) == I/I0f1 + f2 == 1

我使用第一个表达式创建了fittype,现在将f1f1设置为使用'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)

1 个答案:

答案 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)