Modelica中的梯形数值积分

时间:2016-08-25 13:55:44

标签: modelica

我有两个数组“x”和“fy”。我必须对数组“fy”w​​.r.t数组“x”进行梯形积分。我在Modelica库中找不到函数。我在建筑图书馆找到了一个功能,但它对我没有帮助。如果这种集成还有其他功能,请你建议。

1 个答案:

答案 0 :(得分:6)

我认为值得发布另一种方法来获得依赖于Modelica做得好的输入的积分。我找到了一个很好的示例here,它使用时间和der()

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

将来,您可能需要编写许多自己的功能/模型。 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;