非线性模型拟合

时间:2013-06-01 18:38:10

标签: matlab

美好的一天,

我在Matlab中有以下代码:

ds1 =

    2.0709   -3.0379
    3.1447   -1.4320
    4.0650   -2.5355

modelfun = @(b,w)(b(1)*10.^w+b(2));

beta0 = [1 1];

mdl = NonLinearModel.fit(ds1,modelfun,beta0);

我正在尝试创建符合等式的NonLinearModel:y = beta(1)* 10 ^(w)+ beta(2),但我最终得到以下错误:

使用NonLinearModel.fit时出错(第837行) 必须提供模型系数的模型定义和初始值。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

该型号是否需要?我不确定这是我的第一选择。

首先绘制数据。 (不是很多,有吗?)一个简单的二阶多项式将是一个精确拟合,因为你有三个点。

y = c0 + c1*x + c2*x^2

或者通过采用双方的基数10日志进行转换可能会更好地为您服务。

这里不需要非线性模型。但是如果你确实需要一个,那么非线性解决方案需要一个起点。他们试图以迭代的方式走向真正的解决方案,如果有的话。

可能不是解决方案,或者您可能选择了一个糟糕的起点,或者步长可能太小而无法及时完成,或者太大而且超出您想要的答案。

所有这些都使非线性问题比线性问题困难得多。