jsxgraph 1.10.0 → 1.10.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 -0
- package/distrib/docs/files.html +2 -61
- package/distrib/docs/index.html +2 -58
- package/distrib/docs/static/jsxgraphcore.js +2 -2
- package/distrib/docs/symbols/Angle.html +2 -18
- package/distrib/docs/symbols/Arc.html +2 -18
- package/distrib/docs/symbols/Arrow.html +2 -18
- package/distrib/docs/symbols/Arrowparallel.html +2 -18
- package/distrib/docs/symbols/Axes3D.html +2 -18
- package/distrib/docs/symbols/Axis.html +2 -18
- package/distrib/docs/symbols/Axis3D.html +2 -18
- package/distrib/docs/symbols/Bisector.html +2 -18
- package/distrib/docs/symbols/Bisectorlines.html +2 -18
- package/distrib/docs/symbols/Boxplot.html +2 -18
- package/distrib/docs/symbols/Button.html +2 -18
- package/distrib/docs/symbols/Cardinalspline.html +2 -18
- package/distrib/docs/symbols/Chart.html +2 -18
- package/distrib/docs/symbols/Checkbox.html +2 -18
- package/distrib/docs/symbols/Circle.html +2 -18
- package/distrib/docs/symbols/Circle3D.html +2 -18
- package/distrib/docs/symbols/Circumcenter.html +2 -18
- package/distrib/docs/symbols/Circumcircle.html +2 -18
- package/distrib/docs/symbols/CircumcircleArc.html +2 -18
- package/distrib/docs/symbols/CircumcircleSector.html +2 -18
- package/distrib/docs/symbols/Comb.html +2 -18
- package/distrib/docs/symbols/Conic.html +2 -18
- package/distrib/docs/symbols/Curve.html +2 -18
- package/distrib/docs/symbols/Curve3D.html +2 -18
- package/distrib/docs/symbols/CurveDifference.html +2 -18
- package/distrib/docs/symbols/CurveIntersection.html +2 -18
- package/distrib/docs/symbols/CurveUnion.html +2 -18
- package/distrib/docs/symbols/Derivative.html +2 -18
- package/distrib/docs/symbols/Ellipse.html +2 -18
- package/distrib/docs/symbols/ForeignObject.html +2 -18
- package/distrib/docs/symbols/Functiongraph.html +2 -18
- package/distrib/docs/symbols/Functiongraph3D.html +2 -18
- package/distrib/docs/symbols/Glider.html +2 -18
- package/distrib/docs/symbols/Grid.html +2 -18
- package/distrib/docs/symbols/Group.html +2 -18
- package/distrib/docs/symbols/Hatch.html +2 -18
- package/distrib/docs/symbols/Hyperbola.html +2 -18
- package/distrib/docs/symbols/Image.html +2 -18
- package/distrib/docs/symbols/ImplicitCurve.html +2 -18
- package/distrib/docs/symbols/Incenter.html +2 -18
- package/distrib/docs/symbols/Incircle.html +2 -18
- package/distrib/docs/symbols/Inequality.html +2 -18
- package/distrib/docs/symbols/Input.html +2 -18
- package/distrib/docs/symbols/Integral.html +2 -18
- package/distrib/docs/symbols/Intersection.html +2 -18
- package/distrib/docs/symbols/IntersectionCircle3D.html +2 -18
- package/distrib/docs/symbols/IntersectionLine3D.html +2 -18
- package/distrib/docs/symbols/JXG.AbstractRenderer.html +2 -18
- package/distrib/docs/symbols/JXG.Board.html +4 -20
- package/distrib/docs/symbols/JXG.Board.infobox.html +2 -18
- package/distrib/docs/symbols/JXG.C.html +2 -18
- package/distrib/docs/symbols/JXG.CA.html +2 -18
- package/distrib/docs/symbols/JXG.CanvasRenderer.html +2 -18
- package/distrib/docs/symbols/JXG.Chart.html +2 -18
- package/distrib/docs/symbols/JXG.Circle.html +2 -18
- package/distrib/docs/symbols/JXG.Circle3D.html +2 -18
- package/distrib/docs/symbols/JXG.Complex.html +2 -18
- package/distrib/docs/symbols/JXG.Composition.html +2 -18
- package/distrib/docs/symbols/JXG.Coords.html +2 -18
- package/distrib/docs/symbols/JXG.CoordsElement.html +98 -22
- package/distrib/docs/symbols/JXG.Curve.html +2 -18
- package/distrib/docs/symbols/JXG.Curve3D.html +2 -18
- package/distrib/docs/symbols/JXG.Dump.html +2 -18
- package/distrib/docs/symbols/JXG.EventEmitter.html +2 -18
- package/distrib/docs/symbols/JXG.Expect.html +2 -18
- package/distrib/docs/symbols/JXG.ForeignObject.html +2 -18
- package/distrib/docs/symbols/JXG.GeometryElement.html +2 -18
- package/distrib/docs/symbols/JXG.GeometryElement3D.html +2 -18
- package/distrib/docs/symbols/JXG.GeonextParser.html +2 -18
- package/distrib/docs/symbols/JXG.Group.html +2 -18
- package/distrib/docs/symbols/JXG.Image.html +2 -18
- package/distrib/docs/symbols/JXG.JSXGraph.html +2 -18
- package/distrib/docs/symbols/JXG.JessieCode.html +2 -18
- package/distrib/docs/symbols/JXG.Legend.html +2 -18
- package/distrib/docs/symbols/JXG.Line.html +2 -18
- package/distrib/docs/symbols/JXG.Line3D.html +2 -18
- package/distrib/docs/symbols/JXG.Math.BoxQuadtree.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Clip.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Extrapolate.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Geometry.html +2 -18
- package/distrib/docs/symbols/JXG.Math.ImplicitPlot.html +2 -18
- package/distrib/docs/symbols/JXG.Math.IntervalArithmetic.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Metapost.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Nlp.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Numerics.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Plot.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Poly.Monomial.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Poly.Polynomial.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Poly.Ring.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Poly.html +2 -18
- package/distrib/docs/symbols/JXG.Math.ProbFuncs.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Quadtree.html +2 -18
- package/distrib/docs/symbols/JXG.Math.Statistics.html +22 -34
- package/distrib/docs/symbols/JXG.Math.html +2 -18
- package/distrib/docs/symbols/JXG.NoRenderer.html +2 -18
- package/distrib/docs/symbols/JXG.Options.html +2 -18
- package/distrib/docs/symbols/JXG.Plane3D.html +2 -18
- package/distrib/docs/symbols/JXG.Point.html +2 -18
- package/distrib/docs/symbols/JXG.Point3D.html +2 -18
- package/distrib/docs/symbols/JXG.Polygon.html +2 -18
- package/distrib/docs/symbols/JXG.Polygon3D.html +2 -18
- package/distrib/docs/symbols/JXG.PrefixParser.html +2 -18
- package/distrib/docs/symbols/JXG.SVGRenderer.html +2 -18
- package/distrib/docs/symbols/JXG.Sphere3D.html +2 -18
- package/distrib/docs/symbols/JXG.Surface3D.html +2 -18
- package/distrib/docs/symbols/JXG.Text.html +2 -18
- package/distrib/docs/symbols/JXG.Text3D.html +2 -18
- package/distrib/docs/symbols/JXG.Ticks.html +2 -18
- package/distrib/docs/symbols/JXG.Transformation.html +2 -18
- package/distrib/docs/symbols/JXG.Turtle.html +2 -18
- package/distrib/docs/symbols/JXG.Util.Base64.html +2 -18
- package/distrib/docs/symbols/JXG.Util.UTF8.html +2 -18
- package/distrib/docs/symbols/JXG.Util.Unzip.html +2 -18
- package/distrib/docs/symbols/JXG.Util.html +2 -18
- package/distrib/docs/symbols/JXG.VMLRenderer.html +2 -18
- package/distrib/docs/symbols/JXG.View3D.html +4 -19
- package/distrib/docs/symbols/JXG.XML.html +2 -18
- package/distrib/docs/symbols/JXG.html +2 -18
- package/distrib/docs/symbols/Label.html +2 -18
- package/distrib/docs/symbols/Legend.html +2 -18
- package/distrib/docs/symbols/Line.html +2 -18
- package/distrib/docs/symbols/Line3D.html +2 -18
- package/distrib/docs/symbols/MajorArc.html +2 -18
- package/distrib/docs/symbols/MajorSector.html +2 -18
- package/distrib/docs/symbols/Measurement.html +2 -18
- package/distrib/docs/symbols/Mesh3D.html +2 -18
- package/distrib/docs/symbols/Metapostspline.html +2 -18
- package/distrib/docs/symbols/Midpoint.html +2 -18
- package/distrib/docs/symbols/MinorArc.html +2 -18
- package/distrib/docs/symbols/MinorSector.html +2 -18
- package/distrib/docs/symbols/Mirrorpoint.html +2 -18
- package/distrib/docs/symbols/NonReflexAngle.html +2 -18
- package/distrib/docs/symbols/Normal.html +2 -18
- package/distrib/docs/symbols/Orthogonalprojection.html +2 -18
- package/distrib/docs/symbols/OtherIntersection.html +2 -18
- package/distrib/docs/symbols/Parabola.html +2 -18
- package/distrib/docs/symbols/Parallel.html +2 -18
- package/distrib/docs/symbols/Parallelogram.html +2 -18
- package/distrib/docs/symbols/Parallelpoint.html +2 -18
- package/distrib/docs/symbols/ParametricSurface3D.html +2 -18
- package/distrib/docs/symbols/Perpendicular.html +2 -18
- package/distrib/docs/symbols/PerpendicularPoint.html +2 -18
- package/distrib/docs/symbols/PerpendicularSegment.html +2 -18
- package/distrib/docs/symbols/Point.html +2 -18
- package/distrib/docs/symbols/Point3D.html +2 -18
- package/distrib/docs/symbols/PolarLine.html +2 -18
- package/distrib/docs/symbols/PolePoint.html +2 -18
- package/distrib/docs/symbols/Polygon.html +2 -18
- package/distrib/docs/symbols/PolygonalChain.html +2 -18
- package/distrib/docs/symbols/RadicalAxis.html +2 -18
- package/distrib/docs/symbols/Reflection.html +2 -18
- package/distrib/docs/symbols/ReflexAngle.html +2 -18
- package/distrib/docs/symbols/RegularPolygon.html +2 -18
- package/distrib/docs/symbols/Riemannsum.html +2 -18
- package/distrib/docs/symbols/Sector.html +2 -18
- package/distrib/docs/symbols/Segment.html +2 -18
- package/distrib/docs/symbols/Semicircle.html +2 -18
- package/distrib/docs/symbols/Slider.html +2 -18
- package/distrib/docs/symbols/Slopefield.html +2 -18
- package/distrib/docs/symbols/Slopetriangle.html +2 -18
- package/distrib/docs/symbols/Smartlabel.html +2 -18
- package/distrib/docs/symbols/Sphere3D.html +2 -18
- package/distrib/docs/symbols/Spline.html +2 -18
- package/distrib/docs/symbols/Stepfunction.html +2 -18
- package/distrib/docs/symbols/Tangent.html +2 -18
- package/distrib/docs/symbols/TangentTo.html +2 -18
- package/distrib/docs/symbols/Tapemeasure.html +2 -18
- package/distrib/docs/symbols/Text.html +12 -26
- package/distrib/docs/symbols/Text3D.html +2 -18
- package/distrib/docs/symbols/Ticks.html +2 -18
- package/distrib/docs/symbols/Ticks3D.html +2 -18
- package/distrib/docs/symbols/Tracecurve.html +2 -18
- package/distrib/docs/symbols/Transformation.html +2 -18
- package/distrib/docs/symbols/Turtle.html +2 -18
- package/distrib/docs/symbols/Vectorfield.html +2 -18
- package/distrib/docs/symbols/Vectorfield3D.html +53 -18
- package/distrib/docs/symbols/View3D.html +2 -18
- package/distrib/docs/symbols/_global_.html +2 -18
- package/distrib/docs/symbols/mirrorelement.html +2 -18
- package/distrib/docs/symbols/src/src_3d_box3d.js.html +261 -259
- package/distrib/docs/symbols/src/src_3d_curve3d.js.html +205 -156
- package/distrib/docs/symbols/src/src_3d_linspace3d.js.html +337 -327
- package/distrib/docs/symbols/src/src_3d_point3d.js.html +204 -187
- package/distrib/docs/symbols/src/src_3d_text3d.js.html +189 -177
- package/distrib/docs/symbols/src/src_3d_view3d.js.html +1246 -1236
- package/distrib/docs/symbols/src/src_base_board.js.html +2058 -2057
- package/distrib/docs/symbols/src/src_base_constants.js.html +1 -1
- package/distrib/docs/symbols/src/src_base_coordselement.js.html +383 -274
- package/distrib/docs/symbols/src/src_element_sector.js.html +1 -1
- package/distrib/docs/symbols/src/src_math_geometry.js.html +609 -604
- package/distrib/docs/symbols/src/src_math_statistics.js.html +418 -411
- package/distrib/docs/symbols/src/src_options.js.html +504 -502
- package/distrib/docs/symbols/src/src_options3d.js.html +952 -944
- 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.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 +15405 -16038
- package/distrib/jsxgraphsrc.mjs +15405 -16038
- package/distrib/jsxgraphsrc.mjs.map +1 -1
- package/distrib/sketch.min.js +1 -1
- package/package.json +1 -1
- package/src/3d/box3d.js +2 -0
- package/src/3d/curve3d.js +53 -4
- package/src/3d/linspace3d.js +17 -7
- package/src/3d/point3d.js +20 -3
- package/src/3d/text3d.js +20 -8
- package/src/3d/view3d.js +17 -7
- package/src/base/board.js +1 -0
- package/src/base/constants.js +1 -1
- package/src/base/coordselement.js +119 -10
- package/src/element/sector.js +1 -1
- package/src/index.js +0 -3
- package/src/math/geometry.js +27 -22
- package/src/math/statistics.js +29 -22
- package/src/options.js +8 -6
- package/src/options3d.js +10 -2
- package/src/{server → unused/server}/JXGServer.py +4 -9
- package/src/{server → unused/server}/JXGServerModule.py +2 -2
- package/src/{server → unused/server}/README.md +25 -14
- package/src/{server → unused/server}/RStats.py +1 -1
- package/src/{server → unused/server}/YahooFinance.py +4 -4
- package/src/{server → unused/server}/fft.py +6 -6
- package/src/{server → unused/server}/geoloci.py +17 -17
- package/src/{server → unused/server}/jxggroebner.py +22 -22
- package/src/index2.js +0 -105
- /package/src/{element → unused}/locus.js +0 -0
- /package/src/{server → unused/server}/JXG.py +0 -0
- /package/src/{server → unused/server}/jxgtestplugin.py +0 -0
- /package/src/{server → unused/server}/server.js +0 -0
- /package/src/{math → unused}/symbolic.js +0 -0
|
@@ -995,421 +995,428 @@
|
|
|
995
995
|
<span class='line'>988</span> * @memberof JXG.Math.Statistics
|
|
996
996
|
<span class='line'>989</span> *
|
|
997
997
|
<span class='line'>990</span> * @example
|
|
998
|
-
<span class='line'>991</span> *
|
|
999
|
-
<span class='line'>992</span> *
|
|
998
|
+
<span class='line'>991</span> * let board = JXG.JSXGraph.initBoard('jxgbox',
|
|
999
|
+
<span class='line'>992</span> * { boundingbox: [-1.7, .5, 30, -.03], axis: true });
|
|
1000
1000
|
<span class='line'>993</span> *
|
|
1001
|
-
<span class='line'>994</span> *
|
|
1002
|
-
<span class='line'>995</span> *
|
|
1003
|
-
<span class='line'>996</span> *
|
|
1004
|
-
<span class='line'>997</span> *
|
|
1005
|
-
<span class='line'>998</span> *
|
|
1001
|
+
<span class='line'>994</span> * let runs = [
|
|
1002
|
+
<span class='line'>995</span> * [0.5, 20, 'blue'],
|
|
1003
|
+
<span class='line'>996</span> * [0.7, 20, 'green'],
|
|
1004
|
+
<span class='line'>997</span> * [0.5, 40, 'red'],
|
|
1005
|
+
<span class='line'>998</span> * ];
|
|
1006
1006
|
<span class='line'>999</span> *
|
|
1007
|
-
<span class='line'>1000</span> *
|
|
1008
|
-
<span class='line'>1001</span> *
|
|
1009
|
-
<span class='line'>1002</span> *
|
|
1010
|
-
<span class='line'>1003</span> *
|
|
1007
|
+
<span class='line'>1000</span> * let labelY = .4;
|
|
1008
|
+
<span class='line'>1001</span> * runs.forEach((run, i) => {
|
|
1009
|
+
<span class='line'>1002</span> * board.create('segment', [[7, labelY - (i / 50)], [9, labelY - (i / 50)]], { strokeColor: run[2] });
|
|
1010
|
+
<span class='line'>1003</span> * board.create('text', [10, labelY - (i / 50), `p=${run[0]}, n=${run[1]}`]);
|
|
1011
1011
|
<span class='line'>1004</span> *
|
|
1012
|
-
<span class='line'>1005</span> *
|
|
1013
|
-
<span class='line'>1006</span> *
|
|
1014
|
-
<span class='line'>1007</span> *
|
|
1015
|
-
<span class='line'>1008</span> *
|
|
1016
|
-
<span class='line'>1009</span> *
|
|
1017
|
-
<span class='line'>1010</span> *
|
|
1018
|
-
<span class='line'>1011</span> *
|
|
1019
|
-
<span class='line'>1012</span> *
|
|
1020
|
-
<span class='line'>1013</span> *
|
|
1021
|
-
<span class='line'>1014</span> *
|
|
1022
|
-
<span class='line'>1015</span> *
|
|
1023
|
-
<span class='line'>1016</span> *
|
|
1024
|
-
<span class='line'>1017</span> *
|
|
1025
|
-
<span class='line'>1018</span> *
|
|
1026
|
-
<span class='line'>1019</span> *
|
|
1027
|
-
<span class='line'>1020</span> * [
|
|
1028
|
-
<span class='line'>1021</span> *
|
|
1029
|
-
<span class='line'>1022</span> *
|
|
1030
|
-
<span class='line'>1023</span> *
|
|
1031
|
-
<span class='line'>1024</span> *
|
|
1032
|
-
<span class='line'>1025</span> *
|
|
1033
|
-
<span class='line'>1026</span> *
|
|
1034
|
-
<span class='line'>1027</span> *
|
|
1035
|
-
<span class='line'>1028</span> *
|
|
1036
|
-
<span class='line'>1029</span> *
|
|
1037
|
-
<span class='line'>1030</span> *
|
|
1038
|
-
<span class='line'>1031</span> * board.create('
|
|
1039
|
-
<span class='line'>1032</span> *
|
|
1040
|
-
<span class='line'>1033</span> *
|
|
1041
|
-
<span class='line'>1034</span> *
|
|
1042
|
-
<span class='line'>1035</span> *
|
|
1043
|
-
<span class='line'>1036</span>
|
|
1044
|
-
<span class='line'>1037</span>
|
|
1045
|
-
<span class='line'>1038</span>
|
|
1046
|
-
<span class='line'>1039</span>
|
|
1047
|
-
<span class='line'>1040</span>
|
|
1048
|
-
<span class='line'>1041</span> </span><span class="WHIT">
|
|
1049
|
-
<span class='line'>1042</span> </span><span class="WHIT">
|
|
1050
|
-
<span class='line'>1043</span> </span><span class="WHIT">
|
|
1012
|
+
<span class='line'>1005</span> * let x = Array(50000).fill(0).map(() => JXG.Math.Statistics.randomBinomial(run[1], run[0]));
|
|
1013
|
+
<span class='line'>1006</span> * let res = JXG.Math.Statistics.histogram(x, {
|
|
1014
|
+
<span class='line'>1007</span> * bins: 40,
|
|
1015
|
+
<span class='line'>1008</span> * density: true,
|
|
1016
|
+
<span class='line'>1009</span> * cumulative: false,
|
|
1017
|
+
<span class='line'>1010</span> * range: [0, 40]
|
|
1018
|
+
<span class='line'>1011</span> * });
|
|
1019
|
+
<span class='line'>1012</span> * board.create('curve', [res[1], res[0]], { strokeColor: run[2] });
|
|
1020
|
+
<span class='line'>1013</span> * });
|
|
1021
|
+
<span class='line'>1014</span> *
|
|
1022
|
+
<span class='line'>1015</span> *
|
|
1023
|
+
<span class='line'>1016</span> * </pre><div id="JXGda56df4d-a5a5-4c87-9ffc-9bbc1b512302-3" class="jxgbox" style="width: 300px; height: 300px;"></div>
|
|
1024
|
+
<span class='line'>1017</span> * <script type="text/javascript">
|
|
1025
|
+
<span class='line'>1018</span> * {
|
|
1026
|
+
<span class='line'>1019</span> * let board = JXG.JSXGraph.initBoard('JXGda56df4d-a5a5-4c87-9ffc-9bbc1b512302-3',
|
|
1027
|
+
<span class='line'>1020</span> * { boundingbox: [-1.7, .5, 30, -.03], axis: true});
|
|
1028
|
+
<span class='line'>1021</span> *
|
|
1029
|
+
<span class='line'>1022</span> * let runs = [
|
|
1030
|
+
<span class='line'>1023</span> * [0.5, 20, 'blue'],
|
|
1031
|
+
<span class='line'>1024</span> * [0.7, 20, 'green'],
|
|
1032
|
+
<span class='line'>1025</span> * [0.5, 40, 'red'],
|
|
1033
|
+
<span class='line'>1026</span> * ]
|
|
1034
|
+
<span class='line'>1027</span> *
|
|
1035
|
+
<span class='line'>1028</span> * let labelY = .4
|
|
1036
|
+
<span class='line'>1029</span> * runs.forEach((run,i) => {
|
|
1037
|
+
<span class='line'>1030</span> * board.create('segment',[[7,labelY-(i/50)],[9,labelY-(i/50)]],{strokeColor:run[2]})
|
|
1038
|
+
<span class='line'>1031</span> * board.create('text',[10,labelY-(i/50),`p=${run[0]}, n=${run[1]}`])
|
|
1039
|
+
<span class='line'>1032</span> *
|
|
1040
|
+
<span class='line'>1033</span> * let x = Array(50000).fill(0).map(() => JXG.Math.Statistics.randomBinomial(run[1],run[0]))
|
|
1041
|
+
<span class='line'>1034</span> * let res = JXG.Math.Statistics.histogram(x, { bins: 40, density: true, cumulative: false, range: [0, 40] });
|
|
1042
|
+
<span class='line'>1035</span> * board.create('curve', [res[1], res[0]], { strokeColor: run[2]});
|
|
1043
|
+
<span class='line'>1036</span> * })
|
|
1044
|
+
<span class='line'>1037</span> * }
|
|
1045
|
+
<span class='line'>1038</span> * </script><pre>
|
|
1046
|
+
<span class='line'>1039</span> *
|
|
1047
|
+
<span class='line'>1040</span> */</span><span class="WHIT">
|
|
1048
|
+
<span class='line'>1041</span> </span><span class="WHIT"> </span><span class="NAME">randomBinomial</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">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1049
|
+
<span class='line'>1042</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
|
|
1050
|
+
<span class='line'>1043</span> </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">N1</span><span class="PUNC">;</span><span class="WHIT">
|
|
1051
1051
|
<span class='line'>1044</span>
|
|
1052
|
-
<span class='line'>1045</span> </span><span class="WHIT"> </span><span class="
|
|
1053
|
-
<span class='line'>1046</span> </span><span class="WHIT">
|
|
1054
|
-
<span class='line'>1047</span> </span><span class="WHIT">
|
|
1055
|
-
<span class='line'>1048</span>
|
|
1056
|
-
<span class='line'>1049</span> </span><span class="WHIT"> </span><span class="
|
|
1057
|
-
<span class='line'>1050</span> </span><span class="WHIT">
|
|
1058
|
-
<span class='line'>1051</span> </span><span class="WHIT">
|
|
1059
|
-
<span class='line'>1052</span>
|
|
1060
|
-
<span class='line'>1053</span> </span><span class="WHIT"> </span><span class="
|
|
1061
|
-
<span class='line'>1054</span>
|
|
1062
|
-
<span class='line'>1055</span> </span><span class="WHIT"> </span><span class="
|
|
1063
|
-
<span class='line'>1056</span>
|
|
1064
|
-
<span class='line'>1057</span> </span><span class="WHIT">
|
|
1065
|
-
<span class='line'>1058</span>
|
|
1066
|
-
<span class='line'>1059</span> </span><span class="WHIT"> </span><span class="
|
|
1067
|
-
<span class='line'>1060</span> </span><span class="WHIT">
|
|
1068
|
-
<span class='line'>1061</span> </span><span class="WHIT">
|
|
1069
|
-
<span class='line'>1062</span>
|
|
1070
|
-
<span class='line'>1063</span> </span><span class="WHIT"> </span><span class="
|
|
1071
|
-
<span class='line'>1064</span> </span><span class="WHIT">
|
|
1072
|
-
<span class='line'>1065</span> </span><span class="WHIT">
|
|
1073
|
-
<span class='line'>1066</span>
|
|
1074
|
-
<span class='line'>1067</span>
|
|
1075
|
-
<span class='line'>1068</span> </span><span class="WHIT"> </span><span class="
|
|
1076
|
-
<span class='line'>1069</span> </span><span class="WHIT">
|
|
1077
|
-
<span class='line'>1070</span> </span><span class="WHIT">
|
|
1078
|
-
<span class='line'>1071</span>
|
|
1079
|
-
<span class='line'>1072</span> </span><span class="WHIT">
|
|
1080
|
-
<span class='line'>1073</span> </span><span class="WHIT">
|
|
1081
|
-
<span class='line'>1074</span> </span><span class="WHIT"> </span><span class="
|
|
1082
|
-
<span class='line'>1075</span> </span><span class="WHIT"> </span><span class="
|
|
1083
|
-
<span class='line'>1076</span>
|
|
1084
|
-
<span class='line'>1077</span> </span><span class="WHIT"> </span><span class="
|
|
1085
|
-
<span class='line'>1078</span> </span><span class="WHIT"> </span><span class="
|
|
1086
|
-
<span class='line'>1079</span> </span><span class="WHIT">
|
|
1087
|
-
<span class='line'>1080</span>
|
|
1088
|
-
<span class='line'>1081</span>
|
|
1089
|
-
<span class='line'>1082</span> </span><span class="WHIT"> </span><span class="KEYW">
|
|
1090
|
-
<span class='line'>1083</span> </span><span class="WHIT"> </span><span class="
|
|
1091
|
-
<span class='line'>1084</span> </span><span class="WHIT">
|
|
1092
|
-
<span class='line'>1085</span>
|
|
1093
|
-
<span class='line'>1086</span> </span><span class="WHIT">
|
|
1094
|
-
<span class='line'>1087</span> </span><span class="WHIT">
|
|
1095
|
-
<span class='line'>1088</span> </span><span class="WHIT">
|
|
1096
|
-
<span class='line'>1089</span> </span><span class="WHIT"> </span><span class="
|
|
1097
|
-
<span class='line'>1090</span> </span><span class="WHIT">
|
|
1098
|
-
<span class='line'>1091</span> </span><span class="WHIT"> </span><span class="
|
|
1099
|
-
<span class='line'>1092</span> </span><span class="WHIT"> </span><span class="
|
|
1100
|
-
<span class='line'>1093</span> </span><span class="WHIT">
|
|
1101
|
-
<span class='line'>1094</span> </span><span class="WHIT">
|
|
1102
|
-
<span class='line'>1095</span> </span><span class="WHIT"> </span><span class="
|
|
1103
|
-
<span class='line'>1096</span> </span><span class="WHIT">
|
|
1104
|
-
<span class='line'>1097</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
1105
|
-
<span class='line'>1098</span> </span><span class="WHIT">
|
|
1106
|
-
<span class='line'>1099</span> </span><span class="WHIT">
|
|
1107
|
-
<span class='line'>1100</span> </span><span class="WHIT">
|
|
1108
|
-
<span class='line'>1101</span> </span><span class="WHIT">
|
|
1109
|
-
<span class='line'>1102</span>
|
|
1110
|
-
<span class='line'>1103</span> </span><span class="WHIT">
|
|
1111
|
-
<span class='line'>1104</span>
|
|
1112
|
-
<span class='line'>1105</span>
|
|
1113
|
-
<span class='line'>1106</span>
|
|
1114
|
-
<span class='line'>1107</span>
|
|
1115
|
-
<span class='line'>1108</span> *
|
|
1116
|
-
<span class='line'>1109</span> *
|
|
1117
|
-
<span class='line'>1110</span>
|
|
1118
|
-
<span class='line'>1111</span>
|
|
1119
|
-
<span class='line'>1112</span>
|
|
1120
|
-
<span class='line'>1113</span>
|
|
1121
|
-
<span class='line'>1114</span>
|
|
1122
|
-
<span class='line'>1115</span> </span><span class="WHIT">
|
|
1123
|
-
<span class='line'>1116</span> </span><span class="WHIT"> </span><span class="
|
|
1124
|
-
<span class='line'>1117</span>
|
|
1125
|
-
<span class='line'>1118</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
1126
|
-
<span class='line'>1119</span>
|
|
1127
|
-
<span class='line'>1120</span> </span><span class="WHIT"> </span><span class="
|
|
1128
|
-
<span class='line'>1121</span> </span><span class="WHIT">
|
|
1129
|
-
<span class='line'>1122</span>
|
|
1130
|
-
<span class='line'>1123</span>
|
|
1131
|
-
<span class='line'>1124</span>
|
|
1132
|
-
<span class='line'>1125</span>
|
|
1133
|
-
<span class='line'>1126</span>
|
|
1134
|
-
<span class='line'>1127</span>
|
|
1135
|
-
<span class='line'>1128</span> *
|
|
1136
|
-
<span class='line'>1129</span> *
|
|
1137
|
-
<span class='line'>1130</span>
|
|
1138
|
-
<span class='line'>1131</span>
|
|
1139
|
-
<span class='line'>1132</span>
|
|
1140
|
-
<span class='line'>1133</span>
|
|
1141
|
-
<span class='line'>1134</span>
|
|
1142
|
-
<span class='line'>1135</span> </span><span class="WHIT">
|
|
1143
|
-
<span class='line'>1136</span> </span><span class="WHIT">
|
|
1144
|
-
<span class='line'>1137</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
1145
|
-
<span class='line'>1138</span>
|
|
1146
|
-
<span class='line'>1139</span> </span><span class="WHIT">
|
|
1147
|
-
<span class='line'>1140</span> </span><span class="WHIT"> </span><span class="
|
|
1148
|
-
<span class='line'>1141</span> </span><span class="WHIT">
|
|
1052
|
+
<span class='line'>1045</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="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="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </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">
|
|
1053
|
+
<span class='line'>1046</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">NaN</span><span class="PUNC">;</span><span class="WHIT">
|
|
1054
|
+
<span class='line'>1047</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1055
|
+
<span class='line'>1048</span>
|
|
1056
|
+
<span class='line'>1049</span> </span><span class="WHIT"> </span><span class="COMM">// Edge cases</span><span class="WHIT">
|
|
1057
|
+
<span class='line'>1050</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">
|
|
1058
|
+
<span class='line'>1051</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
1059
|
+
<span class='line'>1052</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1060
|
+
<span class='line'>1053</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">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1061
|
+
<span class='line'>1054</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT">
|
|
1062
|
+
<span class='line'>1055</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1063
|
+
<span class='line'>1056</span>
|
|
1064
|
+
<span class='line'>1057</span> </span><span class="WHIT"> </span><span class="COMM">// Now, we can assume 0 < p < 1.</span><span class="WHIT">
|
|
1065
|
+
<span class='line'>1058</span>
|
|
1066
|
+
<span class='line'>1059</span> </span><span class="WHIT"> </span><span class="COMM">// Fast path for common cases</span><span class="WHIT">
|
|
1067
|
+
<span class='line'>1060</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">
|
|
1068
|
+
<span class='line'>1061</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
1069
|
+
<span class='line'>1062</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1070
|
+
<span class='line'>1063</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">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1071
|
+
<span class='line'>1064</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="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="NAME">p</span><span class="PUNC">)</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="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1072
|
+
<span class='line'>1065</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1073
|
+
<span class='line'>1066</span>
|
|
1074
|
+
<span class='line'>1067</span> </span><span class="WHIT"> </span><span class="COMM">// Exploit symmetry</span><span class="WHIT">
|
|
1075
|
+
<span class='line'>1068</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.5</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1076
|
+
<span class='line'>1069</span> </span><span class="WHIT"> </span><span class="KEYW">return</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">this.randomBinomial</span><span class="PUNC">(</span><span class="NAME">n</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">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1077
|
+
<span class='line'>1070</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1078
|
+
<span class='line'>1071</span>
|
|
1079
|
+
<span class='line'>1072</span> </span><span class="WHIT"> </span><span class="COMM">// General case: n > 1, p <= 0.5</span><span class="WHIT">
|
|
1080
|
+
<span class='line'>1073</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">100</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1081
|
+
<span class='line'>1074</span> </span><span class="WHIT"> </span><span class="COMM">// n small:</span><span class="WHIT">
|
|
1082
|
+
<span class='line'>1075</span> </span><span class="WHIT"> </span><span class="COMM">// Algorithm BG (Devroye) from:</span><span class="WHIT">
|
|
1083
|
+
<span class='line'>1076</span> </span><span class="WHIT"> </span><span class="COMM">// https://dl.acm.org/doi/pdf/10.1145/42372.42381</span><span class="WHIT">
|
|
1084
|
+
<span class='line'>1077</span> </span><span class="WHIT"> </span><span class="COMM">// Time O(np) so suitable for np small only.</span><span class="WHIT">
|
|
1085
|
+
<span class='line'>1078</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="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
|
|
1086
|
+
<span class='line'>1079</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</span><span class="PUNC">;</span><span class="WHIT">
|
|
1087
|
+
<span class='line'>1080</span>
|
|
1088
|
+
<span class='line'>1081</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">Math.log</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">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1089
|
+
<span class='line'>1082</span> </span><span class="WHIT"> </span><span class="KEYW">if</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="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1090
|
+
<span class='line'>1083</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
1091
|
+
<span class='line'>1084</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1092
|
+
<span class='line'>1085</span>
|
|
1093
|
+
<span class='line'>1086</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1094
|
+
<span class='line'>1087</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="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
|
|
1095
|
+
<span class='line'>1088</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">Math.log</span><span class="PUNC">(</span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</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"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
|
|
1096
|
+
<span class='line'>1089</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">y</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1097
|
+
<span class='line'>1090</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">
|
|
1098
|
+
<span class='line'>1091</span> </span><span class="WHIT"> </span><span class="COMM">// n large:</span><span class="WHIT">
|
|
1099
|
+
<span class='line'>1092</span> </span><span class="WHIT"> </span><span class="COMM">// Knuth, TAOCP 2, p 131</span><span class="WHIT">
|
|
1100
|
+
<span class='line'>1093</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">Math.floor</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.5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1101
|
+
<span class='line'>1094</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">n</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">1</span><span class="PUNC">;</span><span class="WHIT">
|
|
1102
|
+
<span class='line'>1095</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">this.randomBeta</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">
|
|
1103
|
+
<span class='line'>1096</span> </span><span class="WHIT"> </span><span class="KEYW">if</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">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1104
|
+
<span class='line'>1097</span> </span><span class="WHIT"> </span><span class="NAME">N1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.randomBinomial</span><span class="PUNC">(</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"> </span><span class="NAME">p</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">
|
|
1105
|
+
<span class='line'>1098</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">N1</span><span class="PUNC">;</span><span class="WHIT">
|
|
1106
|
+
<span class='line'>1099</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">
|
|
1107
|
+
<span class='line'>1100</span> </span><span class="WHIT"> </span><span class="NAME">N1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.randomBinomial</span><span class="PUNC">(</span><span class="NAME">b</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="NAME">p</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"> </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">x</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1108
|
+
<span class='line'>1101</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">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">N1</span><span class="PUNC">;</span><span class="WHIT">
|
|
1109
|
+
<span class='line'>1102</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1110
|
+
<span class='line'>1103</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1111
|
+
<span class='line'>1104</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">
|
|
1112
|
+
<span class='line'>1105</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
1113
|
+
<span class='line'>1106</span>
|
|
1114
|
+
<span class='line'>1107</span> </span><span class="WHIT"> </span><span class="COMM">/**
|
|
1115
|
+
<span class='line'>1108</span> * Generate values for a random variable in geometric distribution with probability <i>p</i>.
|
|
1116
|
+
<span class='line'>1109</span> * See <a href="https://en.wikipedia.org/wiki/Geometric_distribution">https://en.wikipedia.org/wiki/Geometric_distribution</a>.
|
|
1117
|
+
<span class='line'>1110</span> *
|
|
1118
|
+
<span class='line'>1111</span> * @param {Number} p (0 <= p <= 1)
|
|
1119
|
+
<span class='line'>1112</span> * @returns Number
|
|
1120
|
+
<span class='line'>1113</span> * @memberof JXG.Math.Statistics
|
|
1121
|
+
<span class='line'>1114</span> */</span><span class="WHIT">
|
|
1122
|
+
<span class='line'>1115</span> </span><span class="WHIT"> </span><span class="NAME">randomGeometric</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">p</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1123
|
+
<span class='line'>1116</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">u</span><span class="PUNC">;</span><span class="WHIT">
|
|
1124
|
+
<span class='line'>1117</span>
|
|
1125
|
+
<span class='line'>1118</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="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="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1126
|
+
<span class='line'>1119</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">NaN</span><span class="PUNC">;</span><span class="WHIT">
|
|
1127
|
+
<span class='line'>1120</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1128
|
+
<span class='line'>1121</span> </span><span class="WHIT"> </span><span class="COMM">// Knuth, TAOCP 2, p 131</span><span class="WHIT">
|
|
1129
|
+
<span class='line'>1122</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">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1130
|
+
<span class='line'>1123</span>
|
|
1131
|
+
<span class='line'>1124</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.ceil</span><span class="PUNC">(</span><span class="NAME">Math.log</span><span class="PUNC">(</span><span class="NAME">u</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.log</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">p</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1132
|
+
<span class='line'>1125</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
1133
|
+
<span class='line'>1126</span>
|
|
1134
|
+
<span class='line'>1127</span> </span><span class="WHIT"> </span><span class="COMM">/**
|
|
1135
|
+
<span class='line'>1128</span> * Generate values for a random variable in Poisson distribution with mean <i>mu</i>.
|
|
1136
|
+
<span class='line'>1129</span> * See <a href="https://en.wikipedia.org/wiki/Poisson_distribution">https://en.wikipedia.org/wiki/Poisson_distribution</a>.
|
|
1137
|
+
<span class='line'>1130</span> *
|
|
1138
|
+
<span class='line'>1131</span> * @param {Number} mu (0 < mu)
|
|
1139
|
+
<span class='line'>1132</span> * @returns Number
|
|
1140
|
+
<span class='line'>1133</span> * @memberof JXG.Math.Statistics
|
|
1141
|
+
<span class='line'>1134</span> */</span><span class="WHIT">
|
|
1142
|
+
<span class='line'>1135</span> </span><span class="WHIT"> </span><span class="NAME">randomPoisson</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">mu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1143
|
+
<span class='line'>1136</span> </span><span class="WHIT"> </span><span class="KEYW">var</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">Math.exp</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">mu</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
|
|
1144
|
+
<span class='line'>1137</span> </span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">,</span><span class="WHIT">
|
|
1145
|
+
<span class='line'>1138</span> </span><span class="WHIT"> </span><span class="NAME">m</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">
|
|
1146
|
+
<span class='line'>1139</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="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
|
|
1147
|
+
<span class='line'>1140</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT">
|
|
1148
|
+
<span class='line'>1141</span> </span><span class="WHIT"> </span><span class="NAME">alpha</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
|
|
1149
1149
|
<span class='line'>1142</span>
|
|
1150
|
-
<span class='line'>1143</span> </span><span class="WHIT"> </span><span class="
|
|
1151
|
-
<span class='line'>1144</span> </span><span class="WHIT">
|
|
1152
|
-
<span class='line'>1145</span> </span><span class="WHIT">
|
|
1153
|
-
<span class='line'>1146</span>
|
|
1154
|
-
<span class='line'>1147</span> </span><span class="WHIT">
|
|
1155
|
-
<span class='line'>1148</span> </span><span class="WHIT">
|
|
1156
|
-
<span class='line'>1149</span> </span><span class="WHIT"> </span><span class="
|
|
1157
|
-
<span class='line'>1150</span> </span><span class="WHIT">
|
|
1158
|
-
<span class='line'>1151</span> </span><span class="WHIT">
|
|
1159
|
-
<span class='line'>1152</span> </span><span class="WHIT"> </span><span class="
|
|
1160
|
-
<span class='line'>1153</span> </span><span class="WHIT"> </span><span class="
|
|
1161
|
-
<span class='line'>1154</span> </span><span class="WHIT">
|
|
1162
|
-
<span class='line'>1155</span> </span><span class="WHIT"> </span><span class="
|
|
1163
|
-
<span class='line'>1156</span> </span><span class="WHIT">
|
|
1164
|
-
<span class='line'>1157</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
1165
|
-
<span class='line'>1158</span> </span><span class="WHIT">
|
|
1166
|
-
<span class='line'>1159</span> </span><span class="WHIT">
|
|
1167
|
-
<span class='line'>1160</span> </span><span class="WHIT">
|
|
1168
|
-
<span class='line'>1161</span>
|
|
1169
|
-
<span class='line'>1162</span> </span><span class="WHIT">
|
|
1170
|
-
<span class='line'>1163</span>
|
|
1171
|
-
<span class='line'>1164</span>
|
|
1172
|
-
<span class='line'>1165</span>
|
|
1173
|
-
<span class='line'>1166</span>
|
|
1174
|
-
<span class='line'>1167</span> *
|
|
1175
|
-
<span class='line'>1168</span> *
|
|
1176
|
-
<span class='line'>1169</span> *
|
|
1177
|
-
<span class='line'>1170</span> *
|
|
1178
|
-
<span class='line'>1171</span> *
|
|
1179
|
-
<span class='line'>1172</span>
|
|
1180
|
-
<span class='line'>1173</span>
|
|
1181
|
-
<span class='line'>1174</span>
|
|
1182
|
-
<span class='line'>1175</span>
|
|
1183
|
-
<span class='line'>1176</span>
|
|
1184
|
-
<span class='line'>1177</span> </span><span class="WHIT">
|
|
1185
|
-
<span class='line'>1178</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
1186
|
-
<span class='line'>1179</span>
|
|
1187
|
-
<span class='line'>1180</span> </span><span class="WHIT">
|
|
1188
|
-
<span class='line'>1181</span>
|
|
1189
|
-
<span class='line'>1182</span> </span><span class="WHIT">
|
|
1190
|
-
<span class='line'>1183</span>
|
|
1191
|
-
<span class='line'>1184</span>
|
|
1192
|
-
<span class='line'>1185</span>
|
|
1193
|
-
<span class='line'>1186</span>
|
|
1194
|
-
<span class='line'>1187</span> *
|
|
1195
|
-
<span class='line'>1188</span> *
|
|
1196
|
-
<span class='line'>1189</span> *
|
|
1197
|
-
<span class='line'>1190</span> *
|
|
1198
|
-
<span class='line'>1191</span> *
|
|
1199
|
-
<span class='line'>1192</span> *
|
|
1200
|
-
<span class='line'>1193</span> * @
|
|
1201
|
-
<span class='line'>1194</span>
|
|
1202
|
-
<span class='line'>1195</span>
|
|
1203
|
-
<span class='line'>1196</span>
|
|
1204
|
-
<span class='line'>1197</span>
|
|
1205
|
-
<span class='line'>1198</span>
|
|
1206
|
-
<span class='line'>1199</span> </span><span class="WHIT">
|
|
1207
|
-
<span class='line'>1200</span> </span><span class="WHIT">
|
|
1208
|
-
<span class='line'>1201</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
1209
|
-
<span class='line'>1202</span> </span><span class="WHIT"> </span><span class="
|
|
1210
|
-
<span class='line'>1203</span>
|
|
1211
|
-
<span class='line'>1204</span> </span><span class="WHIT">
|
|
1212
|
-
<span class='line'>1205</span> </span><span class="WHIT"> </span><span class="
|
|
1213
|
-
<span class='line'>1206</span> </span><span class="WHIT">
|
|
1150
|
+
<span class='line'>1143</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mu</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">
|
|
1151
|
+
<span class='line'>1144</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">NaN</span><span class="PUNC">;</span><span class="WHIT">
|
|
1152
|
+
<span class='line'>1145</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1153
|
+
<span class='line'>1146</span>
|
|
1154
|
+
<span class='line'>1147</span> </span><span class="WHIT"> </span><span class="COMM">// Knuth, TAOCP 2, p 132</span><span class="WHIT">
|
|
1155
|
+
<span class='line'>1148</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mu</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1156
|
+
<span class='line'>1149</span> </span><span class="WHIT"> </span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1157
|
+
<span class='line'>1150</span> </span><span class="WHIT"> </span><span class="NAME">u</span><span class="WHIT"> </span><span class="PUNC">*</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="PUNC">;</span><span class="WHIT">
|
|
1158
|
+
<span class='line'>1151</span> </span><span class="WHIT"> </span><span class="NAME">m</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">
|
|
1159
|
+
<span class='line'>1152</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">u</span><span class="WHIT"> </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">
|
|
1160
|
+
<span class='line'>1153</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">m</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">
|
|
1161
|
+
<span class='line'>1154</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">
|
|
1162
|
+
<span class='line'>1155</span> </span><span class="WHIT"> </span><span class="NAME">m</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">alpha</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">mu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1163
|
+
<span class='line'>1156</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">this.randomGamma</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1164
|
+
<span class='line'>1157</span> </span><span class="WHIT"> </span><span class="KEYW">if</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">mu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1165
|
+
<span class='line'>1158</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">m</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.randomPoisson</span><span class="PUNC">(</span><span class="NAME">mu</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">
|
|
1166
|
+
<span class='line'>1159</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">
|
|
1167
|
+
<span class='line'>1160</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">this.randomBinomial</span><span class="PUNC">(</span><span class="NAME">m</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">mu</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">
|
|
1168
|
+
<span class='line'>1161</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1169
|
+
<span class='line'>1162</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1170
|
+
<span class='line'>1163</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">N</span><span class="PUNC">;</span><span class="WHIT">
|
|
1171
|
+
<span class='line'>1164</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
1172
|
+
<span class='line'>1165</span>
|
|
1173
|
+
<span class='line'>1166</span> </span><span class="WHIT"> </span><span class="COMM">/**
|
|
1174
|
+
<span class='line'>1167</span> * Generate values for a random variable in Pareto distribution with
|
|
1175
|
+
<span class='line'>1168</span> * shape <i>gamma</i> and scale <i>k</i>.
|
|
1176
|
+
<span class='line'>1169</span> * See <a href="https://en.wikipedia.org/wiki/Pareto_distribution">https://en.wikipedia.org/wiki/Pareto_distribution</a>.
|
|
1177
|
+
<span class='line'>1170</span> * Method: use inverse transformation sampling.
|
|
1178
|
+
<span class='line'>1171</span> *
|
|
1179
|
+
<span class='line'>1172</span> * @param {Number} gamma shape (0 < gamma)
|
|
1180
|
+
<span class='line'>1173</span> * @param {Number} k scale (0 < k < x)
|
|
1181
|
+
<span class='line'>1174</span> * @returns Number
|
|
1182
|
+
<span class='line'>1175</span> * @memberof JXG.Math.Statistics
|
|
1183
|
+
<span class='line'>1176</span> */</span><span class="WHIT">
|
|
1184
|
+
<span class='line'>1177</span> </span><span class="WHIT"> </span><span class="NAME">randomPareto</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">gamma</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1185
|
+
<span class='line'>1178</span> </span><span class="WHIT"> </span><span class="KEYW">var</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">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1186
|
+
<span class='line'>1179</span>
|
|
1187
|
+
<span class='line'>1180</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">gamma</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">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="PUNC">{</span><span class="WHIT">
|
|
1188
|
+
<span class='line'>1181</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">NaN</span><span class="PUNC">;</span><span class="WHIT">
|
|
1189
|
+
<span class='line'>1182</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1190
|
+
<span class='line'>1183</span> </span><span class="WHIT"> </span><span class="KEYW">return</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">Math.pow</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">u</span><span class="PUNC">,</span><span class="WHIT"> </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">gamma</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1191
|
+
<span class='line'>1184</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
1192
|
+
<span class='line'>1185</span>
|
|
1193
|
+
<span class='line'>1186</span> </span><span class="WHIT"> </span><span class="COMM">/**
|
|
1194
|
+
<span class='line'>1187</span> * Generate values for a random variable in hypergeometric distribution.
|
|
1195
|
+
<span class='line'>1188</span> * Samples are drawn from a hypergeometric distribution with specified parameters, <i>good</i> (ways to make a good selection),
|
|
1196
|
+
<span class='line'>1189</span> * <i>bad</i> (ways to make a bad selection), and <i>samples</i> (number of items sampled, which is less than or equal to <i>good + bad</i>).
|
|
1197
|
+
<span class='line'>1190</span> * <p>
|
|
1198
|
+
<span class='line'>1191</span> * Naive implementation with runtime <i>O(samples)</i>.
|
|
1199
|
+
<span class='line'>1192</span> *
|
|
1200
|
+
<span class='line'>1193</span> * @param {Number} good ways to make a good selection
|
|
1201
|
+
<span class='line'>1194</span> * @param {Number} bad ways to make a bad selection
|
|
1202
|
+
<span class='line'>1195</span> * @param {Number} samples number of items sampled
|
|
1203
|
+
<span class='line'>1196</span> * @returns
|
|
1204
|
+
<span class='line'>1197</span> * @memberof JXG.Math.Statistics
|
|
1205
|
+
<span class='line'>1198</span> */</span><span class="WHIT">
|
|
1206
|
+
<span class='line'>1199</span> </span><span class="WHIT"> </span><span class="NAME">randomHypergeometric</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">good</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bad</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1207
|
+
<span class='line'>1200</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">u</span><span class="PUNC">,</span><span class="WHIT">
|
|
1208
|
+
<span class='line'>1201</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="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
|
|
1209
|
+
<span class='line'>1202</span> </span><span class="WHIT"> </span><span class="COMM">// kk,</span><span class="WHIT">
|
|
1210
|
+
<span class='line'>1203</span> </span><span class="WHIT"> </span><span class="COMM">// n = good + bad,</span><span class="WHIT">
|
|
1211
|
+
<span class='line'>1204</span> </span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">good</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">bad</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">
|
|
1212
|
+
<span class='line'>1205</span> </span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="PUNC">(</span><span class="NAME">good</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bad</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
|
|
1213
|
+
<span class='line'>1206</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">d2</span><span class="PUNC">;</span><span class="WHIT">
|
|
1214
1214
|
<span class='line'>1207</span>
|
|
1215
|
-
<span class='line'>1208</span> </span><span class="WHIT"> </span><span class="
|
|
1216
|
-
<span class='line'>1209</span> </span><span class="WHIT">
|
|
1217
|
-
<span class='line'>1210</span> </span><span class="WHIT"> </span><span class="
|
|
1218
|
-
<span class='line'>1211</span>
|
|
1219
|
-
<span class='line'>1212</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1220
|
-
<span class='line'>1213</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1221
|
-
<span class='line'>1214</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1222
|
-
<span class='line'>1215</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1223
|
-
<span class='line'>1216</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1224
|
-
<span class='line'>1217</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1225
|
-
<span class='line'>1218</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1226
|
-
<span class='line'>1219</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1227
|
-
<span class='line'>1220</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1228
|
-
<span class='line'>1221</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1229
|
-
<span class='line'>1222</span>
|
|
1230
|
-
<span class='line'>1223</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1231
|
-
<span class='line'>1224</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1232
|
-
<span class='line'>1225</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1233
|
-
<span class='line'>1226</span>
|
|
1234
|
-
<span class='line'>1227</span> </span><span class="WHIT"> </span><span class="COMM"
|
|
1235
|
-
<span class='line'>1228</span> </span><span class="WHIT"> </span><span class="
|
|
1236
|
-
<span class='line'>1229</span> </span><span class="WHIT"> </span><span class="
|
|
1237
|
-
<span class='line'>1230</span> </span><span class="WHIT">
|
|
1238
|
-
<span class='line'>1231</span> </span><span class="WHIT">
|
|
1239
|
-
<span class='line'>1232</span> </span><span class="WHIT">
|
|
1240
|
-
<span class='line'>1233</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
1241
|
-
<span class='line'>1234</span> </span><span class="WHIT">
|
|
1242
|
-
<span class='line'>1235</span> </span><span class="WHIT">
|
|
1243
|
-
<span class='line'>1236</span> </span><span class="WHIT"> </span><span class="
|
|
1244
|
-
<span class='line'>1237</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1245
|
-
<span class='line'>1238</span> </span><span class="WHIT">
|
|
1246
|
-
<span class='line'>1239</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
1247
|
-
<span class='line'>1240</span> </span><span class="WHIT">
|
|
1248
|
-
<span class='line'>1241</span>
|
|
1249
|
-
<span class='line'>1242</span> </span><span class="WHIT">
|
|
1250
|
-
<span class='line'>1243</span>
|
|
1251
|
-
<span class='line'>1244</span>
|
|
1252
|
-
<span class='line'>1245</span>
|
|
1253
|
-
<span class='line'>1246</span>
|
|
1254
|
-
<span class='line'>1247</span> *
|
|
1255
|
-
<span class='line'>1248</span> *
|
|
1256
|
-
<span class='line'>1249</span> *
|
|
1257
|
-
<span class='line'>1250</span> *
|
|
1258
|
-
<span class='line'>1251</span> *
|
|
1259
|
-
<span class='line'>1252</span> *
|
|
1260
|
-
<span class='line'>1253</span> *
|
|
1261
|
-
<span class='line'>1254</span> *
|
|
1262
|
-
<span class='line'>1255</span> *
|
|
1263
|
-
<span class='line'>1256</span> *
|
|
1264
|
-
<span class='line'>1257</span> *
|
|
1265
|
-
<span class='line'>1258</span> *
|
|
1266
|
-
<span class='line'>1259</span> *
|
|
1267
|
-
<span class='line'>1260</span> *
|
|
1268
|
-
<span class='line'>1261</span> *
|
|
1269
|
-
<span class='line'>1262</span> *
|
|
1270
|
-
<span class='line'>1263</span> *
|
|
1271
|
-
<span class='line'>1264</span> * @
|
|
1272
|
-
<span class='line'>1265</span> *
|
|
1273
|
-
<span class='line'>1266</span> * @
|
|
1274
|
-
<span class='line'>1267</span> *
|
|
1275
|
-
<span class='line'>1268</span> *
|
|
1276
|
-
<span class='line'>1269</span> *
|
|
1277
|
-
<span class='line'>1270</span> *
|
|
1278
|
-
<span class='line'>1271</span> *
|
|
1279
|
-
<span class='line'>1272</span> *
|
|
1280
|
-
<span class='line'>1273</span> *
|
|
1281
|
-
<span class='line'>1274</span> * [1.
|
|
1282
|
-
<span class='line'>1275</span> *
|
|
1283
|
-
<span class='line'>1276</span> *
|
|
1284
|
-
<span class='line'>1277</span> * [5
|
|
1285
|
-
<span class='line'>1278</span> * [
|
|
1286
|
-
<span class='line'>1279</span> * [
|
|
1287
|
-
<span class='line'>1280</span> *
|
|
1288
|
-
<span class='line'>1281</span> *
|
|
1289
|
-
<span class='line'>1282</span> *
|
|
1290
|
-
<span class='line'>1283</span> *
|
|
1291
|
-
<span class='line'>1284</span> *
|
|
1292
|
-
<span class='line'>1285</span> *
|
|
1293
|
-
<span class='line'>1286</span> *
|
|
1294
|
-
<span class='line'>1287</span> *
|
|
1295
|
-
<span class='line'>1288</span> *
|
|
1296
|
-
<span class='line'>1289</span> *
|
|
1297
|
-
<span class='line'>1290</span> *
|
|
1298
|
-
<span class='line'>1291</span> *
|
|
1299
|
-
<span class='line'>1292</span> *
|
|
1300
|
-
<span class='line'>1293</span> * res = JXG.Math.Statistics.histogram(x, { bins: 50, density: true, cumulative:
|
|
1301
|
-
<span class='line'>1294</span> * res[0]
|
|
1302
|
-
<span class='line'>1295</span> *
|
|
1303
|
-
<span class='line'>1296</span> *
|
|
1304
|
-
<span class='line'>1297</span> *
|
|
1305
|
-
<span class='line'>1298</span> *
|
|
1306
|
-
<span class='line'>1299</span> *
|
|
1307
|
-
<span class='line'>1300</span> *
|
|
1308
|
-
<span class='line'>1301</span> *
|
|
1309
|
-
<span class='line'>1302</span> *
|
|
1310
|
-
<span class='line'>1303</span> *
|
|
1311
|
-
<span class='line'>1304</span> *
|
|
1312
|
-
<span class='line'>1305</span> *
|
|
1313
|
-
<span class='line'>1306</span> *
|
|
1314
|
-
<span class='line'>1307</span> *
|
|
1315
|
-
<span class='line'>1308</span> *
|
|
1316
|
-
<span class='line'>1309</span> *
|
|
1317
|
-
<span class='line'>1310</span> *
|
|
1318
|
-
<span class='line'>1311</span> *
|
|
1319
|
-
<span class='line'>1312</span> * [1.
|
|
1320
|
-
<span class='line'>1313</span> *
|
|
1321
|
-
<span class='line'>1314</span> *
|
|
1322
|
-
<span class='line'>1315</span> * [5
|
|
1323
|
-
<span class='line'>1316</span> * [
|
|
1324
|
-
<span class='line'>1317</span> * [
|
|
1325
|
-
<span class='line'>1318</span> *
|
|
1326
|
-
<span class='line'>1319</span> *
|
|
1327
|
-
<span class='line'>1320</span> *
|
|
1328
|
-
<span class='line'>1321</span> *
|
|
1329
|
-
<span class='line'>1322</span> *
|
|
1330
|
-
<span class='line'>1323</span> *
|
|
1331
|
-
<span class='line'>1324</span> *
|
|
1332
|
-
<span class='line'>1325</span> *
|
|
1333
|
-
<span class='line'>1326</span> *
|
|
1334
|
-
<span class='line'>1327</span> * board.create('
|
|
1215
|
+
<span class='line'>1208</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">good</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">bad</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">k</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">good</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">bad</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1216
|
+
<span class='line'>1209</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">NaN</span><span class="PUNC">;</span><span class="WHIT">
|
|
1217
|
+
<span class='line'>1210</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1218
|
+
<span class='line'>1211</span>
|
|
1219
|
+
<span class='line'>1212</span> </span><span class="WHIT"> </span><span class="COMM">// Naive method</span><span class="WHIT">
|
|
1220
|
+
<span class='line'>1213</span> </span><span class="WHIT"> </span><span class="COMM">// kk = Math.min(k, n - k);</span><span class="WHIT">
|
|
1221
|
+
<span class='line'>1214</span> </span><span class="WHIT"> </span><span class="COMM">// for (i = 0; i < k; i ++) {</span><span class="WHIT">
|
|
1222
|
+
<span class='line'>1215</span> </span><span class="WHIT"> </span><span class="COMM">// u = Math.random();</span><span class="WHIT">
|
|
1223
|
+
<span class='line'>1216</span> </span><span class="WHIT"> </span><span class="COMM">// if (n * u <= good) {</span><span class="WHIT">
|
|
1224
|
+
<span class='line'>1217</span> </span><span class="WHIT"> </span><span class="COMM">// x += 1;</span><span class="WHIT">
|
|
1225
|
+
<span class='line'>1218</span> </span><span class="WHIT"> </span><span class="COMM">// if (x === good) {</span><span class="WHIT">
|
|
1226
|
+
<span class='line'>1219</span> </span><span class="WHIT"> </span><span class="COMM">// return x;</span><span class="WHIT">
|
|
1227
|
+
<span class='line'>1220</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
|
|
1228
|
+
<span class='line'>1221</span> </span><span class="WHIT"> </span><span class="COMM">// good -= 1;</span><span class="WHIT">
|
|
1229
|
+
<span class='line'>1222</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
|
|
1230
|
+
<span class='line'>1223</span> </span><span class="WHIT"> </span><span class="COMM">// n -= 1;</span><span class="WHIT">
|
|
1231
|
+
<span class='line'>1224</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
|
|
1232
|
+
<span class='line'>1225</span> </span><span class="WHIT"> </span><span class="COMM">// return x;</span><span class="WHIT">
|
|
1233
|
+
<span class='line'>1226</span>
|
|
1234
|
+
<span class='line'>1227</span> </span><span class="WHIT"> </span><span class="COMM">// Implementation from</span><span class="WHIT">
|
|
1235
|
+
<span class='line'>1228</span> </span><span class="WHIT"> </span><span class="COMM">// Monte Carlo by George S. Fishman</span><span class="WHIT">
|
|
1236
|
+
<span class='line'>1229</span> </span><span class="WHIT"> </span><span class="COMM">// https://link.springer.com/book/10.1007/978-1-4757-2553-7</span><span class="WHIT">
|
|
1237
|
+
<span class='line'>1230</span> </span><span class="WHIT"> </span><span class="COMM">// page 218</span><span class="WHIT">
|
|
1238
|
+
<span class='line'>1231</span> </span><span class="WHIT"> </span><span class="COMM">//</span><span class="WHIT">
|
|
1239
|
+
<span class='line'>1232</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="PUNC">;</span><span class="WHIT">
|
|
1240
|
+
<span class='line'>1233</span> </span><span class="WHIT"> </span><span class="KEYW">while</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">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="PUNC">{</span><span class="WHIT">
|
|
1241
|
+
<span class='line'>1234</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">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1242
|
+
<span class='line'>1235</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">u</span><span class="WHIT"> </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="PUNC">(</span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1243
|
+
<span class='line'>1236</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">
|
|
1244
|
+
<span class='line'>1237</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1245
|
+
<span class='line'>1238</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">d2</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">
|
|
1246
|
+
<span class='line'>1239</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">good</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">bad</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1247
|
+
<span class='line'>1240</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">
|
|
1248
|
+
<span class='line'>1241</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">
|
|
1249
|
+
<span class='line'>1242</span> </span><span class="WHIT"> </span><span class="KEYW">return</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">x</span><span class="PUNC">;</span><span class="WHIT">
|
|
1250
|
+
<span class='line'>1243</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1251
|
+
<span class='line'>1244</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
1252
|
+
<span class='line'>1245</span>
|
|
1253
|
+
<span class='line'>1246</span> </span><span class="WHIT"> </span><span class="COMM">/**
|
|
1254
|
+
<span class='line'>1247</span> * Compute the histogram of a dataset.
|
|
1255
|
+
<span class='line'>1248</span> * Optional parameters can be supplied through a JavaScript object
|
|
1256
|
+
<span class='line'>1249</span> * with the following default values:
|
|
1257
|
+
<span class='line'>1250</span> * <pre>
|
|
1258
|
+
<span class='line'>1251</span> * {
|
|
1259
|
+
<span class='line'>1252</span> * bins: 10, // Number of bins
|
|
1260
|
+
<span class='line'>1253</span> * range: false, // false or array. The lower and upper range of the bins.
|
|
1261
|
+
<span class='line'>1254</span> * // If not provided, range is simply [min(x), max(x)].
|
|
1262
|
+
<span class='line'>1255</span> * // Values outside the range are ignored.
|
|
1263
|
+
<span class='line'>1256</span> * density: false, // If true, normalize the counts by dividing by sum(counts)
|
|
1264
|
+
<span class='line'>1257</span> * cumulative: false
|
|
1265
|
+
<span class='line'>1258</span> * }
|
|
1266
|
+
<span class='line'>1259</span> * </pre>
|
|
1267
|
+
<span class='line'>1260</span> * The function returns an array containing two arrays. The first array is of length bins+1
|
|
1268
|
+
<span class='line'>1261</span> * containing the start values of the bins. The last entry contains the end values of the last bin.
|
|
1269
|
+
<span class='line'>1262</span> * <p>
|
|
1270
|
+
<span class='line'>1263</span> * The second array contains the counts of each bin.
|
|
1271
|
+
<span class='line'>1264</span> * @param {Array} x
|
|
1272
|
+
<span class='line'>1265</span> * @param {Object} opt Optional parameters
|
|
1273
|
+
<span class='line'>1266</span> * @returns Array [bin, counts] Array bins contains start values of bins, array counts contains
|
|
1274
|
+
<span class='line'>1267</span> * the number of entries of x which are contained in each bin.
|
|
1275
|
+
<span class='line'>1268</span> * @memberof JXG.Math.Statistics
|
|
1276
|
+
<span class='line'>1269</span> *
|
|
1277
|
+
<span class='line'>1270</span> * @example
|
|
1278
|
+
<span class='line'>1271</span> * let board = JXG.JSXGraph.initBoard('jxgbox',
|
|
1279
|
+
<span class='line'>1272</span> * { boundingbox: [-1.7, .5, 20, -.03], axis: true});
|
|
1280
|
+
<span class='line'>1273</span> * let board2 = JXG.JSXGraph.initBoard('jxgbox2',
|
|
1281
|
+
<span class='line'>1274</span> * { boundingbox: [-1.6, 1.1, 20, -.06], axis: true});
|
|
1282
|
+
<span class='line'>1275</span> *
|
|
1283
|
+
<span class='line'>1276</span> * let runs = [
|
|
1284
|
+
<span class='line'>1277</span> * [0.5, 1.0, 'brown'],
|
|
1285
|
+
<span class='line'>1278</span> * [1.0, 2.0, 'red'],
|
|
1286
|
+
<span class='line'>1279</span> * [2.0, 2.0, 'orange'],
|
|
1287
|
+
<span class='line'>1280</span> * [3.0, 2.0, 'yellow'],
|
|
1288
|
+
<span class='line'>1281</span> * [5.0, 1.0, 'green'],
|
|
1289
|
+
<span class='line'>1282</span> * [9.0, 0.5, 'black'],
|
|
1290
|
+
<span class='line'>1283</span> * [7.5, 1.0, 'purple'],
|
|
1291
|
+
<span class='line'>1284</span> * ]
|
|
1292
|
+
<span class='line'>1285</span> *
|
|
1293
|
+
<span class='line'>1286</span> * let labelY = .4
|
|
1294
|
+
<span class='line'>1287</span> * runs.forEach((run,i) => {
|
|
1295
|
+
<span class='line'>1288</span> * board.create('segment',[[7,labelY-(i/50)],[9,labelY-(i/50)]],{strokeColor:run[2]})
|
|
1296
|
+
<span class='line'>1289</span> * board.create('text',[10,labelY-(i/50),`k=${run[0]}, θ=${run[1]}`])
|
|
1297
|
+
<span class='line'>1290</span> *
|
|
1298
|
+
<span class='line'>1291</span> * // density
|
|
1299
|
+
<span class='line'>1292</span> * let x = Array(50000).fill(0).map(() => JXG.Math.Statistics.randomGamma(run[0],run[1]))
|
|
1300
|
+
<span class='line'>1293</span> * let res = JXG.Math.Statistics.histogram(x, { bins: 50, density: true, cumulative: false, range: [0, 20] });
|
|
1301
|
+
<span class='line'>1294</span> * board.create('curve', [res[1], res[0]], { strokeColor: run[2], strokeWidth:2});
|
|
1302
|
+
<span class='line'>1295</span> *
|
|
1303
|
+
<span class='line'>1296</span> * // cumulative density
|
|
1304
|
+
<span class='line'>1297</span> * res = JXG.Math.Statistics.histogram(x, { bins: 50, density: true, cumulative: true, range: [0, 20] });
|
|
1305
|
+
<span class='line'>1298</span> * res[0].unshift(0) // add zero to front so cumulative starts at zero
|
|
1306
|
+
<span class='line'>1299</span> * res[1].unshift(0)
|
|
1307
|
+
<span class='line'>1300</span> * board2.create('curve', [res[1], res[0]], { strokeColor: run[2], strokeWidth:2 });
|
|
1308
|
+
<span class='line'>1301</span> * })
|
|
1309
|
+
<span class='line'>1302</span> *
|
|
1310
|
+
<span class='line'>1303</span> *
|
|
1311
|
+
<span class='line'>1304</span> * </pre><div id="JXGda56df4d-a5a5-4c87-9ffc-9bbc1b512302" class="jxgbox" style="width: 300px; height: 300px; float:left;"></div>
|
|
1312
|
+
<span class='line'>1305</span> * <div style='float:left;'> </div>
|
|
1313
|
+
<span class='line'>1306</span> * <div id="JXGda56df4d-a5a5-4c87-9ffc-9bbc1b512302-2" class="jxgbox" style="width: 300px; height: 300px;"></div>
|
|
1314
|
+
<span class='line'>1307</span> * <script type="text/javascript">
|
|
1315
|
+
<span class='line'>1308</span> * {
|
|
1316
|
+
<span class='line'>1309</span> * let board = JXG.JSXGraph.initBoard('JXGda56df4d-a5a5-4c87-9ffc-9bbc1b512302',
|
|
1317
|
+
<span class='line'>1310</span> * { boundingbox: [-1.7, .5, 20, -.03], axis: true});
|
|
1318
|
+
<span class='line'>1311</span> * let board2 = JXG.JSXGraph.initBoard('JXGda56df4d-a5a5-4c87-9ffc-9bbc1b512302-2',
|
|
1319
|
+
<span class='line'>1312</span> * { boundingbox: [-1.6, 1.1, 20, -.06], axis: true});
|
|
1320
|
+
<span class='line'>1313</span> *
|
|
1321
|
+
<span class='line'>1314</span> * let runs = [
|
|
1322
|
+
<span class='line'>1315</span> * [0.5, 1.0, 'brown'],
|
|
1323
|
+
<span class='line'>1316</span> * [1.0, 2.0, 'red'],
|
|
1324
|
+
<span class='line'>1317</span> * [2.0, 2.0, 'orange'],
|
|
1325
|
+
<span class='line'>1318</span> * [3.0, 2.0, 'yellow'],
|
|
1326
|
+
<span class='line'>1319</span> * [5.0, 1.0, 'green'],
|
|
1327
|
+
<span class='line'>1320</span> * [9.0, 0.5, 'black'],
|
|
1328
|
+
<span class='line'>1321</span> * [7.5, 1.0, 'purple'],
|
|
1329
|
+
<span class='line'>1322</span> * ]
|
|
1330
|
+
<span class='line'>1323</span> *
|
|
1331
|
+
<span class='line'>1324</span> * let labelY = .4
|
|
1332
|
+
<span class='line'>1325</span> * runs.forEach((run,i) => {
|
|
1333
|
+
<span class='line'>1326</span> * board.create('segment',[[7,labelY-(i/50)],[9,labelY-(i/50)]],{strokeColor:run[2]})
|
|
1334
|
+
<span class='line'>1327</span> * board.create('text',[10,labelY-(i/50),`k=${run[0]}, θ=${run[1]}`])
|
|
1335
1335
|
<span class='line'>1328</span> *
|
|
1336
|
-
<span class='line'>1329</span> *
|
|
1337
|
-
<span class='line'>1330</span> * res = JXG.Math.Statistics.histogram(x, { bins: 50, density: true, cumulative:
|
|
1338
|
-
<span class='line'>1331</span> * res[0]
|
|
1339
|
-
<span class='line'>1332</span> *
|
|
1340
|
-
<span class='line'>1333</span> *
|
|
1341
|
-
<span class='line'>1334</span> *
|
|
1342
|
-
<span class='line'>1335</span> *
|
|
1343
|
-
<span class='line'>1336</span> *
|
|
1344
|
-
<span class='line'>1337</span> *
|
|
1345
|
-
<span class='line'>1338</span>
|
|
1346
|
-
<span class='line'>1339</span>
|
|
1347
|
-
<span class='line'>1340</span>
|
|
1348
|
-
<span class='line'>1341</span>
|
|
1349
|
-
<span class='line'>1342</span>
|
|
1350
|
-
<span class='line'>1343</span> </span><span class="WHIT">
|
|
1351
|
-
<span class='line'>1344</span> </span><span class="WHIT">
|
|
1352
|
-
<span class='line'>1345</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
1353
|
-
<span class='line'>1346</span>
|
|
1354
|
-
<span class='line'>1347</span> </span><span class="WHIT">
|
|
1355
|
-
<span class='line'>1348</span> </span><span class="WHIT">
|
|
1356
|
-
<span class='line'>1349</span>
|
|
1357
|
-
<span class='line'>1350</span> </span><span class="WHIT"> </span><span class="COMM">//
|
|
1358
|
-
<span class='line'>1351</span>
|
|
1359
|
-
<span class='line'>1352</span> </span><span class="WHIT"> </span><span class="
|
|
1360
|
-
<span class='line'>1353</span> </span><span class="WHIT">
|
|
1361
|
-
<span class='line'>1354</span>
|
|
1362
|
-
<span class='line'>1355</span> </span><span class="WHIT"> </span><span class="
|
|
1363
|
-
<span class='line'>1356</span> </span><span class="WHIT">
|
|
1364
|
-
<span class='line'>1357</span> </span><span class="WHIT">
|
|
1365
|
-
<span class='line'>1358</span> </span><span class="WHIT">
|
|
1366
|
-
<span class='line'>1359</span>
|
|
1367
|
-
<span class='line'>1360</span> </span><span class="WHIT"> </span><span class="
|
|
1368
|
-
<span class='line'>1361</span> </span><span class="WHIT">
|
|
1369
|
-
<span class='line'>1362</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
1370
|
-
<span class='line'>1363</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1371
|
-
<span class='line'>1364</span>
|
|
1372
|
-
<span class='line'>1365</span> </span><span class="WHIT"> </span><span class="
|
|
1373
|
-
<span class='line'>1366</span>
|
|
1374
|
-
<span class='line'>1367</span> </span><span class="WHIT">
|
|
1375
|
-
<span class='line'>1368</span> </span><span class="WHIT"> </span><span class="
|
|
1376
|
-
<span class='line'>1369</span> </span><span class="WHIT"> </span><span class="NAME">
|
|
1377
|
-
<span class='line'>1370</span> </span><span class="WHIT">
|
|
1378
|
-
<span class='line'>1371</span>
|
|
1379
|
-
<span class='line'>1372</span> </span><span class="WHIT"> </span><span class="COMM">// bins
|
|
1380
|
-
<span class='line'>1373</span>
|
|
1381
|
-
<span class='line'>1374</span> </span><span class="WHIT">
|
|
1382
|
-
<span class='line'>1375</span> </span><span class="WHIT">
|
|
1383
|
-
<span class='line'>1376</span> </span><span class="WHIT"> </span><span class="
|
|
1384
|
-
<span class='line'>1377</span> </span><span class="WHIT">
|
|
1385
|
-
<span class='line'>1378</span>
|
|
1386
|
-
<span class='line'>1379</span> </span><span class="WHIT">
|
|
1387
|
-
<span class='line'>1380</span> </span><span class="WHIT">
|
|
1388
|
-
<span class='line'>1381</span> </span><span class="WHIT"> </span><span class="PUNC">
|
|
1389
|
-
<span class='line'>1382</span>
|
|
1390
|
-
<span class='line'>1383</span> </span><span class="WHIT">
|
|
1391
|
-
<span class='line'>1384</span> </span><span class="WHIT">
|
|
1392
|
-
<span class='line'>1385</span> </span><span class="WHIT"> </span><span class="
|
|
1393
|
-
<span class='line'>1386</span> </span><span class="WHIT">
|
|
1394
|
-
<span class='line'>1387</span> </span><span class="WHIT">
|
|
1395
|
-
<span class='line'>1388</span> </span><span class="WHIT">
|
|
1396
|
-
<span class='line'>1389</span>
|
|
1397
|
-
<span class='line'>1390</span> </span><span class="WHIT"> </span><span class="
|
|
1398
|
-
<span class='line'>1391</span>
|
|
1399
|
-
<span class='line'>1392</span> </span><span class="WHIT">
|
|
1400
|
-
<span class='line'>1393</span> </span><span class="WHIT">
|
|
1401
|
-
<span class='line'>1394</span> </span><span class="WHIT">
|
|
1402
|
-
<span class='line'>1395</span> </span><span class="WHIT"> </span><span class="
|
|
1403
|
-
<span class='line'>1396</span> </span><span class="WHIT">
|
|
1404
|
-
<span class='line'>1397</span> </span><span class="WHIT">
|
|
1405
|
-
<span class='line'>1398</span>
|
|
1406
|
-
<span class='line'>1399</span> </span><span class="WHIT">
|
|
1407
|
-
<span class='line'>1400</span> </span><span class="WHIT">
|
|
1408
|
-
<span class='line'>1401</span> </span><span class="WHIT">
|
|
1409
|
-
<span class='line'>1402</span>
|
|
1410
|
-
<span class='line'>1403</span> </span><span class="WHIT">
|
|
1411
|
-
<span class='line'>1404</span> </span><span class="WHIT">
|
|
1412
|
-
<span class='line'>1405</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
1413
|
-
<span class='line'>1406</span>
|
|
1414
|
-
<span class='line'>1407</span> </span><span class="
|
|
1415
|
-
<span class='line'>1408</span> </span
|
|
1336
|
+
<span class='line'>1329</span> * let x = Array(50000).fill(0).map(() => JXG.Math.Statistics.randomGamma(run[0],run[1]))
|
|
1337
|
+
<span class='line'>1330</span> * let res = JXG.Math.Statistics.histogram(x, { bins: 50, density: true, cumulative: false, range: [0, 20] });
|
|
1338
|
+
<span class='line'>1331</span> * board.create('curve', [res[1], res[0]], { strokeColor: run[2], strokeWidth:2});
|
|
1339
|
+
<span class='line'>1332</span> *
|
|
1340
|
+
<span class='line'>1333</span> * // cumulative density
|
|
1341
|
+
<span class='line'>1334</span> * res = JXG.Math.Statistics.histogram(x, { bins: 50, density: true, cumulative: true, range: [0, 20] });
|
|
1342
|
+
<span class='line'>1335</span> * res[0].unshift(0) // add zero to front so cumulative starts at zero
|
|
1343
|
+
<span class='line'>1336</span> * res[1].unshift(0)
|
|
1344
|
+
<span class='line'>1337</span> * board2.create('curve', [res[1], res[0]], { strokeColor: run[2], strokeWidth:2 });
|
|
1345
|
+
<span class='line'>1338</span> * })
|
|
1346
|
+
<span class='line'>1339</span> * }
|
|
1347
|
+
<span class='line'>1340</span> * </script><pre>
|
|
1348
|
+
<span class='line'>1341</span> *
|
|
1349
|
+
<span class='line'>1342</span> */</span><span class="WHIT">
|
|
1350
|
+
<span class='line'>1343</span> </span><span class="WHIT"> </span><span class="NAME">histogram</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">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">opt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1351
|
+
<span class='line'>1344</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">le</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT">
|
|
1352
|
+
<span class='line'>1345</span> </span><span class="WHIT"> </span><span class="NAME">mi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ma</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">num_bins</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">,</span><span class="WHIT">
|
|
1353
|
+
<span class='line'>1346</span> </span><span class="WHIT"> </span><span class="NAME">range</span><span class="PUNC">,</span><span class="WHIT">
|
|
1354
|
+
<span class='line'>1347</span> </span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT">
|
|
1355
|
+
<span class='line'>1348</span> </span><span class="WHIT"> </span><span class="NAME">counts</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">
|
|
1356
|
+
<span class='line'>1349</span> </span><span class="WHIT"> </span><span class="NAME">bins</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">
|
|
1357
|
+
<span class='line'>1350</span> </span><span class="WHIT"> </span><span class="NAME">no_bin</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="COMM">// Count of long tail elements not in histogram range</span><span class="WHIT">
|
|
1358
|
+
<span class='line'>1351</span>
|
|
1359
|
+
<span class='line'>1352</span> </span><span class="WHIT"> </span><span class="COMM">// Evaluate number of bins</span><span class="WHIT">
|
|
1360
|
+
<span class='line'>1353</span> </span><span class="WHIT"> </span><span class="NAME">num_bins</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">opt.bins</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">;</span><span class="WHIT">
|
|
1361
|
+
<span class='line'>1354</span>
|
|
1362
|
+
<span class='line'>1355</span> </span><span class="WHIT"> </span><span class="COMM">// Evaluate range</span><span class="WHIT">
|
|
1363
|
+
<span class='line'>1356</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">opt.range</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">
|
|
1364
|
+
<span class='line'>1357</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">range</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"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1365
|
+
<span class='line'>1358</span> </span><span class="WHIT"> </span><span class="NAME">mi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.min.apply</span><span class="PUNC">(</span><span class="KEYW">null</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">
|
|
1366
|
+
<span class='line'>1359</span> </span><span class="WHIT"> </span><span class="NAME">ma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.max.apply</span><span class="PUNC">(</span><span class="KEYW">null</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">
|
|
1367
|
+
<span class='line'>1360</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">
|
|
1368
|
+
<span class='line'>1361</span> </span><span class="WHIT"> </span><span class="NAME">mi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
1369
|
+
<span class='line'>1362</span> </span><span class="WHIT"> </span><span class="NAME">ma</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
1370
|
+
<span class='line'>1363</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1371
|
+
<span class='line'>1364</span>
|
|
1372
|
+
<span class='line'>1365</span> </span><span class="WHIT"> </span><span class="COMM">// Set uniform delta</span><span class="WHIT">
|
|
1373
|
+
<span class='line'>1366</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">num_bins</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">
|
|
1374
|
+
<span class='line'>1367</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">ma</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">mi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">num_bins</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="WHIT">
|
|
1375
|
+
<span class='line'>1368</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">
|
|
1376
|
+
<span class='line'>1369</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="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
1377
|
+
<span class='line'>1370</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1378
|
+
<span class='line'>1371</span>
|
|
1379
|
+
<span class='line'>1372</span> </span><span class="WHIT"> </span><span class="COMM">// Set the bins and init the counts array</span><span class="WHIT">
|
|
1380
|
+
<span class='line'>1373</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">num_bins</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">
|
|
1381
|
+
<span class='line'>1374</span> </span><span class="WHIT"> </span><span class="NAME">counts.push</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1382
|
+
<span class='line'>1375</span> </span><span class="WHIT"> </span><span class="NAME">bins.push</span><span class="PUNC">(</span><span class="NAME">mi</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="NAME">delta</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
1383
|
+
<span class='line'>1376</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1384
|
+
<span class='line'>1377</span> </span><span class="WHIT"> </span><span class="COMM">// bins.push(ma);</span><span class="WHIT">
|
|
1385
|
+
<span class='line'>1378</span>
|
|
1386
|
+
<span class='line'>1379</span> </span><span class="WHIT"> </span><span class="COMM">// Determine the counts</span><span class="WHIT">
|
|
1387
|
+
<span class='line'>1380</span> </span><span class="WHIT"> </span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.length</span><span class="PUNC">;</span><span class="WHIT">
|
|
1388
|
+
<span class='line'>1381</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">le</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">
|
|
1389
|
+
<span class='line'>1382</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">Math.floor</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">x</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="NAME">mi</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="PUNC">;</span><span class="WHIT">
|
|
1390
|
+
<span class='line'>1383</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="NUMB">0</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">num_bins</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1391
|
+
<span class='line'>1384</span> </span><span class="WHIT"> </span><span class="NAME">counts</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</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">
|
|
1392
|
+
<span class='line'>1385</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">
|
|
1393
|
+
<span class='line'>1386</span> </span><span class="WHIT"> </span><span class="NAME">no_bin</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">
|
|
1394
|
+
<span class='line'>1387</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1395
|
+
<span class='line'>1388</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1396
|
+
<span class='line'>1389</span>
|
|
1397
|
+
<span class='line'>1390</span> </span><span class="WHIT"> </span><span class="COMM">// Normalize if density===true</span><span class="WHIT">
|
|
1398
|
+
<span class='line'>1391</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opt.density</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1399
|
+
<span class='line'>1392</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">JXG.Math.Statistics.sum</span><span class="PUNC">(</span><span class="NAME">counts</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">no_bin</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// Normalize including long tail</span><span class="WHIT">
|
|
1400
|
+
<span class='line'>1393</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">num_bins</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">
|
|
1401
|
+
<span class='line'>1394</span> </span><span class="WHIT"> </span><span class="NAME">counts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </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">
|
|
1402
|
+
<span class='line'>1395</span> </span><span class="WHIT"> </span><span class="COMM">// counts[i] /= s;</span><span class="WHIT">
|
|
1403
|
+
<span class='line'>1396</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1404
|
+
<span class='line'>1397</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1405
|
+
<span class='line'>1398</span>
|
|
1406
|
+
<span class='line'>1399</span> </span><span class="WHIT"> </span><span class="COMM">// Cumulative counts</span><span class="WHIT">
|
|
1407
|
+
<span class='line'>1400</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opt.cumulative</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1408
|
+
<span class='line'>1401</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opt.density</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
1409
|
+
<span class='line'>1402</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">num_bins</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">
|
|
1410
|
+
<span class='line'>1403</span> </span><span class="WHIT"> </span><span class="NAME">counts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</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"> </span><span class="COMM">// Normalize</span><span class="WHIT">
|
|
1411
|
+
<span class='line'>1404</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1412
|
+
<span class='line'>1405</span> </span><span class="WHIT"> </span><span class="PUNC">}</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">num_bins</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">
|
|
1413
|
+
<span class='line'>1406</span> </span><span class="WHIT"> </span><span class="NAME">counts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">counts</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="WHIT">
|
|
1414
|
+
<span class='line'>1407</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1415
|
+
<span class='line'>1408</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1416
|
+
<span class='line'>1409</span>
|
|
1417
|
+
<span class='line'>1410</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">counts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bins</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
1418
|
+
<span class='line'>1411</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
|
|
1419
|
+
<span class='line'>1412</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
1420
|
+
<span class='line'>1413</span>
|
|
1421
|
+
<span class='line'>1414</span> </span><span class="NAME">export</span><span class="WHIT"> </span><span class="KEYW">default</span><span class="WHIT"> </span><span class="NAME">Mat.Statistics</span><span class="PUNC">;</span><span class="WHIT">
|
|
1422
|
+
<span class='line'>1415</span> </span></pre></body></html>
|