【发布时间】:2017-04-02 19:50:23
【问题描述】:
我使用 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.
【问题讨论】:
标签: matlab curve-fitting data-fitting