我有两个数组"x"和"fy".我必须进行数组"fy"wrt数组"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;
Run Code Online (Sandbox Code Playgroud)
使用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};
Run Code Online (Sandbox Code Playgroud)
产量:
integral = 5.22;
Run Code Online (Sandbox Code Playgroud)