如何在安装matlab 2016b之前缩放数据

时间:2017-03-30 23:16:38

标签: matlab curve-fitting data-fitting

我使用matlab 2016b的fit()函数将复杂的指数函数拟合到数据xy。 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.

1 个答案:

答案 0 :(得分:0)

您可以考虑将缩放因子放在函数本身作为拟合参数。例如,而不是:

scaledX = x * 1000
y = f(scaledX)

你会直接适合:

y = f(scalingFactor * x)

以便拟合(希望)为您找到最佳比例因子。