Modelica中的梯形数值积分

Modelica中的梯形数值积分,modelica,Modelica,我有两个数组“x”和“fy”。我必须对数组“fy”w.r.t数组“x”进行梯形积分。我在Modelica库中找不到函数。我在建筑物图书馆找到了一个函数,但它对我没有帮助。您能否建议,这种类型的积分是否还有其他功能。我认为值得发布一种替代方法,根据Modelica的表现来获取输入积分。我发现这个很好的例子使用了时间和der() 我不确定梯形规则集成是否在MSL中完成,但下面是一个实现梯形规则的简单函数。是一个pdf格式,有一个很好的摘要和示例 将来,您可能需要编写许多自己的函数/模型。Modeli

我有两个数组“x”和“fy”。我必须对数组“fy”w.r.t数组“x”进行梯形积分。我在Modelica库中找不到函数。我在建筑物图书馆找到了一个函数,但它对我没有帮助。您能否建议,这种类型的积分是否还有其他功能。

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

我不确定梯形规则集成是否在MSL中完成,但下面是一个实现梯形规则的简单函数。是一个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;

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

我不确定梯形规则集成是否在MSL中完成,但下面是一个实现梯形规则的简单函数。是一个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;