Modelica 中的梯形数值积分

Trapezoidal numerical integration in Modelica

我有两个数组 "x" 和 "fy"。我必须对数组 "fy" w.r.t 数组 "x" 进行梯形积分。我在 Modelica 库中找不到函数。我在 Buildings 库中找到了一个函数,但它并不能完全帮助我。请问这种集成还有其他功能吗

我认为值得发布一种替代方法来根据 Modelica 的出色表现来获取输入的积分。我发现这个很好的例子 here 使用时间和 der().

我不确定梯形规则集成是否在 MSL 中完成,但下面是一个实现梯形规则的简单函数。 Here 是一个带有很好的总结和示例的 pdf。

将来,您可能需要自己编写许多 functions/models。 Modelica 仍然需要很多功能,例如一组更完整的经过验证和验证的数学函数,如 SciPy 或 GNU 标准库,它们将具有各种积分、插值等可能有用的东西。

function integral_TrapezoidalRule "Integral of array y(x) using the trapezoidal rule"

  extends Modelica.Icons.Function;

  input Integer n(min=2) "length of array";
  input Real[n] x "dependent array";
  input Real[n] y "independent array";

  output Real integral "Resulting integral";

protected 
  Real[n-1] dx;

algorithm 
  integral := 0;

  for i in 1:n-1 loop
    dx[i] := x[i+1] - x[i];
    integral := integral + 0.5*dx[i]*(y[i+1]+y[i]);
  end for;

end integral_TrapezoidalRule;

使用 pdf 中的示例,调用函数:

n = 6;
x = {2.1,2.4,2.7,3.0,3.3,3.6};
y = {3.2,2.7,2.9,3.5,4.1,5.2};

产量:

integral = 5.22;