diff options
author | Karl Berry <karl@freefriends.org> | 2018-04-06 15:21:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-04-06 15:21:10 +0000 |
commit | f43901a2e69137a91d953d854976bf91dc5905a5 (patch) | |
tree | f68c911b3d3e61ea5d343b2144c07e3f82d0b2b5 /Master/texmf-dist/doc/asymptote/examples | |
parent | 02985bccb92d6c159bbcd4621c92edb0dedb263b (diff) |
asymptote 2.43
git-svn-id: svn://tug.org/texlive/trunk@47325 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/asymptote/examples')
-rw-r--r-- | Master/texmf-dist/doc/asymptote/examples/linearregression.asy | 64 | ||||
-rw-r--r-- | Master/texmf-dist/doc/asymptote/examples/venn.asy | 1 |
2 files changed, 64 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/asymptote/examples/linearregression.asy b/Master/texmf-dist/doc/asymptote/examples/linearregression.asy new file mode 100644 index 00000000000..a1cc6ff6bcb --- /dev/null +++ b/Master/texmf-dist/doc/asymptote/examples/linearregression.asy @@ -0,0 +1,64 @@ +import graph3; +import math; // for the leastsquares routine + +Billboard.targetsize = true; // Perspective should not affect the labels. +currentprojection = perspective(60 * (5, 2, 3)); + +file duncan = input("linearregression.dat"); + +string headers = duncan; + +real[][] independentvars; +real[] dependentvars; + +while (!eof(duncan)) { + string line = duncan; + string[] entries = split(line); + if (entries.length < 5) continue; + string type = entries[1]; + real income = (real)(entries[2]); + real education = (real)(entries[3]); + real prestige = (real)(entries[4]); + + // include 1.0 for the residue + independentvars.push(new real[] {income, education, 1.0}); + dependentvars.push(prestige); +} + +real[] coeffs = leastsquares(independentvars, dependentvars, warn=false); +if (coeffs.length == 0) { + abort("Unable to find regression: independent variables are " + + "linearly dependent."); +} + +real f(pair xy) { + return coeffs[0] * xy.x // income + + coeffs[1] * xy.y // education + + coeffs[2]; // residue +} + +real xmin = infinity, xmax = -infinity, ymin = infinity, ymax = -infinity; +for (real[] row : independentvars) { + if (row[0] < xmin) xmin = row[0]; + if (row[0] > xmax) xmax = row[0]; + if (row[1] < ymin) ymin = row[1]; + if (row[1] > ymax) ymax = row[1]; +} + +// Draw the plane +draw(surface(f, (xmin, ymin), (xmax, ymax)), + surfacepen=emissive(blue + opacity(0.6)), + meshpen = blue); + +for (int ii = 0; ii < independentvars.length; ++ii) { + triple pt = (independentvars[ii][0], independentvars[ii][1], + dependentvars[ii]); + draw(shift(pt) * unitsphere, material(yellow, emissivepen=0.2*yellow)); + real z = f((pt.x, pt.y)); + if (pt.z > z) draw (pt -- (pt.x, pt.y, z), green); + else draw(pt -- (pt.x, pt.y, z), red); +} + +xaxis3("income", Bounds(Min, Min), InTicks); +yaxis3("education", Bounds(Min, Min), InTicks); +zaxis3("prestige", Bounds(Min, Min), InTicks); diff --git a/Master/texmf-dist/doc/asymptote/examples/venn.asy b/Master/texmf-dist/doc/asymptote/examples/venn.asy index f56440ba0a4..33100a72e87 100644 --- a/Master/texmf-dist/doc/asymptote/examples/venn.asy +++ b/Master/texmf-dist/doc/asymptote/examples/venn.asy @@ -34,4 +34,3 @@ draw(z--z1,Arrow,Margin(0,m)); draw(z--z2,Arrow,Margin(0,m)); shipout(bbox(0.25cm)); -currentpicture.uptodate=true; |