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