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; |
---|