Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var K1 = 1.0/3.0;
- var K2 = 1.0/15.0;
- function fx(x) { return Math.pow(x, 4) - 12*Math.pow(x, 3) + 15*Math.pow(x, 2) - 6; }
- function simpsons(f, a, b, n) {
- var h = (b - a) / n;
- var r, s = 0.0, m = 0;
- for (var x = a; x <= b; x += h) {
- r = f(x);
- if (x == a || x == b) {
- s += r;
- } else {
- m = !m;
- s += r * (m + 1) * 2.0;
- }
- }
- return s * (h / 3.0);
- }
- function rektangles(f, a, b, n) {
- var h = (b - a) / n;
- var s = 0.0;
- for (var i = 0; i < n; i++)
- s += f(a + h*(i + 0.5));
- return s * h;
- }
- function trapezoids(f, a, b, n) {
- var h = (b - a) / n;
- var s = 0.0;
- for (var i = 1; i <= n-1; i++)
- s += f(a + i*h);
- return (h/2) * (f(a) + f(b) + 2*s);
- }
- function lab5Main() {
- var a = 0, b = 1;
- steps = 1;
- epsilon = 0.001;
- rektStop = false, trapStop = false, simpStop = false;
- do {
- rektDelta = K1 * Math.abs(rektangles(fx, a, b, 2*steps) - rektangles(fx, a, b, steps));
- trapDelta = K1 * Math.abs(trapezoids(fx, a, b, 2*steps) - trapezoids(fx, a, b, steps));
- simpDelta = K2 * Math.abs(simpsons(fx, a, b, 2*steps) - simpsons(fx, a, b, steps));
- if (rektDelta < epsilon && !rektStop) {
- rektStop = true;
- rektSteps = 2*steps;
- }
- if (trapDelta < epsilon && !trapStop) {
- trapStop = true;
- trapSteps = 2*steps;
- }
- if (simpDelta < epsilon && !simpStop) {
- simpStop = true;
- simpSteps = 2*steps;
- }
- steps *= 2;
- } while (!(rektStop && trapStop && simpStop));
- rektStr = "rektangles I=" + rektangles(fx, a, b, rektSteps) + " n=" + rektSteps;
- trapStr = "trapezoids I=" + trapezoids(fx, a, b, trapSteps) + " n=" + trapSteps;
- simpStr = "simpsons I=" + simpsons(fx, a, b, simpSteps) + " n=" + simpSteps;
- console.log(rektStr);
- console.log(trapStr);
- console.log(simpStr);
- }
Advertisement
Add Comment
Please, Sign In to add comment