首页 > 解决方案 > 如何查看modelica中solveOneNonlinearEquation函数的迭代次数?

问题描述

我在 Modelica 中使用 solveOneNonlinearEquation 求解器,它使用 Brent 方法找到非线性方程的根。但是,我需要知道 Brent 的方法进行了多少次迭代,以便将收敛速度与另一种方法(如定点迭代)进行比较。内置求解器没有输出“NumberOfIterations”的选项,因此我尝试编写自己的 Brent 方法函数并放置一个计数器。但是我必须向该函数输入一个函数并得到错误“类型前缀流,输入和输出仅适用于结构化组件,如果组件的任何元素都没有对应的相同类别的类型前缀。”

有人可以帮我吗?

标签: modelica

解决方案


的代码Modelica.Math.Nonlinear.solveOneNonlinearEquation未加密。只需复制它并创建您自己的solveOneNonlinearEquation,其中包含迭代计数器,例如

function solveOneNonlinearEquation
...
protected 
  Integer iterations = 0;
...
algorithm
...
  // Search loop
  while not found loop
    iterations := iterations + 1;
...
  end while;

  Modelica.Utilities.Streams.print("Iterations: " + String(iterations));
...
end solveOneNonlinearEquation;

关于以函数为输入的函数的用法,请参见示例Modelica.Math.Nonlinear.Examples.solveNonlinearEquations1


推荐阅读