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.
- package/CHANGELOG.md +25 -2
- package/distrib/docs/files.html +2 -2
- package/distrib/docs/index.html +2 -2
- package/distrib/docs/static/jsxgraph.css +24 -22
- package/distrib/docs/static/jsxgraphcore.js +2 -2
- package/distrib/docs/symbols/Angle.html +2 -2
- package/distrib/docs/symbols/Arc.html +2 -2
- package/distrib/docs/symbols/Arrow.html +2 -2
- package/distrib/docs/symbols/Arrowparallel.html +2 -2
- package/distrib/docs/symbols/Axis.html +2 -2
- package/distrib/docs/symbols/Bisector.html +2 -2
- package/distrib/docs/symbols/Bisectorlines.html +2 -2
- package/distrib/docs/symbols/Boxplot.html +2 -2
- package/distrib/docs/symbols/Button.html +4 -4
- package/distrib/docs/symbols/Cardinalspline.html +2 -2
- package/distrib/docs/symbols/Chart.html +2 -2
- package/distrib/docs/symbols/Checkbox.html +17 -17
- package/distrib/docs/symbols/Circle.html +2 -2
- package/distrib/docs/symbols/Circumcenter.html +4 -4
- package/distrib/docs/symbols/Circumcircle.html +2 -2
- package/distrib/docs/symbols/CircumcircleArc.html +2 -2
- package/distrib/docs/symbols/CircumcircleSector.html +2 -2
- package/distrib/docs/symbols/Comb.html +5 -5
- package/distrib/docs/symbols/Conic.html +2 -2
- package/distrib/docs/symbols/Constants.html +2 -2
- package/distrib/docs/symbols/Curve.html +2 -2
- package/distrib/docs/symbols/Curve3D.html +2 -2
- package/distrib/docs/symbols/CurveDifference.html +2 -2
- package/distrib/docs/symbols/CurveIntersection.html +2 -2
- package/distrib/docs/symbols/CurveUnion.html +2 -2
- package/distrib/docs/symbols/Derivative.html +2 -2
- package/distrib/docs/symbols/Ellipse.html +2 -2
- package/distrib/docs/symbols/ForeignObject.html +4 -4
- package/distrib/docs/symbols/Functiongraph.html +2 -2
- package/distrib/docs/symbols/Functiongraph3D.html +2 -2
- package/distrib/docs/symbols/Glider.html +4 -4
- package/distrib/docs/symbols/Grid.html +2 -2
- package/distrib/docs/symbols/Group.html +2 -2
- package/distrib/docs/symbols/Hatch.html +2 -2
- package/distrib/docs/symbols/Hyperbola.html +2 -2
- package/distrib/docs/symbols/Image.html +4 -4
- package/distrib/docs/symbols/Incenter.html +4 -4
- package/distrib/docs/symbols/Incircle.html +2 -2
- package/distrib/docs/symbols/Inequality.html +2 -2
- package/distrib/docs/symbols/Input.html +4 -4
- package/distrib/docs/symbols/Integral.html +2 -2
- package/distrib/docs/symbols/Intersection.html +4 -4
- package/distrib/docs/symbols/JXG.AbstractRenderer.html +2 -2
- package/distrib/docs/symbols/JXG.Board.html +144 -11
- package/distrib/docs/symbols/JXG.Board.infobox.html +2 -2
- package/distrib/docs/symbols/JXG.C.html +2 -2
- package/distrib/docs/symbols/JXG.CA.html +2 -2
- package/distrib/docs/symbols/JXG.CanvasRenderer.html +2 -2
- package/distrib/docs/symbols/JXG.Chart.html +2 -2
- package/distrib/docs/symbols/JXG.Circle.html +2 -2
- package/distrib/docs/symbols/JXG.Complex.html +2 -2
- package/distrib/docs/symbols/JXG.Composition.html +2 -2
- package/distrib/docs/symbols/JXG.Coords.html +2 -2
- package/distrib/docs/symbols/JXG.CoordsElement.html +54 -2
- package/distrib/docs/symbols/JXG.Curve.html +2 -2
- package/distrib/docs/symbols/JXG.Curve3D.html +2 -2
- package/distrib/docs/symbols/JXG.Dump.html +2 -2
- package/distrib/docs/symbols/JXG.EventEmitter.html +2 -2
- package/distrib/docs/symbols/JXG.ForeignObject.html +3 -3
- package/distrib/docs/symbols/JXG.GeometryElement.html +2 -2
- package/distrib/docs/symbols/JXG.GeometryElement3D.html +2 -2
- package/distrib/docs/symbols/JXG.GeonextParser.html +2 -2
- package/distrib/docs/symbols/JXG.Group.html +2 -2
- package/distrib/docs/symbols/JXG.Image.html +3 -3
- package/distrib/docs/symbols/JXG.JSXGraph.html +2 -2
- package/distrib/docs/symbols/JXG.JessieCode.html +2 -2
- package/distrib/docs/symbols/JXG.Legend.html +2 -2
- package/distrib/docs/symbols/JXG.Line.html +2 -2
- package/distrib/docs/symbols/JXG.Line3D.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Clip.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Extrapolate.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Geometry.html +2 -2
- package/distrib/docs/symbols/JXG.Math.IntervalArithmetic.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Metapost.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Nlp.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Numerics.html +23 -15
- package/distrib/docs/symbols/JXG.Math.Plot.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Poly.Monomial.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Poly.Polynomial.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Poly.Ring.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Poly.html +2 -2
- package/distrib/docs/symbols/JXG.Math.ProbFuncs.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Quadtree.html +122 -7
- package/distrib/docs/symbols/JXG.Math.Statistics.html +2 -2
- package/distrib/docs/symbols/JXG.Math.Symbolic.html +2 -2
- package/distrib/docs/symbols/JXG.Math.html +45 -2
- package/distrib/docs/symbols/JXG.NoRenderer.html +2 -2
- package/distrib/docs/symbols/JXG.Options.html +2 -2
- package/distrib/docs/symbols/JXG.Plane3D.html +2 -2
- package/distrib/docs/symbols/JXG.Point.html +3 -3
- package/distrib/docs/symbols/JXG.Point3D.html +2 -2
- package/distrib/docs/symbols/JXG.Polygon.html +2 -2
- package/distrib/docs/symbols/JXG.SVGRenderer.html +2 -2
- package/distrib/docs/symbols/JXG.Server.html +2 -2
- package/distrib/docs/symbols/JXG.Server.modules.html +2 -2
- package/distrib/docs/symbols/JXG.Surface3D.html +2 -2
- package/distrib/docs/symbols/JXG.Text.html +8 -8
- package/distrib/docs/symbols/JXG.Ticks.html +2 -2
- package/distrib/docs/symbols/JXG.Transformation.html +2 -2
- package/distrib/docs/symbols/JXG.Turtle.html +2 -2
- package/distrib/docs/symbols/JXG.Util.Base64.html +2 -2
- package/distrib/docs/symbols/JXG.Util.UTF8.html +2 -2
- package/distrib/docs/symbols/JXG.Util.Unzip.html +2 -2
- package/distrib/docs/symbols/JXG.Util.html +2 -2
- package/distrib/docs/symbols/JXG.VMLRenderer.html +2 -2
- package/distrib/docs/symbols/JXG.View3D.html +2 -2
- package/distrib/docs/symbols/JXG.XML.html +2 -2
- package/distrib/docs/symbols/Label.html +114 -4
- package/distrib/docs/symbols/Legend.html +2 -2
- package/distrib/docs/symbols/Line.html +2 -2
- package/distrib/docs/symbols/Line3D.html +2 -2
- package/distrib/docs/symbols/Locus.html +2 -2
- package/distrib/docs/symbols/MajorArc.html +2 -2
- package/distrib/docs/symbols/MajorSector.html +2 -2
- package/distrib/docs/symbols/Metapostspline.html +2 -2
- package/distrib/docs/symbols/Midpoint.html +4 -4
- package/distrib/docs/symbols/MinorArc.html +2 -2
- package/distrib/docs/symbols/MinorSector.html +2 -2
- package/distrib/docs/symbols/Mirrorelement.html +2 -2
- package/distrib/docs/symbols/Mirrorpoint.html +4 -4
- package/distrib/docs/symbols/NonReflexAngle.html +2 -2
- package/distrib/docs/symbols/Normal.html +2 -2
- package/distrib/docs/symbols/Orthogonalprojection.html +4 -4
- package/distrib/docs/symbols/OtherIntersection.html +4 -4
- package/distrib/docs/symbols/Parabola.html +2 -2
- package/distrib/docs/symbols/Parallel.html +2 -2
- package/distrib/docs/symbols/Parallelpoint.html +4 -4
- package/distrib/docs/symbols/ParametricSurface3D.html +2 -2
- package/distrib/docs/symbols/Perpendicular.html +2 -2
- package/distrib/docs/symbols/PerpendicularPoint.html +4 -4
- package/distrib/docs/symbols/PerpendicularSegment.html +2 -2
- package/distrib/docs/symbols/Point.html +4 -4
- package/distrib/docs/symbols/Point3D.html +2 -2
- package/distrib/docs/symbols/PolarLine.html +2 -2
- package/distrib/docs/symbols/PolePoint.html +4 -4
- package/distrib/docs/symbols/Polygon.html +2 -2
- package/distrib/docs/symbols/PolygonalChain.html +2 -2
- package/distrib/docs/symbols/RadicalAxis.html +2 -2
- package/distrib/docs/symbols/Reflection.html +2 -2
- package/distrib/docs/symbols/ReflexAngle.html +2 -2
- package/distrib/docs/symbols/RegularPolygon.html +2 -2
- package/distrib/docs/symbols/Riemannsum.html +7 -3
- package/distrib/docs/symbols/Sector.html +2 -2
- package/distrib/docs/symbols/Segment.html +2 -2
- package/distrib/docs/symbols/Semicircle.html +2 -2
- package/distrib/docs/symbols/Slider.html +145 -4
- package/distrib/docs/symbols/Slopefield.html +2 -2
- package/distrib/docs/symbols/Slopetriangle.html +2 -2
- package/distrib/docs/symbols/Smartlabel.html +4 -4
- package/distrib/docs/symbols/Spline.html +2 -2
- package/distrib/docs/symbols/Stepfunction.html +2 -2
- package/distrib/docs/symbols/Tangent.html +2 -2
- package/distrib/docs/symbols/Tapemeasure.html +2 -2
- package/distrib/docs/symbols/Text.html +4 -4
- package/distrib/docs/symbols/Ticks.html +2 -2
- package/distrib/docs/symbols/Tracecurve.html +2 -2
- package/distrib/docs/symbols/Transformation.html +2 -2
- package/distrib/docs/symbols/Turtle.html +2 -2
- package/distrib/docs/symbols/Vectorfield.html +2 -2
- package/distrib/docs/symbols/View3D.html +2 -2
- package/distrib/docs/symbols/_global_.html +2 -2
- package/distrib/docs/symbols/src/src_3d_view3d.js.html +29 -30
- package/distrib/docs/symbols/src/src_base_board.js.html +5020 -4930
- package/distrib/docs/symbols/src/src_base_constants.js.html +1 -1
- package/distrib/docs/symbols/src/src_base_coordselement.js.html +1829 -1789
- package/distrib/docs/symbols/src/src_base_curve.js.html +783 -778
- package/distrib/docs/symbols/src/src_base_text.js.html +345 -358
- package/distrib/docs/symbols/src/src_element_checkbox.js.html +30 -30
- package/distrib/docs/symbols/src/src_element_slider.js.html +391 -377
- package/distrib/docs/symbols/src/src_math_numerics.js.html +1226 -1190
- package/distrib/docs/symbols/src/src_math_qdt.js.html +318 -194
- package/distrib/docs/symbols/src/src_options.js.html +7137 -7034
- package/distrib/docs/symbols/src/src_renderer_abstract.js.html +1168 -1167
- package/distrib/docs/symbols/src/src_renderer_canvas.js.html +1 -1
- package/distrib/docs/symbols/src/src_renderer_svg.js.html +489 -494
- package/distrib/docs/symbols/src/src_utils_env.js.html +127 -90
- package/distrib/docs.zip +0 -0
- package/distrib/geogebra.min.js +1 -1
- package/distrib/geonext.min.js +1 -1
- package/distrib/intergeo.min.js +1 -1
- package/distrib/jsxgraph.css +24 -22
- package/distrib/jsxgraph.zip +0 -0
- package/distrib/jsxgraphcore.js +2 -2
- package/distrib/jsxgraphcore.mjs +2 -2
- package/distrib/jsxgraphcore.mjs.map +1 -1
- package/distrib/jsxgraphsrc.js +707 -276
- package/distrib/jsxgraphsrc.mjs +707 -276
- package/distrib/jsxgraphsrc.mjs.map +1 -1
- package/distrib/sketch.min.js +1 -1
- package/package.json +1 -1
- package/src/3d/view3d.js +0 -1
- package/src/base/board.js +140 -50
- package/src/base/constants.js +1 -1
- package/src/base/coordselement.js +54 -14
- package/src/base/curve.js +6 -1
- package/src/base/text.js +13 -26
- package/src/element/checkbox.js +17 -17
- package/src/element/slider.js +16 -2
- package/src/math/heap.js +34 -4
- package/src/math/numerics.js +112 -76
- package/src/math/qdt.js +141 -17
- package/src/options.js +115 -12
- package/src/renderer/abstract.js +15 -14
- package/src/renderer/canvas.js +1 -1
- package/src/renderer/svg.js +0 -5
- 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> *
|
|
2971
|
-
<span class='line'>2964</span> *
|
|
2972
|
-
<span class='line'>2965</span> *
|
|
2973
|
-
<span class='line'>2966</span> * by
|
|
2974
|
-
<span class='line'>2967</span> *
|
|
2975
|
-
<span class='line'>2968</span> * @param {
|
|
2976
|
-
<span class='line'>2969</span> *
|
|
2977
|
-
<span class='line'>2970</span> *
|
|
2978
|
-
<span class='line'>2971</span> *
|
|
2979
|
-
<span class='line'>2972</span> *
|
|
2980
|
-
<span class='line'>2973</span> *
|
|
2981
|
-
<span class='line'>2974</span> *
|
|
2982
|
-
<span class='line'>2975</span>
|
|
2983
|
-
<span class='line'>2976</span>
|
|
2984
|
-
<span class='line'>2977</span>
|
|
2985
|
-
<span class='line'>2978</span>
|
|
2986
|
-
<span class='line'>2979</span>
|
|
2987
|
-
<span class='line'>2980</span>
|
|
2988
|
-
<span class='line'>2981</span>
|
|
2989
|
-
<span class='line'>2982</span> </span><span class="WHIT">
|
|
2990
|
-
<span class='line'>2983</span> </span><span class="WHIT">
|
|
2991
|
-
<span class='line'>2984</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
2992
|
-
<span class='line'>2985</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
2993
|
-
<span class='line'>2986</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
2994
|
-
<span class='line'>2987</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
2995
|
-
<span class='line'>2988</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
2996
|
-
<span class='line'>2989</span>
|
|
2997
|
-
<span class='line'>2990</span> </span><span class="WHIT">
|
|
2998
|
-
<span class='line'>2991</span>
|
|
2999
|
-
<span class='line'>2992</span> </span><span class="WHIT">
|
|
3000
|
-
<span class='line'>2993</span> </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="
|
|
2970
|
+
<span class='line'>2963</span> * <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="
|
|
3007
|
-
<span class='line'>3000</span>
|
|
3008
|
-
<span class='line'>3001</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3009
|
-
<span class='line'>3002</span>
|
|
3010
|
-
<span class='line'>3003</span> </span><span class="WHIT"> </span><span class="
|
|
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"><=</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="
|
|
3013
|
-
<span class='line'>3006</span>
|
|
3014
|
-
<span class='line'>3007</span> </span><span class="WHIT">
|
|
3015
|
-
<span class='line'>3008</span> </span><span class="WHIT">
|
|
3016
|
-
<span class='line'>3009</span> </span><span class="WHIT"> </span><span class="
|
|
3017
|
-
<span class='line'>3010</span>
|
|
3018
|
-
<span class='line'>3011</span>
|
|
3019
|
-
<span class='line'>3012</span> </span><span class="WHIT">
|
|
3020
|
-
<span class='line'>3013</span> </span><span class="WHIT">
|
|
3021
|
-
<span class='line'>3014</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3022
|
-
<span class='line'>3015</span> </span><span class="WHIT">
|
|
3023
|
-
<span class='line'>3016</span>
|
|
3024
|
-
<span class='line'>3017</span> </span><span class="WHIT">
|
|
3025
|
-
<span class='line'>3018</span>
|
|
3026
|
-
<span class='line'>3019</span> </span><span class="WHIT">
|
|
3027
|
-
<span class='line'>3020</span> </span><span class="WHIT">
|
|
3028
|
-
<span class='line'>3021</span>
|
|
3029
|
-
<span class='line'>3022</span> </span><span class="WHIT">
|
|
3030
|
-
<span class='line'>3023</span> </span><span class="WHIT">
|
|
3031
|
-
<span class='line'>3024</span> </span><span class="WHIT">
|
|
3032
|
-
<span class='line'>3025</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3033
|
-
<span class='line'>3026</span> </span><span class="WHIT">
|
|
3034
|
-
<span class='line'>3027</span> </span><span class="WHIT">
|
|
3035
|
-
<span class='line'>3028</span> </span><span class="WHIT">
|
|
3036
|
-
<span class='line'>3029</span> </span><span class="WHIT">
|
|
3037
|
-
<span class='line'>3030</span> </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"><</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"><</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">
|
|
3040
|
-
<span class='line'>3033</span> </span><span class="WHIT">
|
|
3041
|
-
<span class='line'>3034</span> </span><span class="WHIT">
|
|
3042
|
-
<span class='line'>3035</span> </span><span class="WHIT">
|
|
3043
|
-
<span class='line'>3036</span> </span><span class="WHIT">
|
|
3044
|
-
<span class='line'>3037</span> </span><span class="WHIT">
|
|
3045
|
-
<span class='line'>3038</span> </span><span class="WHIT">
|
|
3046
|
-
<span class='line'>3039</span>
|
|
3047
|
-
<span class='line'>3040</span>
|
|
3048
|
-
<span class='line'>3041</span> </span><span class="WHIT">
|
|
3049
|
-
<span class='line'>3042</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3050
|
-
<span class='line'>3043</span> </span><span class="WHIT">
|
|
3051
|
-
<span class='line'>3044</span> </span><span class="WHIT"> </span><span class="
|
|
3052
|
-
<span class='line'>3045</span> </span><span class="WHIT">
|
|
3053
|
-
<span class='line'>3046</span> </span><span class="WHIT">
|
|
3054
|
-
<span class='line'>3047</span>
|
|
3055
|
-
<span class='line'>3048</span> </span><span class="WHIT">
|
|
3056
|
-
<span class='line'>3049</span> </span><span class="WHIT">
|
|
3057
|
-
<span class='line'>3050</span> </span><span class="WHIT">
|
|
3058
|
-
<span class='line'>3051</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3059
|
-
<span class='line'>3052</span> </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"><</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">
|
|
3062
|
-
<span class='line'>3055</span> </span><span class="WHIT">
|
|
3063
|
-
<span class='line'>3056</span> </span><span class="WHIT">
|
|
3064
|
-
<span class='line'>3057</span> </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">
|
|
3067
|
-
<span class='line'>3060</span> </span><span class="WHIT">
|
|
3068
|
-
<span class='line'>3061</span>
|
|
3069
|
-
<span class='line'>3062</span> </span><span class="WHIT">
|
|
3070
|
-
<span class='line'>3063</span> </span><span class="WHIT">
|
|
3071
|
-
<span class='line'>3064</span>
|
|
3072
|
-
<span class='line'>3065</span> </span><span class="WHIT">
|
|
3073
|
-
<span class='line'>3066</span>
|
|
3074
|
-
<span class='line'>3067</span>
|
|
3075
|
-
<span class='line'>3068</span>
|
|
3076
|
-
<span class='line'>3069</span>
|
|
3077
|
-
<span class='line'>3070</span>
|
|
3078
|
-
<span class='line'>3071</span>
|
|
3079
|
-
<span class='line'>3072</span>
|
|
3080
|
-
<span class='line'>3073</span>
|
|
3081
|
-
<span class='line'>3074</span>
|
|
3082
|
-
<span class='line'>3075</span>
|
|
3083
|
-
<span class='line'>3076</span>
|
|
3084
|
-
<span class='line'>3077</span>
|
|
3085
|
-
<span class='line'>3078</span>
|
|
3086
|
-
<span class='line'>3079</span>
|
|
3087
|
-
<span class='line'>3080</span>
|
|
3088
|
-
<span class='line'>3081</span>
|
|
3089
|
-
<span class='line'>3082</span>
|
|
3090
|
-
<span class='line'>3083</span>
|
|
3091
|
-
<span class='line'>3084</span> </span><span class="WHIT">
|
|
3092
|
-
<span class='line'>3085</span> </span><span class="WHIT">
|
|
3093
|
-
<span class='line'>3086</span> </span><span class="WHIT">
|
|
3094
|
-
<span class='line'>3087</span> </span><span class="WHIT">
|
|
3095
|
-
<span class='line'>3088</span>
|
|
3096
|
-
<span class='line'>3089</span> </span><span class="WHIT">
|
|
3097
|
-
<span class='line'>3090</span>
|
|
3098
|
-
<span class='line'>3091</span>
|
|
3099
|
-
<span class='line'>3092</span>
|
|
3100
|
-
<span class='line'>3093</span>
|
|
3101
|
-
<span class='line'>3094</span>
|
|
3102
|
-
<span class='line'>3095</span>
|
|
3103
|
-
<span class='line'>3096</span>
|
|
3104
|
-
<span class='line'>3097</span>
|
|
3105
|
-
<span class='line'>3098</span>
|
|
3106
|
-
<span class='line'>3099</span>
|
|
3107
|
-
<span class='line'>3100</span>
|
|
3108
|
-
<span class='line'>3101</span> *
|
|
3109
|
-
<span class='line'>3102</span> *
|
|
3110
|
-
<span class='line'>3103</span> *
|
|
3111
|
-
<span class='line'>3104</span> * @
|
|
3112
|
-
<span class='line'>3105</span> *
|
|
3113
|
-
<span class='line'>3106</span> *
|
|
3114
|
-
<span class='line'>3107</span> *
|
|
3115
|
-
<span class='line'>3108</span> *
|
|
3116
|
-
<span class='line'>3109</span> *
|
|
3117
|
-
<span class='line'>3110</span> *
|
|
3118
|
-
<span class='line'>3111</span> *
|
|
3119
|
-
<span class='line'>3112</span> *
|
|
3120
|
-
<span class='line'>3113</span> *
|
|
3121
|
-
<span class='line'>3114</span> * }
|
|
3122
|
-
<span class='line'>3115</span> *
|
|
3123
|
-
<span class='line'>3116</span> *
|
|
3124
|
-
<span class='line'>3117</span> *
|
|
3125
|
-
<span class='line'>3118</span>
|
|
3126
|
-
<span class='line'>3119</span>
|
|
3127
|
-
<span class='line'>3120</span>
|
|
3128
|
-
<span class='line'>3121</span>
|
|
3129
|
-
<span class='line'>3122</span>
|
|
3130
|
-
<span class='line'>3123</span>
|
|
3131
|
-
<span class='line'>3124</span>
|
|
3132
|
-
<span class='line'>3125</span> *
|
|
3133
|
-
<span class='line'>3126</span> *
|
|
3134
|
-
<span class='line'>3127</span> * }
|
|
3135
|
-
<span class='line'>3128</span> *
|
|
3136
|
-
<span class='line'>3129</span> * <
|
|
3137
|
-
<span class='line'>3130</span> *
|
|
3138
|
-
<span class='line'>3131</span> *
|
|
3139
|
-
<span class='line'>3132</span> *
|
|
3140
|
-
<span class='line'>3133</span> *
|
|
3141
|
-
<span class='line'>3134</span> *
|
|
3142
|
-
<span class='line'>3135</span> *
|
|
3143
|
-
<span class='line'>3136</span> *
|
|
3144
|
-
<span class='line'>3137</span> *
|
|
3145
|
-
<span class='line'>3138</span> *
|
|
3146
|
-
<span class='line'>3139</span> *
|
|
3147
|
-
<span class='line'>3140</span> *
|
|
3148
|
-
<span class='line'>3141</span> *
|
|
3149
|
-
<span class='line'>3142</span> *
|
|
3150
|
-
<span class='line'>3143</span> *
|
|
3151
|
-
<span class='line'>3144</span> *
|
|
3152
|
-
<span class='line'>3145</span> *
|
|
3153
|
-
<span class='line'>3146</span> *
|
|
3154
|
-
<span class='line'>3147</span> * @
|
|
3155
|
-
<span class='line'>3148</span>
|
|
3156
|
-
<span class='line'>3149</span>
|
|
3157
|
-
<span class='line'>3150</span>
|
|
3158
|
-
<span class='line'>3151</span>
|
|
3159
|
-
<span class='line'>3152</span>
|
|
3160
|
-
<span class='line'>3153</span>
|
|
3161
|
-
<span class='line'>3154</span>
|
|
3162
|
-
<span class='line'>3155</span>
|
|
3163
|
-
<span class='line'>3156</span>
|
|
3164
|
-
<span class='line'>3157</span>
|
|
3165
|
-
<span class='line'>3158</span>
|
|
3166
|
-
<span class='line'>3159</span>
|
|
3167
|
-
<span class='line'>3160</span>
|
|
3168
|
-
<span class='line'>3161</span>
|
|
3169
|
-
<span class='line'>3162</span>
|
|
3170
|
-
<span class='line'>3163</span>
|
|
3171
|
-
<span class='line'>3164</span>
|
|
3172
|
-
<span class='line'>3165</span>
|
|
3173
|
-
<span class='line'>3166</span>
|
|
3174
|
-
<span class='line'>3167</span>
|
|
3175
|
-
<span class='line'>3168</span>
|
|
3176
|
-
<span class='line'>3169</span>
|
|
3177
|
-
<span class='line'>3170</span>
|
|
3178
|
-
<span class='line'>3171</span>
|
|
3179
|
-
<span class='line'>3172</span>
|
|
3180
|
-
<span class='line'>3173</span>
|
|
3181
|
-
<span class='line'>3174</span>
|
|
3182
|
-
<span class='line'>3175</span>
|
|
3183
|
-
<span class='line'>3176</span>
|
|
3184
|
-
<span class='line'>3177</span>
|
|
3185
|
-
<span class='line'>3178</span>
|
|
3186
|
-
<span class='line'>3179</span>
|
|
3187
|
-
<span class='line'>3180</span>
|
|
3188
|
-
<span class='line'>3181</span>
|
|
3189
|
-
<span class='line'>3182</span>
|
|
3190
|
-
<span class='line'>3183</span>
|
|
3191
|
-
<span class='line'>3184</span>
|
|
3192
|
-
<span class='line'>3185</span>
|
|
3193
|
-
<span class='line'>3186</span>
|
|
3194
|
-
<span class='line'>3187</span> </span><span class="WHIT">
|
|
3195
|
-
<span class='line'>3188</span> </span><span class="WHIT">
|
|
3196
|
-
<span class='line'>3189</span> </span><span class="WHIT">
|
|
3197
|
-
<span class='line'>3190</span>
|
|
3198
|
-
<span class='line'>3191</span> </span><span class="WHIT">
|
|
3199
|
-
<span class='line'>3192</span> </span><span class="WHIT">
|
|
3200
|
-
<span class='line'>3193</span> </span><span class="WHIT">
|
|
3201
|
-
<span class='line'>3194</span> </span><span class="WHIT">
|
|
3202
|
-
<span class='line'>3195</span> </span><span class="WHIT">
|
|
3203
|
-
<span class='line'>3196</span> </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"><</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 <i>explicit</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> * <pre>
|
|
3137
|
+
<span class='line'>3130</span> * {
|
|
3138
|
+
<span class='line'>3131</span> * s: <Number>,
|
|
3139
|
+
<span class='line'>3132</span> * A: <matrix>,
|
|
3140
|
+
<span class='line'>3133</span> * b: <Array>,
|
|
3141
|
+
<span class='line'>3134</span> * c: <Array>
|
|
3142
|
+
<span class='line'>3135</span> * }
|
|
3143
|
+
<span class='line'>3136</span> * </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> * <i>Default</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 <i>N+1</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 <pre>dx/dt = f(t, x(t))</pre>. So, f has to take two parameters, a number <tt>t</tt> and a
|
|
3152
|
+
<span class='line'>3145</span> * vector <tt>x</tt>, and has to return a vector of the same length as <tt>x</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<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> * </pre><div class="jxgbox" id="JXGd2432d04-4ef7-4159-a90b-a2eb8d38c4f6" style="width: 300px; height: 300px;"></div>
|
|
3175
|
+
<span class='line'>3168</span> * <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<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> * </script><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">
|
|
3206
|
-
<span class='line'>3199</span> </span><span class="WHIT">
|
|
3207
|
-
<span class='line'>3200</span> </span><span class="WHIT">
|
|
3208
|
-
<span class='line'>3201</span> </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">
|
|
3211
|
-
<span class='line'>3204</span> </span><span class="WHIT">
|
|
3212
|
-
<span class='line'>3205</span> </span><span class="WHIT">
|
|
3213
|
-
<span class='line'>3206</span>
|
|
3214
|
-
<span class='line'>3207</span> </span><span class="WHIT">
|
|
3215
|
-
<span class='line'>3208</span>
|
|
3216
|
-
<span class='line'>3209</span> </span><span class="WHIT">
|
|
3217
|
-
<span class='line'>3210</span> </span><span class="WHIT"> </span><span class="
|
|
3218
|
-
<span class='line'>3211</span>
|
|
3219
|
-
<span class='line'>3212</span> </span><span class="WHIT"> </span><span class="
|
|
3220
|
-
<span class='line'>3213</span> </span><span class="WHIT">
|
|
3221
|
-
<span class='line'>3214</span> </span><span class="WHIT">
|
|
3222
|
-
<span class='line'>3215</span> </span><span class="WHIT">
|
|
3223
|
-
<span class='line'>3216</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
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 < 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"><=</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 < 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="
|
|
3226
|
-
<span class='line'>3219</span> </span><span class="WHIT">
|
|
3227
|
-
<span class='line'>3220</span>
|
|
3228
|
-
<span class='line'>3221</span>
|
|
3229
|
-
<span class='line'>3222</span> </span><span class="WHIT">
|
|
3230
|
-
<span class='line'>3223</span> </span><span class="WHIT">
|
|
3231
|
-
<span class='line'>3224</span>
|
|
3232
|
-
<span class='line'>3225</span> </span><span class="WHIT">
|
|
3233
|
-
<span class='line'>3226</span>
|
|
3234
|
-
<span class='line'>3227</span>
|
|
3235
|
-
<span class='line'>3228</span> </span><span class="WHIT">
|
|
3236
|
-
<span class='line'>3229</span>
|
|
3237
|
-
<span class='line'>3230</span>
|
|
3238
|
-
<span class='line'>3231</span>
|
|
3239
|
-
<span class='line'>3232</span>
|
|
3240
|
-
<span class='line'>3233</span>
|
|
3241
|
-
<span class='line'>3234</span>
|
|
3242
|
-
<span class='line'>3235</span> </span><span class="WHIT">
|
|
3243
|
-
<span class='line'>3236</span>
|
|
3244
|
-
<span class='line'>3237</span> </span><span class="WHIT">
|
|
3245
|
-
<span class='line'>3238</span>
|
|
3246
|
-
<span class='line'>3239</span>
|
|
3247
|
-
<span class='line'>3240</span>
|
|
3248
|
-
<span class='line'>3241</span>
|
|
3249
|
-
<span class='line'>3242</span>
|
|
3250
|
-
<span class='line'>3243</span> </span><span class="WHIT">
|
|
3251
|
-
<span class='line'>3244</span>
|
|
3252
|
-
<span class='line'>3245</span> </span><span class="WHIT">
|
|
3253
|
-
<span class='line'>3246</span>
|
|
3254
|
-
<span class='line'>3247</span>
|
|
3255
|
-
<span class='line'>3248</span>
|
|
3256
|
-
<span class='line'>3249</span>
|
|
3257
|
-
<span class='line'>3250</span>
|
|
3258
|
-
<span class='line'>3251</span>
|
|
3259
|
-
<span class='line'>3252</span>
|
|
3260
|
-
<span class='line'>3253</span>
|
|
3261
|
-
<span class='line'>3254</span>
|
|
3262
|
-
<span class='line'>3255</span>
|
|
3263
|
-
<span class='line'>3256</span>
|
|
3264
|
-
<span class='line'>3257</span>
|
|
3265
|
-
<span class='line'>3258</span>
|
|
3266
|
-
<span class='line'>3259</span>
|
|
3267
|
-
<span class='line'>3260</span>
|
|
3268
|
-
<span class='line'>3261</span> </span><span class="WHIT">
|
|
3269
|
-
<span class='line'>3262</span> </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"><</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"><</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"><</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"><</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"><</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"><</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"><</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"><</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"><</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">
|
|
3272
|
-
<span class='line'>3265</span>
|
|
3273
|
-
<span class='line'>3266</span>
|
|
3274
|
-
<span class='line'>3267</span>
|
|
3275
|
-
<span class='line'>3268</span>
|
|
3276
|
-
<span class='line'>3269</span>
|
|
3277
|
-
<span class='line'>3270</span>
|
|
3278
|
-
<span class='line'>3271</span>
|
|
3279
|
-
<span class='line'>3272</span>
|
|
3280
|
-
<span class='line'>3273</span> </span><span class="WHIT">
|
|
3281
|
-
<span class='line'>3274</span>
|
|
3282
|
-
<span class='line'>3275</span>
|
|
3283
|
-
<span class='line'>3276</span>
|
|
3284
|
-
<span class='line'>3277</span>
|
|
3285
|
-
<span class='line'>3278</span>
|
|
3286
|
-
<span class='line'>3279</span> </span><span class="WHIT">
|
|
3287
|
-
<span class='line'>3280</span>
|
|
3288
|
-
<span class='line'>3281</span> </span><span class="WHIT">
|
|
3289
|
-
<span class='line'>3282</span>
|
|
3290
|
-
<span class='line'>3283</span>
|
|
3291
|
-
<span class='line'>3284</span>
|
|
3292
|
-
<span class='line'>3285</span>
|
|
3293
|
-
<span class='line'>3286</span>
|
|
3294
|
-
<span class='line'>3287</span>
|
|
3295
|
-
<span class='line'>3288</span>
|
|
3296
|
-
<span class='line'>3289</span>
|
|
3297
|
-
<span class='line'>3290</span>
|
|
3298
|
-
<span class='line'>3291</span>
|
|
3299
|
-
<span class='line'>3292</span>
|
|
3300
|
-
<span class='line'>3293</span>
|
|
3301
|
-
<span class='line'>3294</span>
|
|
3302
|
-
<span class='line'>3295</span>
|
|
3303
|
-
<span class='line'>3296</span>
|
|
3304
|
-
<span class='line'>3297</span>
|
|
3305
|
-
<span class='line'>3298</span> </span><span class="WHIT"> </span><span class="KEYW">
|
|
3306
|
-
<span class='line'>3299</span>
|
|
3307
|
-
<span class='line'>3300</span> </span><span class="WHIT">
|
|
3308
|
-
<span class='line'>3301</span> </span><span class="WHIT"> </span><span class="
|
|
3309
|
-
<span class='line'>3302</span>
|
|
3310
|
-
<span class='line'>3303</span>
|
|
3311
|
-
<span class='line'>3304</span> </span><span class="WHIT">
|
|
3312
|
-
<span class='line'>3305</span> </span><span class="WHIT">
|
|
3313
|
-
<span class='line'>3306</span> </span><span class="WHIT"> </span><span class="
|
|
3314
|
-
<span class='line'>3307</span>
|
|
3315
|
-
<span class='line'>3308</span> </span><span class="WHIT">
|
|
3316
|
-
<span class='line'>3309</span> </span><span class="WHIT">
|
|
3317
|
-
<span class='line'>3310</span> </span><span class="WHIT">
|
|
3318
|
-
<span class='line'>3311</span>
|
|
3319
|
-
<span class='line'>3312</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3320
|
-
<span class='line'>3313</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3321
|
-
<span class='line'>3314</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3322
|
-
<span class='line'>3315</span> </span><span class="WHIT">
|
|
3323
|
-
<span class='line'>3316</span> </span><span class="WHIT">
|
|
3324
|
-
<span class='line'>3317</span> </span><span class="WHIT">
|
|
3325
|
-
<span class='line'>3318</span>
|
|
3326
|
-
<span class='line'>3319</span> </span><span class="WHIT">
|
|
3327
|
-
<span class='line'>3320</span>
|
|
3328
|
-
<span class='line'>3321</span>
|
|
3329
|
-
<span class='line'>3322</span>
|
|
3330
|
-
<span class='line'>3323</span>
|
|
3331
|
-
<span class='line'>3324</span>
|
|
3332
|
-
<span class='line'>3325</span>
|
|
3333
|
-
<span class='line'>3326</span>
|
|
3334
|
-
<span class='line'>3327</span>
|
|
3335
|
-
<span class='line'>3328</span>
|
|
3336
|
-
<span class='line'>3329</span>
|
|
3337
|
-
<span class='line'>3330</span>
|
|
3338
|
-
<span class='line'>3331</span>
|
|
3339
|
-
<span class='line'>3332</span>
|
|
3340
|
-
<span class='line'>3333</span>
|
|
3341
|
-
<span class='line'>3334</span>
|
|
3342
|
-
<span class='line'>3335</span>
|
|
3343
|
-
<span class='line'>3336</span>
|
|
3344
|
-
<span class='line'>3337</span>
|
|
3345
|
-
<span class='line'>3338</span>
|
|
3346
|
-
<span class='line'>3339</span>
|
|
3347
|
-
<span class='line'>3340</span>
|
|
3348
|
-
<span class='line'>3341</span> </span><span class="WHIT">
|
|
3349
|
-
<span class='line'>3342</span> </span><span class="WHIT"> </span><span class="
|
|
3350
|
-
<span class='line'>3343</span> </span><span class="WHIT">
|
|
3351
|
-
<span class='line'>3344</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3352
|
-
<span class='line'>3345</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3353
|
-
<span class='line'>3346</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3354
|
-
<span class='line'>3347</span>
|
|
3355
|
-
<span class='line'>3348</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3356
|
-
<span class='line'>3349</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3357
|
-
<span class='line'>3350</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3358
|
-
<span class='line'>3351</span> </span><span class="WHIT">
|
|
3359
|
-
<span class='line'>3352</span> </span><span class="WHIT">
|
|
3360
|
-
<span class='line'>3353</span> </span><span class="WHIT">
|
|
3361
|
-
<span class='line'>3354</span>
|
|
3362
|
-
<span class='line'>3355</span> </span><span class="WHIT">
|
|
3363
|
-
<span class='line'>3356</span>
|
|
3364
|
-
<span class='line'>3357</span>
|
|
3365
|
-
<span class='line'>3358</span>
|
|
3366
|
-
<span class='line'>3359</span>
|
|
3367
|
-
<span class='line'>3360</span>
|
|
3368
|
-
<span class='line'>3361</span>
|
|
3369
|
-
<span class='line'>3362</span>
|
|
3370
|
-
<span class='line'>3363</span>
|
|
3371
|
-
<span class='line'>3364</span>
|
|
3372
|
-
<span class='line'>3365</span>
|
|
3373
|
-
<span class='line'>3366</span>
|
|
3374
|
-
<span class='line'>3367</span>
|
|
3375
|
-
<span class='line'>3368</span>
|
|
3376
|
-
<span class='line'>3369</span>
|
|
3377
|
-
<span class='line'>3370</span>
|
|
3378
|
-
<span class='line'>3371</span>
|
|
3379
|
-
<span class='line'>3372</span>
|
|
3380
|
-
<span class='line'>3373</span>
|
|
3381
|
-
<span class='line'>3374</span>
|
|
3382
|
-
<span class='line'>3375</span>
|
|
3383
|
-
<span class='line'>3376</span>
|
|
3384
|
-
<span class='line'>3377</span> </span><span class="WHIT">
|
|
3385
|
-
<span class='line'>3378</span> </span><span class="WHIT">
|
|
3386
|
-
<span class='line'>3379</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3387
|
-
<span class='line'>3380</span> </span><span class="WHIT"> </span><span class="
|
|
3388
|
-
<span class='line'>3381</span> </span><span class="WHIT">
|
|
3389
|
-
<span class='line'>3382</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3390
|
-
<span class='line'>3383</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3391
|
-
<span class='line'>3384</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3392
|
-
<span class='line'>3385</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3393
|
-
<span class='line'>3386</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3394
|
-
<span class='line'>3387</span> </span><span class="WHIT">
|
|
3395
|
-
<span class='line'>3388</span>
|
|
3396
|
-
<span class='line'>3389</span> </span><span class="WHIT">
|
|
3397
|
-
<span class='line'>3390</span> </span><span class="WHIT"> </span><span class="
|
|
3398
|
-
<span class='line'>3391</span> </span><span class="WHIT">
|
|
3399
|
-
<span class='line'>3392</span> </span><span class="WHIT">
|
|
3400
|
-
<span class='line'>3393</span> </span><span class="WHIT"> </span><span class="
|
|
3401
|
-
<span class='line'>3394</span> </span><span class="WHIT">
|
|
3402
|
-
<span class='line'>3395</span>
|
|
3403
|
-
<span class='line'>3396</span> </span><span class="WHIT">
|
|
3404
|
-
<span class='line'>3397</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
3405
|
-
<span class='line'>3398</span> </span><span class="WHIT"> </span><span class="
|
|
3406
|
-
<span class='line'>3399</span> </span><span class="WHIT">
|
|
3407
|
-
<span class='line'>3400</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3408
|
-
<span class='line'>3401</span>
|
|
3409
|
-
<span class='line'>3402</span> </span><span class="WHIT">
|
|
3410
|
-
<span class='line'>3403</span>
|
|
3411
|
-
<span class='line'>3404</span>
|
|
3412
|
-
<span class='line'>3405</span> </span><span class="WHIT">
|
|
3413
|
-
<span class='line'>3406</span> </span><span class="WHIT">
|
|
3414
|
-
<span class='line'>3407</span> </span><span class="WHIT">
|
|
3415
|
-
<span class='line'>3408</span> </span><span class="WHIT">
|
|
3416
|
-
<span class='line'>3409</span>
|
|
3417
|
-
<span class='line'>3410</span>
|
|
3418
|
-
<span class='line'>3411</span> </span><span class="WHIT">
|
|
3419
|
-
<span class='line'>3412</span> </span><span class="WHIT"> </span><span class="
|
|
3420
|
-
<span class='line'>3413</span> </span><span class="WHIT"> </span><span class="
|
|
3421
|
-
<span class='line'>3414</span>
|
|
3422
|
-
<span class='line'>3415</span> </span><span class="WHIT"> </span><span class="
|
|
3423
|
-
<span class='line'>3416</span> </span><span class="WHIT"> </span><span class="
|
|
3424
|
-
<span class='line'>3417</span> </span><span class="WHIT">
|
|
3425
|
-
<span class='line'>3418</span> </span><span class="WHIT">
|
|
3426
|
-
<span class='line'>3419</span> </span><span class="WHIT">
|
|
3427
|
-
<span class='line'>3420</span>
|
|
3428
|
-
<span class='line'>3421</span> </span><span class="WHIT">
|
|
3429
|
-
<span class='line'>3422</span> </span><span class="WHIT">
|
|
3430
|
-
<span class='line'>3423</span> </span><span class="WHIT">
|
|
3431
|
-
<span class='line'>3424</span>
|
|
3432
|
-
<span class='line'>3425</span> </span><span class="WHIT">
|
|
3433
|
-
<span class='line'>3426</span> </span><span class="WHIT"> </span><span class="
|
|
3434
|
-
<span class='line'>3427</span>
|
|
3435
|
-
<span class='line'>3428</span> </span><span class="WHIT">
|
|
3436
|
-
<span class='line'>3429</span> </span><span class="WHIT">
|
|
3437
|
-
<span class='line'>3430</span> </span><span class="WHIT">
|
|
3438
|
-
<span class='line'>3431</span>
|
|
3439
|
-
<span class='line'>3432</span>
|
|
3440
|
-
<span class='line'>3433</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
3441
|
-
<span class='line'>3434</span> </span><span class="WHIT"> </span><span class="
|
|
3442
|
-
<span class='line'>3435</span> </span><span class="WHIT">
|
|
3443
|
-
<span class='line'>3436</span> </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 <= x_1
|
|
3297
|
+
<span class='line'>3290</span> * or [x_1, f(x_1), x_0, f(x_0)] in case that x_1 < 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"><</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"><=</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"><</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"><</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"><=</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"><=</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">
|
|
3446
|
-
<span class='line'>3439</span> </span><span class="WHIT">
|
|
3447
|
-
<span class='line'>3440</span>
|
|
3448
|
-
<span class='line'>3441</span> </span><span class="WHIT">
|
|
3449
|
-
<span class='line'>3442</span> </span><span class="WHIT">
|
|
3450
|
-
<span class='line'>3443</span> </span><span class="WHIT">
|
|
3451
|
-
<span class='line'>3444</span> </span><span class="WHIT">
|
|
3452
|
-
<span class='line'>3445</span>
|
|
3453
|
-
<span class='line'>3446</span> </span><span class="WHIT">
|
|
3454
|
-
<span class='line'>3447</span> </span><span class="WHIT">
|
|
3455
|
-
<span class='line'>3448</span>
|
|
3456
|
-
<span class='line'>3449</span> </span><span class="WHIT">
|
|
3457
|
-
<span class='line'>3450</span>
|
|
3458
|
-
<span class='line'>3451</span> </span><span class="WHIT">
|
|
3459
|
-
<span class='line'>3452</span>
|
|
3460
|
-
<span class='line'>3453</span> </span><span class="WHIT"> </span><span class="
|
|
3461
|
-
<span class='line'>3454</span> </span><span class="WHIT"> </span><span class="
|
|
3462
|
-
<span class='line'>3455</span> </span><span class="WHIT">
|
|
3463
|
-
<span class='line'>3456</span>
|
|
3464
|
-
<span class='line'>3457</span> </span><span class="WHIT"> </span><span class="
|
|
3465
|
-
<span class='line'>3458</span> </span><span class="WHIT">
|
|
3466
|
-
<span class='line'>3459</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3467
|
-
<span class='line'>3460</span>
|
|
3468
|
-
<span class='line'>3461</span> </span><span class="WHIT">
|
|
3469
|
-
<span class='line'>3462</span> </span><span class="WHIT">
|
|
3470
|
-
<span class='line'>3463</span>
|
|
3471
|
-
<span class='line'>3464</span> </span><span class="WHIT">
|
|
3472
|
-
<span class='line'>3465</span> </span><span class="WHIT">
|
|
3473
|
-
<span class='line'>3466</span> </span><span class="WHIT"> </span><span class="
|
|
3474
|
-
<span class='line'>3467</span> </span><span class="WHIT">
|
|
3475
|
-
<span class='line'>3468</span>
|
|
3476
|
-
<span class='line'>3469</span> </span><span class="WHIT"> </span><span class="
|
|
3477
|
-
<span class='line'>3470</span>
|
|
3478
|
-
<span class='line'>3471</span> </span><span class="WHIT"> </span><span class="
|
|
3479
|
-
<span class='line'>3472</span> </span><span class="WHIT">
|
|
3480
|
-
<span class='line'>3473</span>
|
|
3481
|
-
<span class='line'>3474</span> </span><span class="WHIT">
|
|
3482
|
-
<span class='line'>3475</span>
|
|
3483
|
-
<span class='line'>3476</span> </span><span class="WHIT">
|
|
3484
|
-
<span class='line'>3477</span> </span><span class="WHIT">
|
|
3485
|
-
<span class='line'>3478</span> </span><span class="WHIT">
|
|
3486
|
-
<span class='line'>3479</span> </span><span class="WHIT">
|
|
3487
|
-
<span class='line'>3480</span> </span><span class="WHIT">
|
|
3488
|
-
<span class='line'>3481</span> </span><span class="WHIT">
|
|
3489
|
-
<span class='line'>3482</span> </span><span class="WHIT">
|
|
3490
|
-
<span class='line'>3483</span>
|
|
3491
|
-
<span class='line'>3484</span>
|
|
3492
|
-
<span class='line'>3485</span> </span><span class="WHIT">
|
|
3493
|
-
<span class='line'>3486</span> </span><span class="WHIT">
|
|
3494
|
-
<span class='line'>3487</span> </span><span class="WHIT"> </span><span class="
|
|
3495
|
-
<span class='line'>3488</span>
|
|
3496
|
-
<span class='line'>3489</span> </span><span class="WHIT">
|
|
3497
|
-
<span class='line'>3490</span> </span><span class="WHIT">
|
|
3498
|
-
<span class='line'>3491</span>
|
|
3499
|
-
<span class='line'>3492</span> </span><span class="WHIT">
|
|
3500
|
-
<span class='line'>3493</span> </span><span class="WHIT">
|
|
3501
|
-
<span class='line'>3494</span>
|
|
3502
|
-
<span class='line'>3495</span> </span><span class="WHIT">
|
|
3503
|
-
<span class='line'>3496</span>
|
|
3504
|
-
<span class='line'>3497</span>
|
|
3505
|
-
<span class='line'>3498</span>
|
|
3506
|
-
<span class='line'>3499</span>
|
|
3507
|
-
<span class='line'>3500</span>
|
|
3508
|
-
<span class='line'>3501</span>
|
|
3509
|
-
<span class='line'>3502</span>
|
|
3510
|
-
<span class='line'>3503</span>
|
|
3511
|
-
<span class='line'>3504</span>
|
|
3512
|
-
<span class='line'>3505</span>
|
|
3513
|
-
<span class='line'>3506</span>
|
|
3514
|
-
<span class='line'>3507</span>
|
|
3515
|
-
<span class='line'>3508</span>
|
|
3516
|
-
<span class='line'>3509</span>
|
|
3517
|
-
<span class='line'>3510</span>
|
|
3518
|
-
<span class='line'>3511</span>
|
|
3519
|
-
<span class='line'>3512</span>
|
|
3520
|
-
<span class='line'>3513</span>
|
|
3521
|
-
<span class='line'>3514</span>
|
|
3522
|
-
<span class='line'>3515</span>
|
|
3523
|
-
<span class='line'>3516</span> </span><span class="WHIT">
|
|
3524
|
-
<span class='line'>3517</span> </span><span class="WHIT">
|
|
3525
|
-
<span class='line'>3518</span> </span><span class="WHIT"> </span><span class="
|
|
3526
|
-
<span class='line'>3519</span>
|
|
3527
|
-
<span class='line'>3520</span> </span><span class="WHIT"> </span><span class="
|
|
3528
|
-
<span class='line'>3521</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3529
|
-
<span class='line'>3522</span> </span><span class="WHIT">
|
|
3530
|
-
<span class='line'>3523</span> </span><span class="WHIT">
|
|
3531
|
-
<span class='line'>3524</span> </span><span class="WHIT"> </span><span class="
|
|
3532
|
-
<span class='line'>3525</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3533
|
-
<span class='line'>3526</span> </span><span class="WHIT">
|
|
3534
|
-
<span class='line'>3527</span>
|
|
3535
|
-
<span class='line'>3528</span> </span><span class="WHIT">
|
|
3536
|
-
<span class='line'>3529</span> </span><span class="WHIT">
|
|
3537
|
-
<span class='line'>3530</span>
|
|
3538
|
-
<span class='line'>3531</span> </span><span class="WHIT">
|
|
3539
|
-
<span class='line'>3532</span>
|
|
3540
|
-
<span class='line'>3533</span>
|
|
3541
|
-
<span class='line'>3534</span>
|
|
3542
|
-
<span class='line'>3535</span>
|
|
3543
|
-
<span class='line'>3536</span>
|
|
3544
|
-
<span class='line'>3537</span>
|
|
3545
|
-
<span class='line'>3538</span>
|
|
3546
|
-
<span class='line'>3539</span>
|
|
3547
|
-
<span class='line'>3540</span>
|
|
3548
|
-
<span class='line'>3541</span>
|
|
3549
|
-
<span class='line'>3542</span>
|
|
3550
|
-
<span class='line'>3543</span>
|
|
3551
|
-
<span class='line'>3544</span>
|
|
3552
|
-
<span class='line'>3545</span>
|
|
3553
|
-
<span class='line'>3546</span>
|
|
3554
|
-
<span class='line'>3547</span>
|
|
3555
|
-
<span class='line'>3548</span>
|
|
3556
|
-
<span class='line'>3549</span>
|
|
3557
|
-
<span class='line'>3550</span>
|
|
3558
|
-
<span class='line'>3551</span>
|
|
3559
|
-
<span class='line'>3552</span> </span><span class="WHIT">
|
|
3560
|
-
<span class='line'>3553</span> </span><span class="WHIT">
|
|
3561
|
-
<span class='line'>3554</span> </span><span class="WHIT">
|
|
3562
|
-
<span class='line'>3555</span> </span><span class="WHIT"> </span><span class="
|
|
3563
|
-
<span class='line'>3556</span>
|
|
3564
|
-
<span class='line'>3557</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3565
|
-
<span class='line'>3558</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3566
|
-
<span class='line'>3559</span> </span><span class="WHIT"> </span><span class="
|
|
3567
|
-
<span class='line'>3560</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3568
|
-
<span class='line'>3561</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3569
|
-
<span class='line'>3562</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
3570
|
-
<span class='line'>3563</span> </span><span class="WHIT">
|
|
3571
|
-
<span class='line'>3564</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3572
|
-
<span class='line'>3565</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3573
|
-
<span class='line'>3566</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3574
|
-
<span class='line'>3567</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3575
|
-
<span class='line'>3568</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3576
|
-
<span class='line'>3569</span> </span><span class="WHIT">
|
|
3577
|
-
<span class='line'>3570</span>
|
|
3578
|
-
<span class='line'>3571</span> </span><span class="WHIT">
|
|
3579
|
-
<span class='line'>3572</span> </span><span class="WHIT"> </span><span class="
|
|
3580
|
-
<span class='line'>3573</span> </span><span class="WHIT"> </span><span class="
|
|
3581
|
-
<span class='line'>3574</span> </span><span class="WHIT">
|
|
3582
|
-
<span class='line'>3575</span> </span><span class="WHIT"> </span><span class="
|
|
3583
|
-
<span class='line'>3576</span>
|
|
3584
|
-
<span class='line'>3577</span> </span><span class="WHIT"> </span><span class="
|
|
3585
|
-
<span class='line'>3578</span> </span><span class="WHIT">
|
|
3586
|
-
<span class='line'>3579</span>
|
|
3587
|
-
<span class='line'>3580</span> </span><span class="WHIT">
|
|
3588
|
-
<span class='line'>3581</span> </span><span class="WHIT">
|
|
3589
|
-
<span class='line'>3582</span> </span><span class="WHIT">
|
|
3590
|
-
<span class='line'>3583</span> </span><span class="WHIT">
|
|
3591
|
-
<span class='line'>3584</span> </span><span class="WHIT">
|
|
3592
|
-
<span class='line'>3585</span>
|
|
3593
|
-
<span class='line'>3586</span> </span><span class="WHIT">
|
|
3594
|
-
<span class='line'>3587</span>
|
|
3595
|
-
<span class='line'>3588</span> </span><span class="WHIT">
|
|
3596
|
-
<span class='line'>3589</span> </span><span class="WHIT">
|
|
3597
|
-
<span class='line'>3590</span> </span><span class="WHIT"> </span><span class="
|
|
3598
|
-
<span class='line'>3591</span> </span><span class="WHIT">
|
|
3599
|
-
<span class='line'>3592</span>
|
|
3600
|
-
<span class='line'>3593</span> </span><span class="WHIT">
|
|
3601
|
-
<span class='line'>3594</span> </span><span class="WHIT"> </span><span class="
|
|
3602
|
-
<span class='line'>3595</span> </span><span class="WHIT">
|
|
3603
|
-
<span class='line'>3596</span> </span><span class="WHIT">
|
|
3604
|
-
<span class='line'>3597</span> </span><span class="WHIT">
|
|
3605
|
-
<span class='line'>3598</span> </span><span class="WHIT">
|
|
3606
|
-
<span class='line'>3599</span> </span><span class="WHIT">
|
|
3607
|
-
<span class='line'>3600</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3608
|
-
<span class='line'>3601</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3609
|
-
<span class='line'>3602</span>
|
|
3610
|
-
<span class='line'>3603</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3611
|
-
<span class='line'>3604</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3612
|
-
<span class='line'>3605</span> </span><span class="WHIT">
|
|
3613
|
-
<span class='line'>3606</span>
|
|
3614
|
-
<span class='line'>3607</span> </span><span class="WHIT">
|
|
3615
|
-
<span class='line'>3608</span> </span><span class="WHIT"> </span><span class="
|
|
3616
|
-
<span class='line'>3609</span> </span><span class="WHIT"> </span><span class="
|
|
3617
|
-
<span class='line'>3610</span> </span><span class="WHIT">
|
|
3618
|
-
<span class='line'>3611</span> </span><span class="WHIT"> </span><span class="
|
|
3619
|
-
<span class='line'>3612</span>
|
|
3620
|
-
<span class='line'>3613</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3621
|
-
<span class='line'>3614</span> </span><span class="WHIT">
|
|
3622
|
-
<span class='line'>3615</span>
|
|
3623
|
-
<span class='line'>3616</span> </span><span class="WHIT">
|
|
3624
|
-
<span class='line'>3617</span> </span><span class="WHIT">
|
|
3625
|
-
<span class='line'>3618</span> </span><span class="WHIT">
|
|
3626
|
-
<span class='line'>3619</span> </span><span class="WHIT">
|
|
3627
|
-
<span class='line'>3620</span> </span><span class="WHIT">
|
|
3628
|
-
<span class='line'>3621</span> </span><span class="WHIT">
|
|
3629
|
-
<span class='line'>3622</span> </span><span class="WHIT">
|
|
3630
|
-
<span class='line'>3623</span>
|
|
3631
|
-
<span class='line'>3624</span> </span><span class="WHIT">
|
|
3632
|
-
<span class='line'>3625</span> </span><span class="WHIT">
|
|
3633
|
-
<span class='line'>3626</span> </span><span class="WHIT">
|
|
3634
|
-
<span class='line'>3627</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3635
|
-
<span class='line'>3628</span> </span><span class="WHIT">
|
|
3636
|
-
<span class='line'>3629</span> </span><span class="WHIT">
|
|
3637
|
-
<span class='line'>3630</span> </span><span class="WHIT"> </span><span class="
|
|
3638
|
-
<span class='line'>3631</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3639
|
-
<span class='line'>3632</span> </span><span class="WHIT">
|
|
3640
|
-
<span class='line'>3633</span> </span><span class="WHIT">
|
|
3641
|
-
<span class='line'>3634</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
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"><</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"><</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"><=</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"><=</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"><</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"><</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"><</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"><</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="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"><</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">
|
|
3644
|
-
<span class='line'>3637</span> </span><span class="WHIT">
|
|
3645
|
-
<span class='line'>3638</span>
|
|
3646
|
-
<span class='line'>3639</span>
|
|
3647
|
-
<span class='line'>3640</span> </span><span class="WHIT">
|
|
3648
|
-
<span class='line'>3641</span> </span><span class="WHIT">
|
|
3649
|
-
<span class='line'>3642</span>
|
|
3650
|
-
<span class='line'>3643</span> </span><span class="WHIT">
|
|
3651
|
-
<span class='line'>3644</span>
|
|
3652
|
-
<span class='line'>3645</span>
|
|
3653
|
-
<span class='line'>3646</span>
|
|
3654
|
-
<span class='line'>3647</span>
|
|
3655
|
-
<span class='line'>3648</span>
|
|
3656
|
-
<span class='line'>3649</span>
|
|
3657
|
-
<span class='line'>3650</span>
|
|
3658
|
-
<span class='line'>3651</span>
|
|
3659
|
-
<span class='line'>3652</span>
|
|
3660
|
-
<span class='line'>3653</span>
|
|
3661
|
-
<span class='line'>3654</span>
|
|
3662
|
-
<span class='line'>3655</span>
|
|
3663
|
-
<span class='line'>3656</span>
|
|
3664
|
-
<span class='line'>3657</span> </span><span class="WHIT">
|
|
3665
|
-
<span class='line'>3658</span> </span><span class="WHIT">
|
|
3666
|
-
<span class='line'>3659</span> </span><span class="WHIT">
|
|
3667
|
-
<span class='line'>3660</span> </span><span class="WHIT">
|
|
3668
|
-
<span class='line'>3661</span> </span><span class="WHIT">
|
|
3669
|
-
<span class='line'>3662</span> </span><span class="WHIT"> </span><span class="
|
|
3670
|
-
<span class='line'>3663</span> </span><span class="WHIT">
|
|
3671
|
-
<span class='line'>3664</span> </span><span class="WHIT"> </span><span class="
|
|
3672
|
-
<span class='line'>3665</span> </span><span class="WHIT"> </span><span class="
|
|
3673
|
-
<span class='line'>3666</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3674
|
-
<span class='line'>3667</span> </span><span class="WHIT">
|
|
3675
|
-
<span class='line'>3668</span> </span><span class="WHIT">
|
|
3676
|
-
<span class='line'>3669</span>
|
|
3677
|
-
<span class='line'>3670</span> </span><span class="WHIT">
|
|
3678
|
-
<span class='line'>3671</span> </span><span class="WHIT"> </span><span class="
|
|
3679
|
-
<span class='line'>3672</span> </span><span class="WHIT">
|
|
3680
|
-
<span class='line'>3673</span> </span><span class="WHIT">
|
|
3681
|
-
<span class='line'>3674</span> </span><span class="WHIT"> </span><span class="
|
|
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"><</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"><</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"><</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"><</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"><=</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="
|
|
3684
|
-
<span class='line'>3677</span> </span><span class="WHIT">
|
|
3685
|
-
<span class='line'>3678</span>
|
|
3686
|
-
<span class='line'>3679</span> </span><span class="WHIT">
|
|
3687
|
-
<span class='line'>3680</span>
|
|
3688
|
-
<span class='line'>3681</span>
|
|
3689
|
-
<span class='line'>3682</span>
|
|
3690
|
-
<span class='line'>3683</span>
|
|
3691
|
-
<span class='line'>3684</span>
|
|
3692
|
-
<span class='line'>3685</span>
|
|
3693
|
-
<span class='line'>3686</span>
|
|
3694
|
-
<span class='line'>3687</span>
|
|
3695
|
-
<span class='line'>3688</span>
|
|
3696
|
-
<span class='line'>3689</span>
|
|
3697
|
-
<span class='line'>3690</span>
|
|
3698
|
-
<span class='line'>3691</span>
|
|
3699
|
-
<span class='line'>3692</span>
|
|
3700
|
-
<span class='line'>3693</span> </span><span class="WHIT">
|
|
3701
|
-
<span class='line'>3694</span> </span><span class="WHIT">
|
|
3702
|
-
<span class='line'>3695</span>
|
|
3703
|
-
<span class='line'>3696</span> </span><span class="WHIT"> </span><span class="
|
|
3704
|
-
<span class='line'>3697</span> </span><span class="WHIT">
|
|
3705
|
-
<span class='line'>3698</span> </span><span class="WHIT">
|
|
3706
|
-
<span class='line'>3699</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3707
|
-
<span class='line'>3700</span>
|
|
3708
|
-
<span class='line'>3701</span> </span><span class="WHIT"> </span><span class="
|
|
3709
|
-
<span class='line'>3702</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3710
|
-
<span class='line'>3703</span>
|
|
3711
|
-
<span class='line'>3704</span> </span><span class="WHIT">
|
|
3712
|
-
<span class='line'>3705</span>
|
|
3713
|
-
<span class='line'>3706</span> </span><span class="WHIT">
|
|
3714
|
-
<span class='line'>3707</span> </span><span class="WHIT">
|
|
3715
|
-
<span class='line'>3708</span> </span><span class="WHIT"> </span><span class="
|
|
3716
|
-
<span class='line'>3709</span> </span><span class="WHIT">
|
|
3717
|
-
<span class='line'>3710</span> </span><span class="WHIT">
|
|
3718
|
-
<span class='line'>3711</span>
|
|
3719
|
-
<span class='line'>3712</span>
|
|
3720
|
-
<span class='line'>3713</span> </span><span class="WHIT">
|
|
3721
|
-
<span class='line'>3714</span> </span><span class="WHIT">
|
|
3722
|
-
<span class='line'>3715</span> </span><span class="WHIT">
|
|
3723
|
-
<span class='line'>3716</span>
|
|
3724
|
-
<span class='line'>3717</span> </span><span class="WHIT">
|
|
3725
|
-
<span class='line'>3718</span> </span><span class="WHIT">
|
|
3726
|
-
<span class='line'>3719</span> </span><span class="WHIT">
|
|
3727
|
-
<span class='line'>3720</span> </span><span class="WHIT">
|
|
3728
|
-
<span class='line'>3721</span> </span><span class="WHIT">
|
|
3729
|
-
<span class='line'>3722</span> </span><span class="WHIT">
|
|
3730
|
-
<span class='line'>3723</span>
|
|
3731
|
-
<span class='line'>3724</span> </span><span class="WHIT">
|
|
3732
|
-
<span class='line'>3725</span> </span><span class="WHIT">
|
|
3733
|
-
<span class='line'>3726</span> </span><span class="WHIT">
|
|
3734
|
-
<span class='line'>3727</span> </span><span class="WHIT">
|
|
3735
|
-
<span class='line'>3728</span>
|
|
3736
|
-
<span class='line'>3729</span> </span><span class="WHIT">
|
|
3737
|
-
<span class='line'>3730</span> </span><span class="WHIT">
|
|
3738
|
-
<span class='line'>3731</span>
|
|
3739
|
-
<span class='line'>3732</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3740
|
-
<span class='line'>3733</span>
|
|
3741
|
-
<span class='line'>3734</span> </span><span class="WHIT">
|
|
3742
|
-
<span class='line'>3735</span> </span><span class="WHIT"> </span><span class="
|
|
3743
|
-
<span class='line'>3736</span>
|
|
3744
|
-
<span class='line'>3737</span> </span><span class="WHIT">
|
|
3745
|
-
<span class='line'>3738</span> </span><span class="WHIT">
|
|
3746
|
-
<span class='line'>3739</span>
|
|
3747
|
-
<span class='line'>3740</span> </span><span class="WHIT">
|
|
3748
|
-
<span class='line'>3741</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
3749
|
-
<span class='line'>3742</span>
|
|
3750
|
-
<span class='line'>3743</span> </span><span class="WHIT">
|
|
3751
|
-
<span class='line'>3744</span> </span><span class="WHIT">
|
|
3752
|
-
<span class='line'>3745</span>
|
|
3753
|
-
<span class='line'>3746</span> </span><span class="WHIT">
|
|
3754
|
-
<span class='line'>3747</span> </span><span class="WHIT">
|
|
3755
|
-
<span class='line'>3748</span>
|
|
3756
|
-
<span class='line'>3749</span> </span><span class="WHIT">
|
|
3757
|
-
<span class='line'>3750</span>
|
|
3758
|
-
<span class='line'>3751</span> </span><span class="WHIT">
|
|
3759
|
-
<span class='line'>3752</span> </span><span class="WHIT">
|
|
3760
|
-
<span class='line'>3753</span> </span><span class="WHIT">
|
|
3761
|
-
<span class='line'>3754</span> </span><span class="WHIT">
|
|
3762
|
-
<span class='line'>3755</span> </span><span class="WHIT">
|
|
3763
|
-
<span class='line'>3756</span> </span><span class="WHIT"> </span><span class="
|
|
3764
|
-
<span class='line'>3757</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3765
|
-
<span class='line'>3758</span> </span><span class="WHIT">
|
|
3766
|
-
<span class='line'>3759</span>
|
|
3767
|
-
<span class='line'>3760</span> </span><span class="WHIT"> </span><span class="
|
|
3768
|
-
<span class='line'>3761</span> </span><span class="WHIT">
|
|
3769
|
-
<span class='line'>3762</span> </span><span class="WHIT">
|
|
3770
|
-
<span class='line'>3763</span> </span><span class="WHIT"> </span><span class="
|
|
3771
|
-
<span class='line'>3764</span>
|
|
3772
|
-
<span class='line'>3765</span> </span><span class="WHIT"> </span><span class="
|
|
3773
|
-
<span class='line'>3766</span> </span><span class="WHIT"> </span><span class="
|
|
3774
|
-
<span class='line'>3767</span> </span><span class="WHIT"> </span><span class="
|
|
3775
|
-
<span class='line'>3768</span> </span><span class="WHIT">
|
|
3776
|
-
<span class='line'>3769</span>
|
|
3777
|
-
<span class='line'>3770</span> </span><span class="WHIT">
|
|
3778
|
-
<span class='line'>3771</span> </span><span class="WHIT">
|
|
3779
|
-
<span class='line'>3772</span> </span><span class="WHIT">
|
|
3780
|
-
<span class='line'>3773</span> </span><span class="WHIT">
|
|
3781
|
-
<span class='line'>3774</span> </span><span class="WHIT">
|
|
3782
|
-
<span class='line'>3775</span> </span><span class="WHIT">
|
|
3783
|
-
<span class='line'>3776</span>
|
|
3784
|
-
<span class='line'>3777</span> </span><span class="WHIT">
|
|
3785
|
-
<span class='line'>3778</span>
|
|
3786
|
-
<span class='line'>3779</span> </span><span class="WHIT">
|
|
3787
|
-
<span class='line'>3780</span> </span><span class="WHIT">
|
|
3788
|
-
<span class='line'>3781</span>
|
|
3789
|
-
<span class='line'>3782</span> </span><span class="WHIT">
|
|
3790
|
-
<span class='line'>3783</span> </span><span class="WHIT">
|
|
3791
|
-
<span class='line'>3784</span> </span><span class="WHIT">
|
|
3792
|
-
<span class='line'>3785</span> </span><span class="WHIT">
|
|
3793
|
-
<span class='line'>3786</span>
|
|
3794
|
-
<span class='line'>3787</span> </span><span class="WHIT"> </span><span class="
|
|
3795
|
-
<span class='line'>3788</span> </span><span class="WHIT">
|
|
3796
|
-
<span class='line'>3789</span>
|
|
3797
|
-
<span class='line'>3790</span> </span><span class="WHIT">
|
|
3798
|
-
<span class='line'>3791</span> </span><span class="WHIT">
|
|
3799
|
-
<span class='line'>3792</span>
|
|
3800
|
-
<span class='line'>3793</span> </span><span class="WHIT">
|
|
3801
|
-
<span class='line'>3794</span>
|
|
3802
|
-
<span class='line'>3795</span>
|
|
3803
|
-
<span class='line'>3796</span>
|
|
3804
|
-
<span class='line'>3797</span>
|
|
3805
|
-
<span class='line'>3798</span>
|
|
3806
|
-
<span class='line'>3799</span>
|
|
3807
|
-
<span class='line'>3800</span>
|
|
3808
|
-
<span class='line'>3801</span>
|
|
3809
|
-
<span class='line'>3802</span>
|
|
3810
|
-
<span class='line'>3803</span> </span><span class="WHIT">
|
|
3811
|
-
<span class='line'>3804</span> </span><span class="WHIT">
|
|
3812
|
-
<span class='line'>3805</span> </span><span class="WHIT"> </span><span class="
|
|
3813
|
-
<span class='line'>3806</span> </span><span class="WHIT">
|
|
3814
|
-
<span class='line'>3807</span> </span><span class="WHIT">
|
|
3815
|
-
<span class='line'>3808</span>
|
|
3816
|
-
<span class='line'>3809</span> </span><span class="WHIT">
|
|
3817
|
-
<span class='line'>3810</span>
|
|
3818
|
-
<span class='line'>3811</span>
|
|
3819
|
-
<span class='line'>3812</span>
|
|
3820
|
-
<span class='line'>3813</span>
|
|
3821
|
-
<span class='line'>3814</span>
|
|
3822
|
-
<span class='line'>3815</span>
|
|
3823
|
-
<span class='line'>3816</span>
|
|
3824
|
-
<span class='line'>3817</span>
|
|
3825
|
-
<span class='line'>3818</span>
|
|
3826
|
-
<span class='line'>3819</span> </span><span class="WHIT">
|
|
3827
|
-
<span class='line'>3820</span> </span><span class="WHIT">
|
|
3828
|
-
<span class='line'>3821</span> </span><span class="WHIT">
|
|
3829
|
-
<span class='line'>3822</span> </span><span class="WHIT">
|
|
3830
|
-
<span class='line'>3823</span> </span><span class="WHIT">
|
|
3831
|
-
<span class='line'>3824</span> </span><span class="WHIT">
|
|
3832
|
-
<span class='line'>3825</span>
|
|
3833
|
-
<span class='line'>3826</span>
|
|
3834
|
-
<span class='line'>3827</span> </span><span class="WHIT">
|
|
3835
|
-
<span class='line'>3828</span>
|
|
3836
|
-
<span class='line'>3829</span> </span><span class="WHIT">
|
|
3837
|
-
<span class='line'>3830</span>
|
|
3838
|
-
<span class='line'>3831</span>
|
|
3839
|
-
<span class='line'>3832</span>
|
|
3840
|
-
<span class='line'>3833</span>
|
|
3841
|
-
<span class='line'>3834</span>
|
|
3842
|
-
<span class='line'>3835</span>
|
|
3843
|
-
<span class='line'>3836</span>
|
|
3844
|
-
<span class='line'>3837</span>
|
|
3845
|
-
<span class='line'>3838</span>
|
|
3846
|
-
<span class='line'>3839</span> </span><span class="WHIT">
|
|
3847
|
-
<span class='line'>3840</span>
|
|
3848
|
-
<span class='line'>3841</span> </span><span class="WHIT">
|
|
3849
|
-
<span class='line'>3842</span> </span><span class="WHIT">
|
|
3850
|
-
<span class='line'>3843</span> </span><span class="WHIT">
|
|
3851
|
-
<span class='line'>3844</span>
|
|
3852
|
-
<span class='line'>3845</span> </span><span class="WHIT">
|
|
3853
|
-
<span class='line'>3846</span>
|
|
3854
|
-
<span class='line'>3847</span>
|
|
3855
|
-
<span class='line'>3848</span>
|
|
3856
|
-
<span class='line'>3849</span>
|
|
3857
|
-
<span class='line'>3850</span>
|
|
3858
|
-
<span class='line'>3851</span>
|
|
3859
|
-
<span class='line'>3852</span>
|
|
3860
|
-
<span class='line'>3853</span>
|
|
3861
|
-
<span class='line'>3854</span>
|
|
3862
|
-
<span class='line'>3855</span> </span><span class="WHIT">
|
|
3863
|
-
<span class='line'>3856</span> </span><span class="WHIT">
|
|
3864
|
-
<span class='line'>3857</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3865
|
-
<span class='line'>3858</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3866
|
-
<span class='line'>3859</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
3867
|
-
<span class='line'>3860</span>
|
|
3868
|
-
<span class='line'>3861</span> </span><span class="WHIT"> </span><span class="
|
|
3869
|
-
<span class='line'>3862</span>
|
|
3870
|
-
<span class='line'>3863</span>
|
|
3871
|
-
<span class='line'>3864</span> </span><span class="WHIT">
|
|
3872
|
-
<span class='line'>3865</span> </span><span class="WHIT">
|
|
3873
|
-
<span class='line'>3866</span>
|
|
3874
|
-
<span class='line'>3867</span> </span><span class="WHIT">
|
|
3875
|
-
<span class='line'>3868</span> </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> * <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"><</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"><</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"><=</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"><</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"><</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"><</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"><</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"><=</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"><</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"><</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"><=</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"><=</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 <tt>x</tt> is smaller than <tt>eps</tt> it is considered to be equal <tt>0</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"><</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">
|
|
3878
|
-
<span class='line'>3871</span> </span><span class="WHIT">
|
|
3879
|
-
<span class='line'>3872</span> </span><span class="WHIT">
|
|
3880
|
-
<span class='line'>3873</span> </span><span class="WHIT">
|
|
3881
|
-
<span class='line'>3874</span> </span><span class="WHIT">
|
|
3882
|
-
<span class='line'>3875</span> </span><span class="WHIT">
|
|
3883
|
-
<span class='line'>3876</span>
|
|
3884
|
-
<span class='line'>3877</span>
|
|
3885
|
-
<span class='line'>3878</span> </span><span class="WHIT"> </span><span class="
|
|
3886
|
-
<span class='line'>3879</span> </span><span class="WHIT">
|
|
3887
|
-
<span class='line'>3880</span> </span><span class="WHIT"> </span><span class="
|
|
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"><</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>
|
|
3890
|
-
<span class='line'>3883</span> </span><span class="WHIT">
|
|
3891
|
-
<span class='line'>3884</span> </span><span class="WHIT">
|
|
3892
|
-
<span class='line'>3885</span> </span><span class="WHIT">
|
|
3893
|
-
<span class='line'>3886</span>
|
|
3894
|
-
<span class='line'>3887</span>
|
|
3895
|
-
<span class='line'>3888</span>
|
|
3896
|
-
<span class='line'>3889</span>
|
|
3897
|
-
<span class='line'>3890</span>
|
|
3898
|
-
<span class='line'>3891</span>
|
|
3899
|
-
<span class='line'>3892</span>
|
|
3900
|
-
<span class='line'>3893</span>
|
|
3901
|
-
<span class='line'>3894</span>
|
|
3902
|
-
<span class='line'>3895</span>
|
|
3903
|
-
<span class='line'>3896</span>
|
|
3904
|
-
<span class='line'>3897</span>
|
|
3905
|
-
<span class='line'>3898</span>
|
|
3906
|
-
<span class='line'>3899</span>
|
|
3907
|
-
<span class='line'>3900</span>
|
|
3908
|
-
<span class='line'>3901</span> </span><span class="WHIT">
|
|
3909
|
-
<span class='line'>3902</span> </span><span class="WHIT">
|
|
3910
|
-
<span class='line'>3903</span> </span><span class="WHIT">
|
|
3911
|
-
<span class='line'>3904</span>
|
|
3912
|
-
<span class='line'>3905</span>
|
|
3913
|
-
<span class='line'>3906</span> </span><span class="WHIT">
|
|
3914
|
-
<span class='line'>3907</span> </span><span class="WHIT">
|
|
3915
|
-
<span class='line'>3908</span> </span><span class="WHIT">
|
|
3916
|
-
<span class='line'>3909</span> </span><span class="WHIT">
|
|
3917
|
-
<span class='line'>3910</span> </span><span class="WHIT">
|
|
3918
|
-
<span class='line'>3911</span> </span><span class="WHIT">
|
|
3919
|
-
<span class='line'>3912</span> </span><span class="WHIT">
|
|
3920
|
-
<span class='line'>3913</span>
|
|
3921
|
-
<span class='line'>3914</span> </span><span class="WHIT"> </span><span class="
|
|
3922
|
-
<span class='line'>3915</span> </span><span class="WHIT">
|
|
3923
|
-
<span class='line'>3916</span> </span><span class="WHIT">
|
|
3924
|
-
<span class='line'>3917</span> </span><span class="WHIT"> </span><span class="
|
|
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">
|
|
3927
|
-
<span class='line'>3920</span> </span><span class="WHIT">
|
|
3928
|
-
<span class='line'>3921</span> </span><span class="WHIT"> </span><span class="
|
|
3929
|
-
<span class='line'>3922</span>
|
|
3930
|
-
<span class='line'>3923</span>
|
|
3931
|
-
<span class='line'>3924</span>
|
|
3932
|
-
<span class='line'>3925</span>
|
|
3933
|
-
<span class='line'>3926</span>
|
|
3934
|
-
<span class='line'>3927</span>
|
|
3935
|
-
<span class='line'>3928</span>
|
|
3936
|
-
<span class='line'>3929</span>
|
|
3937
|
-
<span class='line'>3930</span>
|
|
3938
|
-
<span class='line'>3931</span>
|
|
3939
|
-
<span class='line'>3932</span>
|
|
3940
|
-
<span class='line'>3933</span>
|
|
3941
|
-
<span class='line'>3934</span>
|
|
3942
|
-
<span class='line'>3935</span>
|
|
3943
|
-
<span class='line'>3936</span>
|
|
3944
|
-
<span class='line'>3937</span>
|
|
3945
|
-
<span class='line'>3938</span> </span><span class="WHIT">
|
|
3946
|
-
<span class='line'>3939</span> </span><span class="WHIT">
|
|
3947
|
-
<span class='line'>3940</span>
|
|
3948
|
-
<span class='line'>3941</span> </span><span class="WHIT"> </span><span class="
|
|
3949
|
-
<span class='line'>3942</span> </span><span class="WHIT">
|
|
3950
|
-
<span class='line'>3943</span> </span><span class="WHIT">
|
|
3951
|
-
<span class='line'>3944</span> </span><span class="WHIT">
|
|
3952
|
-
<span class='line'>3945</span> </span><span class="WHIT">
|
|
3953
|
-
<span class='line'>3946</span> </span><span class="WHIT">
|
|
3954
|
-
<span class='line'>3947</span> </span><span class="WHIT">
|
|
3955
|
-
<span class='line'>3948</span> </span><span class="WHIT">
|
|
3956
|
-
<span class='line'>3949</span> </span><span class="WHIT">
|
|
3957
|
-
<span class='line'>3950</span> </span><span class="WHIT">
|
|
3958
|
-
<span class='line'>3951</span> </span><span class="WHIT">
|
|
3959
|
-
<span class='line'>3952</span> </span><span class="WHIT">
|
|
3960
|
-
<span class='line'>3953</span> </span><span class="WHIT">
|
|
3961
|
-
<span class='line'>3954</span>
|
|
3962
|
-
<span class='line'>3955</span> </span><span class="WHIT">
|
|
3963
|
-
<span class='line'>3956</span> </span><span class="WHIT">
|
|
3964
|
-
<span class='line'>3957</span>
|
|
3965
|
-
<span class='line'>3958</span>
|
|
3966
|
-
<span class='line'>3959</span>
|
|
3967
|
-
<span class='line'>3960</span>
|
|
3968
|
-
<span class='line'>3961</span>
|
|
3969
|
-
<span class='line'>3962</span>
|
|
3970
|
-
<span class='line'>3963</span> </span><span class="WHIT">
|
|
3971
|
-
<span class='line'>3964</span> </span><span class="WHIT">
|
|
3972
|
-
<span class='line'>3965</span> </span><span class="WHIT">
|
|
3973
|
-
<span class='line'>3966</span> </span><span class="WHIT">
|
|
3974
|
-
<span class='line'>3967</span>
|
|
3975
|
-
<span class='line'>3968</span> </span><span class="WHIT">
|
|
3976
|
-
<span class='line'>3969</span>
|
|
3977
|
-
<span class='line'>3970</span>
|
|
3978
|
-
<span class='line'>3971</span>
|
|
3979
|
-
<span class='line'>3972</span>
|
|
3980
|
-
<span class='line'>3973</span>
|
|
3981
|
-
<span class='line'>3974</span>
|
|
3982
|
-
<span class='line'>3975</span>
|
|
3983
|
-
<span class='line'>3976</span>
|
|
3984
|
-
<span class='line'>3977</span>
|
|
3985
|
-
<span class='line'>3978</span>
|
|
3986
|
-
<span class='line'>3979</span>
|
|
3987
|
-
<span class='line'>3980</span>
|
|
3988
|
-
<span class='line'>3981</span>
|
|
3989
|
-
<span class='line'>3982</span>
|
|
3990
|
-
<span class='line'>3983</span>
|
|
3991
|
-
<span class='line'>3984</span>
|
|
3992
|
-
<span class='line'>3985</span>
|
|
3993
|
-
<span class='line'>3986</span>
|
|
3994
|
-
<span class='line'>3987</span>
|
|
3995
|
-
<span class='line'>3988</span>
|
|
3996
|
-
<span class='line'>3989</span>
|
|
3997
|
-
<span class='line'>3990</span>
|
|
3998
|
-
<span class='line'>3991</span>
|
|
3999
|
-
<span class='line'>3992</span>
|
|
4000
|
-
<span class='line'>3993</span>
|
|
4001
|
-
<span class='line'>3994</span>
|
|
4002
|
-
<span class='line'>3995</span> *
|
|
4003
|
-
<span class='line'>3996</span> *
|
|
4004
|
-
<span class='line'>3997</span> *
|
|
4005
|
-
<span class='line'>3998</span>
|
|
4006
|
-
<span class='line'>3999</span>
|
|
4007
|
-
<span class='line'>4000</span>
|
|
4008
|
-
<span class='line'>4001</span>
|
|
4009
|
-
<span class='line'>4002</span>
|
|
4010
|
-
<span class='line'>4003</span>
|
|
4011
|
-
<span class='line'>4004</span>
|
|
4012
|
-
<span class='line'>4005</span> *
|
|
4013
|
-
<span class='line'>4006</span> *
|
|
4014
|
-
<span class='line'>4007</span> *
|
|
4015
|
-
<span class='line'>4008</span> *
|
|
4016
|
-
<span class='line'>4009</span> *
|
|
4017
|
-
<span class='line'>4010</span> *
|
|
4018
|
-
<span class='line'>4011</span> *
|
|
4019
|
-
<span class='line'>4012</span> *
|
|
4020
|
-
<span class='line'>4013</span> *
|
|
4021
|
-
<span class='line'>4014</span> *
|
|
4022
|
-
<span class='line'>4015</span> *
|
|
4023
|
-
<span class='line'>4016</span> *
|
|
4024
|
-
<span class='line'>4017</span> *
|
|
4025
|
-
<span class='line'>4018</span> *
|
|
4026
|
-
<span class='line'>4019</span> *
|
|
4027
|
-
<span class='line'>4020</span> *
|
|
4028
|
-
<span class='line'>4021</span> *
|
|
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"><</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 <tt>x</tt> is smaller than <tt>eps</tt> it is considered to be equal <tt>0</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"><=</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"><=</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"><</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"><</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"><</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"><</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 < 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> *
|
|
4031
|
-
<span class='line'>4024</span> *
|
|
4032
|
-
<span class='line'>4025</span> *
|
|
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> *
|
|
4035
|
-
<span class='line'>4028</span> *
|
|
4036
|
-
<span class='line'>4029</span> *
|
|
4037
|
-
<span class='line'>4030</span> *
|
|
4038
|
-
<span class='line'>4031</span> *
|
|
4039
|
-
<span class='line'>4032</span> *
|
|
4040
|
-
<span class='line'>4033</span> *
|
|
4041
|
-
<span class='line'>4034</span> *
|
|
4042
|
-
<span class='line'>4035</span> *
|
|
4043
|
-
<span class='line'>4036</span> *
|
|
4044
|
-
<span class='line'>4037</span> *
|
|
4045
|
-
<span class='line'>4038</span> *
|
|
4046
|
-
<span class='line'>4039</span> *
|
|
4047
|
-
<span class='line'>4040</span> *
|
|
4048
|
-
<span class='line'>4041</span> *
|
|
4049
|
-
<span class='line'>4042</span> *
|
|
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 < 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>
|
|
4052
|
-
<span class='line'>4045</span>
|
|
4053
|
-
<span class='line'>4046</span>
|
|
4054
|
-
<span class='line'>4047</span>
|
|
4055
|
-
<span class='line'>4048</span>
|
|
4056
|
-
<span class='line'>4049</span>
|
|
4057
|
-
<span class='line'>4050</span>
|
|
4058
|
-
<span class='line'>4051</span>
|
|
4059
|
-
<span class='line'>4052</span>
|
|
4060
|
-
<span class='line'>4053</span>
|
|
4061
|
-
<span class='line'>4054</span>
|
|
4062
|
-
<span class='line'>4055</span>
|
|
4063
|
-
<span class='line'>4056</span>
|
|
4064
|
-
<span class='line'>4057</span>
|
|
4065
|
-
<span class='line'>4058</span>
|
|
4066
|
-
<span class='line'>4059</span>
|
|
4067
|
-
<span class='line'>4060</span>
|
|
4068
|
-
<span class='line'>4061</span>
|
|
4069
|
-
<span class='line'>4062</span>
|
|
4070
|
-
<span class='line'>4063</span>
|
|
4071
|
-
<span class='line'>4064</span>
|
|
4072
|
-
<span class='line'>4065</span>
|
|
4073
|
-
<span class='line'>4066</span>
|
|
4074
|
-
<span class='line'>4067</span>
|
|
4075
|
-
<span class='line'>4068</span>
|
|
4076
|
-
<span class='line'>4069</span>
|
|
4077
|
-
<span class='line'>4070</span>
|
|
4078
|
-
<span class='line'>4071</span>
|
|
4079
|
-
<span class='line'>4072</span>
|
|
4080
|
-
<span class='line'>4073</span>
|
|
4081
|
-
<span class='line'>4074</span>
|
|
4082
|
-
<span class='line'>4075</span>
|
|
4083
|
-
<span class='line'>4076</span>
|
|
4084
|
-
<span class='line'>4077</span>
|
|
4085
|
-
<span class='line'>4078</span>
|
|
4086
|
-
<span class='line'>4079</span>
|
|
4087
|
-
<span class='line'>4080</span>
|
|
4088
|
-
<span class='line'>4081</span> </span><span class="WHIT">
|
|
4089
|
-
<span class='line'>4082</span> </span><span class="WHIT">
|
|
4090
|
-
<span class='line'>4083</span> </span><span class="WHIT">
|
|
4091
|
-
<span class='line'>4084</span> </span><span class="WHIT"> </span><span class="
|
|
4092
|
-
<span class='line'>4085</span> </span><span class="WHIT"> </span><span class="
|
|
4093
|
-
<span class='line'>4086</span> </span><span class="WHIT">
|
|
4094
|
-
<span class='line'>4087</span> </span><span class="WHIT">
|
|
4095
|
-
<span class='line'>4088</span> </span><span class="WHIT">
|
|
4096
|
-
<span class='line'>4089</span> </span><span class="WHIT">
|
|
4097
|
-
<span class='line'>4090</span> </span><span class="WHIT">
|
|
4098
|
-
<span class='line'>4091</span> </span><span class="WHIT">
|
|
4099
|
-
<span class='line'>4092</span> </span><span class="WHIT">
|
|
4100
|
-
<span class='line'>4093</span> </span><span class="WHIT">
|
|
4101
|
-
<span class='line'>4094</span>
|
|
4102
|
-
<span class='line'>4095</span> </span><span class="WHIT">
|
|
4103
|
-
<span class='line'>4096</span>
|
|
4104
|
-
<span class='line'>4097</span> </span><span class="WHIT">
|
|
4105
|
-
<span class='line'>4098</span> </span><span class="WHIT">
|
|
4106
|
-
<span class='line'>4099</span> </span><span class="WHIT">
|
|
4107
|
-
<span class='line'>4100</span>
|
|
4108
|
-
<span class='line'>4101</span>
|
|
4109
|
-
<span class='line'>4102</span> </span><span class="WHIT"> </span><span class="
|
|
4110
|
-
<span class='line'>4103</span> </span><span class="WHIT">
|
|
4111
|
-
<span class='line'>4104</span> </span><span class="WHIT">
|
|
4112
|
-
<span class='line'>4105</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
4113
|
-
<span class='line'>4106</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
4114
|
-
<span class='line'>4107</span> </span><span class="WHIT">
|
|
4115
|
-
<span class='line'>4108</span> </span><span class="WHIT"> </span><span class="
|
|
4051
|
+
<span class='line'>4044</span> * </pre><div id="JXGce0cc55c-b592-11e6-8270-104a7d3be7eb" class="jxgbox" style="width: 300px; height: 300px;"></div>
|
|
4052
|
+
<span class='line'>4045</span> * <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 < 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 < 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> * </script><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"><=</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">//
|
|
4118
|
-
<span class='line'>4111</span> </span><span class="WHIT"> </span><span class="
|
|
4119
|
-
<span class='line'>4112</span> </span><span class="WHIT"> </span><span class="
|
|
4120
|
-
<span class='line'>4113</span> </span><span class="WHIT">
|
|
4121
|
-
<span class='line'>4114</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
4122
|
-
<span class='line'>4115</span> </span><span class="WHIT"> </span><span class="
|
|
4123
|
-
<span class='line'>4116</span> </span><span class="WHIT">
|
|
4124
|
-
<span class='line'>4117</span> </span><span class="WHIT">
|
|
4125
|
-
<span class='line'>4118</span>
|
|
4126
|
-
<span class='line'>4119</span> </span><span class="WHIT">
|
|
4127
|
-
<span class='line'>4120</span> </span><span class="WHIT"> </span><span class="
|
|
4128
|
-
<span class='line'>4121</span> </span><span class="WHIT"> </span><span class="
|
|
4129
|
-
<span class='line'>4122</span> </span><span class="WHIT">
|
|
4130
|
-
<span class='line'>4123</span>
|
|
4131
|
-
<span class='line'>4124</span> </span><span class="WHIT">
|
|
4132
|
-
<span class='line'>4125</span> </span><span class="WHIT">
|
|
4133
|
-
<span class='line'>4126</span> </span><span class="WHIT">
|
|
4134
|
-
<span class='line'>4127</span> </span><span class="WHIT">
|
|
4135
|
-
<span class='line'>4128</span> </span><span class="WHIT">
|
|
4136
|
-
<span class='line'>4129</span>
|
|
4137
|
-
<span class='line'>4130</span> </span><span class="WHIT">
|
|
4138
|
-
<span class='line'>4131</span> </span><span class="WHIT">
|
|
4139
|
-
<span class='line'>4132</span> </span><span class="WHIT">
|
|
4140
|
-
<span class='line'>4133</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
4141
|
-
<span class='line'>4134</span> </span><span class="WHIT">
|
|
4142
|
-
<span class='line'>4135</span> </span><span class="WHIT">
|
|
4143
|
-
<span class='line'>4136</span>
|
|
4144
|
-
<span class='line'>4137</span> </span><span class="WHIT">
|
|
4145
|
-
<span class='line'>4138</span> </span><span class="WHIT">
|
|
4146
|
-
<span class='line'>4139</span> </span><span class="WHIT">
|
|
4147
|
-
<span class='line'>4140</span>
|
|
4148
|
-
<span class='line'>4141</span> </span><span class="WHIT">
|
|
4149
|
-
<span class='line'>4142</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
4150
|
-
<span class='line'>4143</span> </span><span class="WHIT">
|
|
4151
|
-
<span class='line'>4144</span> </span><span class="WHIT">
|
|
4152
|
-
<span class='line'>4145</span>
|
|
4153
|
-
<span class='line'>4146</span> </span><span class="WHIT">
|
|
4154
|
-
<span class='line'>4147</span> </span><span class="WHIT">
|
|
4155
|
-
<span class='line'>4148</span> </span><span class="WHIT">
|
|
4156
|
-
<span class='line'>4149</span> </span><span class="WHIT">
|
|
4157
|
-
<span class='line'>4150</span> </span><span class="WHIT">
|
|
4158
|
-
<span class='line'>4151</span> </span><span class="WHIT"> </span><span class="
|
|
4159
|
-
<span class='line'>4152</span>
|
|
4160
|
-
<span class='line'>4153</span> </span><span class="WHIT">
|
|
4161
|
-
<span class='line'>4154</span>
|
|
4162
|
-
<span class='line'>4155</span> </span><span class="WHIT">
|
|
4163
|
-
<span class='line'>4156</span>
|
|
4164
|
-
<span class='line'>4157</span> </span><span class="WHIT">
|
|
4165
|
-
<span class='line'>4158</span> </span><span class="WHIT">
|
|
4166
|
-
<span class='line'>4159</span>
|
|
4167
|
-
<span class='line'>4160</span> </span><span class="WHIT">
|
|
4168
|
-
<span class='line'>4161</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
4169
|
-
<span class='line'>4162</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
4170
|
-
<span class='line'>4163</span> </span><span class="WHIT">
|
|
4171
|
-
<span class='line'>4164</span>
|
|
4172
|
-
<span class='line'>4165</span>
|
|
4173
|
-
<span class='line'>4166</span> </span><span class="WHIT">
|
|
4174
|
-
<span class='line'>4167</span> </span><span class="PUNC">
|
|
4175
|
-
<span class='line'>4168</span>
|
|
4176
|
-
<span class='line'>4169</span> </span><span class="NAME">
|
|
4177
|
-
<span class='line'>4170</span> </span
|
|
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"><</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>
|