是否可以设置一个上限fsolve所使用的步长?

10视图(30天)
我想用fsolve解决一个小非线性系统方程(3)约束的未知数。我知道我不能影响使用fsolve强制约束,但我总是有一个很好的初始估计,通常允许解算器找到我需要的解决方案不考虑外部的约束边界。
然而,改变方程参数(我需要能够做)有时导致fsolve试图找到一个解决方案在边界之外,这是不能接受的。
我试着用fmincon相同的初始猜测fsolve没有成功:没有应用约束,它倾向于搜索之外的约束边界,使解决方案比fsolve快崩溃。的限制,无法找到解决方案,因为它被困在一个边界。
我在想,如果我可以添加一些放松的fsolve算法,它可以帮助我保持在我的约束(当然没有担保,)。换句话说,我在想如果有一个办法,限制步长由fsolve从一个迭代到另一个地方。我发现以下选项的文档,但是他们不做我所需要的东西:
- FiniteDifferenceStepSize:这允许设置步长梯度估计使用在给定fsolve迭代,但并没有提供控制解决方案向量上的一步从一个迭代到另一个地方
- StepTolerance:这是一个下界的步长从一个迭代到另一个(我想是一个值的上限)
基本上,我想fsolve估算梯度,但让我决定沿着梯度我想走多远。还有其他选项,甚至其他解算器我不认为能做这样的吗?
谢谢你!

接受的答案

马特·J
马特·J 2021年9月9日
编辑:马特·J 2021年9月9日
我试着用fmincon相同的初始猜测fsolve没有成功:
一个更简单的选择比fmincon使用lsqnonlin,这很类似于fsolve除了它允许您规定简单的上界和下界。
的限制,无法找到解决方案,因为它被困在一个边界。
根据你的描述,我怀疑是解决“陷入”。听起来我像无约束的解决方案是在边界之外,并在边界约束的解决方案是。如果我是正确的,不会帮助调整搜索机制。你的方程本身的问题。有一些错误或物理信息缺乏的方程会导致预期的地区的一个解决方案。
一种方法来验证这是样品方程函数在一个网格覆盖有界区域。这是应该计算驯良的因为你只有3个未知数。这将让你检查直接解决方案所在(在采样网格的分辨率)。
3评论
让-菲利普•瑟
让-菲利普•瑟 2021年9月13日
一个解决方案可能会提出一个更独立的方式来生成一个初始猜测。对于你的玩具问题,它非常简单,如下。我不知道类似的东西可能在你的真正的问题。
我试着做些类似的约束参数空间内通过评估几点并保持最好的点作为fsolve最初的猜测,但它不是很健壮。我没有为我的方程显式表达式,也改变全球迭代之间随着解决方案的其他部分的发展。最好的选择我发现到目前为止真的每次都是使用相同的初始估计。
也许你可以用这个作为一个后备初始化策略的情况下优化失败。也许只需要在罕见的情况下,当不连续捕获区域发生的变化。
现在我认为这是最好的方法。大多数情况下的代码执行的很好,所以我就包括特殊处理这个问题的时候,这确实应该是罕见,出现。

登录置评。

答案(1)

马特·J
马特·J 2021年9月13日
编辑:马特·J 2021年9月13日
你可以试着玩 InitDampling 选项参数Levenberg-Marquardt所使用的方法。

类别

找到更多的在非线性优化帮助中心文件交换

下载188bet金宝搏


释放

R2020a

社区寻宝

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

开始狩猎!

翻译的