Ladies_Man

#NumMeth Lab 5 (Simpsons/Rekt/Trap) COMPLETE

May 18th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var K1 = 1.0/3.0;
  2. var K2 = 1.0/15.0;
  3.  
  4. function fx(x) { return Math.pow(x, 4) - 12*Math.pow(x, 3) + 15*Math.pow(x, 2) - 6; }
  5.  
  6. function simpsons(f, a, b, n) {
  7.     var h = (b - a) / n;
  8.     var r, s = 0.0, m = 0;
  9.  
  10.     for (var x = a; x <= b; x += h) {
  11.         r = f(x);
  12.         if (x == a || x == b) {
  13.             s += r;
  14.         } else {
  15.             m = !m;
  16.             s += r * (m + 1) * 2.0;
  17.         }
  18.     }
  19.  
  20.     return s * (h / 3.0);
  21. }
  22.  
  23. function rektangles(f, a, b, n) {
  24.     var h = (b - a) / n;
  25.     var s = 0.0;
  26.  
  27.     for (var i = 0; i < n; i++)
  28.         s += f(a + h*(i + 0.5));
  29.  
  30.     return s * h;
  31. }
  32.  
  33. function trapezoids(f, a, b, n) {
  34.     var h = (b - a) / n;
  35.     var s = 0.0;
  36.  
  37.     for (var i = 1; i <= n-1; i++)
  38.         s += f(a + i*h);
  39.    
  40.     return (h/2) * (f(a) + f(b) + 2*s);
  41. }
  42.  
  43. function lab5Main() {
  44.     var a = 0, b = 1;
  45.     steps = 1;
  46.     epsilon = 0.001;
  47.     rektStop = false, trapStop = false, simpStop = false;
  48.  
  49.     do {
  50.         rektDelta = K1 * Math.abs(rektangles(fx, a, b, 2*steps) - rektangles(fx, a, b, steps));
  51.         trapDelta = K1 * Math.abs(trapezoids(fx, a, b, 2*steps) - trapezoids(fx, a, b, steps));
  52.         simpDelta = K2 * Math.abs(simpsons(fx, a, b, 2*steps) - simpsons(fx, a, b, steps));
  53.        
  54.         if (rektDelta < epsilon && !rektStop) {
  55.             rektStop = true;
  56.             rektSteps = 2*steps;
  57.         }
  58.         if (trapDelta < epsilon && !trapStop) {
  59.             trapStop = true;
  60.             trapSteps = 2*steps;
  61.         }
  62.         if (simpDelta < epsilon && !simpStop) {
  63.             simpStop = true;
  64.             simpSteps = 2*steps;
  65.         }
  66.        
  67.         steps *= 2;
  68.        
  69.     } while (!(rektStop && trapStop && simpStop));
  70.    
  71.     rektStr = "rektangles I=" + rektangles(fx, a, b, rektSteps) + " n=" + rektSteps;
  72.     trapStr = "trapezoids I=" + trapezoids(fx, a, b, trapSteps) + " n=" + trapSteps;
  73.     simpStr = "simpsons   I=" + simpsons(fx, a, b, simpSteps) + " n=" + simpSteps;
  74.    
  75.     console.log(rektStr);
  76.     console.log(trapStr);
  77.     console.log(simpStr);
  78. }
Advertisement
Add Comment
Please, Sign In to add comment