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;
我有两个数组 "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;