我使用matlab 2016b的fit()
函数将复杂的指数函数拟合到数据x
,y
。
x值非常小(1e-3),y值大约为1.
如果我将x乘以常数因子1000到100000,那么拟合效果很好。 此效果在mathworks online help部分"使用标准化或中心和比例"中描述。
即使上限和下限非常窄,Normalize: 'on'
设置也会失败(1)。
Normalize
选项对用户是否透明,或者在启用后我是否必须更改边界?
现在我通过乘以x帮助我自己,然后纠正拟合结果中的系数。
ScalingFactor = 1000;
[xData, yData] = prepareCurveData( myx * ScalingFactor, myy );
ft = fittype(..)
[fitresult, gof] = fit( xData, yData, ft, opts );
%% now correct the results
对于一个非常昂贵的软件,这对我来说并不是很优雅。 4年前有similar question on sx没有方便的解决方案。
今天有更好的解决方案吗?
1)也许错误消息有助于其他用户有一天找到这个问题/答案,所以我将其粘贴在这里:
Error using fit>iFit (line 340)
Complex value computed by model function, fitting cannot continue.
Try using or tightening upper and lower bounds on coefficients.
答案 0 :(得分:0)
您可以考虑将缩放因子放在函数本身作为拟合参数。例如,而不是:
scaledX = x * 1000
y = f(scaledX)
你会直接适合:
y = f(scalingFactor * x)
以便拟合(希望)为您找到最佳比例因子。