123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?php
- namespace MathPHP\Tests\NumericalAnalysis\NumericalIntegration;
- use MathPHP\Expression\Polynomial;
- use MathPHP\NumericalAnalysis\NumericalIntegration\SimpsonsRule;
- class SimpsonsRuleTest extends \PHPUnit\Framework\TestCase
- {
-
- public function testApproximateWithPoints()
- {
-
- $points = [[0, 1], [1.5, 6.25], [3, 16]];
- $tol = 0;
- $expected = 21;
-
- $x = SimpsonsRule::approximate($points);
-
- $this->assertEqualsWithDelta($expected, $x, $tol);
- }
-
- public function testApproximateWithPointsNotSorted()
- {
-
- $points = [[1.5, 6.25], [3, 16], [0, 1]];
- $tol = 0;
- $expected = 21;
-
- $x = SimpsonsRule::approximate($points);
-
- $this->assertEqualsWithDelta($expected, $x, $tol);
- }
-
- public function testApproximateUsingCallback()
- {
-
- $func = $func = function ($x) {
- return $x ** 2 + 2 * $x + 1;
- };
- $start = 0;
- $end = 3;
- $n = 3;
- $tol = 0;
- $expected = 21;
-
- $x = SimpsonsRule::approximate($func, $start, $end, $n);
-
- $this->assertEqualsWithDelta($expected, $x, $tol);
- }
-
- public function testApproximateUsingPolynomial()
- {
-
- $polynomial = new Polynomial([1, 2, 1]);
- $start = 0;
- $end = 3;
- $n = 3;
- $tol = 0;
- $expected = 21;
-
- $x = SimpsonsRule::approximate($polynomial, $start, $end, $n);
-
- $this->assertEqualsWithDelta($expected, $x, $tol);
- }
-
- public function testApproximateErrorSubintervalsNotEven()
- {
-
- $points = [[0,0], [4,4], [2,2], [6,6]];
-
- $this->expectException(\Exception::class);
-
- SimpsonsRule::approximate($points);
- }
-
- public function testNonConstantSpacingException()
- {
-
- $points = [[0,0], [3,3], [2,2]];
-
- $this->expectException(\Exception::class);
-
- SimpsonsRule::approximate($points);
- }
- }
|