Libreoffice 迭代计算不会自动收敛

Libreoffice 迭代计算不会自动收敛

我有一组循环方程,其中内置了校正函数来收敛到一个解决方案。当我更改输入值时,依赖单元格开始计算但过早停止。如果我将最小变化值减小到较小的值,而不是 Calc 继续计算,我会收到错误 523(在给定的迭代中未收敛)。但我已经验证了解决方案在大约 20 步内收敛,迭代限制在 32767 的上限值。我似乎找不到一组兼容的收敛标准,允许解决方案从单个输入收敛一次。

重现:

设置单元格:

A1 to a value >1
B1=A1*C1^2-(1-D1)/20
C1=SQRT(B1/A1)
D1=C1^2*TAN(1/B1)

预期操作以 A1 作为输入值。B1 和 C1 是所寻求的参数,D1 是验证值,B1 中的校正由此而来。收敛时,D1 等于 1。

我愿意接受更简单的解决方案来使 B1 和 C1 满足 D1 的约束,并且知道脚本和求解器都存在,但我正在寻找一个在 A1 发生变化时立即出现的公式内解决方案。

更多信息:

寻求的单一解决方案介于 0 和 pi/2 之间,因此是第一个正解决方案。反复按 F9 可强制解决方案收敛,因此我对该方法很有信心。校正器在端点附近确实存在不稳定的机会,但我试图解决的问题甚至对表现良好的解决方案都不起作用。

答案1

不清楚您要解决什么问题。您的 D1 方程建立了 C1 和 B1 之间的关系;有无数个满足 D1==1 的解,即任何 C1 和 B1=1/(ATAN(1/C1^2))。A1 中的起始值将改变您的迭代结果(如果有)。迭代产生的值还取决于 B1 和 C1 中的初始值:如果您只是更改 A1 而不初始化 B1 和 C1,则解决方案(如果有)将不同,迭代也将不同(并且可能不会收敛)。

相关内容