【问题标题】:How to scale data before fitting in matlab 2016b如何在拟合 matlab 2016b 之前缩放数据
【发布时间】: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


    【解决方案1】:

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

    scaledX = x * 1000
    y = f(scaledX)
    

    你会直接适应:

    y = f(scalingFactor * x)
    

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

    【讨论】:

    • 更多变量会使情况变得更糟。
    • 这可能是非线性求解器使用的初始参数,根据mathworks.com/help/optim/ug/…使用x0设置 - 只需搜索“x0”。
    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 2021-02-02
    • 1970-01-01
    • 2021-11-19
    • 2017-08-11
    • 2015-06-16
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多