Guest User

Untitled

a guest
Jul 22nd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. var x = [1, 2, 3, 4, 5];
  2. var y = x.map(function(x) { return 2.1*x + 0.2; });
  3.  
  4. //Don't feel like including underscore
  5. function zip(a) {
  6. var ordered = a[0].length <= a[1].length;
  7. var x = ordered ? a[0] : a[1];
  8. var y = ordered ? a[1] : a[0];
  9. return x.map(function (x, i) {
  10. return ordered ? [ x, y[i] ]
  11. : [ y[i], x ];
  12. });
  13. }
  14.  
  15. function sum(x) {
  16. var accum = 0;
  17. x.forEach(function(y) { accum+=y; });
  18. return y;
  19. }
  20.  
  21. //Not what I want to do.
  22. function ssd(xvals, yvals) {
  23. var set = zip(xvals, yvals);
  24. return sum( set.map(function (tuple) {
  25. return Math.pow(tuple[0] - tuple[1], 2);
  26. }));
  27. }
  28.  
  29. function initialGuess(x, y) {
  30. var set = zip([x, y]);
  31. var a = set[0];
  32. var b = set[set.length-1];
  33. var m = (b[1] - a[1]) / (b[0] - a[0]);
  34. var intercept = a[1] - m*a[0];
  35. return [m, intercept];
  36. }
  37.  
  38. //broked, needs to be 2d
  39. //I think, for this case, using steepest descent would be more than reasonable.
  40. function newtonIteration (fxn, xi) {
  41. var dx = 0.01;
  42. return xi - fxn(xi)/derivative(fxn, xi, dx);
  43. }
  44.  
  45. function derivative(fxn, x, dx) {
  46. return ( fxn(x+dx/2) - fxn(x-dx/2) ) / dx;
  47. }
  48.  
  49. function iterate(iterfxn, stopfxn, x0) {
  50. var xold = x0;
  51. var xnew = x0;
  52. var xtemp = x0;
  53.  
  54. do {
  55. console.log(xold);
  56. console.log(xnew);
  57. xtemp = xnew;
  58. xnew = iterfxn(xold);
  59. xold = xtemp;
  60. console.log(xold);
  61. console.log(xnew);
  62. } while (!stopfxn(xnew, xold));
  63.  
  64. return xnew;
  65. }
  66.  
  67. function line(consts) {
  68. return function(x) {
  69. return consts[0]*x + consts[1];
  70. }
  71. }
  72.  
  73. function objectiveFxn(consts) {
  74. return ssd( x.map(line(consts)), yvals );
  75. }
  76.  
  77. var result = iterate( function(C) { return newtonIteration(objectiveFxn); },
  78. function(xnew, xold) { return abs(objectiveFxn(xnew)
  79. - objectiveFxn(xold)) < 0.001; },
  80. initialGuess(x, y) );
  81.  
  82. console.log(result[0] + 'x' + result[1]);
Add Comment
Please, Sign In to add comment