目标函数在初始点返回未定义的值。lsqcurvefit无法继续。

72(30天)
你好人,我知道这可能是太简单,但我有一个问题;
xdata = (2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018];
y =(0.1, 0.2, 0.5, 1、5、6、7日,19日,25日,48258842年,3007年,5109年);
情节的(t, N (t),“罗”)
F = @ (x, xdata) x (1) * ((1-exp (- x (x (2) + (3)))。^ xdata)。/ (1 + (x (x (3) / (2)) * exp (- x (x (2) + (3))。^ xdata))));
x0 = (0.1, 0, 0);
[x, resnorm ~, exitflag,输出]= lsqcurvefit (F, x0、t、y);
持有
情节(t, F (x, t))
持有
当我写这段代码中,我得到了
错误使用lsqncommon(15行)
客观的函数返回初始点未定义的值。lsqcurvefit
不能继续下去。
错误在lsqcurvefit(第278行)
lsqncommon (funfcn xCurrent,磅,乌兰巴托,选项,defaultopt, optimgetFlag,调用者,
错误在EMM1(第10行)
[x, resnorm ~, exitflag,输出]= lsqcurvefit (F, x0、t、y);
我怎样才能解决这个问题呢?
1评论
亚当Danz”class=
亚当Danz 2021年5月25日
编辑:亚当Danz 2021年5月25日
欢迎来到论坛。我编辑你的问题代码格式。在将来请使用代码/文本切换 富文本编辑器 格式化代码。

登录置评。

接受的答案

亚历克斯·沙”class=
亚历克斯·沙 2021年5月26日
最好的结果是,很难获得自初始起动值是不可能猜正确。
的均方误差(RMSE): 26.4992273987196
总和9830.92673820673平方剩余:
相关系数。(R): 0.999856022308787
r平方:0.99971206534715
参数最佳估计
- - - - - - - - - - - - - - - - - - - - - - - -
x16001.07347038251
x22.38080287700935 e - 243
x31.00314103540412
注意x2的价值,非常小,但不能为零。
2的评论
亚历克斯·沙”class=
亚历克斯·沙 2021年6月9日
嗨,结果被另一个包称为“1 stopt”,下面的代码一样,不需要初始值开始的猜测:
算法= DE1;
函数y = x₁* ((1-exp (- (x2 + x3)) ^ xdata) / (1 + ((x3 / x2) * exp (- (x2 + x3) ^ xdata))));
数据;
xdata = (2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018];
y =(0.1, 0.2, 0.5, 1、5、6、7日,19日,25日,48258842年,3007年,5109年);
上面的代码在运行时1 stopt,得到下面的结果:
的均方误差(RMSE): 26.4992273987196
总和9830.92673820672平方剩余:
相关系数。(R): 0.999856022308634
r平方:0.999712065346844
参数最佳估计
- - - - - - - - - - - - - - - - - - - - - - - -
x16001.07347055296
x22.38080287816193 e - 243
x31.00314103540412
= = = = = =输出结果= = = = = =
不。观察y计算y
1 0.1 6.5324798657854 e-6
2 0.2 - 3.54011266002914 e-5
3 0.5 - 0.000192868545632992
4 1 0.00105637532045177
5 5 0.00581694072945544
6 6 0.0322030188245443
7 7 0.179235582439475
8 19 1.00287006514251
9 25 5.63817036463822
10 48 31.7561469332492
11 258 176.252497298153
12 842 885.290308114866
13 3007 2993.18985796258
14 5109 5112.53339393831

登录置评。

答案(1)

Andreas Apostolatos”class=
Andreas Apostolatos 2021年5月25日
你好、
欢迎来到论坛从我。
你共享无法执行,因为变量的代码片段“x”是没有定义的。不过,我认为你想将“xdata”作为第三个参数传递给函数“lsqcurvefit”,即
xdata = (2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018];
y =(0.1, 0.2, 0.5, 1、5、6、7日,19日,25日,48258842年,3007年,5109年);
%的阴谋(t、N (t),“罗”)
F = @ (x, xdata) x (1) * ((1-exp (- x (x (2) + (3)))。^ xdata)。/ (1 + (x (x (3) / (2)) * exp (- x (x (2) + (3))。^ xdata))));
x0 = (0.1, 0, 0);
[x, resnorm ~, exitflag,输出]= lsqcurvefit (F, x0, xdata y);
这导致你提到的错误消息,也就是说,
错误使用lsqncommon(15行)
客观的函数返回初始点未定义的值。
lsqcurvefit不能继续下去。
错误是在这个意义上不解自明的:你提供一个初始猜测“lsqcurvefit”函数,目标函数的值未定义的值。事实上,你可以检查,通过评估目标函数自己的起点,即
F (x0, xdata)
ans =
1到12
南南南南南南南南南南南南
13到14
南南
如果你改变最初的猜测“x0”定义另一个目标函数的值,那么算法没有这样的一个错误。例如,试图改变最初的想从“x0 =[0.1, 0,0];”到“x0 =(0.1, 0.1, 0.1);“,也就是说,
xdata = (2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018];
y =(0.1, 0.2, 0.5, 1、5、6、7日,19日,25日,48258842年,3007年,5109年);
%的阴谋(t、N (t),“罗”)
F = @ (x, xdata) x (1) * ((1-exp (- x (x (2) + (3)))。^ xdata)。/ (1 + (x (x (3) / (2)) * exp (- x (x (2) + (3))。^ xdata))));
x0 = (0.1, 0.1, 0.1);%修改初始猜测
[x, resnorm ~, exitflag,输出]= lsqcurvefit (F, x0, xdata y);
这已经产生了一个解决方案的功能“lsqcurvefit”。
我希望这能帮助你进一步的信息。
亲切的问候,
安德烈亚斯
2的评论
Andreas Apostolatos”class=
Andreas Apostolatos 2021年6月9日
你好、
事实上你不得到一个最优解在后一种情况下,因为MATLAB断言以下警告,
局部最小值。
lsqcurvefit停止是因为最后的平方和相对变化量
其初始值小于公差的值函数。
如果你检查变量的返回值“exitflag”,你会注意到它是3在后一种情况下,即
exitflag =
3
这意味着根据文档 “改变的剩余小于指定的宽容。” 有关更多信息,请参见以下链接,
后者意味着没有找到最优的解决方案。你可以试着改变最初的猜测“x0”的价值目标是“lsqcurvefit”算法是收敛的,定义“exitflag”等于1的值,所以 ”功能融合到一个解决方案 x ”。 , 有关更多信息,请参见后面的文档页面的可能值exitflag及其含义。
当我改变你的特定的优化问题的初始猜测“x0 =[0, 0, 0.001] ',然后我得到以下结果,
> > [x, resnorm ~、exitflag、输出]= lsqcurvefit (F, x0, xdata, y)
最初的点是一个局部最小值。
优化因为完成初始点的梯度的大小
不到最优公差的值。
<停止标准详细信息>
x =
1.0 e 03 *
0 0 1.0000
resnorm =
3.5923 e + 07
exitflag =
1
输出=
结构体字段:
firstorderopt: 0
迭代:0
funcCount: 4
cgiterations: 0
算法:“trust-region-reflective”
stepsize: 1
信息:“↵初始点是一个局部最小值。↵↵优化完成因为梯度的大小初始点↵小于最优公差的值。↵↵<停止标准细节>↵↵优化完成:最后一点是初始点。↵一阶最优性措施,0.000000 e + 00,小于↵选项。OptimalityTolerance = 1.000000 e-06。↵↵”
因此,建议尝试不同的初始猜测“x0”设置,直到算法收敛的exitflag等于1。
我希望这有助于你的理解。
亲切的问候,
安德烈亚斯

登录置评。

类别

找到更多的在非线性最小二乘曲线拟合)帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!