jsxgraph 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/CHANGELOG.md +25 -2
  2. package/distrib/docs/files.html +2 -2
  3. package/distrib/docs/index.html +2 -2
  4. package/distrib/docs/static/jsxgraph.css +24 -22
  5. package/distrib/docs/static/jsxgraphcore.js +2 -2
  6. package/distrib/docs/symbols/Angle.html +2 -2
  7. package/distrib/docs/symbols/Arc.html +2 -2
  8. package/distrib/docs/symbols/Arrow.html +2 -2
  9. package/distrib/docs/symbols/Arrowparallel.html +2 -2
  10. package/distrib/docs/symbols/Axis.html +2 -2
  11. package/distrib/docs/symbols/Bisector.html +2 -2
  12. package/distrib/docs/symbols/Bisectorlines.html +2 -2
  13. package/distrib/docs/symbols/Boxplot.html +2 -2
  14. package/distrib/docs/symbols/Button.html +4 -4
  15. package/distrib/docs/symbols/Cardinalspline.html +2 -2
  16. package/distrib/docs/symbols/Chart.html +2 -2
  17. package/distrib/docs/symbols/Checkbox.html +17 -17
  18. package/distrib/docs/symbols/Circle.html +2 -2
  19. package/distrib/docs/symbols/Circumcenter.html +4 -4
  20. package/distrib/docs/symbols/Circumcircle.html +2 -2
  21. package/distrib/docs/symbols/CircumcircleArc.html +2 -2
  22. package/distrib/docs/symbols/CircumcircleSector.html +2 -2
  23. package/distrib/docs/symbols/Comb.html +5 -5
  24. package/distrib/docs/symbols/Conic.html +2 -2
  25. package/distrib/docs/symbols/Constants.html +2 -2
  26. package/distrib/docs/symbols/Curve.html +2 -2
  27. package/distrib/docs/symbols/Curve3D.html +2 -2
  28. package/distrib/docs/symbols/CurveDifference.html +2 -2
  29. package/distrib/docs/symbols/CurveIntersection.html +2 -2
  30. package/distrib/docs/symbols/CurveUnion.html +2 -2
  31. package/distrib/docs/symbols/Derivative.html +2 -2
  32. package/distrib/docs/symbols/Ellipse.html +2 -2
  33. package/distrib/docs/symbols/ForeignObject.html +4 -4
  34. package/distrib/docs/symbols/Functiongraph.html +2 -2
  35. package/distrib/docs/symbols/Functiongraph3D.html +2 -2
  36. package/distrib/docs/symbols/Glider.html +4 -4
  37. package/distrib/docs/symbols/Grid.html +2 -2
  38. package/distrib/docs/symbols/Group.html +2 -2
  39. package/distrib/docs/symbols/Hatch.html +2 -2
  40. package/distrib/docs/symbols/Hyperbola.html +2 -2
  41. package/distrib/docs/symbols/Image.html +4 -4
  42. package/distrib/docs/symbols/Incenter.html +4 -4
  43. package/distrib/docs/symbols/Incircle.html +2 -2
  44. package/distrib/docs/symbols/Inequality.html +2 -2
  45. package/distrib/docs/symbols/Input.html +4 -4
  46. package/distrib/docs/symbols/Integral.html +2 -2
  47. package/distrib/docs/symbols/Intersection.html +4 -4
  48. package/distrib/docs/symbols/JXG.AbstractRenderer.html +2 -2
  49. package/distrib/docs/symbols/JXG.Board.html +144 -11
  50. package/distrib/docs/symbols/JXG.Board.infobox.html +2 -2
  51. package/distrib/docs/symbols/JXG.C.html +2 -2
  52. package/distrib/docs/symbols/JXG.CA.html +2 -2
  53. package/distrib/docs/symbols/JXG.CanvasRenderer.html +2 -2
  54. package/distrib/docs/symbols/JXG.Chart.html +2 -2
  55. package/distrib/docs/symbols/JXG.Circle.html +2 -2
  56. package/distrib/docs/symbols/JXG.Complex.html +2 -2
  57. package/distrib/docs/symbols/JXG.Composition.html +2 -2
  58. package/distrib/docs/symbols/JXG.Coords.html +2 -2
  59. package/distrib/docs/symbols/JXG.CoordsElement.html +54 -2
  60. package/distrib/docs/symbols/JXG.Curve.html +2 -2
  61. package/distrib/docs/symbols/JXG.Curve3D.html +2 -2
  62. package/distrib/docs/symbols/JXG.Dump.html +2 -2
  63. package/distrib/docs/symbols/JXG.EventEmitter.html +2 -2
  64. package/distrib/docs/symbols/JXG.ForeignObject.html +3 -3
  65. package/distrib/docs/symbols/JXG.GeometryElement.html +2 -2
  66. package/distrib/docs/symbols/JXG.GeometryElement3D.html +2 -2
  67. package/distrib/docs/symbols/JXG.GeonextParser.html +2 -2
  68. package/distrib/docs/symbols/JXG.Group.html +2 -2
  69. package/distrib/docs/symbols/JXG.Image.html +3 -3
  70. package/distrib/docs/symbols/JXG.JSXGraph.html +2 -2
  71. package/distrib/docs/symbols/JXG.JessieCode.html +2 -2
  72. package/distrib/docs/symbols/JXG.Legend.html +2 -2
  73. package/distrib/docs/symbols/JXG.Line.html +2 -2
  74. package/distrib/docs/symbols/JXG.Line3D.html +2 -2
  75. package/distrib/docs/symbols/JXG.Math.Clip.html +2 -2
  76. package/distrib/docs/symbols/JXG.Math.Extrapolate.html +2 -2
  77. package/distrib/docs/symbols/JXG.Math.Geometry.html +2 -2
  78. package/distrib/docs/symbols/JXG.Math.IntervalArithmetic.html +2 -2
  79. package/distrib/docs/symbols/JXG.Math.Metapost.html +2 -2
  80. package/distrib/docs/symbols/JXG.Math.Nlp.html +2 -2
  81. package/distrib/docs/symbols/JXG.Math.Numerics.html +23 -15
  82. package/distrib/docs/symbols/JXG.Math.Plot.html +2 -2
  83. package/distrib/docs/symbols/JXG.Math.Poly.Monomial.html +2 -2
  84. package/distrib/docs/symbols/JXG.Math.Poly.Polynomial.html +2 -2
  85. package/distrib/docs/symbols/JXG.Math.Poly.Ring.html +2 -2
  86. package/distrib/docs/symbols/JXG.Math.Poly.html +2 -2
  87. package/distrib/docs/symbols/JXG.Math.ProbFuncs.html +2 -2
  88. package/distrib/docs/symbols/JXG.Math.Quadtree.html +122 -7
  89. package/distrib/docs/symbols/JXG.Math.Statistics.html +2 -2
  90. package/distrib/docs/symbols/JXG.Math.Symbolic.html +2 -2
  91. package/distrib/docs/symbols/JXG.Math.html +45 -2
  92. package/distrib/docs/symbols/JXG.NoRenderer.html +2 -2
  93. package/distrib/docs/symbols/JXG.Options.html +2 -2
  94. package/distrib/docs/symbols/JXG.Plane3D.html +2 -2
  95. package/distrib/docs/symbols/JXG.Point.html +3 -3
  96. package/distrib/docs/symbols/JXG.Point3D.html +2 -2
  97. package/distrib/docs/symbols/JXG.Polygon.html +2 -2
  98. package/distrib/docs/symbols/JXG.SVGRenderer.html +2 -2
  99. package/distrib/docs/symbols/JXG.Server.html +2 -2
  100. package/distrib/docs/symbols/JXG.Server.modules.html +2 -2
  101. package/distrib/docs/symbols/JXG.Surface3D.html +2 -2
  102. package/distrib/docs/symbols/JXG.Text.html +8 -8
  103. package/distrib/docs/symbols/JXG.Ticks.html +2 -2
  104. package/distrib/docs/symbols/JXG.Transformation.html +2 -2
  105. package/distrib/docs/symbols/JXG.Turtle.html +2 -2
  106. package/distrib/docs/symbols/JXG.Util.Base64.html +2 -2
  107. package/distrib/docs/symbols/JXG.Util.UTF8.html +2 -2
  108. package/distrib/docs/symbols/JXG.Util.Unzip.html +2 -2
  109. package/distrib/docs/symbols/JXG.Util.html +2 -2
  110. package/distrib/docs/symbols/JXG.VMLRenderer.html +2 -2
  111. package/distrib/docs/symbols/JXG.View3D.html +2 -2
  112. package/distrib/docs/symbols/JXG.XML.html +2 -2
  113. package/distrib/docs/symbols/Label.html +114 -4
  114. package/distrib/docs/symbols/Legend.html +2 -2
  115. package/distrib/docs/symbols/Line.html +2 -2
  116. package/distrib/docs/symbols/Line3D.html +2 -2
  117. package/distrib/docs/symbols/Locus.html +2 -2
  118. package/distrib/docs/symbols/MajorArc.html +2 -2
  119. package/distrib/docs/symbols/MajorSector.html +2 -2
  120. package/distrib/docs/symbols/Metapostspline.html +2 -2
  121. package/distrib/docs/symbols/Midpoint.html +4 -4
  122. package/distrib/docs/symbols/MinorArc.html +2 -2
  123. package/distrib/docs/symbols/MinorSector.html +2 -2
  124. package/distrib/docs/symbols/Mirrorelement.html +2 -2
  125. package/distrib/docs/symbols/Mirrorpoint.html +4 -4
  126. package/distrib/docs/symbols/NonReflexAngle.html +2 -2
  127. package/distrib/docs/symbols/Normal.html +2 -2
  128. package/distrib/docs/symbols/Orthogonalprojection.html +4 -4
  129. package/distrib/docs/symbols/OtherIntersection.html +4 -4
  130. package/distrib/docs/symbols/Parabola.html +2 -2
  131. package/distrib/docs/symbols/Parallel.html +2 -2
  132. package/distrib/docs/symbols/Parallelpoint.html +4 -4
  133. package/distrib/docs/symbols/ParametricSurface3D.html +2 -2
  134. package/distrib/docs/symbols/Perpendicular.html +2 -2
  135. package/distrib/docs/symbols/PerpendicularPoint.html +4 -4
  136. package/distrib/docs/symbols/PerpendicularSegment.html +2 -2
  137. package/distrib/docs/symbols/Point.html +4 -4
  138. package/distrib/docs/symbols/Point3D.html +2 -2
  139. package/distrib/docs/symbols/PolarLine.html +2 -2
  140. package/distrib/docs/symbols/PolePoint.html +4 -4
  141. package/distrib/docs/symbols/Polygon.html +2 -2
  142. package/distrib/docs/symbols/PolygonalChain.html +2 -2
  143. package/distrib/docs/symbols/RadicalAxis.html +2 -2
  144. package/distrib/docs/symbols/Reflection.html +2 -2
  145. package/distrib/docs/symbols/ReflexAngle.html +2 -2
  146. package/distrib/docs/symbols/RegularPolygon.html +2 -2
  147. package/distrib/docs/symbols/Riemannsum.html +7 -3
  148. package/distrib/docs/symbols/Sector.html +2 -2
  149. package/distrib/docs/symbols/Segment.html +2 -2
  150. package/distrib/docs/symbols/Semicircle.html +2 -2
  151. package/distrib/docs/symbols/Slider.html +145 -4
  152. package/distrib/docs/symbols/Slopefield.html +2 -2
  153. package/distrib/docs/symbols/Slopetriangle.html +2 -2
  154. package/distrib/docs/symbols/Smartlabel.html +4 -4
  155. package/distrib/docs/symbols/Spline.html +2 -2
  156. package/distrib/docs/symbols/Stepfunction.html +2 -2
  157. package/distrib/docs/symbols/Tangent.html +2 -2
  158. package/distrib/docs/symbols/Tapemeasure.html +2 -2
  159. package/distrib/docs/symbols/Text.html +4 -4
  160. package/distrib/docs/symbols/Ticks.html +2 -2
  161. package/distrib/docs/symbols/Tracecurve.html +2 -2
  162. package/distrib/docs/symbols/Transformation.html +2 -2
  163. package/distrib/docs/symbols/Turtle.html +2 -2
  164. package/distrib/docs/symbols/Vectorfield.html +2 -2
  165. package/distrib/docs/symbols/View3D.html +2 -2
  166. package/distrib/docs/symbols/_global_.html +2 -2
  167. package/distrib/docs/symbols/src/src_3d_view3d.js.html +29 -30
  168. package/distrib/docs/symbols/src/src_base_board.js.html +5020 -4930
  169. package/distrib/docs/symbols/src/src_base_constants.js.html +1 -1
  170. package/distrib/docs/symbols/src/src_base_coordselement.js.html +1829 -1789
  171. package/distrib/docs/symbols/src/src_base_curve.js.html +783 -778
  172. package/distrib/docs/symbols/src/src_base_text.js.html +345 -358
  173. package/distrib/docs/symbols/src/src_element_checkbox.js.html +30 -30
  174. package/distrib/docs/symbols/src/src_element_slider.js.html +391 -377
  175. package/distrib/docs/symbols/src/src_math_numerics.js.html +1226 -1190
  176. package/distrib/docs/symbols/src/src_math_qdt.js.html +318 -194
  177. package/distrib/docs/symbols/src/src_options.js.html +7137 -7034
  178. package/distrib/docs/symbols/src/src_renderer_abstract.js.html +1168 -1167
  179. package/distrib/docs/symbols/src/src_renderer_canvas.js.html +1 -1
  180. package/distrib/docs/symbols/src/src_renderer_svg.js.html +489 -494
  181. package/distrib/docs/symbols/src/src_utils_env.js.html +127 -90
  182. package/distrib/docs.zip +0 -0
  183. package/distrib/geogebra.min.js +1 -1
  184. package/distrib/geonext.min.js +1 -1
  185. package/distrib/intergeo.min.js +1 -1
  186. package/distrib/jsxgraph.css +24 -22
  187. package/distrib/jsxgraph.zip +0 -0
  188. package/distrib/jsxgraphcore.js +2 -2
  189. package/distrib/jsxgraphcore.mjs +2 -2
  190. package/distrib/jsxgraphcore.mjs.map +1 -1
  191. package/distrib/jsxgraphsrc.js +707 -276
  192. package/distrib/jsxgraphsrc.mjs +707 -276
  193. package/distrib/jsxgraphsrc.mjs.map +1 -1
  194. package/distrib/sketch.min.js +1 -1
  195. package/package.json +1 -1
  196. package/src/3d/view3d.js +0 -1
  197. package/src/base/board.js +140 -50
  198. package/src/base/constants.js +1 -1
  199. package/src/base/coordselement.js +54 -14
  200. package/src/base/curve.js +6 -1
  201. package/src/base/text.js +13 -26
  202. package/src/element/checkbox.js +17 -17
  203. package/src/element/slider.js +16 -2
  204. package/src/math/heap.js +34 -4
  205. package/src/math/numerics.js +112 -76
  206. package/src/math/qdt.js +141 -17
  207. package/src/options.js +115 -12
  208. package/src/renderer/abstract.js +15 -14
  209. package/src/renderer/canvas.js +1 -1
  210. package/src/renderer/svg.js +0 -5
  211. package/src/utils/env.js +75 -38
@@ -2967,1211 +2967,1247 @@
2967
2967
  <span class='line'>2960</span> </span><span class="WHIT"> </span><span class="COMM">/**
2968
2968
  <span class='line'>2961</span> * Helper function to create curve which displays Riemann sums.
2969
2969
  <span class='line'>2962</span> * Compute coordinates for the rectangles showing the Riemann sum.
2970
- <span class='line'>2963</span> * @param {Function,Array} f Function or array of two functions.
2971
- <span class='line'>2964</span> * If f is a function the integral of this function is approximated by the Riemann sum.
2972
- <span class='line'>2965</span> * If f is an array consisting of two functions the area between the two functions is filled
2973
- <span class='line'>2966</span> * by the Riemann sum bars.
2974
- <span class='line'>2967</span> * @param {Number} n number of rectangles.
2975
- <span class='line'>2968</span> * @param {String} type Type of approximation. Possible values are: 'left', 'right', 'middle', 'lower', 'upper', 'random', 'simpson', or 'trapezoidal'.
2976
- <span class='line'>2969</span> * @param {Number} start Left border of the approximation interval
2977
- <span class='line'>2970</span> * @param {Number} end Right border of the approximation interval
2978
- <span class='line'>2971</span> * @returns {Array} An array of two arrays containing the x and y coordinates for the rectangles showing the Riemann sum. This
2979
- <span class='line'>2972</span> * array may be used as parent array of a {@link JXG.Curve}. The third parameteris the riemann sum, i.e. the sum of the volumes of all
2980
- <span class='line'>2973</span> * rectangles.
2981
- <span class='line'>2974</span> * @memberof JXG.Math.Numerics
2982
- <span class='line'>2975</span> */</span><span class="WHIT">
2983
- <span class='line'>2976</span> </span><span class="WHIT"> </span><span class="NAME">riemann</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">gf</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
2984
- <span class='line'>2977</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
2985
- <span class='line'>2978</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">,</span><span class="WHIT">
2986
- <span class='line'>2979</span> </span><span class="WHIT"> </span><span class="NAME">xarr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
2987
- <span class='line'>2980</span> </span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
2988
- <span class='line'>2981</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
2989
- <span class='line'>2982</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT">
2990
- <span class='line'>2983</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT">
2991
- <span class='line'>2984</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
2992
- <span class='line'>2985</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT">
2993
- <span class='line'>2986</span> </span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">,</span><span class="WHIT">
2994
- <span class='line'>2987</span> </span><span class="WHIT"> </span><span class="NAME">ylow</span><span class="PUNC">,</span><span class="WHIT">
2995
- <span class='line'>2988</span> </span><span class="WHIT"> </span><span class="NAME">yup</span><span class="PUNC">;</span><span class="WHIT">
2996
- <span class='line'>2989</span>
2997
- <span class='line'>2990</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">gf</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
2998
- <span class='line'>2991</span> </span><span class="WHIT"> </span><span class="NAME">g</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gf</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
2999
- <span class='line'>2992</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gf</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3000
- <span class='line'>2993</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3001
- <span class='line'>2994</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gf</span><span class="PUNC">;</span><span class="WHIT">
3002
- <span class='line'>2995</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3003
- <span class='line'>2996</span>
3004
- <span class='line'>2997</span> </span><span class="WHIT"> </span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
2970
+ <span class='line'>2963</span> * &lt;p>
2971
+ <span class='line'>2964</span> * In case of type "simpson" and "trapezoidal", the horizontal line approximating the function value
2972
+ <span class='line'>2965</span> * is replaced by a parabola or a secant. IN case of "simpson",
2973
+ <span class='line'>2966</span> * the parabola is approximated visually by a polygonal chain of fixed step width.
2974
+ <span class='line'>2967</span> *
2975
+ <span class='line'>2968</span> * @param {Function,Array} f Function or array of two functions.
2976
+ <span class='line'>2969</span> * If f is a function the integral of this function is approximated by the Riemann sum.
2977
+ <span class='line'>2970</span> * If f is an array consisting of two functions the area between the two functions is filled
2978
+ <span class='line'>2971</span> * by the Riemann sum bars.
2979
+ <span class='line'>2972</span> * @param {Number} n number of rectangles.
2980
+ <span class='line'>2973</span> * @param {String} type Type of approximation. Possible values are: 'left', 'right', 'middle', 'lower', 'upper', 'random', 'simpson', or 'trapezoidal'.
2981
+ <span class='line'>2974</span> * "simpson" is Simpson's 1/3 rule.
2982
+ <span class='line'>2975</span> * @param {Number} start Left border of the approximation interval
2983
+ <span class='line'>2976</span> * @param {Number} end Right border of the approximation interval
2984
+ <span class='line'>2977</span> * @returns {Array} An array of two arrays containing the x and y coordinates for the rectangles showing the Riemann sum. This
2985
+ <span class='line'>2978</span> * array may be used as parent array of a {@link JXG.Curve}. The third parameteris the riemann sum, i.e. the sum of the volumes of all
2986
+ <span class='line'>2979</span> * rectangles.
2987
+ <span class='line'>2980</span> * @memberof JXG.Math.Numerics
2988
+ <span class='line'>2981</span> */</span><span class="WHIT">
2989
+ <span class='line'>2982</span> </span><span class="WHIT"> </span><span class="NAME">riemann</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">gf</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
2990
+ <span class='line'>2983</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">,</span><span class="WHIT">
2991
+ <span class='line'>2984</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT">
2992
+ <span class='line'>2985</span> </span><span class="WHIT"> </span><span class="NAME">steps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">30</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// Fixed step width for Simpson's rule</span><span class="WHIT">
2993
+ <span class='line'>2986</span> </span><span class="WHIT"> </span><span class="NAME">xarr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
2994
+ <span class='line'>2987</span> </span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
2995
+ <span class='line'>2988</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT">
2996
+ <span class='line'>2989</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
2997
+ <span class='line'>2990</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">;</span><span class="WHIT">
2998
+ <span class='line'>2991</span>
2999
+ <span class='line'>2992</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">gf</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3000
+ <span class='line'>2993</span> </span><span class="WHIT"> </span><span class="NAME">g</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gf</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3001
+ <span class='line'>2994</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gf</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3002
+ <span class='line'>2995</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3003
+ <span class='line'>2996</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gf</span><span class="PUNC">;</span><span class="WHIT">
3004
+ <span class='line'>2997</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3005
3005
  <span class='line'>2998</span>
3006
- <span class='line'>2999</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3007
- <span class='line'>3000</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">xarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sum</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3008
- <span class='line'>3001</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3009
- <span class='line'>3002</span>
3010
- <span class='line'>3003</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT">
3006
+ <span class='line'>2999</span> </span><span class="WHIT"> </span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3007
+ <span class='line'>3000</span>
3008
+ <span class='line'>3001</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3009
+ <span class='line'>3002</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">xarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sum</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3010
+ <span class='line'>3003</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3011
3011
  <span class='line'>3004</span>
3012
- <span class='line'>3005</span> </span><span class="WHIT"> </span><span class="COMM">// Upper bar ends</span><span class="WHIT">
3013
- <span class='line'>3006</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3014
- <span class='line'>3007</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._riemannValue</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3015
- <span class='line'>3008</span> </span><span class="WHIT"> </span><span class="NAME">xarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3016
- <span class='line'>3009</span> </span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3017
- <span class='line'>3010</span>
3018
- <span class='line'>3011</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3019
- <span class='line'>3012</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3020
- <span class='line'>3013</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"trapezoidal"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3021
- <span class='line'>3014</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3022
- <span class='line'>3015</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3023
- <span class='line'>3016</span> </span><span class="WHIT"> </span><span class="NAME">xarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3024
- <span class='line'>3017</span> </span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3025
- <span class='line'>3018</span>
3026
- <span class='line'>3019</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3027
- <span class='line'>3020</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3028
- <span class='line'>3021</span>
3029
- <span class='line'>3022</span> </span><span class="WHIT"> </span><span class="COMM">// Lower bar ends</span><span class="WHIT">
3030
- <span class='line'>3023</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3031
- <span class='line'>3024</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3032
- <span class='line'>3025</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._riemannValue</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">delta</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3033
- <span class='line'>3026</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3034
- <span class='line'>3027</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3035
- <span class='line'>3028</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3036
- <span class='line'>3029</span> </span><span class="WHIT"> </span><span class="NAME">xarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3037
- <span class='line'>3030</span> </span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3012
+ <span class='line'>3005</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT">
3013
+ <span class='line'>3006</span>
3014
+ <span class='line'>3007</span> </span><span class="WHIT"> </span><span class="COMM">// "Upper" horizontal line defined by function</span><span class="WHIT">
3015
+ <span class='line'>3008</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3016
+ <span class='line'>3009</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"simpson"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3017
+ <span class='line'>3010</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._riemannValue</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3018
+ <span class='line'>3011</span>
3019
+ <span class='line'>3012</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3020
+ <span class='line'>3013</span> </span><span class="WHIT"> </span><span class="NAME">f0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3021
+ <span class='line'>3014</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3022
+ <span class='line'>3015</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3023
+ <span class='line'>3016</span>
3024
+ <span class='line'>3017</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">f0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3025
+ <span class='line'>3018</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3026
+ <span class='line'>3019</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3027
+ <span class='line'>3020</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3028
+ <span class='line'>3021</span> </span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
3029
+ <span class='line'>3022</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3030
+ <span class='line'>3023</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3031
+ <span class='line'>3024</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3032
+ <span class='line'>3025</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3033
+ <span class='line'>3026</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3034
+ <span class='line'>3027</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3035
+ <span class='line'>3028</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._riemannValue</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3036
+ <span class='line'>3029</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3037
+ <span class='line'>3030</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3038
3038
  <span class='line'>3031</span>
3039
- <span class='line'>3032</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3040
- <span class='line'>3033</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3041
- <span class='line'>3034</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"trapezoidal"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3042
- <span class='line'>3035</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3043
- <span class='line'>3036</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3044
- <span class='line'>3037</span> </span><span class="WHIT"> </span><span class="NAME">xarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3045
- <span class='line'>3038</span> </span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3046
- <span class='line'>3039</span>
3047
- <span class='line'>3040</span> </span><span class="WHIT"> </span><span class="COMM">// Add the area of the bar to 'sum'</span><span class="WHIT">
3048
- <span class='line'>3041</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">"trapezoidal"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3049
- <span class='line'>3042</span> </span><span class="WHIT"> </span><span class="NAME">ylow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3050
- <span class='line'>3043</span> </span><span class="WHIT"> </span><span class="NAME">yup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3051
- <span class='line'>3044</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3052
- <span class='line'>3045</span> </span><span class="WHIT"> </span><span class="NAME">yup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3053
- <span class='line'>3046</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3054
- <span class='line'>3047</span> </span><span class="WHIT"> </span><span class="NAME">ylow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3055
- <span class='line'>3048</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3056
- <span class='line'>3049</span> </span><span class="WHIT"> </span><span class="NAME">ylow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3057
- <span class='line'>3050</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3058
- <span class='line'>3051</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3059
- <span class='line'>3052</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">yup</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ylow</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3039
+ <span class='line'>3032</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3040
+ <span class='line'>3033</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"trapezoidal"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3041
+ <span class='line'>3034</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3042
+ <span class='line'>3035</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3043
+ <span class='line'>3036</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3044
+ <span class='line'>3037</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3045
+ <span class='line'>3038</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3046
+ <span class='line'>3039</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3047
+ <span class='line'>3040</span>
3048
+ <span class='line'>3041</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3049
+ <span class='line'>3042</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3050
+ <span class='line'>3043</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3051
+ <span class='line'>3044</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3052
+ <span class='line'>3045</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3053
+ <span class='line'>3046</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3054
+ <span class='line'>3047</span>
3055
+ <span class='line'>3048</span> </span><span class="WHIT"> </span><span class="COMM">// "Lower" horizontal line</span><span class="WHIT">
3056
+ <span class='line'>3049</span> </span><span class="WHIT"> </span><span class="COMM">// Go backwards</span><span class="WHIT">
3057
+ <span class='line'>3050</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3058
+ <span class='line'>3051</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"simpson"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3059
+ <span class='line'>3052</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._riemannValue</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">delta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3060
3060
  <span class='line'>3053</span>
3061
- <span class='line'>3054</span> </span><span class="WHIT"> </span><span class="COMM">// Draw the vertical lines</span><span class="WHIT">
3062
- <span class='line'>3055</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3063
- <span class='line'>3056</span> </span><span class="WHIT"> </span><span class="NAME">xarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3064
- <span class='line'>3057</span> </span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3061
+ <span class='line'>3054</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3062
+ <span class='line'>3055</span> </span><span class="WHIT"> </span><span class="NAME">f0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3063
+ <span class='line'>3056</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3064
+ <span class='line'>3057</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3065
3065
  <span class='line'>3058</span>
3066
- <span class='line'>3059</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3067
- <span class='line'>3060</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3068
- <span class='line'>3061</span>
3069
- <span class='line'>3062</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">xarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sum</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3070
- <span class='line'>3063</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3071
- <span class='line'>3064</span>
3072
- <span class='line'>3065</span> </span><span class="WHIT"> </span><span class="COMM">/**
3073
- <span class='line'>3066</span> * Approximate the integral by Riemann sums.
3074
- <span class='line'>3067</span> * Compute the area described by the riemann sum rectangles.
3075
- <span class='line'>3068</span> *
3076
- <span class='line'>3069</span> * If there is an element of type {@link Riemannsum}, then it is more efficient
3077
- <span class='line'>3070</span> * to use the method JXG.Curve.Value() of this element instead.
3078
- <span class='line'>3071</span> *
3079
- <span class='line'>3072</span> * @param {Function_Array} f Function or array of two functions.
3080
- <span class='line'>3073</span> * If f is a function the integral of this function is approximated by the Riemann sum.
3081
- <span class='line'>3074</span> * If f is an array consisting of two functions the area between the two functions is approximated
3082
- <span class='line'>3075</span> * by the Riemann sum.
3083
- <span class='line'>3076</span> * @param {Number} n number of rectangles.
3084
- <span class='line'>3077</span> * @param {String} type Type of approximation. Possible values are: 'left', 'right', 'middle', 'lower', 'upper', 'random', 'simpson' or 'trapezoidal'.
3085
- <span class='line'>3078</span> *
3086
- <span class='line'>3079</span> * @param {Number} start Left border of the approximation interval
3087
- <span class='line'>3080</span> * @param {Number} end Right border of the approximation interval
3088
- <span class='line'>3081</span> * @returns {Number} The sum of the areas of the rectangles.
3089
- <span class='line'>3082</span> * @memberof JXG.Math.Numerics
3090
- <span class='line'>3083</span> */</span><span class="WHIT">
3091
- <span class='line'>3084</span> </span><span class="WHIT"> </span><span class="NAME">riemannsum</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3092
- <span class='line'>3085</span> </span><span class="WHIT"> </span><span class="NAME">JXG.deprecated</span><span class="PUNC">(</span><span class="STRN">"Numerics.riemannsum()"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Numerics.riemann()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3093
- <span class='line'>3086</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.riemann</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3094
- <span class='line'>3087</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3095
- <span class='line'>3088</span>
3096
- <span class='line'>3089</span> </span><span class="WHIT"> </span><span class="COMM">/**
3097
- <span class='line'>3090</span> * Solve initial value problems numerically using Runge-Kutta-methods.
3098
- <span class='line'>3091</span> * See {@link https://en.wikipedia.org/wiki/Runge-Kutta_methods} for more information on the algorithm.
3099
- <span class='line'>3092</span> * @param {object,String} butcher Butcher tableau describing the Runge-Kutta method to use. This can be either a string describing
3100
- <span class='line'>3093</span> * a Runge-Kutta method with a Butcher tableau predefined in JSXGraph like 'euler', 'heun', 'rk4' or an object providing the structure
3101
- <span class='line'>3094</span> * &lt;pre>
3102
- <span class='line'>3095</span> * {
3103
- <span class='line'>3096</span> * s: &lt;Number&gt;,
3104
- <span class='line'>3097</span> * A: &lt;matrix&gt;,
3105
- <span class='line'>3098</span> * b: &lt;Array&gt;,
3106
- <span class='line'>3099</span> * c: &lt;Array&gt;
3107
- <span class='line'>3100</span> * }
3108
- <span class='line'>3101</span> * &lt;/pre>
3109
- <span class='line'>3102</span> * which corresponds to the Butcher tableau structure shown here: https://en.wikipedia.org/w/index.php?title=List_of_Runge%E2%80%93Kutta_methods&oldid=357796696
3110
- <span class='line'>3103</span> * @param {Array} x0 Initial value vector. If the problem is of one-dimensional, the initial value also has to be given in an array.
3111
- <span class='line'>3104</span> * @param {Array} I Interval on which to integrate.
3112
- <span class='line'>3105</span> * @param {Number} N Number of evaluation points.
3113
- <span class='line'>3106</span> * @param {function} f Function describing the right hand side of the first order ordinary differential equation, i.e. if the ode
3114
- <span class='line'>3107</span> * is given by the equation &lt;pre>dx/dt = f(t, x(t)).&lt;/pre> So f has to take two parameters, a number &lt;tt>t&lt;/tt> and a
3115
- <span class='line'>3108</span> * vector &lt;tt>x&lt;/tt>, and has to return a vector of the same dimension as &lt;tt>x&lt;/tt> has.
3116
- <span class='line'>3109</span> * @returns {Array} An array of vectors describing the solution of the ode on the given interval I.
3117
- <span class='line'>3110</span> * @example
3118
- <span class='line'>3111</span> * // A very simple autonomous system dx(t)/dt = x(t);
3119
- <span class='line'>3112</span> * function f(t, x) {
3120
- <span class='line'>3113</span> * return x;
3121
- <span class='line'>3114</span> * }
3122
- <span class='line'>3115</span> *
3123
- <span class='line'>3116</span> * // Solve it with initial value x(0) = 1 on the interval [0, 2]
3124
- <span class='line'>3117</span> * // with 20 evaluation points.
3125
- <span class='line'>3118</span> * var data = JXG.Math.Numerics.rungeKutta('heun', [1], [0, 2], 20, f);
3126
- <span class='line'>3119</span> *
3127
- <span class='line'>3120</span> * // Prepare data for plotting the solution of the ode using a curve.
3128
- <span class='line'>3121</span> * var dataX = [];
3129
- <span class='line'>3122</span> * var dataY = [];
3130
- <span class='line'>3123</span> * var h = 0.1; // (I[1] - I[0])/N = (2-0)/20
3131
- <span class='line'>3124</span> * for(var i=0; i&lt;data.length; i++) {
3132
- <span class='line'>3125</span> * dataX[i] = i*h;
3133
- <span class='line'>3126</span> * dataY[i] = data[i][0];
3134
- <span class='line'>3127</span> * }
3135
- <span class='line'>3128</span> * var g = board.create('curve', [dataX, dataY], {strokeWidth:'2px'});
3136
- <span class='line'>3129</span> * &lt;/pre>&lt;div class="jxgbox" id="JXGd2432d04-4ef7-4159-a90b-a2eb8d38c4f6" style="width: 300px; height: 300px;">&lt;/div>
3137
- <span class='line'>3130</span> * &lt;script type="text/javascript">
3138
- <span class='line'>3131</span> * var board = JXG.JSXGraph.initBoard('JXGd2432d04-4ef7-4159-a90b-a2eb8d38c4f6', {boundingbox: [-1, 5, 5, -1], axis: true, showcopyright: false, shownavigation: false});
3139
- <span class='line'>3132</span> * function f(t, x) {
3140
- <span class='line'>3133</span> * // we have to copy the value.
3141
- <span class='line'>3134</span> * // return x; would just return the reference.
3142
- <span class='line'>3135</span> * return [x[0]];
3143
- <span class='line'>3136</span> * }
3144
- <span class='line'>3137</span> * var data = JXG.Math.Numerics.rungeKutta('heun', [1], [0, 2], 20, f);
3145
- <span class='line'>3138</span> * var dataX = [];
3146
- <span class='line'>3139</span> * var dataY = [];
3147
- <span class='line'>3140</span> * var h = 0.1;
3148
- <span class='line'>3141</span> * for(var i=0; i&lt;data.length; i++) {
3149
- <span class='line'>3142</span> * dataX[i] = i*h;
3150
- <span class='line'>3143</span> * dataY[i] = data[i][0];
3151
- <span class='line'>3144</span> * }
3152
- <span class='line'>3145</span> * var g = board.create('curve', [dataX, dataY], {strokeColor:'red', strokeWidth:'2px'});
3153
- <span class='line'>3146</span> * &lt;/script>&lt;pre>
3154
- <span class='line'>3147</span> * @memberof JXG.Math.Numerics
3155
- <span class='line'>3148</span> */</span><span class="WHIT">
3156
- <span class='line'>3149</span> </span><span class="WHIT"> </span><span class="NAME">rungeKutta</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">butcher</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">I</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3157
- <span class='line'>3150</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">,</span><span class="WHIT">
3158
- <span class='line'>3151</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3159
- <span class='line'>3152</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT">
3160
- <span class='line'>3153</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT">
3161
- <span class='line'>3154</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">,</span><span class="WHIT">
3162
- <span class='line'>3155</span> </span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT">
3163
- <span class='line'>3156</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3164
- <span class='line'>3157</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3165
- <span class='line'>3158</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">I</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">I</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">,</span><span class="WHIT">
3166
- <span class='line'>3159</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">I</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3167
- <span class='line'>3160</span> </span><span class="WHIT"> </span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0.length</span><span class="PUNC">,</span><span class="WHIT">
3168
- <span class='line'>3161</span> </span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3169
- <span class='line'>3162</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3170
- <span class='line'>3163</span>
3171
- <span class='line'>3164</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isString</span><span class="PUNC">(</span><span class="NAME">butcher</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3172
- <span class='line'>3165</span> </span><span class="WHIT"> </span><span class="NAME">butcher</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">predefinedButcher</span><span class="PUNC">[</span><span class="NAME">butcher</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">predefinedButcher.euler</span><span class="PUNC">;</span><span class="WHIT">
3173
- <span class='line'>3166</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3174
- <span class='line'>3167</span> </span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">butcher.s</span><span class="PUNC">;</span><span class="WHIT">
3175
- <span class='line'>3168</span>
3176
- <span class='line'>3169</span> </span><span class="WHIT"> </span><span class="COMM">// don't change x0, so copy it</span><span class="WHIT">
3177
- <span class='line'>3170</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3178
- <span class='line'>3171</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3179
- <span class='line'>3172</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3180
- <span class='line'>3173</span>
3181
- <span class='line'>3174</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3182
- <span class='line'>3175</span> </span><span class="WHIT"> </span><span class="COMM">// Optimization doesn't work for ODEs plotted using time</span><span class="WHIT">
3183
- <span class='line'>3176</span> </span><span class="WHIT"> </span><span class="COMM">// if((i % quotient == 0) || (i == N-1)) {</span><span class="WHIT">
3184
- <span class='line'>3177</span> </span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">[</span><span class="NAME">r</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3185
- <span class='line'>3178</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3186
- <span class='line'>3179</span> </span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">[</span><span class="NAME">r</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3187
- <span class='line'>3180</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3188
- <span class='line'>3181</span>
3189
- <span class='line'>3182</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3190
- <span class='line'>3183</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3191
- <span class='line'>3184</span>
3192
- <span class='line'>3185</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3193
- <span class='line'>3186</span> </span><span class="WHIT"> </span><span class="COMM">// init y = 0</span><span class="WHIT">
3194
- <span class='line'>3187</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3195
- <span class='line'>3188</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3196
- <span class='line'>3189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3197
- <span class='line'>3190</span>
3198
- <span class='line'>3191</span> </span><span class="WHIT"> </span><span class="COMM">// Calculate linear combination of former k's and save it in y</span><span class="WHIT">
3199
- <span class='line'>3192</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3200
- <span class='line'>3193</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3201
- <span class='line'>3194</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">butcher.A</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3202
- <span class='line'>3195</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3203
- <span class='line'>3196</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3066
+ <span class='line'>3059</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">f0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3067
+ <span class='line'>3060</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3068
+ <span class='line'>3061</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3069
+ <span class='line'>3062</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3070
+ <span class='line'>3063</span> </span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
3071
+ <span class='line'>3064</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3072
+ <span class='line'>3065</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3073
+ <span class='line'>3066</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3074
+ <span class='line'>3067</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3075
+ <span class='line'>3068</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3076
+ <span class='line'>3069</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3077
+ <span class='line'>3070</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3078
+ <span class='line'>3071</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._riemannValue</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">delta</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3079
+ <span class='line'>3072</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3080
+ <span class='line'>3073</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3081
+ <span class='line'>3074</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3082
+ <span class='line'>3075</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3083
+ <span class='line'>3076</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3084
+ <span class='line'>3077</span>
3085
+ <span class='line'>3078</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3086
+ <span class='line'>3079</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">g</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3087
+ <span class='line'>3080</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">"trapezoidal"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3088
+ <span class='line'>3081</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">g</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3089
+ <span class='line'>3082</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3090
+ <span class='line'>3083</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3091
+ <span class='line'>3084</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3092
+ <span class='line'>3085</span> </span><span class="WHIT"> </span><span class="NAME">sum</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3093
+ <span class='line'>3086</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3094
+ <span class='line'>3087</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3095
+ <span class='line'>3088</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3096
+ <span class='line'>3089</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3097
+ <span class='line'>3090</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3098
+ <span class='line'>3091</span>
3099
+ <span class='line'>3092</span> </span><span class="WHIT"> </span><span class="COMM">// Draw the vertical lines</span><span class="WHIT">
3100
+ <span class='line'>3093</span> </span><span class="WHIT"> </span><span class="NAME">xarr.push</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3101
+ <span class='line'>3094</span> </span><span class="WHIT"> </span><span class="NAME">yarr.push</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3102
+ <span class='line'>3095</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3103
+ <span class='line'>3096</span>
3104
+ <span class='line'>3097</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">xarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">yarr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sum</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3105
+ <span class='line'>3098</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3106
+ <span class='line'>3099</span>
3107
+ <span class='line'>3100</span> </span><span class="WHIT"> </span><span class="COMM">/**
3108
+ <span class='line'>3101</span> * Approximate the integral by Riemann sums.
3109
+ <span class='line'>3102</span> * Compute the area described by the riemann sum rectangles.
3110
+ <span class='line'>3103</span> *
3111
+ <span class='line'>3104</span> * If there is an element of type {@link Riemannsum}, then it is more efficient
3112
+ <span class='line'>3105</span> * to use the method JXG.Curve.Value() of this element instead.
3113
+ <span class='line'>3106</span> *
3114
+ <span class='line'>3107</span> * @param {Function_Array} f Function or array of two functions.
3115
+ <span class='line'>3108</span> * If f is a function the integral of this function is approximated by the Riemann sum.
3116
+ <span class='line'>3109</span> * If f is an array consisting of two functions the area between the two functions is approximated
3117
+ <span class='line'>3110</span> * by the Riemann sum.
3118
+ <span class='line'>3111</span> * @param {Number} n number of rectangles.
3119
+ <span class='line'>3112</span> * @param {String} type Type of approximation. Possible values are: 'left', 'right', 'middle', 'lower', 'upper', 'random', 'simpson' or 'trapezoidal'.
3120
+ <span class='line'>3113</span> *
3121
+ <span class='line'>3114</span> * @param {Number} start Left border of the approximation interval
3122
+ <span class='line'>3115</span> * @param {Number} end Right border of the approximation interval
3123
+ <span class='line'>3116</span> * @returns {Number} The sum of the areas of the rectangles.
3124
+ <span class='line'>3117</span> * @memberof JXG.Math.Numerics
3125
+ <span class='line'>3118</span> */</span><span class="WHIT">
3126
+ <span class='line'>3119</span> </span><span class="WHIT"> </span><span class="NAME">riemannsum</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3127
+ <span class='line'>3120</span> </span><span class="WHIT"> </span><span class="NAME">JXG.deprecated</span><span class="PUNC">(</span><span class="STRN">"Numerics.riemannsum()"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Numerics.riemann()[2]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3128
+ <span class='line'>3121</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.riemann</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3129
+ <span class='line'>3122</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3130
+ <span class='line'>3123</span>
3131
+ <span class='line'>3124</span> </span><span class="WHIT"> </span><span class="COMM">/**
3132
+ <span class='line'>3125</span> * Solve initial value problems numerically using &lt;i>explicit&lt;/i> Runge-Kutta methods.
3133
+ <span class='line'>3126</span> * See {@link https://en.wikipedia.org/wiki/Runge-Kutta_methods} for more information on the algorithm.
3134
+ <span class='line'>3127</span> * @param {object,String} butcher Butcher tableau describing the Runge-Kutta method to use. This can be either a string describing
3135
+ <span class='line'>3128</span> * a Runge-Kutta method with a Butcher tableau predefined in JSXGraph like 'euler', 'heun', 'rk4' or an object providing the structure
3136
+ <span class='line'>3129</span> * &lt;pre>
3137
+ <span class='line'>3130</span> * {
3138
+ <span class='line'>3131</span> * s: &lt;Number&gt;,
3139
+ <span class='line'>3132</span> * A: &lt;matrix&gt;,
3140
+ <span class='line'>3133</span> * b: &lt;Array&gt;,
3141
+ <span class='line'>3134</span> * c: &lt;Array&gt;
3142
+ <span class='line'>3135</span> * }
3143
+ <span class='line'>3136</span> * &lt;/pre>
3144
+ <span class='line'>3137</span> * which corresponds to the Butcher tableau structure
3145
+ <span class='line'>3138</span> * shown here: https://en.wikipedia.org/w/index.php?title=List_of_Runge%E2%80%93Kutta_methods&oldid=357796696 .
3146
+ <span class='line'>3139</span> * &lt;i>Default&lt;/i> is 'euler'.
3147
+ <span class='line'>3140</span> * @param {Array} x0 Initial value vector. Even if the problem is one-dimensional, the initial value has to be given in an array.
3148
+ <span class='line'>3141</span> * @param {Array} I Interval on which to integrate.
3149
+ <span class='line'>3142</span> * @param {Number} N Number of integration intervals, i.e. there are &lt;i>N+1&lt;/i> evaluation points.
3150
+ <span class='line'>3143</span> * @param {function} f Function describing the right hand side of the first order ordinary differential equation, i.e. if the ode
3151
+ <span class='line'>3144</span> * is given by the equation &lt;pre>dx/dt = f(t, x(t))&lt;/pre>. So, f has to take two parameters, a number &lt;tt>t&lt;/tt> and a
3152
+ <span class='line'>3145</span> * vector &lt;tt>x&lt;/tt>, and has to return a vector of the same length as &lt;tt>x&lt;/tt> has.
3153
+ <span class='line'>3146</span> * @returns {Array} An array of vectors describing the solution of the ode on the given interval I.
3154
+ <span class='line'>3147</span> * @example
3155
+ <span class='line'>3148</span> * // A very simple autonomous system dx(t)/dt = x(t);
3156
+ <span class='line'>3149</span> * var f = function(t, x) {
3157
+ <span class='line'>3150</span> * return [x[0]];
3158
+ <span class='line'>3151</span> * }
3159
+ <span class='line'>3152</span> *
3160
+ <span class='line'>3153</span> * // Solve it with initial value x(0) = 1 on the interval [0, 2]
3161
+ <span class='line'>3154</span> * // with 20 evaluation points.
3162
+ <span class='line'>3155</span> * var data = JXG.Math.Numerics.rungeKutta('heun', [1], [0, 2], 20, f);
3163
+ <span class='line'>3156</span> *
3164
+ <span class='line'>3157</span> * // Prepare data for plotting the solution of the ode using a curve.
3165
+ <span class='line'>3158</span> * var dataX = [];
3166
+ <span class='line'>3159</span> * var dataY = [];
3167
+ <span class='line'>3160</span> * var h = 0.1; // (I[1] - I[0])/N = (2-0)/20
3168
+ <span class='line'>3161</span> * var i;
3169
+ <span class='line'>3162</span> * for(i=0; i&lt;data.length; i++) {
3170
+ <span class='line'>3163</span> * dataX[i] = i*h;
3171
+ <span class='line'>3164</span> * dataY[i] = data[i][0];
3172
+ <span class='line'>3165</span> * }
3173
+ <span class='line'>3166</span> * var g = board.create('curve', [dataX, dataY], {strokeWidth:'2px'});
3174
+ <span class='line'>3167</span> * &lt;/pre>&lt;div class="jxgbox" id="JXGd2432d04-4ef7-4159-a90b-a2eb8d38c4f6" style="width: 300px; height: 300px;">&lt;/div>
3175
+ <span class='line'>3168</span> * &lt;script type="text/javascript">
3176
+ <span class='line'>3169</span> * var board = JXG.JSXGraph.initBoard('JXGd2432d04-4ef7-4159-a90b-a2eb8d38c4f6', {boundingbox: [-1, 5, 5, -1], axis: true, showcopyright: false, shownavigation: false});
3177
+ <span class='line'>3170</span> * var f = function(t, x) {
3178
+ <span class='line'>3171</span> * // we have to copy the value.
3179
+ <span class='line'>3172</span> * // return x; would just return the reference.
3180
+ <span class='line'>3173</span> * return [x[0]];
3181
+ <span class='line'>3174</span> * }
3182
+ <span class='line'>3175</span> * var data = JXG.Math.Numerics.rungeKutta('heun', [1], [0, 2], 20, f);
3183
+ <span class='line'>3176</span> * var dataX = [];
3184
+ <span class='line'>3177</span> * var dataY = [];
3185
+ <span class='line'>3178</span> * var h = 0.1;
3186
+ <span class='line'>3179</span> * for(var i=0; i&lt;data.length; i++) {
3187
+ <span class='line'>3180</span> * dataX[i] = i*h;
3188
+ <span class='line'>3181</span> * dataY[i] = data[i][0];
3189
+ <span class='line'>3182</span> * }
3190
+ <span class='line'>3183</span> * var g = board.create('curve', [dataX, dataY], {strokeColor:'red', strokeWidth:'2px'});
3191
+ <span class='line'>3184</span> * &lt;/script>&lt;pre>
3192
+ <span class='line'>3185</span> * @memberof JXG.Math.Numerics
3193
+ <span class='line'>3186</span> */</span><span class="WHIT">
3194
+ <span class='line'>3187</span> </span><span class="WHIT"> </span><span class="NAME">rungeKutta</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">butcher</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">I</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3195
+ <span class='line'>3188</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">,</span><span class="WHIT">
3196
+ <span class='line'>3189</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT">
3197
+ <span class='line'>3190</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3198
+ <span class='line'>3191</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3199
+ <span class='line'>3192</span> </span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">I</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">I</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">,</span><span class="WHIT">
3200
+ <span class='line'>3193</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">I</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3201
+ <span class='line'>3194</span> </span><span class="WHIT"> </span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0.length</span><span class="PUNC">,</span><span class="WHIT">
3202
+ <span class='line'>3195</span> </span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3203
+ <span class='line'>3196</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3204
3204
  <span class='line'>3197</span>
3205
- <span class='line'>3198</span> </span><span class="WHIT"> </span><span class="COMM">// add x(t) to y</span><span class="WHIT">
3206
- <span class='line'>3199</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3207
- <span class='line'>3200</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3208
- <span class='line'>3201</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3205
+ <span class='line'>3198</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isString</span><span class="PUNC">(</span><span class="NAME">butcher</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3206
+ <span class='line'>3199</span> </span><span class="WHIT"> </span><span class="NAME">butcher</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">predefinedButcher</span><span class="PUNC">[</span><span class="NAME">butcher</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">predefinedButcher.euler</span><span class="PUNC">;</span><span class="WHIT">
3207
+ <span class='line'>3200</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3208
+ <span class='line'>3201</span> </span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">butcher.s</span><span class="PUNC">;</span><span class="WHIT">
3209
3209
  <span class='line'>3202</span>
3210
- <span class='line'>3203</span> </span><span class="WHIT"> </span><span class="COMM">// calculate new k and add it to the k matrix</span><span class="WHIT">
3211
- <span class='line'>3204</span> </span><span class="WHIT"> </span><span class="NAME">k.push</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">butcher.c</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3212
- <span class='line'>3205</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3213
- <span class='line'>3206</span>
3214
- <span class='line'>3207</span> </span><span class="WHIT"> </span><span class="COMM">// init y = 0</span><span class="WHIT">
3215
- <span class='line'>3208</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3216
- <span class='line'>3209</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3217
- <span class='line'>3210</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3218
- <span class='line'>3211</span>
3219
- <span class='line'>3212</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3220
- <span class='line'>3213</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3221
- <span class='line'>3214</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">butcher.b</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3222
- <span class='line'>3215</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3223
- <span class='line'>3216</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3210
+ <span class='line'>3203</span> </span><span class="WHIT"> </span><span class="COMM">// don't change x0, so copy it</span><span class="WHIT">
3211
+ <span class='line'>3204</span> </span><span class="WHIT"> </span><span class="COMM">// for (e = 0; e &lt; dim; e++) {</span><span class="WHIT">
3212
+ <span class='line'>3205</span> </span><span class="WHIT"> </span><span class="COMM">// x[e] = x0[e];</span><span class="WHIT">
3213
+ <span class='line'>3206</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3214
+ <span class='line'>3207</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0.slice</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3215
+ <span class='line'>3208</span>
3216
+ <span class='line'>3209</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3217
+ <span class='line'>3210</span> </span><span class="WHIT"> </span><span class="COMM">// Optimization doesn't work for ODEs plotted using time</span><span class="WHIT">
3218
+ <span class='line'>3211</span> </span><span class="WHIT"> </span><span class="COMM">// if((i % quotient == 0) || (i == N-1)) {</span><span class="WHIT">
3219
+ <span class='line'>3212</span> </span><span class="WHIT"> </span><span class="COMM">// result[r] = [];</span><span class="WHIT">
3220
+ <span class='line'>3213</span> </span><span class="WHIT"> </span><span class="COMM">// for (e = 0; e &lt; dim; e++) {</span><span class="WHIT">
3221
+ <span class='line'>3214</span> </span><span class="WHIT"> </span><span class="COMM">// result[r][e] = x[e];</span><span class="WHIT">
3222
+ <span class='line'>3215</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3223
+ <span class='line'>3216</span> </span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">[</span><span class="NAME">r</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.slice</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3224
3224
  <span class='line'>3217</span>
3225
- <span class='line'>3218</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3226
- <span class='line'>3219</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3227
- <span class='line'>3220</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3228
- <span class='line'>3221</span>
3229
- <span class='line'>3222</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
3230
- <span class='line'>3223</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3231
- <span class='line'>3224</span>
3232
- <span class='line'>3225</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
3233
- <span class='line'>3226</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3234
- <span class='line'>3227</span>
3235
- <span class='line'>3228</span> </span><span class="WHIT"> </span><span class="COMM">/**
3236
- <span class='line'>3229</span> * Maximum number of iterations in {@link JXG.Math.Numerics.fzero} and
3237
- <span class='line'>3230</span> * {@link JXG.Math.Numerics.chandrupatla}
3238
- <span class='line'>3231</span> * @type Number
3239
- <span class='line'>3232</span> * @default 80
3240
- <span class='line'>3233</span> * @memberof JXG.Math.Numerics
3241
- <span class='line'>3234</span> */</span><span class="WHIT">
3242
- <span class='line'>3235</span> </span><span class="WHIT"> </span><span class="NAME">maxIterationsRoot</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">80</span><span class="PUNC">,</span><span class="WHIT">
3243
- <span class='line'>3236</span>
3244
- <span class='line'>3237</span> </span><span class="WHIT"> </span><span class="COMM">/**
3245
- <span class='line'>3238</span> * Maximum number of iterations in {@link JXG.Math.Numerics.fminbr}
3246
- <span class='line'>3239</span> * @type Number
3247
- <span class='line'>3240</span> * @default 500
3248
- <span class='line'>3241</span> * @memberof JXG.Math.Numerics
3249
- <span class='line'>3242</span> */</span><span class="WHIT">
3250
- <span class='line'>3243</span> </span><span class="WHIT"> </span><span class="NAME">maxIterationsMinimize</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">500</span><span class="PUNC">,</span><span class="WHIT">
3251
- <span class='line'>3244</span>
3252
- <span class='line'>3245</span> </span><span class="WHIT"> </span><span class="COMM">/**
3253
- <span class='line'>3246</span> * Given a value x_0, this function tries to find a second value x_1 such that
3254
- <span class='line'>3247</span> * the function f has opposite signs at x_0 and x_1.
3255
- <span class='line'>3248</span> * The return values have to be tested if the method succeeded.
3256
- <span class='line'>3249</span> *
3257
- <span class='line'>3250</span> * @param {Function} f Function, whose root is to be found
3258
- <span class='line'>3251</span> * @param {Number} x0 Start value
3259
- <span class='line'>3252</span> * @param {Object} object Parent object in case f is method of it
3260
- <span class='line'>3253</span> * @returns {Array} [x_0, f(x_0), x_1, f(x_1)] in case that x_0 &lt;= x_1
3261
- <span class='line'>3254</span> * or [x_1, f(x_1), x_0, f(x_0)] in case that x_1 &lt; x_0.
3262
- <span class='line'>3255</span> *
3263
- <span class='line'>3256</span> * @see JXG.Math.Numerics.fzero
3264
- <span class='line'>3257</span> * @see JXG.Math.Numerics.chandrupatla
3265
- <span class='line'>3258</span> *
3266
- <span class='line'>3259</span> * @memberof JXG.Math.Numerics
3267
- <span class='line'>3260</span> */</span><span class="WHIT">
3268
- <span class='line'>3261</span> </span><span class="WHIT"> </span><span class="NAME">findBracket</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3269
- <span class='line'>3262</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT">
3225
+ <span class='line'>3218</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3226
+ <span class='line'>3219</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3227
+ <span class='line'>3220</span>
3228
+ <span class='line'>3221</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3229
+ <span class='line'>3222</span> </span><span class="WHIT"> </span><span class="COMM">// init y = 0</span><span class="WHIT">
3230
+ <span class='line'>3223</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3231
+ <span class='line'>3224</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3232
+ <span class='line'>3225</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3233
+ <span class='line'>3226</span>
3234
+ <span class='line'>3227</span> </span><span class="WHIT"> </span><span class="COMM">// Calculate linear combination of former k's and save it in y</span><span class="WHIT">
3235
+ <span class='line'>3228</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3236
+ <span class='line'>3229</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3237
+ <span class='line'>3230</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">butcher.A</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3238
+ <span class='line'>3231</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3239
+ <span class='line'>3232</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3240
+ <span class='line'>3233</span>
3241
+ <span class='line'>3234</span> </span><span class="WHIT"> </span><span class="COMM">// add x(t) to y</span><span class="WHIT">
3242
+ <span class='line'>3235</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3243
+ <span class='line'>3236</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3244
+ <span class='line'>3237</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3245
+ <span class='line'>3238</span>
3246
+ <span class='line'>3239</span> </span><span class="WHIT"> </span><span class="COMM">// calculate new k and add it to the k matrix</span><span class="WHIT">
3247
+ <span class='line'>3240</span> </span><span class="WHIT"> </span><span class="NAME">k.push</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">butcher.c</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3248
+ <span class='line'>3241</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3249
+ <span class='line'>3242</span>
3250
+ <span class='line'>3243</span> </span><span class="WHIT"> </span><span class="COMM">// init y = 0</span><span class="WHIT">
3251
+ <span class='line'>3244</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3252
+ <span class='line'>3245</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3253
+ <span class='line'>3246</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3254
+ <span class='line'>3247</span>
3255
+ <span class='line'>3248</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3256
+ <span class='line'>3249</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3257
+ <span class='line'>3250</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">butcher.b</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">l</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3258
+ <span class='line'>3251</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3259
+ <span class='line'>3252</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3260
+ <span class='line'>3253</span>
3261
+ <span class='line'>3254</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3262
+ <span class='line'>3255</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">[</span><span class="NAME">e</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3263
+ <span class='line'>3256</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3264
+ <span class='line'>3257</span>
3265
+ <span class='line'>3258</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
3266
+ <span class='line'>3259</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3267
+ <span class='line'>3260</span>
3268
+ <span class='line'>3261</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
3269
+ <span class='line'>3262</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3270
3270
  <span class='line'>3263</span>
3271
- <span class='line'>3264</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3272
- <span class='line'>3265</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3273
- <span class='line'>3266</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3274
- <span class='line'>3267</span>
3275
- <span class='line'>3268</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3276
- <span class='line'>3269</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3277
- <span class='line'>3270</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3278
- <span class='line'>3271</span>
3279
- <span class='line'>3272</span> </span><span class="WHIT"> </span><span class="COMM">// Try to get b, by trying several values related to a</span><span class="WHIT">
3280
- <span class='line'>3273</span> </span><span class="WHIT"> </span><span class="NAME">aa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3281
- <span class='line'>3274</span> </span><span class="WHIT"> </span><span class="NAME">blist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3282
- <span class='line'>3275</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3283
- <span class='line'>3276</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3284
- <span class='line'>3277</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
3285
- <span class='line'>3278</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
3286
- <span class='line'>3279</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3287
- <span class='line'>3280</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3288
- <span class='line'>3281</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.6</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3289
- <span class='line'>3282</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.6</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3290
- <span class='line'>3283</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3291
- <span class='line'>3284</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3292
- <span class='line'>3285</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3293
- <span class='line'>3286</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3294
- <span class='line'>3287</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3295
- <span class='line'>3288</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3296
- <span class='line'>3289</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3297
- <span class='line'>3290</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3298
- <span class='line'>3291</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3299
- <span class='line'>3292</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3300
- <span class='line'>3293</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3301
- <span class='line'>3294</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="WHIT">
3302
- <span class='line'>3295</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3303
- <span class='line'>3296</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blist.length</span><span class="PUNC">;</span><span class="WHIT">
3304
- <span class='line'>3297</span>
3305
- <span class='line'>3298</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3306
- <span class='line'>3299</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3307
- <span class='line'>3300</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3308
- <span class='line'>3301</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3309
- <span class='line'>3302</span>
3310
- <span class='line'>3303</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3311
- <span class='line'>3304</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
3312
- <span class='line'>3305</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3313
- <span class='line'>3306</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3314
- <span class='line'>3307</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3315
- <span class='line'>3308</span> </span><span class="WHIT"> </span><span class="NAME">u</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3316
- <span class='line'>3309</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3317
- <span class='line'>3310</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">;</span><span class="WHIT">
3318
- <span class='line'>3311</span>
3319
- <span class='line'>3312</span> </span><span class="WHIT"> </span><span class="NAME">fu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3320
- <span class='line'>3313</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3321
- <span class='line'>3314</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fu</span><span class="PUNC">;</span><span class="WHIT">
3322
- <span class='line'>3315</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3323
- <span class='line'>3316</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3324
- <span class='line'>3317</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3325
- <span class='line'>3318</span>
3326
- <span class='line'>3319</span> </span><span class="WHIT"> </span><span class="COMM">/**
3327
- <span class='line'>3320</span> *
3328
- <span class='line'>3321</span> * Find zero of an univariate function f.
3329
- <span class='line'>3322</span> * @param {function} f Function, whose root is to be found
3330
- <span class='line'>3323</span> * @param {Array,Number} x0 Start value or start interval enclosing the root
3331
- <span class='line'>3324</span> * @param {Object} object Parent object in case f is method of it
3332
- <span class='line'>3325</span> * @returns {Number} the approximation of the root
3333
- <span class='line'>3326</span> * Algorithm:
3334
- <span class='line'>3327</span> * Brent's root finder from
3335
- <span class='line'>3328</span> * G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
3336
- <span class='line'>3329</span> * computations. M., Mir, 1980, p.180 of the Russian edition
3337
- <span class='line'>3330</span> * https://www.netlib.org/c/brent.shar
3338
- <span class='line'>3331</span> *
3339
- <span class='line'>3332</span> * If x0 is an array containing lower and upper bound for the zero
3340
- <span class='line'>3333</span> * algorithm 748 is applied. Otherwise, if x0 is a number,
3341
- <span class='line'>3334</span> * the algorithm tries to bracket a zero of f starting from x0.
3342
- <span class='line'>3335</span> * If this fails, we fall back to Newton's method.
3343
- <span class='line'>3336</span> *
3344
- <span class='line'>3337</span> * @see JXG.Math.Numerics.chandrupatla
3345
- <span class='line'>3338</span> * @see JXG.Math.Numerics.root
3346
- <span class='line'>3339</span> * @memberof JXG.Math.Numerics
3347
- <span class='line'>3340</span> */</span><span class="WHIT">
3348
- <span class='line'>3341</span> </span><span class="WHIT"> </span><span class="NAME">fzero</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3349
- <span class='line'>3342</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
3350
- <span class='line'>3343</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT">
3351
- <span class='line'>3344</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
3352
- <span class='line'>3345</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT">
3353
- <span class='line'>3346</span> </span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">,</span><span class="WHIT">
3354
- <span class='line'>3347</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT">
3355
- <span class='line'>3348</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">,</span><span class="WHIT">
3356
- <span class='line'>3349</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">,</span><span class="WHIT">
3357
- <span class='line'>3350</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT">
3358
- <span class='line'>3351</span> </span><span class="WHIT"> </span><span class="NAME">prev_step</span><span class="PUNC">,</span><span class="WHIT">
3359
- <span class='line'>3352</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">,</span><span class="WHIT">
3360
- <span class='line'>3353</span> </span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT">
3361
- <span class='line'>3354</span> </span><span class="WHIT"> </span><span class="NAME">t2</span><span class="PUNC">,</span><span class="WHIT">
3362
- <span class='line'>3355</span> </span><span class="WHIT"> </span><span class="COMM">// Actual tolerance</span><span class="WHIT">
3363
- <span class='line'>3356</span> </span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">,</span><span class="WHIT">
3364
- <span class='line'>3357</span> </span><span class="WHIT"> </span><span class="COMM">// Interpolation step is calculated in the form p/q; division</span><span class="WHIT">
3365
- <span class='line'>3358</span> </span><span class="WHIT"> </span><span class="COMM">// operations is delayed until the last moment</span><span class="WHIT">
3366
- <span class='line'>3359</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT">
3367
- <span class='line'>3360</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT">
3368
- <span class='line'>3361</span> </span><span class="WHIT"> </span><span class="COMM">// Step at this iteration</span><span class="WHIT">
3369
- <span class='line'>3362</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">,</span><span class="WHIT">
3370
- <span class='line'>3363</span> </span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT">
3371
- <span class='line'>3364</span> </span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxIterationsRoot</span><span class="PUNC">,</span><span class="WHIT">
3372
- <span class='line'>3365</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3373
- <span class='line'>3366</span> </span><span class="WHIT"> </span><span class="COMM">// nfev = 0;</span><span class="WHIT">
3374
- <span class='line'>3367</span>
3375
- <span class='line'>3368</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3376
- <span class='line'>3369</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3377
- <span class='line'>3370</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="WHIT">
3378
- <span class='line'>3371</span> </span><span class="WHIT"> </span><span class="STRN">"JXG.Math.Numerics.fzero: length of array x0 has to be at least two."</span><span class="WHIT">
3379
- <span class='line'>3372</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3380
- <span class='line'>3373</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3381
- <span class='line'>3374</span>
3382
- <span class='line'>3375</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3383
- <span class='line'>3376</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3384
- <span class='line'>3377</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3385
- <span class='line'>3378</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3386
- <span class='line'>3379</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3387
- <span class='line'>3380</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3388
- <span class='line'>3381</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3389
- <span class='line'>3382</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.findBracket</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3390
- <span class='line'>3383</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3391
- <span class='line'>3384</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3392
- <span class='line'>3385</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3393
- <span class='line'>3386</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3394
- <span class='line'>3387</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3395
- <span class='line'>3388</span>
3396
- <span class='line'>3389</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fa</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3397
- <span class='line'>3390</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3398
- <span class='line'>3391</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3399
- <span class='line'>3392</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3400
- <span class='line'>3393</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3401
- <span class='line'>3394</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3402
- <span class='line'>3395</span>
3403
- <span class='line'>3396</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3404
- <span class='line'>3397</span> </span><span class="WHIT"> </span><span class="COMM">// Bracketing not successful, fall back to Newton's method or to fminbr</span><span class="WHIT">
3405
- <span class='line'>3398</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3406
- <span class='line'>3399</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fminbr</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3407
- <span class='line'>3400</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3408
- <span class='line'>3401</span>
3409
- <span class='line'>3402</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.Newton</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3410
- <span class='line'>3403</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3411
- <span class='line'>3404</span>
3412
- <span class='line'>3405</span> </span><span class="WHIT"> </span><span class="COMM">// OK, we have enclosed a zero of f.</span><span class="WHIT">
3413
- <span class='line'>3406</span> </span><span class="WHIT"> </span><span class="COMM">// Now we can start Brent's method</span><span class="WHIT">
3414
- <span class='line'>3407</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3415
- <span class='line'>3408</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3416
- <span class='line'>3409</span>
3417
- <span class='line'>3410</span> </span><span class="WHIT"> </span><span class="COMM">// Main iteration loop</span><span class="WHIT">
3418
- <span class='line'>3411</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3419
- <span class='line'>3412</span> </span><span class="WHIT"> </span><span class="COMM">// Distance from the last but one to the last approximation</span><span class="WHIT">
3420
- <span class='line'>3413</span> </span><span class="WHIT"> </span><span class="NAME">prev_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3421
- <span class='line'>3414</span>
3422
- <span class='line'>3415</span> </span><span class="WHIT"> </span><span class="COMM">// Swap data for b to be the best approximation</span><span class="WHIT">
3423
- <span class='line'>3416</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3424
- <span class='line'>3417</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3425
- <span class='line'>3418</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">;</span><span class="WHIT">
3426
- <span class='line'>3419</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3427
- <span class='line'>3420</span>
3428
- <span class='line'>3421</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3429
- <span class='line'>3422</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">;</span><span class="WHIT">
3430
- <span class='line'>3423</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3431
- <span class='line'>3424</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3432
- <span class='line'>3425</span> </span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3433
- <span class='line'>3426</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3434
- <span class='line'>3427</span>
3435
- <span class='line'>3428</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3436
- <span class='line'>3429</span> </span><span class="WHIT"> </span><span class="COMM">// Acceptable approx. is found</span><span class="WHIT">
3437
- <span class='line'>3430</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3438
- <span class='line'>3431</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3439
- <span class='line'>3432</span>
3440
- <span class='line'>3433</span> </span><span class="WHIT"> </span><span class="COMM">// Decide if the interpolation can be tried</span><span class="WHIT">
3441
- <span class='line'>3434</span> </span><span class="WHIT"> </span><span class="COMM">// If prev_step was large enough and was in true direction Interpolatiom may be tried</span><span class="WHIT">
3442
- <span class='line'>3435</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">prev_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fa</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3443
- <span class='line'>3436</span> </span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3271
+ <span class='line'>3264</span> </span><span class="WHIT"> </span><span class="COMM">/**
3272
+ <span class='line'>3265</span> * Maximum number of iterations in {@link JXG.Math.Numerics.fzero} and
3273
+ <span class='line'>3266</span> * {@link JXG.Math.Numerics.chandrupatla}
3274
+ <span class='line'>3267</span> * @type Number
3275
+ <span class='line'>3268</span> * @default 80
3276
+ <span class='line'>3269</span> * @memberof JXG.Math.Numerics
3277
+ <span class='line'>3270</span> */</span><span class="WHIT">
3278
+ <span class='line'>3271</span> </span><span class="WHIT"> </span><span class="NAME">maxIterationsRoot</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">80</span><span class="PUNC">,</span><span class="WHIT">
3279
+ <span class='line'>3272</span>
3280
+ <span class='line'>3273</span> </span><span class="WHIT"> </span><span class="COMM">/**
3281
+ <span class='line'>3274</span> * Maximum number of iterations in {@link JXG.Math.Numerics.fminbr}
3282
+ <span class='line'>3275</span> * @type Number
3283
+ <span class='line'>3276</span> * @default 500
3284
+ <span class='line'>3277</span> * @memberof JXG.Math.Numerics
3285
+ <span class='line'>3278</span> */</span><span class="WHIT">
3286
+ <span class='line'>3279</span> </span><span class="WHIT"> </span><span class="NAME">maxIterationsMinimize</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">500</span><span class="PUNC">,</span><span class="WHIT">
3287
+ <span class='line'>3280</span>
3288
+ <span class='line'>3281</span> </span><span class="WHIT"> </span><span class="COMM">/**
3289
+ <span class='line'>3282</span> * Given a value x_0, this function tries to find a second value x_1 such that
3290
+ <span class='line'>3283</span> * the function f has opposite signs at x_0 and x_1.
3291
+ <span class='line'>3284</span> * The return values have to be tested if the method succeeded.
3292
+ <span class='line'>3285</span> *
3293
+ <span class='line'>3286</span> * @param {Function} f Function, whose root is to be found
3294
+ <span class='line'>3287</span> * @param {Number} x0 Start value
3295
+ <span class='line'>3288</span> * @param {Object} object Parent object in case f is method of it
3296
+ <span class='line'>3289</span> * @returns {Array} [x_0, f(x_0), x_1, f(x_1)] in case that x_0 &lt;= x_1
3297
+ <span class='line'>3290</span> * or [x_1, f(x_1), x_0, f(x_0)] in case that x_1 &lt; x_0.
3298
+ <span class='line'>3291</span> *
3299
+ <span class='line'>3292</span> * @see JXG.Math.Numerics.fzero
3300
+ <span class='line'>3293</span> * @see JXG.Math.Numerics.chandrupatla
3301
+ <span class='line'>3294</span> *
3302
+ <span class='line'>3295</span> * @memberof JXG.Math.Numerics
3303
+ <span class='line'>3296</span> */</span><span class="WHIT">
3304
+ <span class='line'>3297</span> </span><span class="WHIT"> </span><span class="NAME">findBracket</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3305
+ <span class='line'>3298</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT">
3306
+ <span class='line'>3299</span>
3307
+ <span class='line'>3300</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3308
+ <span class='line'>3301</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3309
+ <span class='line'>3302</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3310
+ <span class='line'>3303</span>
3311
+ <span class='line'>3304</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3312
+ <span class='line'>3305</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3313
+ <span class='line'>3306</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3314
+ <span class='line'>3307</span>
3315
+ <span class='line'>3308</span> </span><span class="WHIT"> </span><span class="COMM">// Try to get b, by trying several values related to a</span><span class="WHIT">
3316
+ <span class='line'>3309</span> </span><span class="WHIT"> </span><span class="NAME">aa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3317
+ <span class='line'>3310</span> </span><span class="WHIT"> </span><span class="NAME">blist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3318
+ <span class='line'>3311</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3319
+ <span class='line'>3312</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3320
+ <span class='line'>3313</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
3321
+ <span class='line'>3314</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
3322
+ <span class='line'>3315</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3323
+ <span class='line'>3316</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3324
+ <span class='line'>3317</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0.6</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3325
+ <span class='line'>3318</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.6</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3326
+ <span class='line'>3319</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3327
+ <span class='line'>3320</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3328
+ <span class='line'>3321</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3329
+ <span class='line'>3322</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3330
+ <span class='line'>3323</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3331
+ <span class='line'>3324</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3332
+ <span class='line'>3325</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3333
+ <span class='line'>3326</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3334
+ <span class='line'>3327</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3335
+ <span class='line'>3328</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3336
+ <span class='line'>3329</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="PUNC">,</span><span class="WHIT">
3337
+ <span class='line'>3330</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">aa</span><span class="WHIT">
3338
+ <span class='line'>3331</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3339
+ <span class='line'>3332</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blist.length</span><span class="PUNC">;</span><span class="WHIT">
3340
+ <span class='line'>3333</span>
3341
+ <span class='line'>3334</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3342
+ <span class='line'>3335</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3343
+ <span class='line'>3336</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3344
+ <span class='line'>3337</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3345
+ <span class='line'>3338</span>
3346
+ <span class='line'>3339</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3347
+ <span class='line'>3340</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
3348
+ <span class='line'>3341</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3349
+ <span class='line'>3342</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3350
+ <span class='line'>3343</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3351
+ <span class='line'>3344</span> </span><span class="WHIT"> </span><span class="NAME">u</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3352
+ <span class='line'>3345</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3353
+ <span class='line'>3346</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">;</span><span class="WHIT">
3354
+ <span class='line'>3347</span>
3355
+ <span class='line'>3348</span> </span><span class="WHIT"> </span><span class="NAME">fu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3356
+ <span class='line'>3349</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3357
+ <span class='line'>3350</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fu</span><span class="PUNC">;</span><span class="WHIT">
3358
+ <span class='line'>3351</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3359
+ <span class='line'>3352</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3360
+ <span class='line'>3353</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3361
+ <span class='line'>3354</span>
3362
+ <span class='line'>3355</span> </span><span class="WHIT"> </span><span class="COMM">/**
3363
+ <span class='line'>3356</span> *
3364
+ <span class='line'>3357</span> * Find zero of an univariate function f.
3365
+ <span class='line'>3358</span> * @param {function} f Function, whose root is to be found
3366
+ <span class='line'>3359</span> * @param {Array,Number} x0 Start value or start interval enclosing the root
3367
+ <span class='line'>3360</span> * @param {Object} object Parent object in case f is method of it
3368
+ <span class='line'>3361</span> * @returns {Number} the approximation of the root
3369
+ <span class='line'>3362</span> * Algorithm:
3370
+ <span class='line'>3363</span> * Brent's root finder from
3371
+ <span class='line'>3364</span> * G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
3372
+ <span class='line'>3365</span> * computations. M., Mir, 1980, p.180 of the Russian edition
3373
+ <span class='line'>3366</span> * https://www.netlib.org/c/brent.shar
3374
+ <span class='line'>3367</span> *
3375
+ <span class='line'>3368</span> * If x0 is an array containing lower and upper bound for the zero
3376
+ <span class='line'>3369</span> * algorithm 748 is applied. Otherwise, if x0 is a number,
3377
+ <span class='line'>3370</span> * the algorithm tries to bracket a zero of f starting from x0.
3378
+ <span class='line'>3371</span> * If this fails, we fall back to Newton's method.
3379
+ <span class='line'>3372</span> *
3380
+ <span class='line'>3373</span> * @see JXG.Math.Numerics.chandrupatla
3381
+ <span class='line'>3374</span> * @see JXG.Math.Numerics.root
3382
+ <span class='line'>3375</span> * @memberof JXG.Math.Numerics
3383
+ <span class='line'>3376</span> */</span><span class="WHIT">
3384
+ <span class='line'>3377</span> </span><span class="WHIT"> </span><span class="NAME">fzero</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3385
+ <span class='line'>3378</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
3386
+ <span class='line'>3379</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT">
3387
+ <span class='line'>3380</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
3388
+ <span class='line'>3381</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT">
3389
+ <span class='line'>3382</span> </span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">,</span><span class="WHIT">
3390
+ <span class='line'>3383</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT">
3391
+ <span class='line'>3384</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">,</span><span class="WHIT">
3392
+ <span class='line'>3385</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">,</span><span class="WHIT">
3393
+ <span class='line'>3386</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT">
3394
+ <span class='line'>3387</span> </span><span class="WHIT"> </span><span class="NAME">prev_step</span><span class="PUNC">,</span><span class="WHIT">
3395
+ <span class='line'>3388</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">,</span><span class="WHIT">
3396
+ <span class='line'>3389</span> </span><span class="WHIT"> </span><span class="NAME">cb</span><span class="PUNC">,</span><span class="WHIT">
3397
+ <span class='line'>3390</span> </span><span class="WHIT"> </span><span class="NAME">t2</span><span class="PUNC">,</span><span class="WHIT">
3398
+ <span class='line'>3391</span> </span><span class="WHIT"> </span><span class="COMM">// Actual tolerance</span><span class="WHIT">
3399
+ <span class='line'>3392</span> </span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">,</span><span class="WHIT">
3400
+ <span class='line'>3393</span> </span><span class="WHIT"> </span><span class="COMM">// Interpolation step is calculated in the form p/q; division</span><span class="WHIT">
3401
+ <span class='line'>3394</span> </span><span class="WHIT"> </span><span class="COMM">// operations is delayed until the last moment</span><span class="WHIT">
3402
+ <span class='line'>3395</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT">
3403
+ <span class='line'>3396</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT">
3404
+ <span class='line'>3397</span> </span><span class="WHIT"> </span><span class="COMM">// Step at this iteration</span><span class="WHIT">
3405
+ <span class='line'>3398</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">,</span><span class="WHIT">
3406
+ <span class='line'>3399</span> </span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT">
3407
+ <span class='line'>3400</span> </span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxIterationsRoot</span><span class="PUNC">,</span><span class="WHIT">
3408
+ <span class='line'>3401</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3409
+ <span class='line'>3402</span> </span><span class="WHIT"> </span><span class="COMM">// nfev = 0;</span><span class="WHIT">
3410
+ <span class='line'>3403</span>
3411
+ <span class='line'>3404</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3412
+ <span class='line'>3405</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3413
+ <span class='line'>3406</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="WHIT">
3414
+ <span class='line'>3407</span> </span><span class="WHIT"> </span><span class="STRN">"JXG.Math.Numerics.fzero: length of array x0 has to be at least two."</span><span class="WHIT">
3415
+ <span class='line'>3408</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3416
+ <span class='line'>3409</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3417
+ <span class='line'>3410</span>
3418
+ <span class='line'>3411</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3419
+ <span class='line'>3412</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3420
+ <span class='line'>3413</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3421
+ <span class='line'>3414</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3422
+ <span class='line'>3415</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3423
+ <span class='line'>3416</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3424
+ <span class='line'>3417</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3425
+ <span class='line'>3418</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.findBracket</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3426
+ <span class='line'>3419</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3427
+ <span class='line'>3420</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3428
+ <span class='line'>3421</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3429
+ <span class='line'>3422</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3430
+ <span class='line'>3423</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3431
+ <span class='line'>3424</span>
3432
+ <span class='line'>3425</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fa</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3433
+ <span class='line'>3426</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3434
+ <span class='line'>3427</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3435
+ <span class='line'>3428</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3436
+ <span class='line'>3429</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3437
+ <span class='line'>3430</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3438
+ <span class='line'>3431</span>
3439
+ <span class='line'>3432</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3440
+ <span class='line'>3433</span> </span><span class="WHIT"> </span><span class="COMM">// Bracketing not successful, fall back to Newton's method or to fminbr</span><span class="WHIT">
3441
+ <span class='line'>3434</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3442
+ <span class='line'>3435</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fminbr</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3443
+ <span class='line'>3436</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3444
3444
  <span class='line'>3437</span>
3445
- <span class='line'>3438</span> </span><span class="WHIT"> </span><span class="COMM">// If we have only two distinct points linear interpolation can only be applied</span><span class="WHIT">
3446
- <span class='line'>3439</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3447
- <span class='line'>3440</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3448
- <span class='line'>3441</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">;</span><span class="WHIT">
3449
- <span class='line'>3442</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">;</span><span class="WHIT">
3450
- <span class='line'>3443</span> </span><span class="WHIT"> </span><span class="COMM">// Quadric inverse interpolation</span><span class="WHIT">
3451
- <span class='line'>3444</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3452
- <span class='line'>3445</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">;</span><span class="WHIT">
3453
- <span class='line'>3446</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">;</span><span class="WHIT">
3454
- <span class='line'>3447</span> </span><span class="WHIT"> </span><span class="NAME">t2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3455
- <span class='line'>3448</span>
3456
- <span class='line'>3449</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3457
- <span class='line'>3450</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3458
- <span class='line'>3451</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3459
- <span class='line'>3452</span>
3460
- <span class='line'>3453</span> </span><span class="WHIT"> </span><span class="COMM">// p was calculated with the opposite sign; make p positive</span><span class="WHIT">
3461
- <span class='line'>3454</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3462
- <span class='line'>3455</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT">
3463
- <span class='line'>3456</span> </span><span class="WHIT"> </span><span class="COMM">// and assign possible minus to q</span><span class="WHIT">
3464
- <span class='line'>3457</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3465
- <span class='line'>3458</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
3466
- <span class='line'>3459</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3467
- <span class='line'>3460</span>
3468
- <span class='line'>3461</span> </span><span class="WHIT"> </span><span class="COMM">// If b+p/q falls in [b,c] and isn't too large it is accepted</span><span class="WHIT">
3469
- <span class='line'>3462</span> </span><span class="WHIT"> </span><span class="COMM">// If p/q is too large then the bissection procedure can reduce [b,c] range to more extent</span><span class="WHIT">
3470
- <span class='line'>3463</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
3471
- <span class='line'>3464</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.75</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
3472
- <span class='line'>3465</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">prev_step</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="WHIT">
3473
- <span class='line'>3466</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3474
- <span class='line'>3467</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT">
3475
- <span class='line'>3468</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3476
- <span class='line'>3469</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3477
- <span class='line'>3470</span>
3478
- <span class='line'>3471</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust the step to be not less than tolerance</span><span class="WHIT">
3479
- <span class='line'>3472</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3480
- <span class='line'>3473</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">tol_act</span><span class="PUNC">;</span><span class="WHIT">
3481
- <span class='line'>3474</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3482
- <span class='line'>3475</span>
3483
- <span class='line'>3476</span> </span><span class="WHIT"> </span><span class="COMM">// Save the previous approx.</span><span class="WHIT">
3484
- <span class='line'>3477</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3485
- <span class='line'>3478</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3486
- <span class='line'>3479</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">;</span><span class="WHIT">
3487
- <span class='line'>3480</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3488
- <span class='line'>3481</span> </span><span class="WHIT"> </span><span class="COMM">// Do step to a new approxim.</span><span class="WHIT">
3489
- <span class='line'>3482</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3490
- <span class='line'>3483</span>
3491
- <span class='line'>3484</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust c for it to have a sign opposite to that of b</span><span class="WHIT">
3492
- <span class='line'>3485</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3493
- <span class='line'>3486</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3494
- <span class='line'>3487</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3495
- <span class='line'>3488</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3496
- <span class='line'>3489</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
3497
- <span class='line'>3490</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">// End while</span><span class="WHIT">
3498
- <span class='line'>3491</span>
3499
- <span class='line'>3492</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3500
- <span class='line'>3493</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3501
- <span class='line'>3494</span>
3502
- <span class='line'>3495</span> </span><span class="WHIT"> </span><span class="COMM">/**
3503
- <span class='line'>3496</span> * Find zero of an univariate function f.
3504
- <span class='line'>3497</span> * @param {function} f Function, whose root is to be found
3505
- <span class='line'>3498</span> * @param {Array,Number} x0 Start value or start interval enclosing the root
3506
- <span class='line'>3499</span> * @param {Object} object Parent object in case f is method of it
3507
- <span class='line'>3500</span> * @returns {Number} the approximation of the root
3508
- <span class='line'>3501</span> * Algorithm:
3509
- <span class='line'>3502</span> * Chandrupatla's method, see
3510
- <span class='line'>3503</span> * Tirupathi R. Chandrupatla,
3511
- <span class='line'>3504</span> * "A new hybrid quadratic/bisection algorithm for finding the zero of a nonlinear function without using derivatives",
3512
- <span class='line'>3505</span> * Advances in Engineering Software, Volume 28, Issue 3, April 1997, Pages 145-149.
3513
- <span class='line'>3506</span> *
3514
- <span class='line'>3507</span> * If x0 is an array containing lower and upper bound for the zero
3515
- <span class='line'>3508</span> * algorithm 748 is applied. Otherwise, if x0 is a number,
3516
- <span class='line'>3509</span> * the algorithm tries to bracket a zero of f starting from x0.
3517
- <span class='line'>3510</span> * If this fails, we fall back to Newton's method.
3518
- <span class='line'>3511</span> *
3519
- <span class='line'>3512</span> * @see JXG.Math.Numerics.root
3520
- <span class='line'>3513</span> * @see JXG.Math.Numerics.fzero
3521
- <span class='line'>3514</span> * @memberof JXG.Math.Numerics
3522
- <span class='line'>3515</span> */</span><span class="WHIT">
3523
- <span class='line'>3516</span> </span><span class="WHIT"> </span><span class="NAME">chandrupatla</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3524
- <span class='line'>3517</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
3525
- <span class='line'>3518</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT">
3526
- <span class='line'>3519</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT">
3527
- <span class='line'>3520</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">,</span><span class="WHIT">
3528
- <span class='line'>3521</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT">
3529
- <span class='line'>3522</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3530
- <span class='line'>3523</span> </span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxIterationsRoot</span><span class="PUNC">,</span><span class="WHIT">
3531
- <span class='line'>3524</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.001</span><span class="PUNC">,</span><span class="WHIT">
3532
- <span class='line'>3525</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">rand</span><span class="PUNC">,</span><span class="WHIT">
3533
- <span class='line'>3526</span> </span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// 1.e-10,</span><span class="WHIT">
3534
- <span class='line'>3527</span> </span><span class="WHIT"> </span><span class="NAME">dlt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.00001</span><span class="PUNC">,</span><span class="WHIT">
3535
- <span class='line'>3528</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">,</span><span class="WHIT">
3536
- <span class='line'>3529</span> </span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">,</span><span class="WHIT">
3537
- <span class='line'>3530</span> </span><span class="WHIT"> </span><span class="NAME">x3</span><span class="PUNC">,</span><span class="WHIT">
3538
- <span class='line'>3531</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT">
3539
- <span class='line'>3532</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">,</span><span class="WHIT">
3540
- <span class='line'>3533</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">,</span><span class="WHIT">
3541
- <span class='line'>3534</span> </span><span class="WHIT"> </span><span class="NAME">f3</span><span class="PUNC">,</span><span class="WHIT">
3542
- <span class='line'>3535</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT">
3543
- <span class='line'>3536</span> </span><span class="WHIT"> </span><span class="NAME">xm</span><span class="PUNC">,</span><span class="WHIT">
3544
- <span class='line'>3537</span> </span><span class="WHIT"> </span><span class="NAME">fm</span><span class="PUNC">,</span><span class="WHIT">
3545
- <span class='line'>3538</span> </span><span class="WHIT"> </span><span class="NAME">tol</span><span class="PUNC">,</span><span class="WHIT">
3546
- <span class='line'>3539</span> </span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">,</span><span class="WHIT">
3547
- <span class='line'>3540</span> </span><span class="WHIT"> </span><span class="NAME">xi</span><span class="PUNC">,</span><span class="WHIT">
3548
- <span class='line'>3541</span> </span><span class="WHIT"> </span><span class="NAME">ph</span><span class="PUNC">,</span><span class="WHIT">
3549
- <span class='line'>3542</span> </span><span class="WHIT"> </span><span class="NAME">fl</span><span class="PUNC">,</span><span class="WHIT">
3550
- <span class='line'>3543</span> </span><span class="WHIT"> </span><span class="NAME">fh</span><span class="PUNC">,</span><span class="WHIT">
3551
- <span class='line'>3544</span> </span><span class="WHIT"> </span><span class="NAME">AL</span><span class="PUNC">,</span><span class="WHIT">
3552
- <span class='line'>3545</span> </span><span class="WHIT"> </span><span class="NAME">A</span><span class="PUNC">,</span><span class="WHIT">
3553
- <span class='line'>3546</span> </span><span class="WHIT"> </span><span class="NAME">B</span><span class="PUNC">,</span><span class="WHIT">
3554
- <span class='line'>3547</span> </span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">,</span><span class="WHIT">
3555
- <span class='line'>3548</span> </span><span class="WHIT"> </span><span class="NAME">D</span><span class="PUNC">;</span><span class="WHIT">
3556
- <span class='line'>3549</span>
3557
- <span class='line'>3550</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3558
- <span class='line'>3551</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3559
- <span class='line'>3552</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="WHIT">
3560
- <span class='line'>3553</span> </span><span class="WHIT"> </span><span class="STRN">"JXG.Math.Numerics.fzero: length of array x0 has to be at least two."</span><span class="WHIT">
3561
- <span class='line'>3554</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3562
- <span class='line'>3555</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3563
- <span class='line'>3556</span>
3564
- <span class='line'>3557</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3565
- <span class='line'>3558</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3566
- <span class='line'>3559</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3567
- <span class='line'>3560</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3568
- <span class='line'>3561</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3569
- <span class='line'>3562</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3570
- <span class='line'>3563</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3571
- <span class='line'>3564</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.findBracket</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3572
- <span class='line'>3565</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3573
- <span class='line'>3566</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3574
- <span class='line'>3567</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3575
- <span class='line'>3568</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3576
- <span class='line'>3569</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3577
- <span class='line'>3570</span>
3578
- <span class='line'>3571</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3579
- <span class='line'>3572</span> </span><span class="WHIT"> </span><span class="COMM">// Bracketing not successful, fall back to Newton's method or to fminbr</span><span class="WHIT">
3580
- <span class='line'>3573</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3581
- <span class='line'>3574</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fminbr</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3582
- <span class='line'>3575</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3583
- <span class='line'>3576</span>
3584
- <span class='line'>3577</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.Newton</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3585
- <span class='line'>3578</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3586
- <span class='line'>3579</span>
3587
- <span class='line'>3580</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3588
- <span class='line'>3581</span> </span><span class="WHIT"> </span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3589
- <span class='line'>3582</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3590
- <span class='line'>3583</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3591
- <span class='line'>3584</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3592
- <span class='line'>3585</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3593
- <span class='line'>3586</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3594
- <span class='line'>3587</span>
3595
- <span class='line'>3588</span> </span><span class="WHIT"> </span><span class="COMM">// Arrange 2-1-3: 2-1 interval, 1 middle, 3 discarded point</span><span class="WHIT">
3596
- <span class='line'>3589</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.sign</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Math.sign</span><span class="PUNC">(</span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3597
- <span class='line'>3590</span> </span><span class="WHIT"> </span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3598
- <span class='line'>3591</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3599
- <span class='line'>3592</span> </span><span class="WHIT"> </span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3600
- <span class='line'>3593</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3601
- <span class='line'>3594</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3602
- <span class='line'>3595</span> </span><span class="WHIT"> </span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">;</span><span class="WHIT">
3603
- <span class='line'>3596</span> </span><span class="WHIT"> </span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3604
- <span class='line'>3597</span> </span><span class="WHIT"> </span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3605
- <span class='line'>3598</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3606
- <span class='line'>3599</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3607
- <span class='line'>3600</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3608
- <span class='line'>3601</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3609
- <span class='line'>3602</span>
3610
- <span class='line'>3603</span> </span><span class="WHIT"> </span><span class="NAME">xm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3611
- <span class='line'>3604</span> </span><span class="WHIT"> </span><span class="NAME">fm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3612
- <span class='line'>3605</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">f2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3613
- <span class='line'>3606</span> </span><span class="WHIT"> </span><span class="NAME">xm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">;</span><span class="WHIT">
3614
- <span class='line'>3607</span> </span><span class="WHIT"> </span><span class="NAME">fm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3615
- <span class='line'>3608</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3616
- <span class='line'>3609</span> </span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">xm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dlt</span><span class="PUNC">;</span><span class="WHIT">
3617
- <span class='line'>3610</span> </span><span class="WHIT"> </span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3618
- <span class='line'>3611</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">fm</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3619
- <span class='line'>3612</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
3620
- <span class='line'>3613</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3621
- <span class='line'>3614</span> </span><span class="WHIT"> </span><span class="COMM">// If inverse quadratic interpolation holds, use it</span><span class="WHIT">
3622
- <span class='line'>3615</span> </span><span class="WHIT"> </span><span class="NAME">xi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3623
- <span class='line'>3616</span> </span><span class="WHIT"> </span><span class="NAME">ph</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3624
- <span class='line'>3617</span> </span><span class="WHIT"> </span><span class="NAME">fl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">xi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3625
- <span class='line'>3618</span> </span><span class="WHIT"> </span><span class="NAME">fh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NAME">xi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3626
- <span class='line'>3619</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fl</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">ph</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">ph</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fh</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3627
- <span class='line'>3620</span> </span><span class="WHIT"> </span><span class="NAME">AL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3628
- <span class='line'>3621</span> </span><span class="WHIT"> </span><span class="NAME">A</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3629
- <span class='line'>3622</span> </span><span class="WHIT"> </span><span class="NAME">B</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3630
- <span class='line'>3623</span> </span><span class="WHIT"> </span><span class="NAME">C</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3631
- <span class='line'>3624</span> </span><span class="WHIT"> </span><span class="NAME">D</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3632
- <span class='line'>3625</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">A</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">B</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">C</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">D</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">AL</span><span class="PUNC">;</span><span class="WHIT">
3633
- <span class='line'>3626</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3634
- <span class='line'>3627</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">rand</span><span class="PUNC">;</span><span class="WHIT">
3635
- <span class='line'>3628</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3636
- <span class='line'>3629</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust t away from the interval boundary</span><span class="WHIT">
3637
- <span class='line'>3630</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3638
- <span class='line'>3631</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">;</span><span class="WHIT">
3639
- <span class='line'>3632</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3640
- <span class='line'>3633</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3641
- <span class='line'>3634</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">;</span><span class="WHIT">
3445
+ <span class='line'>3438</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.Newton</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3446
+ <span class='line'>3439</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3447
+ <span class='line'>3440</span>
3448
+ <span class='line'>3441</span> </span><span class="WHIT"> </span><span class="COMM">// OK, we have enclosed a zero of f.</span><span class="WHIT">
3449
+ <span class='line'>3442</span> </span><span class="WHIT"> </span><span class="COMM">// Now we can start Brent's method</span><span class="WHIT">
3450
+ <span class='line'>3443</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3451
+ <span class='line'>3444</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3452
+ <span class='line'>3445</span>
3453
+ <span class='line'>3446</span> </span><span class="WHIT"> </span><span class="COMM">// Main iteration loop</span><span class="WHIT">
3454
+ <span class='line'>3447</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3455
+ <span class='line'>3448</span> </span><span class="WHIT"> </span><span class="COMM">// Distance from the last but one to the last approximation</span><span class="WHIT">
3456
+ <span class='line'>3449</span> </span><span class="WHIT"> </span><span class="NAME">prev_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3457
+ <span class='line'>3450</span>
3458
+ <span class='line'>3451</span> </span><span class="WHIT"> </span><span class="COMM">// Swap data for b to be the best approximation</span><span class="WHIT">
3459
+ <span class='line'>3452</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3460
+ <span class='line'>3453</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3461
+ <span class='line'>3454</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">;</span><span class="WHIT">
3462
+ <span class='line'>3455</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3463
+ <span class='line'>3456</span>
3464
+ <span class='line'>3457</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3465
+ <span class='line'>3458</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">;</span><span class="WHIT">
3466
+ <span class='line'>3459</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3467
+ <span class='line'>3460</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3468
+ <span class='line'>3461</span> </span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3469
+ <span class='line'>3462</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3470
+ <span class='line'>3463</span>
3471
+ <span class='line'>3464</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3472
+ <span class='line'>3465</span> </span><span class="WHIT"> </span><span class="COMM">// Acceptable approx. is found</span><span class="WHIT">
3473
+ <span class='line'>3466</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3474
+ <span class='line'>3467</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3475
+ <span class='line'>3468</span>
3476
+ <span class='line'>3469</span> </span><span class="WHIT"> </span><span class="COMM">// Decide if the interpolation can be tried</span><span class="WHIT">
3477
+ <span class='line'>3470</span> </span><span class="WHIT"> </span><span class="COMM">// If prev_step was large enough and was in true direction Interpolatiom may be tried</span><span class="WHIT">
3478
+ <span class='line'>3471</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">prev_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fa</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3479
+ <span class='line'>3472</span> </span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3480
+ <span class='line'>3473</span>
3481
+ <span class='line'>3474</span> </span><span class="WHIT"> </span><span class="COMM">// If we have only two distinct points linear interpolation can only be applied</span><span class="WHIT">
3482
+ <span class='line'>3475</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3483
+ <span class='line'>3476</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3484
+ <span class='line'>3477</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">;</span><span class="WHIT">
3485
+ <span class='line'>3478</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">;</span><span class="WHIT">
3486
+ <span class='line'>3479</span> </span><span class="WHIT"> </span><span class="COMM">// Quadric inverse interpolation</span><span class="WHIT">
3487
+ <span class='line'>3480</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3488
+ <span class='line'>3481</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">;</span><span class="WHIT">
3489
+ <span class='line'>3482</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="PUNC">;</span><span class="WHIT">
3490
+ <span class='line'>3483</span> </span><span class="WHIT"> </span><span class="NAME">t2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3491
+ <span class='line'>3484</span>
3492
+ <span class='line'>3485</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3493
+ <span class='line'>3486</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3494
+ <span class='line'>3487</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3495
+ <span class='line'>3488</span>
3496
+ <span class='line'>3489</span> </span><span class="WHIT"> </span><span class="COMM">// p was calculated with the opposite sign; make p positive</span><span class="WHIT">
3497
+ <span class='line'>3490</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3498
+ <span class='line'>3491</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT">
3499
+ <span class='line'>3492</span> </span><span class="WHIT"> </span><span class="COMM">// and assign possible minus to q</span><span class="WHIT">
3500
+ <span class='line'>3493</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3501
+ <span class='line'>3494</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
3502
+ <span class='line'>3495</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3503
+ <span class='line'>3496</span>
3504
+ <span class='line'>3497</span> </span><span class="WHIT"> </span><span class="COMM">// If b+p/q falls in [b,c] and isn't too large it is accepted</span><span class="WHIT">
3505
+ <span class='line'>3498</span> </span><span class="WHIT"> </span><span class="COMM">// If p/q is too large then the bissection procedure can reduce [b,c] range to more extent</span><span class="WHIT">
3506
+ <span class='line'>3499</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
3507
+ <span class='line'>3500</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.75</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">cb</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
3508
+ <span class='line'>3501</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">prev_step</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="WHIT">
3509
+ <span class='line'>3502</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3510
+ <span class='line'>3503</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT">
3511
+ <span class='line'>3504</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3512
+ <span class='line'>3505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3513
+ <span class='line'>3506</span>
3514
+ <span class='line'>3507</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust the step to be not less than tolerance</span><span class="WHIT">
3515
+ <span class='line'>3508</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3516
+ <span class='line'>3509</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">tol_act</span><span class="PUNC">;</span><span class="WHIT">
3517
+ <span class='line'>3510</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3518
+ <span class='line'>3511</span>
3519
+ <span class='line'>3512</span> </span><span class="WHIT"> </span><span class="COMM">// Save the previous approx.</span><span class="WHIT">
3520
+ <span class='line'>3513</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3521
+ <span class='line'>3514</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3522
+ <span class='line'>3515</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">;</span><span class="WHIT">
3523
+ <span class='line'>3516</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3524
+ <span class='line'>3517</span> </span><span class="WHIT"> </span><span class="COMM">// Do step to a new approxim.</span><span class="WHIT">
3525
+ <span class='line'>3518</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3526
+ <span class='line'>3519</span>
3527
+ <span class='line'>3520</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust c for it to have a sign opposite to that of b</span><span class="WHIT">
3528
+ <span class='line'>3521</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3529
+ <span class='line'>3522</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3530
+ <span class='line'>3523</span> </span><span class="WHIT"> </span><span class="NAME">fc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3531
+ <span class='line'>3524</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3532
+ <span class='line'>3525</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
3533
+ <span class='line'>3526</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="COMM">// End while</span><span class="WHIT">
3534
+ <span class='line'>3527</span>
3535
+ <span class='line'>3528</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3536
+ <span class='line'>3529</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3537
+ <span class='line'>3530</span>
3538
+ <span class='line'>3531</span> </span><span class="WHIT"> </span><span class="COMM">/**
3539
+ <span class='line'>3532</span> * Find zero of an univariate function f.
3540
+ <span class='line'>3533</span> * @param {function} f Function, whose root is to be found
3541
+ <span class='line'>3534</span> * @param {Array,Number} x0 Start value or start interval enclosing the root
3542
+ <span class='line'>3535</span> * @param {Object} object Parent object in case f is method of it
3543
+ <span class='line'>3536</span> * @returns {Number} the approximation of the root
3544
+ <span class='line'>3537</span> * Algorithm:
3545
+ <span class='line'>3538</span> * Chandrupatla's method, see
3546
+ <span class='line'>3539</span> * Tirupathi R. Chandrupatla,
3547
+ <span class='line'>3540</span> * "A new hybrid quadratic/bisection algorithm for finding the zero of a nonlinear function without using derivatives",
3548
+ <span class='line'>3541</span> * Advances in Engineering Software, Volume 28, Issue 3, April 1997, Pages 145-149.
3549
+ <span class='line'>3542</span> *
3550
+ <span class='line'>3543</span> * If x0 is an array containing lower and upper bound for the zero
3551
+ <span class='line'>3544</span> * algorithm 748 is applied. Otherwise, if x0 is a number,
3552
+ <span class='line'>3545</span> * the algorithm tries to bracket a zero of f starting from x0.
3553
+ <span class='line'>3546</span> * If this fails, we fall back to Newton's method.
3554
+ <span class='line'>3547</span> *
3555
+ <span class='line'>3548</span> * @see JXG.Math.Numerics.root
3556
+ <span class='line'>3549</span> * @see JXG.Math.Numerics.fzero
3557
+ <span class='line'>3550</span> * @memberof JXG.Math.Numerics
3558
+ <span class='line'>3551</span> */</span><span class="WHIT">
3559
+ <span class='line'>3552</span> </span><span class="WHIT"> </span><span class="NAME">chandrupatla</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3560
+ <span class='line'>3553</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT">
3561
+ <span class='line'>3554</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">,</span><span class="WHIT">
3562
+ <span class='line'>3555</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT">
3563
+ <span class='line'>3556</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">,</span><span class="WHIT">
3564
+ <span class='line'>3557</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT">
3565
+ <span class='line'>3558</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3566
+ <span class='line'>3559</span> </span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxIterationsRoot</span><span class="PUNC">,</span><span class="WHIT">
3567
+ <span class='line'>3560</span> </span><span class="WHIT"> </span><span class="NAME">rand</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.001</span><span class="PUNC">,</span><span class="WHIT">
3568
+ <span class='line'>3561</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">rand</span><span class="PUNC">,</span><span class="WHIT">
3569
+ <span class='line'>3562</span> </span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// 1.e-10,</span><span class="WHIT">
3570
+ <span class='line'>3563</span> </span><span class="WHIT"> </span><span class="NAME">dlt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.00001</span><span class="PUNC">,</span><span class="WHIT">
3571
+ <span class='line'>3564</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">,</span><span class="WHIT">
3572
+ <span class='line'>3565</span> </span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">,</span><span class="WHIT">
3573
+ <span class='line'>3566</span> </span><span class="WHIT"> </span><span class="NAME">x3</span><span class="PUNC">,</span><span class="WHIT">
3574
+ <span class='line'>3567</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT">
3575
+ <span class='line'>3568</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">,</span><span class="WHIT">
3576
+ <span class='line'>3569</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">,</span><span class="WHIT">
3577
+ <span class='line'>3570</span> </span><span class="WHIT"> </span><span class="NAME">f3</span><span class="PUNC">,</span><span class="WHIT">
3578
+ <span class='line'>3571</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT">
3579
+ <span class='line'>3572</span> </span><span class="WHIT"> </span><span class="NAME">xm</span><span class="PUNC">,</span><span class="WHIT">
3580
+ <span class='line'>3573</span> </span><span class="WHIT"> </span><span class="NAME">fm</span><span class="PUNC">,</span><span class="WHIT">
3581
+ <span class='line'>3574</span> </span><span class="WHIT"> </span><span class="NAME">tol</span><span class="PUNC">,</span><span class="WHIT">
3582
+ <span class='line'>3575</span> </span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">,</span><span class="WHIT">
3583
+ <span class='line'>3576</span> </span><span class="WHIT"> </span><span class="NAME">xi</span><span class="PUNC">,</span><span class="WHIT">
3584
+ <span class='line'>3577</span> </span><span class="WHIT"> </span><span class="NAME">ph</span><span class="PUNC">,</span><span class="WHIT">
3585
+ <span class='line'>3578</span> </span><span class="WHIT"> </span><span class="NAME">fl</span><span class="PUNC">,</span><span class="WHIT">
3586
+ <span class='line'>3579</span> </span><span class="WHIT"> </span><span class="NAME">fh</span><span class="PUNC">,</span><span class="WHIT">
3587
+ <span class='line'>3580</span> </span><span class="WHIT"> </span><span class="NAME">AL</span><span class="PUNC">,</span><span class="WHIT">
3588
+ <span class='line'>3581</span> </span><span class="WHIT"> </span><span class="NAME">A</span><span class="PUNC">,</span><span class="WHIT">
3589
+ <span class='line'>3582</span> </span><span class="WHIT"> </span><span class="NAME">B</span><span class="PUNC">,</span><span class="WHIT">
3590
+ <span class='line'>3583</span> </span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">,</span><span class="WHIT">
3591
+ <span class='line'>3584</span> </span><span class="WHIT"> </span><span class="NAME">D</span><span class="PUNC">;</span><span class="WHIT">
3592
+ <span class='line'>3585</span>
3593
+ <span class='line'>3586</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3594
+ <span class='line'>3587</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3595
+ <span class='line'>3588</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="WHIT">
3596
+ <span class='line'>3589</span> </span><span class="WHIT"> </span><span class="STRN">"JXG.Math.Numerics.fzero: length of array x0 has to be at least two."</span><span class="WHIT">
3597
+ <span class='line'>3590</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3598
+ <span class='line'>3591</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3599
+ <span class='line'>3592</span>
3600
+ <span class='line'>3593</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3601
+ <span class='line'>3594</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3602
+ <span class='line'>3595</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3603
+ <span class='line'>3596</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3604
+ <span class='line'>3597</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3605
+ <span class='line'>3598</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3606
+ <span class='line'>3599</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3607
+ <span class='line'>3600</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.findBracket</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3608
+ <span class='line'>3601</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3609
+ <span class='line'>3602</span> </span><span class="WHIT"> </span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3610
+ <span class='line'>3603</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3611
+ <span class='line'>3604</span> </span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3612
+ <span class='line'>3605</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3613
+ <span class='line'>3606</span>
3614
+ <span class='line'>3607</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fa</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3615
+ <span class='line'>3608</span> </span><span class="WHIT"> </span><span class="COMM">// Bracketing not successful, fall back to Newton's method or to fminbr</span><span class="WHIT">
3616
+ <span class='line'>3609</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3617
+ <span class='line'>3610</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fminbr</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3618
+ <span class='line'>3611</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3619
+ <span class='line'>3612</span>
3620
+ <span class='line'>3613</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.Newton</span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3621
+ <span class='line'>3614</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3622
+ <span class='line'>3615</span>
3623
+ <span class='line'>3616</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3624
+ <span class='line'>3617</span> </span><span class="WHIT"> </span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3625
+ <span class='line'>3618</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fa</span><span class="PUNC">;</span><span class="WHIT">
3626
+ <span class='line'>3619</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fb</span><span class="PUNC">;</span><span class="WHIT">
3627
+ <span class='line'>3620</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3628
+ <span class='line'>3621</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3629
+ <span class='line'>3622</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3630
+ <span class='line'>3623</span>
3631
+ <span class='line'>3624</span> </span><span class="WHIT"> </span><span class="COMM">// Arrange 2-1-3: 2-1 interval, 1 middle, 3 discarded point</span><span class="WHIT">
3632
+ <span class='line'>3625</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.sign</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Math.sign</span><span class="PUNC">(</span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3633
+ <span class='line'>3626</span> </span><span class="WHIT"> </span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3634
+ <span class='line'>3627</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3635
+ <span class='line'>3628</span> </span><span class="WHIT"> </span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3636
+ <span class='line'>3629</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3637
+ <span class='line'>3630</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3638
+ <span class='line'>3631</span> </span><span class="WHIT"> </span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">;</span><span class="WHIT">
3639
+ <span class='line'>3632</span> </span><span class="WHIT"> </span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3640
+ <span class='line'>3633</span> </span><span class="WHIT"> </span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3641
+ <span class='line'>3634</span> </span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3642
3642
  <span class='line'>3635</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3643
- <span class='line'>3636</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
3644
- <span class='line'>3637</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3645
- <span class='line'>3638</span> </span><span class="WHIT"> </span><span class="COMM">// console.log(niter);</span><span class="WHIT">
3646
- <span class='line'>3639</span>
3647
- <span class='line'>3640</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xm</span><span class="PUNC">;</span><span class="WHIT">
3648
- <span class='line'>3641</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3649
- <span class='line'>3642</span>
3650
- <span class='line'>3643</span> </span><span class="WHIT"> </span><span class="COMM">/**
3651
- <span class='line'>3644</span> *
3652
- <span class='line'>3645</span> * Find minimum of an univariate function f.
3653
- <span class='line'>3646</span> * &lt;p>
3654
- <span class='line'>3647</span> * Algorithm:
3655
- <span class='line'>3648</span> * G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
3656
- <span class='line'>3649</span> * computations. M., Mir, 1980, p.180 of the Russian edition
3657
- <span class='line'>3650</span> *
3658
- <span class='line'>3651</span> * @param {function} f Function, whose minimum is to be found
3659
- <span class='line'>3652</span> * @param {Array} x0 Start interval enclosing the minimum
3660
- <span class='line'>3653</span> * @param {Object} context Parent object in case f is method of it
3661
- <span class='line'>3654</span> * @returns {Number} the approximation of the minimum value position
3662
- <span class='line'>3655</span> * @memberof JXG.Math.Numerics
3663
- <span class='line'>3656</span> **/</span><span class="WHIT">
3664
- <span class='line'>3657</span> </span><span class="WHIT"> </span><span class="NAME">fminbr</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3665
- <span class='line'>3658</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT">
3666
- <span class='line'>3659</span> </span><span class="WHIT"> </span><span class="NAME">fx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">,</span><span class="WHIT">
3667
- <span class='line'>3660</span> </span><span class="WHIT"> </span><span class="NAME">range</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">,</span><span class="WHIT">
3668
- <span class='line'>3661</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">,</span><span class="WHIT">
3669
- <span class='line'>3662</span> </span><span class="WHIT"> </span><span class="COMM">// Golden section ratio</span><span class="WHIT">
3670
- <span class='line'>3663</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">3.0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NUMB">5.0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">,</span><span class="WHIT">
3671
- <span class='line'>3664</span> </span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT">
3672
- <span class='line'>3665</span> </span><span class="WHIT"> </span><span class="NAME">sqrteps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//Math.sqrt(Mat.eps),</span><span class="WHIT">
3673
- <span class='line'>3666</span> </span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxIterationsMinimize</span><span class="PUNC">,</span><span class="WHIT">
3674
- <span class='line'>3667</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3675
- <span class='line'>3668</span> </span><span class="WHIT"> </span><span class="COMM">// nfev = 0;</span><span class="WHIT">
3676
- <span class='line'>3669</span>
3677
- <span class='line'>3670</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">x0.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3678
- <span class='line'>3671</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="WHIT">
3679
- <span class='line'>3672</span> </span><span class="WHIT"> </span><span class="STRN">"JXG.Math.Numerics.fminbr: length of array x0 has to be at least two."</span><span class="WHIT">
3680
- <span class='line'>3673</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3681
- <span class='line'>3674</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3643
+ <span class='line'>3636</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3644
+ <span class='line'>3637</span> </span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3645
+ <span class='line'>3638</span>
3646
+ <span class='line'>3639</span> </span><span class="WHIT"> </span><span class="NAME">xm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3647
+ <span class='line'>3640</span> </span><span class="WHIT"> </span><span class="NAME">fm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">;</span><span class="WHIT">
3648
+ <span class='line'>3641</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">f2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3649
+ <span class='line'>3642</span> </span><span class="WHIT"> </span><span class="NAME">xm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">;</span><span class="WHIT">
3650
+ <span class='line'>3643</span> </span><span class="WHIT"> </span><span class="NAME">fm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">;</span><span class="WHIT">
3651
+ <span class='line'>3644</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3652
+ <span class='line'>3645</span> </span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">xm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dlt</span><span class="PUNC">;</span><span class="WHIT">
3653
+ <span class='line'>3646</span> </span><span class="WHIT"> </span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3654
+ <span class='line'>3647</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">fm</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3655
+ <span class='line'>3648</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
3656
+ <span class='line'>3649</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3657
+ <span class='line'>3650</span> </span><span class="WHIT"> </span><span class="COMM">// If inverse quadratic interpolation holds, use it</span><span class="WHIT">
3658
+ <span class='line'>3651</span> </span><span class="WHIT"> </span><span class="NAME">xi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3659
+ <span class='line'>3652</span> </span><span class="WHIT"> </span><span class="NAME">ph</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3660
+ <span class='line'>3653</span> </span><span class="WHIT"> </span><span class="NAME">fl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">xi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3661
+ <span class='line'>3654</span> </span><span class="WHIT"> </span><span class="NAME">fh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NAME">xi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3662
+ <span class='line'>3655</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fl</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">ph</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">ph</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fh</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3663
+ <span class='line'>3656</span> </span><span class="WHIT"> </span><span class="NAME">AL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3664
+ <span class='line'>3657</span> </span><span class="WHIT"> </span><span class="NAME">A</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3665
+ <span class='line'>3658</span> </span><span class="WHIT"> </span><span class="NAME">B</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3666
+ <span class='line'>3659</span> </span><span class="WHIT"> </span><span class="NAME">C</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3667
+ <span class='line'>3660</span> </span><span class="WHIT"> </span><span class="NAME">D</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">f2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3668
+ <span class='line'>3661</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">A</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">B</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">C</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">D</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">AL</span><span class="PUNC">;</span><span class="WHIT">
3669
+ <span class='line'>3662</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3670
+ <span class='line'>3663</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">rand</span><span class="PUNC">;</span><span class="WHIT">
3671
+ <span class='line'>3664</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3672
+ <span class='line'>3665</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust t away from the interval boundary</span><span class="WHIT">
3673
+ <span class='line'>3666</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3674
+ <span class='line'>3667</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">;</span><span class="WHIT">
3675
+ <span class='line'>3668</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3676
+ <span class='line'>3669</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3677
+ <span class='line'>3670</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="PUNC">;</span><span class="WHIT">
3678
+ <span class='line'>3671</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3679
+ <span class='line'>3672</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
3680
+ <span class='line'>3673</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3681
+ <span class='line'>3674</span> </span><span class="WHIT"> </span><span class="COMM">// console.log(niter);</span><span class="WHIT">
3682
3682
  <span class='line'>3675</span>
3683
- <span class='line'>3676</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3684
- <span class='line'>3677</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3685
- <span class='line'>3678</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3686
- <span class='line'>3679</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3687
- <span class='line'>3680</span>
3688
- <span class='line'>3681</span> </span><span class="WHIT"> </span><span class="COMM">// First step - always gold section</span><span class="WHIT">
3689
- <span class='line'>3682</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3690
- <span class='line'>3683</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
3691
- <span class='line'>3684</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
3692
- <span class='line'>3685</span> </span><span class="WHIT"> </span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">;</span><span class="WHIT">
3693
- <span class='line'>3686</span> </span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">;</span><span class="WHIT">
3694
- <span class='line'>3687</span>
3695
- <span class='line'>3688</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3696
- <span class='line'>3689</span> </span><span class="WHIT"> </span><span class="COMM">// Range over the interval in which we are looking for the minimum</span><span class="WHIT">
3697
- <span class='line'>3690</span> </span><span class="WHIT"> </span><span class="NAME">range</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3698
- <span class='line'>3691</span> </span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3699
- <span class='line'>3692</span>
3700
- <span class='line'>3693</span> </span><span class="WHIT"> </span><span class="COMM">// Actual tolerance</span><span class="WHIT">
3701
- <span class='line'>3694</span> </span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sqrteps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">3.0</span><span class="PUNC">;</span><span class="WHIT">
3702
- <span class='line'>3695</span>
3703
- <span class='line'>3696</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">range</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3704
- <span class='line'>3697</span> </span><span class="WHIT"> </span><span class="COMM">// Acceptable approx. is found</span><span class="WHIT">
3705
- <span class='line'>3698</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3706
- <span class='line'>3699</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3707
- <span class='line'>3700</span>
3708
- <span class='line'>3701</span> </span><span class="WHIT"> </span><span class="COMM">// Obtain the golden section step</span><span class="WHIT">
3709
- <span class='line'>3702</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3710
- <span class='line'>3703</span>
3711
- <span class='line'>3704</span> </span><span class="WHIT"> </span><span class="COMM">// Decide if the interpolation can be tried. If x and w are distinct interpolatiom may be tried</span><span class="WHIT">
3712
- <span class='line'>3705</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3713
- <span class='line'>3706</span> </span><span class="WHIT"> </span><span class="COMM">// Interpolation step is calculated as p/q;</span><span class="WHIT">
3714
- <span class='line'>3707</span> </span><span class="WHIT"> </span><span class="COMM">// division operation is delayed until last moment</span><span class="WHIT">
3715
- <span class='line'>3708</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3716
- <span class='line'>3709</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3717
- <span class='line'>3710</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3718
- <span class='line'>3711</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3719
- <span class='line'>3712</span>
3720
- <span class='line'>3713</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3721
- <span class='line'>3714</span> </span><span class="WHIT"> </span><span class="COMM">// q was calculated with the op-</span><span class="WHIT">
3722
- <span class='line'>3715</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// posite sign; make q positive</span><span class="WHIT">
3723
- <span class='line'>3716</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3724
- <span class='line'>3717</span> </span><span class="WHIT"> </span><span class="COMM">// and assign possible minus to</span><span class="WHIT">
3725
- <span class='line'>3718</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// p</span><span class="WHIT">
3726
- <span class='line'>3719</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3727
- <span class='line'>3720</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
3728
- <span class='line'>3721</span> </span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="COMM">// If x+p/q falls in [a,b]</span><span class="WHIT">
3729
- <span class='line'>3722</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="COMM">// not too close to a and</span><span class="WHIT">
3730
- <span class='line'>3723</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT">
3731
- <span class='line'>3724</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3732
- <span class='line'>3725</span> </span><span class="WHIT"> </span><span class="COMM">// b, and isn't too large</span><span class="WHIT">
3733
- <span class='line'>3726</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// it is accepted</span><span class="WHIT">
3734
- <span class='line'>3727</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3735
- <span class='line'>3728</span> </span><span class="WHIT"> </span><span class="COMM">// If p/q is too large then the</span><span class="WHIT">
3736
- <span class='line'>3729</span> </span><span class="WHIT"> </span><span class="COMM">// golden section procedure can</span><span class="WHIT">
3737
- <span class='line'>3730</span> </span><span class="WHIT"> </span><span class="COMM">// reduce [a,b] range to more</span><span class="WHIT">
3738
- <span class='line'>3731</span> </span><span class="WHIT"> </span><span class="COMM">// extent</span><span class="WHIT">
3739
- <span class='line'>3732</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3740
- <span class='line'>3733</span>
3741
- <span class='line'>3734</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust the step to be not less than tolerance</span><span class="WHIT">
3742
- <span class='line'>3735</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3743
- <span class='line'>3736</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3744
- <span class='line'>3737</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">;</span><span class="WHIT">
3745
- <span class='line'>3738</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3746
- <span class='line'>3739</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">tol_act</span><span class="PUNC">;</span><span class="WHIT">
3747
- <span class='line'>3740</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3748
- <span class='line'>3741</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3749
- <span class='line'>3742</span>
3750
- <span class='line'>3743</span> </span><span class="WHIT"> </span><span class="COMM">// Obtain the next approximation to min</span><span class="WHIT">
3751
- <span class='line'>3744</span> </span><span class="WHIT"> </span><span class="COMM">// and reduce the enveloping range</span><span class="WHIT">
3752
- <span class='line'>3745</span>
3753
- <span class='line'>3746</span> </span><span class="WHIT"> </span><span class="COMM">// Tentative point for the min</span><span class="WHIT">
3754
- <span class='line'>3747</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">;</span><span class="WHIT">
3755
- <span class='line'>3748</span> </span><span class="WHIT"> </span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3756
- <span class='line'>3749</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3757
- <span class='line'>3750</span>
3758
- <span class='line'>3751</span> </span><span class="WHIT"> </span><span class="COMM">// t is a better approximation</span><span class="WHIT">
3759
- <span class='line'>3752</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">fx</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3760
- <span class='line'>3753</span> </span><span class="WHIT"> </span><span class="COMM">// Reduce the range so that t would fall within it</span><span class="WHIT">
3761
- <span class='line'>3754</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3762
- <span class='line'>3755</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3763
- <span class='line'>3756</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3764
- <span class='line'>3757</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3765
- <span class='line'>3758</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3766
- <span class='line'>3759</span>
3767
- <span class='line'>3760</span> </span><span class="WHIT"> </span><span class="COMM">// Assign the best approx to x</span><span class="WHIT">
3768
- <span class='line'>3761</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
3769
- <span class='line'>3762</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3770
- <span class='line'>3763</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3771
- <span class='line'>3764</span>
3772
- <span class='line'>3765</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">;</span><span class="WHIT">
3773
- <span class='line'>3766</span> </span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fx</span><span class="PUNC">;</span><span class="WHIT">
3774
- <span class='line'>3767</span> </span><span class="WHIT"> </span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">;</span><span class="WHIT">
3775
- <span class='line'>3768</span> </span><span class="WHIT"> </span><span class="COMM">// x remains the better approx</span><span class="WHIT">
3776
- <span class='line'>3769</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3777
- <span class='line'>3770</span> </span><span class="WHIT"> </span><span class="COMM">// Reduce the range enclosing x</span><span class="WHIT">
3778
- <span class='line'>3771</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3779
- <span class='line'>3772</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3780
- <span class='line'>3773</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3781
- <span class='line'>3774</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3782
- <span class='line'>3775</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3783
- <span class='line'>3776</span>
3784
- <span class='line'>3777</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3785
- <span class='line'>3778</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
3786
- <span class='line'>3779</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3787
- <span class='line'>3780</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">;</span><span class="WHIT">
3788
- <span class='line'>3781</span> </span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">;</span><span class="WHIT">
3789
- <span class='line'>3782</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3790
- <span class='line'>3783</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3791
- <span class='line'>3784</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">;</span><span class="WHIT">
3792
- <span class='line'>3785</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3793
- <span class='line'>3786</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3794
- <span class='line'>3787</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3795
- <span class='line'>3788</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3796
- <span class='line'>3789</span>
3797
- <span class='line'>3790</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3798
- <span class='line'>3791</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3799
- <span class='line'>3792</span>
3800
- <span class='line'>3793</span> </span><span class="WHIT"> </span><span class="COMM">/**
3801
- <span class='line'>3794</span> * Implements the Ramer-Douglas-Peucker algorithm.
3802
- <span class='line'>3795</span> * It discards points which are not necessary from the polygonal line defined by the point array
3803
- <span class='line'>3796</span> * pts. The computation is done in screen coordinates.
3804
- <span class='line'>3797</span> * Average runtime is O(nlog(n)), worst case runtime is O(n^2), where n is the number of points.
3805
- <span class='line'>3798</span> * @param {Array} pts Array of {@link JXG.Coords}
3806
- <span class='line'>3799</span> * @param {Number} eps If the absolute value of a given number &lt;tt>x&lt;/tt> is smaller than &lt;tt>eps&lt;/tt> it is considered to be equal &lt;tt>0&lt;/tt>.
3807
- <span class='line'>3800</span> * @returns {Array} An array containing points which represent an apparently identical curve as the points of pts do, but contains fewer points.
3808
- <span class='line'>3801</span> * @memberof JXG.Math.Numerics
3809
- <span class='line'>3802</span> */</span><span class="WHIT">
3810
- <span class='line'>3803</span> </span><span class="WHIT"> </span><span class="NAME">RamerDouglasPeucker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3811
- <span class='line'>3804</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">allPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3812
- <span class='line'>3805</span> </span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3813
- <span class='line'>3806</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">,</span><span class="WHIT">
3814
- <span class='line'>3807</span> </span><span class="WHIT"> </span><span class="NAME">endless</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
3815
- <span class='line'>3808</span>
3816
- <span class='line'>3809</span> </span><span class="WHIT"> </span><span class="COMM">/**
3817
- <span class='line'>3810</span> * findSplit() is a subroutine of {@link JXG.Math.Numerics.RamerDouglasPeucker}.
3818
- <span class='line'>3811</span> * It searches for the point between index i and j which
3819
- <span class='line'>3812</span> * has the largest distance from the line between the points i and j.
3820
- <span class='line'>3813</span> * @param {Array} pts Array of {@link JXG.Coords}
3821
- <span class='line'>3814</span> * @param {Number} i Index of a point in pts
3822
- <span class='line'>3815</span> * @param {Number} j Index of a point in pts
3823
- <span class='line'>3816</span> * @ignore
3824
- <span class='line'>3817</span> * @private
3825
- <span class='line'>3818</span> */</span><span class="WHIT">
3826
- <span class='line'>3819</span> </span><span class="WHIT"> </span><span class="NAME">findSplit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3827
- <span class='line'>3820</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cj</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="PUNC">,</span><span class="WHIT">
3828
- <span class='line'>3821</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">,</span><span class="WHIT">
3829
- <span class='line'>3822</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT">
3830
- <span class='line'>3823</span> </span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">10000</span><span class="PUNC">,</span><span class="WHIT">
3831
- <span class='line'>3824</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3832
- <span class='line'>3825</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
3833
- <span class='line'>3826</span>
3834
- <span class='line'>3827</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3835
- <span class='line'>3828</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">-</span><span class="NUMB">1.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3836
- <span class='line'>3829</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3837
- <span class='line'>3830</span>
3838
- <span class='line'>3831</span> </span><span class="WHIT"> </span><span class="NAME">ci</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">;</span><span class="WHIT">
3839
- <span class='line'>3832</span> </span><span class="WHIT"> </span><span class="NAME">cj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">;</span><span class="WHIT">
3840
- <span class='line'>3833</span>
3841
- <span class='line'>3834</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3842
- <span class='line'>3835</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">NaN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3843
- <span class='line'>3836</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3844
- <span class='line'>3837</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3845
- <span class='line'>3838</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">NaN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3846
- <span class='line'>3839</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3847
- <span class='line'>3840</span>
3848
- <span class='line'>3841</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3849
- <span class='line'>3842</span> </span><span class="WHIT"> </span><span class="NAME">ck</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">;</span><span class="WHIT">
3850
- <span class='line'>3843</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3851
- <span class='line'>3844</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">NaN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3852
- <span class='line'>3845</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3853
- <span class='line'>3846</span>
3854
- <span class='line'>3847</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3855
- <span class='line'>3848</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3856
- <span class='line'>3849</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3857
- <span class='line'>3850</span> </span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3858
- <span class='line'>3851</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3859
- <span class='line'>3852</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3860
- <span class='line'>3853</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3861
- <span class='line'>3854</span> </span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3862
- <span class='line'>3855</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3863
- <span class='line'>3856</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3864
- <span class='line'>3857</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3865
- <span class='line'>3858</span> </span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3866
- <span class='line'>3859</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3867
- <span class='line'>3860</span>
3868
- <span class='line'>3861</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3869
- <span class='line'>3862</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">;</span><span class="WHIT">
3870
- <span class='line'>3863</span>
3871
- <span class='line'>3864</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3872
- <span class='line'>3865</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3873
- <span class='line'>3866</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3874
- <span class='line'>3867</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
3875
- <span class='line'>3868</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3683
+ <span class='line'>3676</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xm</span><span class="PUNC">;</span><span class="WHIT">
3684
+ <span class='line'>3677</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3685
+ <span class='line'>3678</span>
3686
+ <span class='line'>3679</span> </span><span class="WHIT"> </span><span class="COMM">/**
3687
+ <span class='line'>3680</span> *
3688
+ <span class='line'>3681</span> * Find minimum of an univariate function f.
3689
+ <span class='line'>3682</span> * &lt;p>
3690
+ <span class='line'>3683</span> * Algorithm:
3691
+ <span class='line'>3684</span> * G.Forsythe, M.Malcolm, C.Moler, Computer methods for mathematical
3692
+ <span class='line'>3685</span> * computations. M., Mir, 1980, p.180 of the Russian edition
3693
+ <span class='line'>3686</span> *
3694
+ <span class='line'>3687</span> * @param {function} f Function, whose minimum is to be found
3695
+ <span class='line'>3688</span> * @param {Array} x0 Start interval enclosing the minimum
3696
+ <span class='line'>3689</span> * @param {Object} context Parent object in case f is method of it
3697
+ <span class='line'>3690</span> * @returns {Number} the approximation of the minimum value position
3698
+ <span class='line'>3691</span> * @memberof JXG.Math.Numerics
3699
+ <span class='line'>3692</span> **/</span><span class="WHIT">
3700
+ <span class='line'>3693</span> </span><span class="WHIT"> </span><span class="NAME">fminbr</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3701
+ <span class='line'>3694</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT">
3702
+ <span class='line'>3695</span> </span><span class="WHIT"> </span><span class="NAME">fx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">,</span><span class="WHIT">
3703
+ <span class='line'>3696</span> </span><span class="WHIT"> </span><span class="NAME">range</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">,</span><span class="WHIT">
3704
+ <span class='line'>3697</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">,</span><span class="WHIT">
3705
+ <span class='line'>3698</span> </span><span class="WHIT"> </span><span class="COMM">// Golden section ratio</span><span class="WHIT">
3706
+ <span class='line'>3699</span> </span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">3.0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NUMB">5.0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">,</span><span class="WHIT">
3707
+ <span class='line'>3700</span> </span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT">
3708
+ <span class='line'>3701</span> </span><span class="WHIT"> </span><span class="NAME">sqrteps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">//Math.sqrt(Mat.eps),</span><span class="WHIT">
3709
+ <span class='line'>3702</span> </span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxIterationsMinimize</span><span class="PUNC">,</span><span class="WHIT">
3710
+ <span class='line'>3703</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3711
+ <span class='line'>3704</span> </span><span class="WHIT"> </span><span class="COMM">// nfev = 0;</span><span class="WHIT">
3712
+ <span class='line'>3705</span>
3713
+ <span class='line'>3706</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">Type.isArray</span><span class="PUNC">(</span><span class="NAME">x0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">x0.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3714
+ <span class='line'>3707</span> </span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="WHIT">
3715
+ <span class='line'>3708</span> </span><span class="WHIT"> </span><span class="STRN">"JXG.Math.Numerics.fminbr: length of array x0 has to be at least two."</span><span class="WHIT">
3716
+ <span class='line'>3709</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3717
+ <span class='line'>3710</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3718
+ <span class='line'>3711</span>
3719
+ <span class='line'>3712</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3720
+ <span class='line'>3713</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3721
+ <span class='line'>3714</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3722
+ <span class='line'>3715</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3723
+ <span class='line'>3716</span>
3724
+ <span class='line'>3717</span> </span><span class="WHIT"> </span><span class="COMM">// First step - always gold section</span><span class="WHIT">
3725
+ <span class='line'>3718</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3726
+ <span class='line'>3719</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
3727
+ <span class='line'>3720</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
3728
+ <span class='line'>3721</span> </span><span class="WHIT"> </span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">;</span><span class="WHIT">
3729
+ <span class='line'>3722</span> </span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">;</span><span class="WHIT">
3730
+ <span class='line'>3723</span>
3731
+ <span class='line'>3724</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">maxiter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3732
+ <span class='line'>3725</span> </span><span class="WHIT"> </span><span class="COMM">// Range over the interval in which we are looking for the minimum</span><span class="WHIT">
3733
+ <span class='line'>3726</span> </span><span class="WHIT"> </span><span class="NAME">range</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3734
+ <span class='line'>3727</span> </span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">;</span><span class="WHIT">
3735
+ <span class='line'>3728</span>
3736
+ <span class='line'>3729</span> </span><span class="WHIT"> </span><span class="COMM">// Actual tolerance</span><span class="WHIT">
3737
+ <span class='line'>3730</span> </span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sqrteps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tol</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">3.0</span><span class="PUNC">;</span><span class="WHIT">
3738
+ <span class='line'>3731</span>
3739
+ <span class='line'>3732</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">range</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">2.0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3740
+ <span class='line'>3733</span> </span><span class="WHIT"> </span><span class="COMM">// Acceptable approx. is found</span><span class="WHIT">
3741
+ <span class='line'>3734</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3742
+ <span class='line'>3735</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3743
+ <span class='line'>3736</span>
3744
+ <span class='line'>3737</span> </span><span class="WHIT"> </span><span class="COMM">// Obtain the golden section step</span><span class="WHIT">
3745
+ <span class='line'>3738</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">middle_range</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3746
+ <span class='line'>3739</span>
3747
+ <span class='line'>3740</span> </span><span class="WHIT"> </span><span class="COMM">// Decide if the interpolation can be tried. If x and w are distinct interpolatiom may be tried</span><span class="WHIT">
3748
+ <span class='line'>3741</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3749
+ <span class='line'>3742</span> </span><span class="WHIT"> </span><span class="COMM">// Interpolation step is calculated as p/q;</span><span class="WHIT">
3750
+ <span class='line'>3743</span> </span><span class="WHIT"> </span><span class="COMM">// division operation is delayed until last moment</span><span class="WHIT">
3751
+ <span class='line'>3744</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3752
+ <span class='line'>3745</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3753
+ <span class='line'>3746</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3754
+ <span class='line'>3747</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3755
+ <span class='line'>3748</span>
3756
+ <span class='line'>3749</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3757
+ <span class='line'>3750</span> </span><span class="WHIT"> </span><span class="COMM">// q was calculated with the op-</span><span class="WHIT">
3758
+ <span class='line'>3751</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// posite sign; make q positive</span><span class="WHIT">
3759
+ <span class='line'>3752</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3760
+ <span class='line'>3753</span> </span><span class="WHIT"> </span><span class="COMM">// and assign possible minus to</span><span class="WHIT">
3761
+ <span class='line'>3754</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// p</span><span class="WHIT">
3762
+ <span class='line'>3755</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3763
+ <span class='line'>3756</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
3764
+ <span class='line'>3757</span> </span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="COMM">// If x+p/q falls in [a,b]</span><span class="WHIT">
3765
+ <span class='line'>3758</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="COMM">// not too close to a and</span><span class="WHIT">
3766
+ <span class='line'>3759</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">q</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT">
3767
+ <span class='line'>3760</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3768
+ <span class='line'>3761</span> </span><span class="WHIT"> </span><span class="COMM">// b, and isn't too large</span><span class="WHIT">
3769
+ <span class='line'>3762</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// it is accepted</span><span class="WHIT">
3770
+ <span class='line'>3763</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3771
+ <span class='line'>3764</span> </span><span class="WHIT"> </span><span class="COMM">// If p/q is too large then the</span><span class="WHIT">
3772
+ <span class='line'>3765</span> </span><span class="WHIT"> </span><span class="COMM">// golden section procedure can</span><span class="WHIT">
3773
+ <span class='line'>3766</span> </span><span class="WHIT"> </span><span class="COMM">// reduce [a,b] range to more</span><span class="WHIT">
3774
+ <span class='line'>3767</span> </span><span class="WHIT"> </span><span class="COMM">// extent</span><span class="WHIT">
3775
+ <span class='line'>3768</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3776
+ <span class='line'>3769</span>
3777
+ <span class='line'>3770</span> </span><span class="WHIT"> </span><span class="COMM">// Adjust the step to be not less than tolerance</span><span class="WHIT">
3778
+ <span class='line'>3771</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3779
+ <span class='line'>3772</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3780
+ <span class='line'>3773</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tol_act</span><span class="PUNC">;</span><span class="WHIT">
3781
+ <span class='line'>3774</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3782
+ <span class='line'>3775</span> </span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">tol_act</span><span class="PUNC">;</span><span class="WHIT">
3783
+ <span class='line'>3776</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3784
+ <span class='line'>3777</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3785
+ <span class='line'>3778</span>
3786
+ <span class='line'>3779</span> </span><span class="WHIT"> </span><span class="COMM">// Obtain the next approximation to min</span><span class="WHIT">
3787
+ <span class='line'>3780</span> </span><span class="WHIT"> </span><span class="COMM">// and reduce the enveloping range</span><span class="WHIT">
3788
+ <span class='line'>3781</span>
3789
+ <span class='line'>3782</span> </span><span class="WHIT"> </span><span class="COMM">// Tentative point for the min</span><span class="WHIT">
3790
+ <span class='line'>3783</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">new_step</span><span class="PUNC">;</span><span class="WHIT">
3791
+ <span class='line'>3784</span> </span><span class="WHIT"> </span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.call</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3792
+ <span class='line'>3785</span> </span><span class="WHIT"> </span><span class="COMM">// nfev += 1;</span><span class="WHIT">
3793
+ <span class='line'>3786</span>
3794
+ <span class='line'>3787</span> </span><span class="WHIT"> </span><span class="COMM">// t is a better approximation</span><span class="WHIT">
3795
+ <span class='line'>3788</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">fx</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3796
+ <span class='line'>3789</span> </span><span class="WHIT"> </span><span class="COMM">// Reduce the range so that t would fall within it</span><span class="WHIT">
3797
+ <span class='line'>3790</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3798
+ <span class='line'>3791</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3799
+ <span class='line'>3792</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3800
+ <span class='line'>3793</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3801
+ <span class='line'>3794</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3802
+ <span class='line'>3795</span>
3803
+ <span class='line'>3796</span> </span><span class="WHIT"> </span><span class="COMM">// Assign the best approx to x</span><span class="WHIT">
3804
+ <span class='line'>3797</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
3805
+ <span class='line'>3798</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3806
+ <span class='line'>3799</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3807
+ <span class='line'>3800</span>
3808
+ <span class='line'>3801</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">;</span><span class="WHIT">
3809
+ <span class='line'>3802</span> </span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fx</span><span class="PUNC">;</span><span class="WHIT">
3810
+ <span class='line'>3803</span> </span><span class="WHIT"> </span><span class="NAME">fx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">;</span><span class="WHIT">
3811
+ <span class='line'>3804</span> </span><span class="WHIT"> </span><span class="COMM">// x remains the better approx</span><span class="WHIT">
3812
+ <span class='line'>3805</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3813
+ <span class='line'>3806</span> </span><span class="WHIT"> </span><span class="COMM">// Reduce the range enclosing x</span><span class="WHIT">
3814
+ <span class='line'>3807</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3815
+ <span class='line'>3808</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3816
+ <span class='line'>3809</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3817
+ <span class='line'>3810</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3818
+ <span class='line'>3811</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3819
+ <span class='line'>3812</span>
3820
+ <span class='line'>3813</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3821
+ <span class='line'>3814</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">;</span><span class="WHIT">
3822
+ <span class='line'>3815</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3823
+ <span class='line'>3816</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fw</span><span class="PUNC">;</span><span class="WHIT">
3824
+ <span class='line'>3817</span> </span><span class="WHIT"> </span><span class="NAME">fw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">;</span><span class="WHIT">
3825
+ <span class='line'>3818</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ft</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3826
+ <span class='line'>3819</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3827
+ <span class='line'>3820</span> </span><span class="WHIT"> </span><span class="NAME">fv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ft</span><span class="PUNC">;</span><span class="WHIT">
3828
+ <span class='line'>3821</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3829
+ <span class='line'>3822</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3830
+ <span class='line'>3823</span> </span><span class="WHIT"> </span><span class="NAME">niter</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3831
+ <span class='line'>3824</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3832
+ <span class='line'>3825</span>
3833
+ <span class='line'>3826</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3834
+ <span class='line'>3827</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3835
+ <span class='line'>3828</span>
3836
+ <span class='line'>3829</span> </span><span class="WHIT"> </span><span class="COMM">/**
3837
+ <span class='line'>3830</span> * Implements the Ramer-Douglas-Peucker algorithm.
3838
+ <span class='line'>3831</span> * It discards points which are not necessary from the polygonal line defined by the point array
3839
+ <span class='line'>3832</span> * pts. The computation is done in screen coordinates.
3840
+ <span class='line'>3833</span> * Average runtime is O(nlog(n)), worst case runtime is O(n^2), where n is the number of points.
3841
+ <span class='line'>3834</span> * @param {Array} pts Array of {@link JXG.Coords}
3842
+ <span class='line'>3835</span> * @param {Number} eps If the absolute value of a given number &lt;tt>x&lt;/tt> is smaller than &lt;tt>eps&lt;/tt> it is considered to be equal &lt;tt>0&lt;/tt>.
3843
+ <span class='line'>3836</span> * @returns {Array} An array containing points which represent an apparently identical curve as the points of pts do, but contains fewer points.
3844
+ <span class='line'>3837</span> * @memberof JXG.Math.Numerics
3845
+ <span class='line'>3838</span> */</span><span class="WHIT">
3846
+ <span class='line'>3839</span> </span><span class="WHIT"> </span><span class="NAME">RamerDouglasPeucker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3847
+ <span class='line'>3840</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">allPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3848
+ <span class='line'>3841</span> </span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3849
+ <span class='line'>3842</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">,</span><span class="WHIT">
3850
+ <span class='line'>3843</span> </span><span class="WHIT"> </span><span class="NAME">endless</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
3851
+ <span class='line'>3844</span>
3852
+ <span class='line'>3845</span> </span><span class="WHIT"> </span><span class="COMM">/**
3853
+ <span class='line'>3846</span> * findSplit() is a subroutine of {@link JXG.Math.Numerics.RamerDouglasPeucker}.
3854
+ <span class='line'>3847</span> * It searches for the point between index i and j which
3855
+ <span class='line'>3848</span> * has the largest distance from the line between the points i and j.
3856
+ <span class='line'>3849</span> * @param {Array} pts Array of {@link JXG.Coords}
3857
+ <span class='line'>3850</span> * @param {Number} i Index of a point in pts
3858
+ <span class='line'>3851</span> * @param {Number} j Index of a point in pts
3859
+ <span class='line'>3852</span> * @ignore
3860
+ <span class='line'>3853</span> * @private
3861
+ <span class='line'>3854</span> */</span><span class="WHIT">
3862
+ <span class='line'>3855</span> </span><span class="WHIT"> </span><span class="NAME">findSplit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3863
+ <span class='line'>3856</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cj</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="PUNC">,</span><span class="WHIT">
3864
+ <span class='line'>3857</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">,</span><span class="WHIT">
3865
+ <span class='line'>3858</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT">
3866
+ <span class='line'>3859</span> </span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">10000</span><span class="PUNC">,</span><span class="WHIT">
3867
+ <span class='line'>3860</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3868
+ <span class='line'>3861</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
3869
+ <span class='line'>3862</span>
3870
+ <span class='line'>3863</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3871
+ <span class='line'>3864</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">-</span><span class="NUMB">1.0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3872
+ <span class='line'>3865</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3873
+ <span class='line'>3866</span>
3874
+ <span class='line'>3867</span> </span><span class="WHIT"> </span><span class="NAME">ci</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">;</span><span class="WHIT">
3875
+ <span class='line'>3868</span> </span><span class="WHIT"> </span><span class="NAME">cj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">;</span><span class="WHIT">
3876
3876
  <span class='line'>3869</span>
3877
- <span class='line'>3870</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3878
- <span class='line'>3871</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3879
- <span class='line'>3872</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3880
- <span class='line'>3873</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3881
- <span class='line'>3874</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3882
- <span class='line'>3875</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3883
- <span class='line'>3876</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3884
- <span class='line'>3877</span>
3885
- <span class='line'>3878</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3886
- <span class='line'>3879</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="WHIT">
3887
- <span class='line'>3880</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT">
3877
+ <span class='line'>3870</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3878
+ <span class='line'>3871</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">NaN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3879
+ <span class='line'>3872</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3880
+ <span class='line'>3873</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3881
+ <span class='line'>3874</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">NaN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3882
+ <span class='line'>3875</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3883
+ <span class='line'>3876</span>
3884
+ <span class='line'>3877</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3885
+ <span class='line'>3878</span> </span><span class="WHIT"> </span><span class="NAME">ck</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">;</span><span class="WHIT">
3886
+ <span class='line'>3879</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3887
+ <span class='line'>3880</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">NaN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3888
3888
  <span class='line'>3881</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3889
- <span class='line'>3882</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3890
- <span class='line'>3883</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NAME">dist</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3891
- <span class='line'>3884</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3892
- <span class='line'>3885</span> </span><span class="WHIT"> </span><span class="COMM">/**
3893
- <span class='line'>3886</span> * RDP() is a private subroutine of {@link JXG.Math.Numerics.RamerDouglasPeucker}.
3894
- <span class='line'>3887</span> * It runs recursively through the point set and searches the
3895
- <span class='line'>3888</span> * point which has the largest distance from the line between the first point and
3896
- <span class='line'>3889</span> * the last point. If the distance from the line is greater than eps, this point is
3897
- <span class='line'>3890</span> * included in our new point set otherwise it is discarded.
3898
- <span class='line'>3891</span> * If it is taken, we recursively apply the subroutine to the point set before
3899
- <span class='line'>3892</span> * and after the chosen point.
3900
- <span class='line'>3893</span> * @param {Array} pts Array of {@link JXG.Coords}
3901
- <span class='line'>3894</span> * @param {Number} i Index of an element of pts
3902
- <span class='line'>3895</span> * @param {Number} j Index of an element of pts
3903
- <span class='line'>3896</span> * @param {Number} eps If the absolute value of a given number &lt;tt>x&lt;/tt> is smaller than &lt;tt>eps&lt;/tt> it is considered to be equal &lt;tt>0&lt;/tt>.
3904
- <span class='line'>3897</span> * @param {Array} newPts Array of {@link JXG.Coords}
3905
- <span class='line'>3898</span> * @ignore
3906
- <span class='line'>3899</span> * @private
3907
- <span class='line'>3900</span> */</span><span class="WHIT">
3908
- <span class='line'>3901</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3909
- <span class='line'>3902</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">findSplit</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3910
- <span class='line'>3903</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3911
- <span class='line'>3904</span>
3912
- <span class='line'>3905</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">result</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3913
- <span class='line'>3906</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3914
- <span class='line'>3907</span> </span><span class="WHIT"> </span><span class="NAME">newPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3915
- <span class='line'>3908</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3916
- <span class='line'>3909</span> </span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT">
3917
- <span class='line'>3910</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3918
- <span class='line'>3911</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3919
- <span class='line'>3912</span> </span><span class="WHIT"> </span><span class="NAME">newPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3920
- <span class='line'>3913</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3921
- <span class='line'>3914</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3922
- <span class='line'>3915</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3923
- <span class='line'>3916</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3924
- <span class='line'>3917</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3925
- <span class='line'>3918</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3926
- <span class='line'>3919</span> </span><span class="WHIT"> </span><span class="NAME">newPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3927
- <span class='line'>3920</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3928
- <span class='line'>3921</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3929
- <span class='line'>3922</span>
3930
- <span class='line'>3923</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts.length</span><span class="PUNC">;</span><span class="WHIT">
3931
- <span class='line'>3924</span>
3932
- <span class='line'>3925</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3933
- <span class='line'>3926</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">endless</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3934
- <span class='line'>3927</span> </span><span class="WHIT"> </span><span class="COMM">// Search for the next point without NaN coordinates</span><span class="WHIT">
3935
- <span class='line'>3928</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3936
- <span class='line'>3929</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3937
- <span class='line'>3930</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3938
- <span class='line'>3931</span> </span><span class="WHIT"> </span><span class="COMM">// Search for the next position of a NaN point</span><span class="WHIT">
3939
- <span class='line'>3932</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3940
- <span class='line'>3933</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3941
- <span class='line'>3934</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3942
- <span class='line'>3935</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3943
- <span class='line'>3936</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
3944
- <span class='line'>3937</span>
3945
- <span class='line'>3938</span> </span><span class="WHIT"> </span><span class="COMM">// Only proceed if something is left</span><span class="WHIT">
3946
- <span class='line'>3939</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3947
- <span class='line'>3940</span> </span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3948
- <span class='line'>3941</span> </span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3949
- <span class='line'>3942</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3950
- <span class='line'>3943</span> </span><span class="WHIT"> </span><span class="NAME">allPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">allPts.concat</span><span class="PUNC">(</span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3951
- <span class='line'>3944</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3952
- <span class='line'>3945</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3953
- <span class='line'>3946</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
3954
- <span class='line'>3947</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3955
- <span class='line'>3948</span> </span><span class="WHIT"> </span><span class="COMM">// Push the NaN point</span><span class="WHIT">
3956
- <span class='line'>3949</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3957
- <span class='line'>3950</span> </span><span class="WHIT"> </span><span class="NAME">allPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3958
- <span class='line'>3951</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3959
- <span class='line'>3952</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3960
- <span class='line'>3953</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3961
- <span class='line'>3954</span>
3962
- <span class='line'>3955</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">allPts</span><span class="PUNC">;</span><span class="WHIT">
3963
- <span class='line'>3956</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3964
- <span class='line'>3957</span>
3965
- <span class='line'>3958</span> </span><span class="WHIT"> </span><span class="COMM">/**
3966
- <span class='line'>3959</span> * Old name for the implementation of the Ramer-Douglas-Peucker algorithm.
3967
- <span class='line'>3960</span> * @deprecated Use {@link JXG.Math.Numerics.RamerDouglasPeucker}
3968
- <span class='line'>3961</span> * @memberof JXG.Math.Numerics
3969
- <span class='line'>3962</span> */</span><span class="WHIT">
3970
- <span class='line'>3963</span> </span><span class="WHIT"> </span><span class="NAME">RamerDouglasPeuker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3971
- <span class='line'>3964</span> </span><span class="WHIT"> </span><span class="NAME">JXG.deprecated</span><span class="PUNC">(</span><span class="STRN">"Numerics.RamerDouglasPeuker()"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Numerics.RamerDouglasPeucker()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3972
- <span class='line'>3965</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.RamerDouglasPeucker</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3973
- <span class='line'>3966</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3974
- <span class='line'>3967</span>
3975
- <span class='line'>3968</span> </span><span class="WHIT"> </span><span class="COMM">/**
3976
- <span class='line'>3969</span> * Implements the Visvalingam-Whyatt algorithm.
3977
- <span class='line'>3970</span> * See M. Visvalingam, J. D. Whyatt:
3978
- <span class='line'>3971</span> * "Line generalisation by repeated elimination of the smallest area", C.I.S.R.G Discussion paper 10, July 1992
3979
- <span class='line'>3972</span> *
3980
- <span class='line'>3973</span> * The algorithm discards points which are not necessary from the polygonal line defined by the point array
3981
- <span class='line'>3974</span> * pts (consisting of type JXG.Coords).
3982
- <span class='line'>3975</span> * @param {Array} pts Array of {@link JXG.Coords}
3983
- <span class='line'>3976</span> * @param {Number} numPoints Number of remaining intermediate points. The first and the last point of the original points will
3984
- <span class='line'>3977</span> * be taken in any case.
3985
- <span class='line'>3978</span> * @returns {Array} An array containing points which approximates the curve defined by pts.
3986
- <span class='line'>3979</span> * @memberof JXG.Math.Numerics
3987
- <span class='line'>3980</span> *
3988
- <span class='line'>3981</span> * @example
3989
- <span class='line'>3982</span> * var i, p = [];
3990
- <span class='line'>3983</span> * for (i = 0; i &lt; 5; ++i) {
3991
- <span class='line'>3984</span> * p.push(board.create('point', [Math.random() * 12 - 6, Math.random() * 12 - 6]));
3992
- <span class='line'>3985</span> * }
3993
- <span class='line'>3986</span> *
3994
- <span class='line'>3987</span> * // Plot a cardinal spline curve
3995
- <span class='line'>3988</span> * var splineArr = JXG.Math.Numerics.CardinalSpline(p, 0.5);
3996
- <span class='line'>3989</span> * var cu1 = board.create('curve', splineArr, {strokeColor: 'green'});
3997
- <span class='line'>3990</span> *
3998
- <span class='line'>3991</span> * var c = board.create('curve', [[0],[0]], {strokeWidth: 2, strokeColor: 'black'});
3999
- <span class='line'>3992</span> * c.updateDataArray = function() {
4000
- <span class='line'>3993</span> * var i, len, points;
4001
- <span class='line'>3994</span> *
4002
- <span class='line'>3995</span> * // Reduce number of intermediate points with Visvakingam-Whyatt to 6
4003
- <span class='line'>3996</span> * points = JXG.Math.Numerics.Visvalingam(cu1.points, 6);
4004
- <span class='line'>3997</span> * // Plot the remaining points
4005
- <span class='line'>3998</span> * len = points.length;
4006
- <span class='line'>3999</span> * this.dataX = [];
4007
- <span class='line'>4000</span> * this.dataY = [];
4008
- <span class='line'>4001</span> * for (i = 0; i &lt; len; i++) {
4009
- <span class='line'>4002</span> * this.dataX.push(points[i].usrCoords[1]);
4010
- <span class='line'>4003</span> * this.dataY.push(points[i].usrCoords[2]);
4011
- <span class='line'>4004</span> * }
4012
- <span class='line'>4005</span> * };
4013
- <span class='line'>4006</span> * board.update();
4014
- <span class='line'>4007</span> *
4015
- <span class='line'>4008</span> * &lt;/pre>&lt;div id="JXGce0cc55c-b592-11e6-8270-104a7d3be7eb" class="jxgbox" style="width: 300px; height: 300px;">&lt;/div>
4016
- <span class='line'>4009</span> * &lt;script type="text/javascript">
4017
- <span class='line'>4010</span> * (function() {
4018
- <span class='line'>4011</span> * var board = JXG.JSXGraph.initBoard('JXGce0cc55c-b592-11e6-8270-104a7d3be7eb',
4019
- <span class='line'>4012</span> * {boundingbox: [-8, 8, 8,-8], axis: true, showcopyright: false, shownavigation: false});
4020
- <span class='line'>4013</span> *
4021
- <span class='line'>4014</span> * var i, p = [];
4022
- <span class='line'>4015</span> * for (i = 0; i &lt; 5; ++i) {
4023
- <span class='line'>4016</span> * p.push(board.create('point', [Math.random() * 12 - 6, Math.random() * 12 - 6]));
4024
- <span class='line'>4017</span> * }
4025
- <span class='line'>4018</span> *
4026
- <span class='line'>4019</span> * // Plot a cardinal spline curve
4027
- <span class='line'>4020</span> * var splineArr = JXG.Math.Numerics.CardinalSpline(p, 0.5);
4028
- <span class='line'>4021</span> * var cu1 = board.create('curve', splineArr, {strokeColor: 'green'});
3889
+ <span class='line'>3882</span>
3890
+ <span class='line'>3883</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3891
+ <span class='line'>3884</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3892
+ <span class='line'>3885</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3893
+ <span class='line'>3886</span> </span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cj</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ci</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3894
+ <span class='line'>3887</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3895
+ <span class='line'>3888</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3896
+ <span class='line'>3889</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3897
+ <span class='line'>3890</span> </span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3898
+ <span class='line'>3891</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="PUNC">;</span><span class="WHIT">
3899
+ <span class='line'>3892</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3900
+ <span class='line'>3893</span> </span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3901
+ <span class='line'>3894</span> </span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3902
+ <span class='line'>3895</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3903
+ <span class='line'>3896</span>
3904
+ <span class='line'>3897</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3905
+ <span class='line'>3898</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">;</span><span class="WHIT">
3906
+ <span class='line'>3899</span>
3907
+ <span class='line'>3900</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3908
+ <span class='line'>3901</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3909
+ <span class='line'>3902</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3910
+ <span class='line'>3903</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
3911
+ <span class='line'>3904</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3912
+ <span class='line'>3905</span>
3913
+ <span class='line'>3906</span> </span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x1</span><span class="PUNC">;</span><span class="WHIT">
3914
+ <span class='line'>3907</span> </span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y1</span><span class="PUNC">;</span><span class="WHIT">
3915
+ <span class='line'>3908</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3916
+ <span class='line'>3909</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3917
+ <span class='line'>3910</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3918
+ <span class='line'>3911</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">x0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">y0</span><span class="PUNC">;</span><span class="WHIT">
3919
+ <span class='line'>3912</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3920
+ <span class='line'>3913</span>
3921
+ <span class='line'>3914</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3922
+ <span class='line'>3915</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="WHIT">
3923
+ <span class='line'>3916</span> </span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT">
3924
+ <span class='line'>3917</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3925
+ <span class='line'>3918</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3926
+ <span class='line'>3919</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NAME">dist</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3927
+ <span class='line'>3920</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3928
+ <span class='line'>3921</span> </span><span class="WHIT"> </span><span class="COMM">/**
3929
+ <span class='line'>3922</span> * RDP() is a private subroutine of {@link JXG.Math.Numerics.RamerDouglasPeucker}.
3930
+ <span class='line'>3923</span> * It runs recursively through the point set and searches the
3931
+ <span class='line'>3924</span> * point which has the largest distance from the line between the first point and
3932
+ <span class='line'>3925</span> * the last point. If the distance from the line is greater than eps, this point is
3933
+ <span class='line'>3926</span> * included in our new point set otherwise it is discarded.
3934
+ <span class='line'>3927</span> * If it is taken, we recursively apply the subroutine to the point set before
3935
+ <span class='line'>3928</span> * and after the chosen point.
3936
+ <span class='line'>3929</span> * @param {Array} pts Array of {@link JXG.Coords}
3937
+ <span class='line'>3930</span> * @param {Number} i Index of an element of pts
3938
+ <span class='line'>3931</span> * @param {Number} j Index of an element of pts
3939
+ <span class='line'>3932</span> * @param {Number} eps If the absolute value of a given number &lt;tt>x&lt;/tt> is smaller than &lt;tt>eps&lt;/tt> it is considered to be equal &lt;tt>0&lt;/tt>.
3940
+ <span class='line'>3933</span> * @param {Array} newPts Array of {@link JXG.Coords}
3941
+ <span class='line'>3934</span> * @ignore
3942
+ <span class='line'>3935</span> * @private
3943
+ <span class='line'>3936</span> */</span><span class="WHIT">
3944
+ <span class='line'>3937</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3945
+ <span class='line'>3938</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">findSplit</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3946
+ <span class='line'>3939</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3947
+ <span class='line'>3940</span>
3948
+ <span class='line'>3941</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">result</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3949
+ <span class='line'>3942</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3950
+ <span class='line'>3943</span> </span><span class="WHIT"> </span><span class="NAME">newPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3951
+ <span class='line'>3944</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3952
+ <span class='line'>3945</span> </span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT">
3953
+ <span class='line'>3946</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3954
+ <span class='line'>3947</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3955
+ <span class='line'>3948</span> </span><span class="WHIT"> </span><span class="NAME">newPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3956
+ <span class='line'>3949</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3957
+ <span class='line'>3950</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3958
+ <span class='line'>3951</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3959
+ <span class='line'>3952</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3960
+ <span class='line'>3953</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3961
+ <span class='line'>3954</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3962
+ <span class='line'>3955</span> </span><span class="WHIT"> </span><span class="NAME">newPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3963
+ <span class='line'>3956</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3964
+ <span class='line'>3957</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3965
+ <span class='line'>3958</span>
3966
+ <span class='line'>3959</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts.length</span><span class="PUNC">;</span><span class="WHIT">
3967
+ <span class='line'>3960</span>
3968
+ <span class='line'>3961</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3969
+ <span class='line'>3962</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">endless</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3970
+ <span class='line'>3963</span> </span><span class="WHIT"> </span><span class="COMM">// Search for the next point without NaN coordinates</span><span class="WHIT">
3971
+ <span class='line'>3964</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3972
+ <span class='line'>3965</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3973
+ <span class='line'>3966</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3974
+ <span class='line'>3967</span> </span><span class="WHIT"> </span><span class="COMM">// Search for the next position of a NaN point</span><span class="WHIT">
3975
+ <span class='line'>3968</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3976
+ <span class='line'>3969</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">scrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3977
+ <span class='line'>3970</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3978
+ <span class='line'>3971</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3979
+ <span class='line'>3972</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
3980
+ <span class='line'>3973</span>
3981
+ <span class='line'>3974</span> </span><span class="WHIT"> </span><span class="COMM">// Only proceed if something is left</span><span class="WHIT">
3982
+ <span class='line'>3975</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3983
+ <span class='line'>3976</span> </span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3984
+ <span class='line'>3977</span> </span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3985
+ <span class='line'>3978</span> </span><span class="WHIT"> </span><span class="NAME">RDP</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3986
+ <span class='line'>3979</span> </span><span class="WHIT"> </span><span class="NAME">allPts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">allPts.concat</span><span class="PUNC">(</span><span class="NAME">newPts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3987
+ <span class='line'>3980</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3988
+ <span class='line'>3981</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3989
+ <span class='line'>3982</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
3990
+ <span class='line'>3983</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3991
+ <span class='line'>3984</span> </span><span class="WHIT"> </span><span class="COMM">// Push the NaN point</span><span class="WHIT">
3992
+ <span class='line'>3985</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3993
+ <span class='line'>3986</span> </span><span class="WHIT"> </span><span class="NAME">allPts.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3994
+ <span class='line'>3987</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3995
+ <span class='line'>3988</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
3996
+ <span class='line'>3989</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3997
+ <span class='line'>3990</span>
3998
+ <span class='line'>3991</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">allPts</span><span class="PUNC">;</span><span class="WHIT">
3999
+ <span class='line'>3992</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
4000
+ <span class='line'>3993</span>
4001
+ <span class='line'>3994</span> </span><span class="WHIT"> </span><span class="COMM">/**
4002
+ <span class='line'>3995</span> * Old name for the implementation of the Ramer-Douglas-Peucker algorithm.
4003
+ <span class='line'>3996</span> * @deprecated Use {@link JXG.Math.Numerics.RamerDouglasPeucker}
4004
+ <span class='line'>3997</span> * @memberof JXG.Math.Numerics
4005
+ <span class='line'>3998</span> */</span><span class="WHIT">
4006
+ <span class='line'>3999</span> </span><span class="WHIT"> </span><span class="NAME">RamerDouglasPeuker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4007
+ <span class='line'>4000</span> </span><span class="WHIT"> </span><span class="NAME">JXG.deprecated</span><span class="PUNC">(</span><span class="STRN">"Numerics.RamerDouglasPeuker()"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Numerics.RamerDouglasPeucker()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4008
+ <span class='line'>4001</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.RamerDouglasPeucker</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4009
+ <span class='line'>4002</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
4010
+ <span class='line'>4003</span>
4011
+ <span class='line'>4004</span> </span><span class="WHIT"> </span><span class="COMM">/**
4012
+ <span class='line'>4005</span> * Implements the Visvalingam-Whyatt algorithm.
4013
+ <span class='line'>4006</span> * See M. Visvalingam, J. D. Whyatt:
4014
+ <span class='line'>4007</span> * "Line generalisation by repeated elimination of the smallest area", C.I.S.R.G Discussion paper 10, July 1992
4015
+ <span class='line'>4008</span> *
4016
+ <span class='line'>4009</span> * The algorithm discards points which are not necessary from the polygonal line defined by the point array
4017
+ <span class='line'>4010</span> * pts (consisting of type JXG.Coords).
4018
+ <span class='line'>4011</span> * @param {Array} pts Array of {@link JXG.Coords}
4019
+ <span class='line'>4012</span> * @param {Number} numPoints Number of remaining intermediate points. The first and the last point of the original points will
4020
+ <span class='line'>4013</span> * be taken in any case.
4021
+ <span class='line'>4014</span> * @returns {Array} An array containing points which approximates the curve defined by pts.
4022
+ <span class='line'>4015</span> * @memberof JXG.Math.Numerics
4023
+ <span class='line'>4016</span> *
4024
+ <span class='line'>4017</span> * @example
4025
+ <span class='line'>4018</span> * var i, p = [];
4026
+ <span class='line'>4019</span> * for (i = 0; i &lt; 5; ++i) {
4027
+ <span class='line'>4020</span> * p.push(board.create('point', [Math.random() * 12 - 6, Math.random() * 12 - 6]));
4028
+ <span class='line'>4021</span> * }
4029
4029
  <span class='line'>4022</span> *
4030
- <span class='line'>4023</span> * var c = board.create('curve', [[0],[0]], {strokeWidth: 2, strokeColor: 'black'});
4031
- <span class='line'>4024</span> * c.updateDataArray = function() {
4032
- <span class='line'>4025</span> * var i, len, points;
4030
+ <span class='line'>4023</span> * // Plot a cardinal spline curve
4031
+ <span class='line'>4024</span> * var splineArr = JXG.Math.Numerics.CardinalSpline(p, 0.5);
4032
+ <span class='line'>4025</span> * var cu1 = board.create('curve', splineArr, {strokeColor: 'green'});
4033
4033
  <span class='line'>4026</span> *
4034
- <span class='line'>4027</span> * // Reduce number of intermediate points with Visvakingam-Whyatt to 6
4035
- <span class='line'>4028</span> * points = JXG.Math.Numerics.Visvalingam(cu1.points, 6);
4036
- <span class='line'>4029</span> * // Plot the remaining points
4037
- <span class='line'>4030</span> * len = points.length;
4038
- <span class='line'>4031</span> * this.dataX = [];
4039
- <span class='line'>4032</span> * this.dataY = [];
4040
- <span class='line'>4033</span> * for (i = 0; i &lt; len; i++) {
4041
- <span class='line'>4034</span> * this.dataX.push(points[i].usrCoords[1]);
4042
- <span class='line'>4035</span> * this.dataY.push(points[i].usrCoords[2]);
4043
- <span class='line'>4036</span> * }
4044
- <span class='line'>4037</span> * };
4045
- <span class='line'>4038</span> * board.update();
4046
- <span class='line'>4039</span> *
4047
- <span class='line'>4040</span> * })();
4048
- <span class='line'>4041</span> *
4049
- <span class='line'>4042</span> * &lt;/script>&lt;pre>
4034
+ <span class='line'>4027</span> * var c = board.create('curve', [[0],[0]], {strokeWidth: 2, strokeColor: 'black'});
4035
+ <span class='line'>4028</span> * c.updateDataArray = function() {
4036
+ <span class='line'>4029</span> * var i, len, points;
4037
+ <span class='line'>4030</span> *
4038
+ <span class='line'>4031</span> * // Reduce number of intermediate points with Visvakingam-Whyatt to 6
4039
+ <span class='line'>4032</span> * points = JXG.Math.Numerics.Visvalingam(cu1.points, 6);
4040
+ <span class='line'>4033</span> * // Plot the remaining points
4041
+ <span class='line'>4034</span> * len = points.length;
4042
+ <span class='line'>4035</span> * this.dataX = [];
4043
+ <span class='line'>4036</span> * this.dataY = [];
4044
+ <span class='line'>4037</span> * for (i = 0; i &lt; len; i++) {
4045
+ <span class='line'>4038</span> * this.dataX.push(points[i].usrCoords[1]);
4046
+ <span class='line'>4039</span> * this.dataY.push(points[i].usrCoords[2]);
4047
+ <span class='line'>4040</span> * }
4048
+ <span class='line'>4041</span> * };
4049
+ <span class='line'>4042</span> * board.update();
4050
4050
  <span class='line'>4043</span> *
4051
- <span class='line'>4044</span> */</span><span class="WHIT">
4052
- <span class='line'>4045</span> </span><span class="WHIT"> </span><span class="NAME">Visvalingam</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">numPoints</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4053
- <span class='line'>4046</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
4054
- <span class='line'>4047</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">,</span><span class="WHIT">
4055
- <span class='line'>4048</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="PUNC">,</span><span class="WHIT">
4056
- <span class='line'>4049</span> </span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="PUNC">,</span><span class="WHIT">
4057
- <span class='line'>4050</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
4058
- <span class='line'>4051</span> </span><span class="WHIT"> </span><span class="NAME">heap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
4059
- <span class='line'>4052</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
4060
- <span class='line'>4053</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">,</span><span class="WHIT">
4061
- <span class='line'>4054</span> </span><span class="WHIT"> </span><span class="NAME">rt</span><span class="PUNC">,</span><span class="WHIT">
4062
- <span class='line'>4055</span> </span><span class="WHIT"> </span><span class="NAME">lft2</span><span class="PUNC">,</span><span class="WHIT">
4063
- <span class='line'>4056</span> </span><span class="WHIT"> </span><span class="NAME">rt2</span><span class="PUNC">,</span><span class="WHIT">
4064
- <span class='line'>4057</span> </span><span class="WHIT"> </span><span class="NAME">obj</span><span class="PUNC">;</span><span class="WHIT">
4065
- <span class='line'>4058</span>
4066
- <span class='line'>4059</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts.length</span><span class="PUNC">;</span><span class="WHIT">
4067
- <span class='line'>4060</span>
4068
- <span class='line'>4061</span> </span><span class="WHIT"> </span><span class="COMM">// At least one intermediate point is needed</span><span class="WHIT">
4069
- <span class='line'>4062</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4070
- <span class='line'>4063</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">;</span><span class="WHIT">
4071
- <span class='line'>4064</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4072
- <span class='line'>4065</span>
4073
- <span class='line'>4066</span> </span><span class="WHIT"> </span><span class="COMM">// Fill the linked list</span><span class="WHIT">
4074
- <span class='line'>4067</span> </span><span class="WHIT"> </span><span class="COMM">// Add first point to the linked list</span><span class="WHIT">
4075
- <span class='line'>4068</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4076
- <span class='line'>4069</span> </span><span class="WHIT"> </span><span class="NAME">used</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
4077
- <span class='line'>4070</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT">
4078
- <span class='line'>4071</span> </span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT">
4079
- <span class='line'>4072</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4080
- <span class='line'>4073</span>
4081
- <span class='line'>4074</span> </span><span class="WHIT"> </span><span class="COMM">// Add all intermediate points to the linked list,</span><span class="WHIT">
4082
- <span class='line'>4075</span> </span><span class="WHIT"> </span><span class="COMM">// whose triangle area is nonzero.</span><span class="WHIT">
4083
- <span class='line'>4076</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
4084
- <span class='line'>4077</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4085
- <span class='line'>4078</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="WHIT">
4086
- <span class='line'>4079</span> </span><span class="WHIT"> </span><span class="NAME">JXG.Math.Numerics.det</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT">
4087
- <span class='line'>4080</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4088
- <span class='line'>4081</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4089
- <span class='line'>4082</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="WHIT">
4090
- <span class='line'>4083</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
4091
- <span class='line'>4084</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4092
- <span class='line'>4085</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">vol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4093
- <span class='line'>4086</span> </span><span class="WHIT"> </span><span class="NAME">obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4094
- <span class='line'>4087</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="PUNC">,</span><span class="WHIT">
4095
- <span class='line'>4088</span> </span><span class="WHIT"> </span><span class="NAME">idx</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT">
4096
- <span class='line'>4089</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4097
- <span class='line'>4090</span> </span><span class="WHIT"> </span><span class="NAME">heap.push</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4098
- <span class='line'>4091</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4099
- <span class='line'>4092</span> </span><span class="WHIT"> </span><span class="NAME">used</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
4100
- <span class='line'>4093</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">,</span><span class="WHIT">
4101
- <span class='line'>4094</span> </span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="WHIT">
4102
- <span class='line'>4095</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4103
- <span class='line'>4096</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
4104
- <span class='line'>4097</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
4105
- <span class='line'>4098</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4106
- <span class='line'>4099</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4107
- <span class='line'>4100</span>
4108
- <span class='line'>4101</span> </span><span class="WHIT"> </span><span class="COMM">// Add last point to the linked list</span><span class="WHIT">
4109
- <span class='line'>4102</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4110
- <span class='line'>4103</span> </span><span class="WHIT"> </span><span class="NAME">used</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
4111
- <span class='line'>4104</span> </span><span class="WHIT"> </span><span class="NAME">rt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT">
4112
- <span class='line'>4105</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">,</span><span class="WHIT">
4113
- <span class='line'>4106</span> </span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT">
4114
- <span class='line'>4107</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4115
- <span class='line'>4108</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
4051
+ <span class='line'>4044</span> * &lt;/pre>&lt;div id="JXGce0cc55c-b592-11e6-8270-104a7d3be7eb" class="jxgbox" style="width: 300px; height: 300px;">&lt;/div>
4052
+ <span class='line'>4045</span> * &lt;script type="text/javascript">
4053
+ <span class='line'>4046</span> * (function() {
4054
+ <span class='line'>4047</span> * var board = JXG.JSXGraph.initBoard('JXGce0cc55c-b592-11e6-8270-104a7d3be7eb',
4055
+ <span class='line'>4048</span> * {boundingbox: [-8, 8, 8,-8], axis: true, showcopyright: false, shownavigation: false});
4056
+ <span class='line'>4049</span> *
4057
+ <span class='line'>4050</span> * var i, p = [];
4058
+ <span class='line'>4051</span> * for (i = 0; i &lt; 5; ++i) {
4059
+ <span class='line'>4052</span> * p.push(board.create('point', [Math.random() * 12 - 6, Math.random() * 12 - 6]));
4060
+ <span class='line'>4053</span> * }
4061
+ <span class='line'>4054</span> *
4062
+ <span class='line'>4055</span> * // Plot a cardinal spline curve
4063
+ <span class='line'>4056</span> * var splineArr = JXG.Math.Numerics.CardinalSpline(p, 0.5);
4064
+ <span class='line'>4057</span> * var cu1 = board.create('curve', splineArr, {strokeColor: 'green'});
4065
+ <span class='line'>4058</span> *
4066
+ <span class='line'>4059</span> * var c = board.create('curve', [[0],[0]], {strokeWidth: 2, strokeColor: 'black'});
4067
+ <span class='line'>4060</span> * c.updateDataArray = function() {
4068
+ <span class='line'>4061</span> * var i, len, points;
4069
+ <span class='line'>4062</span> *
4070
+ <span class='line'>4063</span> * // Reduce number of intermediate points with Visvakingam-Whyatt to 6
4071
+ <span class='line'>4064</span> * points = JXG.Math.Numerics.Visvalingam(cu1.points, 6);
4072
+ <span class='line'>4065</span> * // Plot the remaining points
4073
+ <span class='line'>4066</span> * len = points.length;
4074
+ <span class='line'>4067</span> * this.dataX = [];
4075
+ <span class='line'>4068</span> * this.dataY = [];
4076
+ <span class='line'>4069</span> * for (i = 0; i &lt; len; i++) {
4077
+ <span class='line'>4070</span> * this.dataX.push(points[i].usrCoords[1]);
4078
+ <span class='line'>4071</span> * this.dataY.push(points[i].usrCoords[2]);
4079
+ <span class='line'>4072</span> * }
4080
+ <span class='line'>4073</span> * };
4081
+ <span class='line'>4074</span> * board.update();
4082
+ <span class='line'>4075</span> *
4083
+ <span class='line'>4076</span> * })();
4084
+ <span class='line'>4077</span> *
4085
+ <span class='line'>4078</span> * &lt;/script>&lt;pre>
4086
+ <span class='line'>4079</span> *
4087
+ <span class='line'>4080</span> */</span><span class="WHIT">
4088
+ <span class='line'>4081</span> </span><span class="WHIT"> </span><span class="NAME">Visvalingam</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">numPoints</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4089
+ <span class='line'>4082</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
4090
+ <span class='line'>4083</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">,</span><span class="WHIT">
4091
+ <span class='line'>4084</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="PUNC">,</span><span class="WHIT">
4092
+ <span class='line'>4085</span> </span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="PUNC">,</span><span class="WHIT">
4093
+ <span class='line'>4086</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
4094
+ <span class='line'>4087</span> </span><span class="WHIT"> </span><span class="NAME">heap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
4095
+ <span class='line'>4088</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
4096
+ <span class='line'>4089</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">,</span><span class="WHIT">
4097
+ <span class='line'>4090</span> </span><span class="WHIT"> </span><span class="NAME">rt</span><span class="PUNC">,</span><span class="WHIT">
4098
+ <span class='line'>4091</span> </span><span class="WHIT"> </span><span class="NAME">lft2</span><span class="PUNC">,</span><span class="WHIT">
4099
+ <span class='line'>4092</span> </span><span class="WHIT"> </span><span class="NAME">rt2</span><span class="PUNC">,</span><span class="WHIT">
4100
+ <span class='line'>4093</span> </span><span class="WHIT"> </span><span class="NAME">obj</span><span class="PUNC">;</span><span class="WHIT">
4101
+ <span class='line'>4094</span>
4102
+ <span class='line'>4095</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pts.length</span><span class="PUNC">;</span><span class="WHIT">
4103
+ <span class='line'>4096</span>
4104
+ <span class='line'>4097</span> </span><span class="WHIT"> </span><span class="COMM">// At least one intermediate point is needed</span><span class="WHIT">
4105
+ <span class='line'>4098</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4106
+ <span class='line'>4099</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">;</span><span class="WHIT">
4107
+ <span class='line'>4100</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4108
+ <span class='line'>4101</span>
4109
+ <span class='line'>4102</span> </span><span class="WHIT"> </span><span class="COMM">// Fill the linked list</span><span class="WHIT">
4110
+ <span class='line'>4103</span> </span><span class="WHIT"> </span><span class="COMM">// Add first point to the linked list</span><span class="WHIT">
4111
+ <span class='line'>4104</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4112
+ <span class='line'>4105</span> </span><span class="WHIT"> </span><span class="NAME">used</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
4113
+ <span class='line'>4106</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT">
4114
+ <span class='line'>4107</span> </span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT">
4115
+ <span class='line'>4108</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4116
4116
  <span class='line'>4109</span>
4117
- <span class='line'>4110</span> </span><span class="WHIT"> </span><span class="COMM">// Remove points until only numPoints intermediate points remain</span><span class="WHIT">
4118
- <span class='line'>4111</span> </span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">;</span><span class="WHIT">
4119
- <span class='line'>4112</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">heap.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">numPoints</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4120
- <span class='line'>4113</span> </span><span class="WHIT"> </span><span class="COMM">// Sort the heap with the updated volume values</span><span class="WHIT">
4121
- <span class='line'>4114</span> </span><span class="WHIT"> </span><span class="NAME">heap.sort</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4122
- <span class='line'>4115</span> </span><span class="WHIT"> </span><span class="COMM">// descending sort</span><span class="WHIT">
4123
- <span class='line'>4116</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.v</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.v</span><span class="PUNC">;</span><span class="WHIT">
4124
- <span class='line'>4117</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4125
- <span class='line'>4118</span>
4126
- <span class='line'>4119</span> </span><span class="WHIT"> </span><span class="COMM">// Remove the point with the smallest triangle</span><span class="WHIT">
4127
- <span class='line'>4120</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">heap.pop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">idx</span><span class="PUNC">;</span><span class="WHIT">
4128
- <span class='line'>4121</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">used</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
4129
- <span class='line'>4122</span> </span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">node.v</span><span class="PUNC">;</span><span class="WHIT">
4130
- <span class='line'>4123</span>
4131
- <span class='line'>4124</span> </span><span class="WHIT"> </span><span class="COMM">// Update the pointers of the linked list</span><span class="WHIT">
4132
- <span class='line'>4125</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">lft</span><span class="PUNC">;</span><span class="WHIT">
4133
- <span class='line'>4126</span> </span><span class="WHIT"> </span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4134
- <span class='line'>4127</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4135
- <span class='line'>4128</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">;</span><span class="WHIT">
4136
- <span class='line'>4129</span>
4137
- <span class='line'>4130</span> </span><span class="WHIT"> </span><span class="COMM">// Update the values for the volumes in the linked list</span><span class="WHIT">
4138
- <span class='line'>4131</span> </span><span class="WHIT"> </span><span class="NAME">lft2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">lft</span><span class="PUNC">;</span><span class="WHIT">
4139
- <span class='line'>4132</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lft2</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4140
- <span class='line'>4133</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="WHIT">
4141
- <span class='line'>4134</span> </span><span class="WHIT"> </span><span class="NAME">JXG.Math.Numerics.det</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT">
4142
- <span class='line'>4135</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">lft2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4143
- <span class='line'>4136</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4144
- <span class='line'>4137</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="WHIT">
4145
- <span class='line'>4138</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
4146
- <span class='line'>4139</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4147
- <span class='line'>4140</span>
4148
- <span class='line'>4141</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">node.v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="PUNC">;</span><span class="WHIT">
4149
- <span class='line'>4142</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4150
- <span class='line'>4143</span> </span><span class="WHIT"> </span><span class="NAME">rt2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4151
- <span class='line'>4144</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rt2</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4152
- <span class='line'>4145</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="WHIT">
4153
- <span class='line'>4146</span> </span><span class="WHIT"> </span><span class="NAME">JXG.Math.Numerics.det</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT">
4154
- <span class='line'>4147</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4155
- <span class='line'>4148</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4156
- <span class='line'>4149</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">rt2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="WHIT">
4157
- <span class='line'>4150</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
4158
- <span class='line'>4151</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4159
- <span class='line'>4152</span>
4160
- <span class='line'>4153</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">node.v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="PUNC">;</span><span class="WHIT">
4161
- <span class='line'>4154</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4162
- <span class='line'>4155</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4163
- <span class='line'>4156</span>
4164
- <span class='line'>4157</span> </span><span class="WHIT"> </span><span class="COMM">// Return an array with the remaining points</span><span class="WHIT">
4165
- <span class='line'>4158</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
4166
- <span class='line'>4159</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
4167
- <span class='line'>4160</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4168
- <span class='line'>4161</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4169
- <span class='line'>4162</span> </span><span class="WHIT"> </span><span class="NAME">points.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4170
- <span class='line'>4163</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4171
- <span class='line'>4164</span>
4172
- <span class='line'>4165</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">;</span><span class="WHIT">
4173
- <span class='line'>4166</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4174
- <span class='line'>4167</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4175
- <span class='line'>4168</span>
4176
- <span class='line'>4169</span> </span><span class="NAME">export</span><span class="WHIT"> </span><span class="KEYW">default</span><span class="WHIT"> </span><span class="NAME">Mat.Numerics</span><span class="PUNC">;</span><span class="WHIT">
4177
- <span class='line'>4170</span> </span></pre></body></html>
4117
+ <span class='line'>4110</span> </span><span class="WHIT"> </span><span class="COMM">// Add all intermediate points to the linked list,</span><span class="WHIT">
4118
+ <span class='line'>4111</span> </span><span class="WHIT"> </span><span class="COMM">// whose triangle area is nonzero.</span><span class="WHIT">
4119
+ <span class='line'>4112</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
4120
+ <span class='line'>4113</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4121
+ <span class='line'>4114</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="WHIT">
4122
+ <span class='line'>4115</span> </span><span class="WHIT"> </span><span class="NAME">JXG.Math.Numerics.det</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT">
4123
+ <span class='line'>4116</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4124
+ <span class='line'>4117</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4125
+ <span class='line'>4118</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="WHIT">
4126
+ <span class='line'>4119</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
4127
+ <span class='line'>4120</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4128
+ <span class='line'>4121</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">vol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4129
+ <span class='line'>4122</span> </span><span class="WHIT"> </span><span class="NAME">obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4130
+ <span class='line'>4123</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="PUNC">,</span><span class="WHIT">
4131
+ <span class='line'>4124</span> </span><span class="WHIT"> </span><span class="NAME">idx</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT">
4132
+ <span class='line'>4125</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4133
+ <span class='line'>4126</span> </span><span class="WHIT"> </span><span class="NAME">heap.push</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4134
+ <span class='line'>4127</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4135
+ <span class='line'>4128</span> </span><span class="WHIT"> </span><span class="NAME">used</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
4136
+ <span class='line'>4129</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">,</span><span class="WHIT">
4137
+ <span class='line'>4130</span> </span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">obj</span><span class="WHIT">
4138
+ <span class='line'>4131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4139
+ <span class='line'>4132</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
4140
+ <span class='line'>4133</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
4141
+ <span class='line'>4134</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4142
+ <span class='line'>4135</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4143
+ <span class='line'>4136</span>
4144
+ <span class='line'>4137</span> </span><span class="WHIT"> </span><span class="COMM">// Add last point to the linked list</span><span class="WHIT">
4145
+ <span class='line'>4138</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4146
+ <span class='line'>4139</span> </span><span class="WHIT"> </span><span class="NAME">used</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
4147
+ <span class='line'>4140</span> </span><span class="WHIT"> </span><span class="NAME">rt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT">
4148
+ <span class='line'>4141</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">,</span><span class="WHIT">
4149
+ <span class='line'>4142</span> </span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT">
4150
+ <span class='line'>4143</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4151
+ <span class='line'>4144</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
4152
+ <span class='line'>4145</span>
4153
+ <span class='line'>4146</span> </span><span class="WHIT"> </span><span class="COMM">// Remove points until only numPoints intermediate points remain</span><span class="WHIT">
4154
+ <span class='line'>4147</span> </span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">;</span><span class="WHIT">
4155
+ <span class='line'>4148</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">heap.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">numPoints</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4156
+ <span class='line'>4149</span> </span><span class="WHIT"> </span><span class="COMM">// Sort the heap with the updated volume values</span><span class="WHIT">
4157
+ <span class='line'>4150</span> </span><span class="WHIT"> </span><span class="NAME">heap.sort</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4158
+ <span class='line'>4151</span> </span><span class="WHIT"> </span><span class="COMM">// descending sort</span><span class="WHIT">
4159
+ <span class='line'>4152</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">b.v</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">a.v</span><span class="PUNC">;</span><span class="WHIT">
4160
+ <span class='line'>4153</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4161
+ <span class='line'>4154</span>
4162
+ <span class='line'>4155</span> </span><span class="WHIT"> </span><span class="COMM">// Remove the point with the smallest triangle</span><span class="WHIT">
4163
+ <span class='line'>4156</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">heap.pop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">idx</span><span class="PUNC">;</span><span class="WHIT">
4164
+ <span class='line'>4157</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">used</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
4165
+ <span class='line'>4158</span> </span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">node.v</span><span class="PUNC">;</span><span class="WHIT">
4166
+ <span class='line'>4159</span>
4167
+ <span class='line'>4160</span> </span><span class="WHIT"> </span><span class="COMM">// Update the pointers of the linked list</span><span class="WHIT">
4168
+ <span class='line'>4161</span> </span><span class="WHIT"> </span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">lft</span><span class="PUNC">;</span><span class="WHIT">
4169
+ <span class='line'>4162</span> </span><span class="WHIT"> </span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4170
+ <span class='line'>4163</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4171
+ <span class='line'>4164</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">lft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lft</span><span class="PUNC">;</span><span class="WHIT">
4172
+ <span class='line'>4165</span>
4173
+ <span class='line'>4166</span> </span><span class="WHIT"> </span><span class="COMM">// Update the values for the volumes in the linked list</span><span class="WHIT">
4174
+ <span class='line'>4167</span> </span><span class="WHIT"> </span><span class="NAME">lft2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">lft</span><span class="PUNC">;</span><span class="WHIT">
4175
+ <span class='line'>4168</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lft2</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4176
+ <span class='line'>4169</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="WHIT">
4177
+ <span class='line'>4170</span> </span><span class="WHIT"> </span><span class="NAME">JXG.Math.Numerics.det</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT">
4178
+ <span class='line'>4171</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">lft2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4179
+ <span class='line'>4172</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4180
+ <span class='line'>4173</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="WHIT">
4181
+ <span class='line'>4174</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
4182
+ <span class='line'>4175</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4183
+ <span class='line'>4176</span>
4184
+ <span class='line'>4177</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">node.v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="PUNC">;</span><span class="WHIT">
4185
+ <span class='line'>4178</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4186
+ <span class='line'>4179</span> </span><span class="WHIT"> </span><span class="NAME">rt2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4187
+ <span class='line'>4180</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rt2</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4188
+ <span class='line'>4181</span> </span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="WHIT">
4189
+ <span class='line'>4182</span> </span><span class="WHIT"> </span><span class="NAME">JXG.Math.Numerics.det</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT">
4190
+ <span class='line'>4183</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">lft</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4191
+ <span class='line'>4184</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="PUNC">,</span><span class="WHIT">
4192
+ <span class='line'>4185</span> </span><span class="WHIT"> </span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">rt2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">usrCoords</span><span class="WHIT">
4193
+ <span class='line'>4186</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
4194
+ <span class='line'>4187</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4195
+ <span class='line'>4188</span>
4196
+ <span class='line'>4189</span> </span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">rt</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">node.v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">vol</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">lastVol</span><span class="PUNC">;</span><span class="WHIT">
4197
+ <span class='line'>4190</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4198
+ <span class='line'>4191</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4199
+ <span class='line'>4192</span>
4200
+ <span class='line'>4193</span> </span><span class="WHIT"> </span><span class="COMM">// Return an array with the remaining points</span><span class="WHIT">
4201
+ <span class='line'>4194</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
4202
+ <span class='line'>4195</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
4203
+ <span class='line'>4196</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
4204
+ <span class='line'>4197</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="PUNC">;</span><span class="WHIT">
4205
+ <span class='line'>4198</span> </span><span class="WHIT"> </span><span class="NAME">points.push</span><span class="PUNC">(</span><span class="NAME">pts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4206
+ <span class='line'>4199</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">linkedList</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rt</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
4207
+ <span class='line'>4200</span>
4208
+ <span class='line'>4201</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">;</span><span class="WHIT">
4209
+ <span class='line'>4202</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
4210
+ <span class='line'>4203</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
4211
+ <span class='line'>4204</span>
4212
+ <span class='line'>4205</span> </span><span class="NAME">export</span><span class="WHIT"> </span><span class="KEYW">default</span><span class="WHIT"> </span><span class="NAME">Mat.Numerics</span><span class="PUNC">;</span><span class="WHIT">
4213
+ <span class='line'>4206</span> </span></pre></body></html>