1 | model SimpsonTest
|
---|
2 |
|
---|
3 | function simpson "Simpson's numerical integration formula"
|
---|
4 | input Real vals[:] "function values";
|
---|
5 | input Real a "Lower limit";
|
---|
6 | input Real b "Upper limit";
|
---|
7 | output Real res;
|
---|
8 | algorithm
|
---|
9 | //assert(size(vals,1) >= 3,"Not enough points for Simpson integration!");
|
---|
10 | if size(vals, 1) >= 3 then
|
---|
11 | res := (b - a)/(size(vals, 1) - 1)*(vals[1] + 2*sum(vals[3:2:end - 1])
|
---|
12 | + 4*sum(vals[2:2:end - 1]) + vals[end])/3;
|
---|
13 | else
|
---|
14 | res := (b - a)*sum(vals)/2;
|
---|
15 | end if;
|
---|
16 | end simpson;
|
---|
17 |
|
---|
18 | parameter Real a = simpson({0.4, 0.3, 0.1, 0.2, 0.3},0,1);
|
---|
19 | Real x(start=1);
|
---|
20 | equation
|
---|
21 | der(x) = -a * x;
|
---|
22 | end SimpsonTest;
|
---|