目的:非线性拟合求得函数后,计算特定y值对应的x值。
第一步:曲线拟合
调用函数代码
function diff=F4P(p,d,pd)
dmin=0.07
diff=100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)
曲线拟合代码
[NUM]=xlsread('Skempton ABCD',3,'A1:CE2')
d=NUM(1,:)
pd=NUM(2,:)
p0=[1 2 0.5 0.001]
p=lsqcurvefit(@F4P,p0,d,pd)
dmin=0.07
pdnew=100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)
semilogx(d,pd,'-or',d,pdnew,'b')
第二步:求因变量y值对应的x值
求单独一个点时,初值选取合适,即可得到结果。
f=@(d)100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)-20
x=fzero(f,1.2)
求一系列y值时,只有一部分有解,其他的结果显示Nan(无解)