是否可以设置一个上限fsolve所使用的步长?
10视图(30天)
显示旧的评论
我想用fsolve解决一个小非线性系统方程(3)约束的未知数。我知道我不能影响使用fsolve强制约束,但我总是有一个很好的初始估计,通常允许解算器找到我需要的解决方案不考虑外部的约束边界。
然而,改变方程参数(我需要能够做)有时导致fsolve试图找到一个解决方案在边界之外,这是不能接受的。
我试着用fmincon相同的初始猜测fsolve没有成功:没有应用约束,它倾向于搜索之外的约束边界,使解决方案比fsolve快崩溃。的限制,无法找到解决方案,因为它被困在一个边界。
我在想,如果我可以添加一些放松的fsolve算法,它可以帮助我保持在我的约束(当然没有担保,)。换句话说,我在想如果有一个办法,限制步长由fsolve从一个迭代到另一个地方。我发现以下选项的文档,但是他们不做我所需要的东西:
- FiniteDifferenceStepSize:这允许设置步长梯度估计使用在给定fsolve迭代,但并没有提供控制解决方案向量上的一步从一个迭代到另一个地方
- StepTolerance:这是一个下界的步长从一个迭代到另一个(我想是一个值的上限)
基本上,我想fsolve估算梯度,但让我决定沿着梯度我想走多远。还有其他选项,甚至其他解算器我不认为能做这样的吗?
谢谢你!
0评论
接受的答案
马特·J
2021年9月9日
编辑:马特·J
2021年9月9日
我试着用fmincon相同的初始猜测fsolve没有成功:
一个更简单的选择比fmincon使用lsqnonlin,这很类似于fsolve除了它允许您规定简单的上界和下界。
的限制,无法找到解决方案,因为它被困在一个边界。
根据你的描述,我怀疑是解决“陷入”。听起来我像无约束的解决方案是在边界之外,并在边界约束的解决方案是。如果我是正确的,不会帮助调整搜索机制。你的方程本身的问题。有一些错误或物理信息缺乏的方程会导致预期的地区的一个解决方案。
一种方法来验证这是样品方程函数在一个网格覆盖有界区域。这是应该计算驯良的因为你只有3个未知数。这将让你检查直接解决方案所在(在采样网格的分辨率)。