Ladies_Man

#NumMeth Lab 6 (Diff. Eq) COMPLETE

Jun 19th, 2016
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. N = 11;
  2.  
  3. var y = x => 3*x*x*x;
  4. var dy = x =>  9*x*x;
  5. var ddy = x =>  18*x;
  6.  
  7. var pFunc = x =>  1;
  8. var qFunc = x => -1;
  9.  
  10. x_A = 1.0;
  11. x_B = 2.0;
  12.  
  13. y_A = y(x_A);
  14. y_B = y(x_B);
  15.  
  16. h = (x_B - x_A) / (N - 1);
  17.  
  18. f = [], q = [], p = []; //size = n
  19.  
  20. function solveMatrix(n, a, b, c, d) {
  21.     var alpha = [], beta = [], res = []; //size = n
  22.  
  23.     alpha[0] = -c[0] / b[0];
  24.     beta[0] = d[0] / b[0];
  25.  
  26.     for (var i = 1; i < n; i++) {
  27.         alpha[i] = (-c[i]) / (a[i] * alpha[i-1] + b[i]);
  28.         beta[i] = (d[i] - a[i] * beta[i-1]) / (a[i] * alpha[i-1] + b[i]);
  29.     }
  30.     res[n-1] = beta[n-1];
  31.  
  32.     for (var i = n-2; i >= 0; i--) res[i] = alpha[i] * res[i+1] + beta[i];
  33.    
  34.     return res;
  35. }
  36.  
  37. function countFunc(n) {
  38.     for (var i = 0; i < n; i++) {
  39.         var x = x_A + i*h;
  40.         f[i] = ddy(x) + pFunc(x)*dy(x) + qFunc(x)*y(x);
  41.         p[i] = pFunc(x);
  42.         q[i] = qFunc(x);
  43.     }
  44. }
  45.  
  46. function solveEquation(n) {
  47.    
  48.     var a = [], b = [], c = [], d = []; //size = n-2
  49.     var e = [], res = [];               //size = n
  50.  
  51.     for (var i = 1; i < n-3; i++) {
  52.  
  53.         a[i] = 1 - p[i+1]*h/2;
  54.         b[i] = q[i+1]*h*h - 2;
  55.         c[i] = 1 + p[i+1]*h/2;
  56.         d[i] = f[i+1]*h*h;
  57.     }
  58.  
  59.     a[0] = 0;
  60.     b[0] = q[1]*h*h - 2;
  61.     c[0] = 1 + p[1]*h/2;
  62.     d[0] = f[1]*h*h - y_A*(1 - p[1]*h/2);
  63.  
  64.     a[n-3] = 1 - p[n-2]*h/2;
  65.     b[n-3] = q[n-2]*h*h - 2;
  66.     c[n-3] = 0;
  67.     d[n-3] = f[n-2]*h*h - y_B*(1 + p[n-2]*h/2);
  68.  
  69.     e = solveMatrix(n-2, a, b, c, d);
  70.  
  71.     for (var i = 0; i < n-2; i++) res[i+1] = e[i];
  72.     res[0] = y_A;
  73.     res[n-1] = y_B;
  74.  
  75.     var resStr6 = "res:";
  76.     var texStr6 = "\\hline\n";
  77.     for (var i = 0; i < n; i++) {
  78.         resStr6 +=  "[" + i + "]: x:" + (x_A + i*h) +
  79.                                 " y:" + y(x_A + i*h) +
  80.                                 " res:" + res[i] +
  81.                                 " d:" + Math.abs(y(x_A + i*h) - res[i]) + "\n";
  82.         texStr6 += (x_A + i*h) + " & " +
  83.                     y(x_A + i*h).toFixed(6) + " & " +
  84.                     res[i].toFixed(6) + " & " +
  85.                     Math.abs(y(x_A + i*h) - res[i]).toFixed(6) + " \\\\ " + "\n" + "\\hline" + "\n";
  86.     }
  87.    
  88.     console.log(resStr6);
  89.     console.log(texStr6);
  90. }
  91.  
  92. function lab6Main() {
  93.     countFunc(N);
  94.     solveEquation(N);
  95. }
Advertisement
Add Comment
Please, Sign In to add comment