matlab函数拟合改错
y=[0.11;0.2;0.3;0.42;0.53;0.64;0.74;0.84;0.95;1.05;1.15;1.25;1.37;1.49;1.62;1.75;1.9;2.05;2.21;2.37;2.53;2.69;2.84;2.97;3.1;3.21;3.3;3.35;3.38;3.36;3.3;3.2;3.05;2.86;2.63;2.38;2.11;1.86;1.66;1.5;1.39;1.3;1.21;1.1;0.95;0.79;0.64;0.53;0.48;0.48;0.52;0.59;0.66;0.7;0.7;0.65;0.59;0.55;0.56;0.62;0.71;0.77;0.77;0.7;0.62;0.57;0.57;0.59;0.57;0.47;0.29;0.12;0.024;0.002;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0];
p=fittype('c*d*x^(d-1)*exp(-(x/e)^d)/(e^d)+(1-c)*f*x^(f-1)*exp(-(x/g)^d)/(g^f)','coefficients',{'c','d','e','f','g'});
f=fit(x,y,p);
plot(f,x,y)
报错: Complex value computed by model function
设定startpoint、upper和lower后报错:NaN computed by model function 展开
你的拟合函数过于复杂。可以简化成以下拟合函数。
如为, f(x) = a*x.*exp(-(b*x))+c*x.*exp(-(d*x)),则系数
a = -0.487 (-1.965, 0.9906)
b = 3.599 (-0.9896, 8.188)
c = 0.00548 (-1.596, 1.607)
d = 0.5382 (-134.3, 135.4)
拟合精度为 R²= 0.4944
如为, f(x) = a*x.*exp(-(b*x))+c*x.*exp(-(d*x))+e*x.*exp(-(f*x)),则系数
a = -8.687 (-2.645e+006, 2.645e+006)
b = -0.02561 (-2456, 2456)
c = -1.96 (-53.12, 49.2)
d = 1.26 (-12.02, 14.54)
e = 9.22 (-2.645e+006, 2.645e+006)
f = -0.009013 (-2450, 2450)
拟合精度为 R²= 0.4944
从图形来看,上图与下图比较,上图更接近实际数值。