diff --git a/.build-steps.R b/.build-steps.R index 7cc376bd..64256172 100644 --- a/.build-steps.R +++ b/.build-steps.R @@ -18,7 +18,7 @@ devtools::release() devtools::build_vignettes() # no longer necessary -tools::compactPDF("doc/HE-examples.pdf", gs_quality="ebook") +#tools::compactPDF("doc/HE-examples.pdf", gs_quality="ebook") # compacted ‘HE-examples.pdf’ from 765Kb to 415Kb # build the package site diff --git a/_pkgdown.yml b/_pkgdown.yml index 136e4006..40095de9 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -45,7 +45,7 @@ reference: - rowswap - buildTmat - - Linear equations: + - title: Linear equations desc: Functions to illustrate linear equations of the form $\mathbf{A x = b}$ contents: - showEqn diff --git a/docs/articles/data-beta.html b/docs/articles/data-beta.html index 8823e2bd..f4b0f05b 100644 --- a/docs/articles/data-beta.html +++ b/docs/articles/data-beta.html @@ -288,8 +288,8 @@

Observation spacergl::segments3d(rbind( O, py)) # origin to py in the plane corner( O, py, y, d=0.15) # show it's a right angle arc(y, O, py, d=0.2, color="red") - -

This plot is interactive in the HTML version. Use the mouse wheel to +

+

This plot is interactive in the HTML version. Use the mouse wheel to expand/contract the plot. Drag it to rotate to a different view.

You can also spin the plot around it’s any axis or create a movie, but that isn’t done in this vignette.

diff --git a/docs/articles/gramreg.html b/docs/articles/gramreg.html index 56114c01..31584b89 100644 --- a/docs/articles/gramreg.html +++ b/docs/articles/gramreg.html @@ -129,12 +129,12 @@

Setup IQ = round(20 + height + 3*age -.1*weight -3*male + 10*rnorm(nrow(class)))) head(class)
##         sex age height weight male  IQ
-## Alfred    M  14   69.0  112.5    1 115
-## Alice     F  13   56.5   84.0    0 104
-## Barbara   F  13   65.3   98.0    0 112
-## Carol     F  14   62.8  102.5    0 105
-## Henry     M  14   63.5  102.5    1 110
-## James     M  12   57.3   83.0    1  93
+## Alfred M 14 69.0 112.5 1 121 +## Alice F 13 56.5 84.0 0 96 +## Barbara F 13 65.3 98.0 0 118 +## Carol F 14 62.8 102.5 0 121 +## Henry M 14 63.5 102.5 1 105 +## James M 12 57.3 83.0 1 102

Reorder the predictors we want, forming a numeric matrix, X.

@@ -251,11 +251,11 @@ 

Regression with X and Z## ## Response: IQ ## Df Sum Sq Mean Sq F value Pr(>F) -## height 1 389 389 6.08 0.033 * -## weight 1 196 196 3.07 0.110 -## age 1 82 82 1.28 0.284 -## male 1 12 12 0.18 0.678 -## Residuals 10 639 64 +## height 1 356 356 8.44 0.016 * +## weight 1 0 0 0.00 0.972 +## age 1 17 17 0.40 0.540 +## male 1 124 124 2.94 0.117 +## Residuals 10 422 42 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Regression of IQ on the orthogonalized variables in @@ -267,11 +267,11 @@

Regression with X and Z## ## Response: IQ ## Df Sum Sq Mean Sq F value Pr(>F) -## height 1 389 389 6.08 0.033 * -## weight 1 196 196 3.07 0.110 -## age 1 82 82 1.28 0.284 -## male 1 12 12 0.18 0.678 -## Residuals 10 639 64 +## height 1 356 356 8.44 0.016 * +## weight 1 0 0 0.00 0.972 +## age 1 17 17 0.40 0.540 +## male 1 124 124 2.94 0.117 +## Residuals 10 422 42 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

This illustrates that anova() tests for linear models diff --git a/docs/articles/linear-equations.html b/docs/articles/linear-equations.html index e2063fff..9d63ec8c 100644 --- a/docs/articles/linear-equations.html +++ b/docs/articles/linear-equations.html @@ -395,8 +395,8 @@

Three consistent equations\(\mathbf{x} = (2, 3, -1)\)

 plotEqn3d(A,b, xlim=c(0,4), ylim=c(0,4))
- - + +

Three inconsistent equations diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 38af3fa3..5eff62f0 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -12,7 +12,7 @@ articles: inv-ex1: inv-ex1.html inv-ex2: inv-ex2.html linear-equations: linear-equations.html -last_built: 2024-08-02T20:32Z +last_built: 2024-08-02T20:38Z urls: reference: http://friendly.github.io/matlib/reference article: http://friendly.github.io/matlib/articles diff --git a/docs/reference/arc.html b/docs/reference/arc.html index f485d543..69a0ede0 100644 --- a/docs/reference/arc.html +++ b/docs/reference/arc.html @@ -157,9 +157,9 @@

Examplesarc(p1, p2, p3, d=.2) arc(p4, p1, p2, d=.2) arc(p3, p1, p2, d=.2) - - -

+ + + diff --git a/docs/reference/circle3d.html b/docs/reference/circle3d.html index 95c300ee..4b59022c 100644 --- a/docs/reference/circle3d.html +++ b/docs/reference/circle3d.html @@ -111,9 +111,9 @@

Examplescircle3d(ctr, 3, fill = TRUE) circle3d(ctr - c(-1,-1,0), 3, col="blue") circle3d(ctr + c(1,1,0), 3, col="red") - - - + + + diff --git a/docs/reference/index.html b/docs/reference/index.html index 0bb2af13..4ea1a62a 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -202,7 +202,13 @@

Elementary row operationsbuildTmat() as.matrix(<trace>) print(<trace>)
Build/Get transformation matrices
-
+
+

Linear equations

+ +

Functions to illustrate linear equations of the form Ax=b

+ + +
diff --git a/docs/reference/plotEqn3d.html b/docs/reference/plotEqn3d.html index 847ad2ab..12757397 100644 --- a/docs/reference/plotEqn3d.html +++ b/docs/reference/plotEqn3d.html @@ -162,9 +162,9 @@

ExamplesA <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3,3) b <- c(1,2,4) plotEqn3d(A,b) - - -

+ + + diff --git a/docs/reference/svdDemo.html b/docs/reference/svdDemo.html index 2dcab49f..399709ec 100644 --- a/docs/reference/svdDemo.html +++ b/docs/reference/svdDemo.html @@ -111,9 +111,9 @@

Author<

Examples

A <- matrix(c(1,2,0.1, 0.1,1,0.1, 0.1,0.1,0.5), 3,3)
 svdDemo(A)
-
-
-
+
+
+
 if (FALSE) {
 B <- matrix(c( 1, 0, 1, 0, 2, 0,  1, 0, 2), 3, 3)
 svdDemo(B)
diff --git a/docs/reference/vectors3d.html b/docs/reference/vectors3d.html
index ed51fb12..d0039214 100644
--- a/docs/reference/vectors3d.html
+++ b/docs/reference/vectors3d.html
@@ -188,9 +188,9 @@ 

Examplescorner(p1, p2, p3, col="red") corner(p1, p4, p2, col="red") corner(p1, p4, p3, col="blue") - - - + + + rgl.bringtotop()

diff --git a/docs/search.json b/docs/search.json index f8b8ca11..6bd3a0d3 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"data-space","dir":"Articles","previous_headings":"","what":"Data space","title":"Vector Spaces of Least Squares and Linear Equations","text":"start simple linear regression problem, shown data space. Fit linear model, y ~ x. intercept b0 = 2.5 slope b1 = -1. Plot data least squares line.","code":"x <- c(1, 1, -1, -1) y <- 1:4 (mod <- lm(y ~ x)) ## ## Call: ## lm(formula = y ~ x) ## ## Coefficients: ## (Intercept) x ## 2.5 -1.0 par(mar=c(4,4,1,1)+.1) plot(y ~ x, pch=16, cex=1.5) abline(mod, lwd=2) abline(h = coef(mod)[1], col=\"grey\")"},{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"linear-equation-beta-space","dir":"Articles","previous_headings":"","what":"Linear equation (\\(\\beta\\)) space","title":"Vector Spaces of Least Squares and Linear Equations","text":"problem can represented matrix equation, \\(\\mathbf{y} = [\\mathbf{1}, \\mathbf{x}] \\mathbf{b} + \\mathbf{e} = \\mathbf{X} \\mathbf{b} + \\mathbf{e}\\). equation form \\(y_i = b_0 + b_1 x_i + e_i\\). least squares solution minimizes \\(\\sum e_i^2\\). can also describe representing four equations two unknowns, c(\"b0\", \"b1\"). equation corresponds line \\((b_0, b_1)\\) space. Let’s plot . plotEqn draws point intersection pair lines — solution pair observations. space, observation equations can satisfied simultaneously, best approximate solution can represented space coefficients linear model \\(y = X \\beta\\), intercept already included first column \\(X\\). LS solution shown black point, corresponding \\((b_0, b_1) = (2.5, -1)\\).","code":"X <- cbind(1, x) printMatEqn(y, \"=\", X, \"*\", vec(c(\"b0\", \"b1\")), \"+\", vec(paste0(\"e\", 1:4))) ## y X ## 1 = 1 1 * b0 + e1 ## 2 1 1 b1 e2 ## 3 1 -1 e3 ## 4 1 -1 e4 showEqn(X, y, vars=c(\"b0\", \"b1\"), simplify=TRUE) ## b0 + b1 = 1 ## b0 + b1 = 2 ## b0 - 1*b1 = 3 ## b0 - 1*b1 = 4 plotEqn(X, y, vars=c(\"b0\", \"b1\"), xlim=c(-2, 4)) ## b0 + b1 = 1 ## b0 + b1 = 2 ## b0 - 1*b1 = 3 ## b0 - 1*b1 = 4 plotEqn(X, y, vars=c(\"b0\", \"b1\"), xlim=c(-2, 4)) ## b0 + b1 = 1 ## b0 + b1 = 2 ## b0 - 1*b1 = 3 ## b0 - 1*b1 = 4 solution <- lm( y ~ 0 + X) loc <- coef(solution) points(x=loc[1], y=loc[2], pch=16, cex=1.5)"},{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"observation-space","dir":"Articles","previous_headings":"","what":"Observation space","title":"Vector Spaces of Least Squares and Linear Equations","text":"also third vector space, one coordinate axes refer observations, \\(:n\\), data \\((y_i, x_{i0}, x_{i1}, ...)\\). \\(n\\)-length vectors space relate variables y predictors x1, x2 … . , x0 unit vector, J(n), corresponding intercept model. \\(n\\) observations, space \\(n\\) dimensions. case simple linear regression, fitted values, \\(\\widehat{\\mathbf{y}}\\) correspond projection \\(\\mathbf{y}\\) plane spanned \\(\\mathbf{x_0}, \\mathbf{x_1}\\), yhat <- Proj(y, c(bind(x0, x1))). space, vector residuals, \\(\\mathbf{e}\\) orthogonal complement \\(\\widehat{\\mathbf{y}}\\), .e., \\(\\widehat{\\mathbf{y}} \\perp \\mathbf{e}\\). Another geometrical description residual vector normal vector plane. space corresponds matrix algebra representation linear regression, \\[ \\mathbf{y} = \\mathbf{X} \\widehat{\\mathbf{b}} + \\mathbf{e} = \\widehat{\\mathbf{y}} + \\mathbf{e} \\] fact, least squares solution can derived purely requirement vector \\(\\widehat{\\mathbf{y}}\\) orthogonal vector residuals, \\(\\mathbf{e}\\), .e., \\(\\widehat{\\mathbf{y}}' \\mathbf{e} = 0\\). (margins vignette small give proof assertion.) Observation space can illustrated vector diagram developed , \\(n=3\\) dimensional space, actual data problem. , create x0, x1 y simple example. implies following linear equations, ignoring residuals. display observation space, First create basic 3D plot showing coordinate axes. , use vectors3d() draw vectors x0, x1 y. plane spanned x0, x1 can specified normal vector orthogonal , using new matlib::xprod() function. Finally, use Proj() find projection y plane. plot interactive HTML version. Use mouse wheel expand/contract plot. Drag rotate different view. can also spin plot around ’s axis create movie, isn’t done vignette. comparison, can also show least squares solution data \\(\\beta\\) space. linear equation (\\(\\beta\\)) space.","code":"O <- c(0, 0, 0) # origin x0 <- J(3) # intercept x1 <- c(0, 1, -1) # x y <- c(1, 1, 4) # y y <- 2 * y / floor(len(y)) # make length more convenient for 3D plot X <- cbind(x0, x1) # make a matrix showEqn(X, y, vars=colnames(X), simplify=TRUE) ## x0 = 0.5 ## x0 + x1 = 0.5 ## x0 - 1*x1 = 2 win <- rgl::open3d() # (1) draw observation axes E <- diag(3) rownames(E) <- c(\"1\", \"2\", \"3\") vectors3d(E, lwd=2, color=\"blue\") # (2) draw variable vectors vectors3d(t(X), lwd=2, headlength=0.07) vectors3d(y, labels=c(\"\", \"y\"), color=\"red\", lwd=3, headlength=0.07) # (3) draw the plane spanned by x0, x1 normal <- xprod(x0, x1) rgl::planes3d(normal, col=\"turquoise\", alpha=0.2) # (4) draw projection of y on X py <- Proj(y, X) rgl::segments3d(rbind( y, py)) # draw y to plane rgl::segments3d(rbind( O, py)) # origin to py in the plane corner( O, py, y, d=0.15) # show it's a right angle arc(y, O, py, d=0.2, color=\"red\") play3d(spin3d()) par(mar=c(4,4,1,1)+.1) X <- cbind(x0, x1) plotEqn(X, y, vars=c(\"b0\", \"b1\"), xlim=c(-2, 4)) ## b0 = 0.5 ## b0 + b1 = 0.5 ## b0 - 1*b1 = 2 solution <- lm( y ~ 0 + X) loc <- coef(solution) points(x=loc[1], y=loc[2], pch=16, cex=1.5) abline(v=loc[1], lty=2) abline(h=loc[2], lty=2)"},{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Vector Spaces of Least Squares and Linear Equations","text":"Dempster, . P. (1969). Elements Continuous Multivariate Analysis, Addison-Wesley, Fox, J. (1984). Linear Statistical Models Related Methods. NY: John Wiley Sons. Friendly, M.; Monette, G. & Fox, J. (2013). Elliptical Insights: Understanding Statistical Methods Elliptical Geometry Statistical Science, 28, 1-39. Monette, G. (1990). “Geometry Multiple Regression Interactive 3-D Graphics” : Fox, J. & Long, S. (Eds.) Modern Methods Data Analysis, SAGE Publications, 209-256","code":""},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"create-a-2-x-2-matrix","dir":"Articles","previous_headings":"","what":"Create a 2 x 2 matrix","title":"Properties of determinants","text":"","code":"A <- matrix(c(3, 1, 2, 4), nrow=2, byrow=TRUE) A ## [,1] [,2] ## [1,] 3 1 ## [2,] 2 4 det(A) ## [1] 10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"interchange-two-rows-or-cols-changes-the-sign----1-deta","dir":"Articles","previous_headings":"","what":"1. Interchange two rows or cols changes the sign: -> -1 * det(A)","title":"Properties of determinants","text":"","code":"det(A[ 2:1, ]) ## [1] -10 det(A[, 2:1 ]) ## [1] -10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"transpose---det-a-unchanged","dir":"Articles","previous_headings":"","what":"2. transpose -> det (A) unchanged","title":"Properties of determinants","text":"","code":"det( t(A) ) ## [1] 10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"multiply-row-k---k-deta","dir":"Articles","previous_headings":"","what":"3. multiply row * k -> k * det(A)","title":"Properties of determinants","text":"Note multiply rows different constants requires diagonal matrix left.","code":"diag(c(3, 1)) %*% A ## [,1] [,2] ## [1,] 9 3 ## [2,] 2 4 det( diag(c(3, 1)) %*% A) ## [1] 30"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"multiply-matrix-k---k2-deta","dir":"Articles","previous_headings":"","what":"4. multiply matrix * k -> k^2 * det(A)","title":"Properties of determinants","text":"multiplying matrix constant multiplies row.","code":"det(3 * A) ## [1] 90 3^2 * det(A) ## [1] 90"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"det-a-b---deta-detb","dir":"Articles","previous_headings":"","what":"5. det (A B) -> det(A) * det(B)","title":"Properties of determinants","text":"determinant product product determinants. holds number terms matrix product.","code":"B <- matrix(c(4, 2, 3, 5), nrow=2, byrow=TRUE) B ## [,1] [,2] ## [1,] 4 2 ## [2,] 3 5 det(A %*% B) ## [1] 140 det(A) * det(B) ## [1] 140"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"proportional-rows-or-columns---det-0","dir":"Articles","previous_headings":"","what":"6. proportional rows or columns -> det() == 0","title":"Properties of determinants","text":"just add additional copy column 1 matrix, C[,3] == C[,1]. determinant 0 columns linearly dependent.","code":"C <- matrix(c(1, 5, 2, 6, 4, 4), nrow=3, byrow=TRUE) C <- cbind(C, C[,1]) C ## [,1] [,2] [,3] ## [1,] 1 5 1 ## [2,] 2 6 2 ## [3,] 4 4 4 det(C) ## [1] 0"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"add-multiple-of-one-row-to-another---det-unchanged","dir":"Articles","previous_headings":"","what":"7. Add multiple of one row to another -> det unchanged","title":"Properties of determinants","text":"principle behind one elementary row operations.","code":"A[2,] <- A[2,] - 2*A[1,] det(A) ## [1] 10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"geometric-interpretation","dir":"Articles","previous_headings":"","what":"8. Geometric interpretation","title":"Properties of determinants","text":"Many aspects matrices vectors geometric interpretations. \\(2 \\times 2\\) matrices, determinant area parallelogram defined rows (columns), plotted 2D space. (\\(3 \\times 3\\) matrices, determinant volume parallelpiped 3D space.) matlib package handy functions (vectors()) drawing geometric diagrams. simple visual proof fact determinants easiest see case diagonal matrix, row vectors orthogonal, area just height x width. Plot : Finally, can also see determinant zero rows columns proportional. vectors called collinear. enclose area.","code":"A <- matrix(c(3, 1, 2, 4), nrow=2, byrow=TRUE) A ## [,1] [,2] ## [1,] 3 1 ## [2,] 2 4 det(A) ## [1] 10 library(matlib) xlim <- c(0,6) ylim <- c(0,6) par(mar=c(3,3,1,1)+.1) plot(xlim, ylim, type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) sum <- A[1,] + A[2,] # draw the parallelogram determined by the rows of A polygon( rbind(c(0,0), A[1,], sum, A[2,]), col=rgb(1,0,0,.2)) vectors(A, labels=c(\"a1\", \"a2\"), pos.lab=c(4,2)) vectors(sum, origin=A[1,], col=\"gray\") vectors(sum, origin=A[2,], col=\"gray\") # add some annotations text(0,6, \"det(A) is the area of its row vectors\", pos=4) text(mean(A[,1]), mean(A[,2]), \"det(A)\", cex=1.25) (D <- 2 * diag(2)) ## [,1] [,2] ## [1,] 2 0 ## [2,] 0 2 det(D) ## [1] 4 par(mar=c(3,3,1,1)+.1) plot(c(0,2), c(0,2), type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) sum <- D[1,] + D[2,] polygon( rbind(c(0,0), D[1,], sum, D[2,]), col=rgb(0,1,0,.2)) vectors(D, labels=c(\"d1\", \"d2\"), pos.lab=c(3,4)) vectors(sum, origin=D[1,], col=\"gray\") vectors(sum, origin=D[2,], col=\"gray\") text(mean(D[,1]), mean(D[,2]), \"det(D)\", cex=1.25) (B <- matrix(c(1, 2, 2, 4), 2,2)) ## [,1] [,2] ## [1,] 1 2 ## [2,] 2 4 det(B) ## [1] 0 par(mar=c(3,3,1,1)+.1) plot(c(0,4), c(0,4), type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) vectors(B, labels=c(\"b1\", \"b2\"), pos.lab=c(4,2))"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"calculate-det-by-cofactor-expansion","dir":"Articles","previous_headings":"","what":"1. Calculate det() by cofactor expansion","title":"Evaluation of determinants","text":"Set \\(3 \\times 3\\) matrix, find determinant (know answer ).","code":"A <- matrix(c(4, 2, 1, 5, 6, 7, 1, 0, 3), nrow=3, byrow=TRUE) det(A) ## [1] 50"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"find-cofactors-of-row-1-elements","dir":"Articles","previous_headings":"1. Calculate det() by cofactor expansion","what":"Find cofactors of row 1 elements","title":"Evaluation of determinants","text":"cofactor \\(A_{,j}\\) element \\(a_{,j}\\) signed determinant left row , column j matrix \\(\\) deleted. NB: R, negative subscripts delete rows columns.","code":"cat(cofactor(A, 1, 1), \" == \", 1 * det( (A[-1, -1]), \"\\n\" )) ## 18 == 18 cat(cofactor(A, 1, 2), \" == \", -1 * det( (A[-1, -2]), \"\\n\" )) ## -8 == -8 cat(cofactor(A, 1, 3), \" == \", 1 * det( (A[-1, -3]), \"\\n\" )) ## -6 == -6"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"det-product-of-row-with-cofactors","dir":"Articles","previous_headings":"1. Calculate det() by cofactor expansion","what":"det() = product of row with cofactors","title":"Evaluation of determinants","text":"symbols: \\(\\det() = a_{1,1} * A_{1,1} + a_{1,2} * A_{1,2} + a_{1,3} * A_{1,3}\\) rowCofactors() convenience function, calculates together Voila: Multiply row 1 times cofactors elements. NB: R, multiplication gives \\(1 \\times 1\\) matrix.","code":"rowCofactors(A, 1) ## [1] 18 -8 -6 A[1,] %*% rowCofactors(A, 1) ## [,1] ## [1,] 50 all.equal( det(A), c(A[1,] %*% rowCofactors(A, 1)) ) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"finding-det-by-gaussian-elimination-pivoting","dir":"Articles","previous_headings":"","what":"2. Finding det() by Gaussian elimination (pivoting)","title":"Evaluation of determinants","text":"example follows Green Carroll, Table 2.2. Start 4 x 4 matrix, \\(M\\), save det(M). det() product ‘pivots’, leading diagonal elements. step reduces row 1 column 1 0, may discarded. NB: R, dropping row/column can change matrix vector, use drop = FALSE inside subscript.","code":"M <- matrix(c(2, 3, 1, 2, 4, 2, 3, 4, 1, 4, 2, 2, 3, 1, 0, 1), nrow=4, ncol=4, byrow=TRUE) (dsave <- det(M)) ## [1] 15 # ### 'pivot' on the leading diagonal element, M[1,1]: (d <- M[1,1]) ## [1] 2 #-- Reduce row 1, col 1 to 0 (M[1,] <- M[1,, drop=FALSE] / M[1, 1]) ## [,1] [,2] [,3] [,4] ## [1,] 1 1.5 0.5 1 (M <- M - M[,1] %*% M[1,, drop=FALSE]) ## [,1] [,2] [,3] [,4] ## [1,] 0 0.0 0.0 0 ## [2,] 0 -4.0 1.0 0 ## [3,] 0 2.5 1.5 1 ## [4,] 0 -3.5 -1.5 -2 #-- Drop first row and column M <- M[-1, -1] #-- Accumulate the product of pivots d <- d * M[1, 1]"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"repeat-reducing-new-row-col-1-to-0","dir":"Articles","previous_headings":"2. Finding det() by Gaussian elimination (pivoting)","what":"Repeat, reducing new row, col 1 to 0","title":"Evaluation of determinants","text":"","code":"(M[1,] <- M[1,, drop=FALSE] / M[1,1]) ## [,1] [,2] [,3] ## [1,] 1 -0.25 0 (M <- M - M[,1] %*% M[1,, drop=FALSE]) ## [,1] [,2] [,3] ## [1,] 0 0.000 0 ## [2,] 0 2.125 1 ## [3,] 0 -2.375 -2 M <- M[-1, -1] d = d * M[1, 1]"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"repeat-once-more--d-detm","dir":"Articles","previous_headings":"2. Finding det() by Gaussian elimination (pivoting)","what":"Repeat once more. d = det(M)","title":"Evaluation of determinants","text":"","code":"(M[1,] <- M[1,, drop=FALSE] / M[1,1]) ## [,1] [,2] ## [1,] 1 0.4706 (M <- M - M[,1] %*% M[1,, drop=FALSE]) ## [,1] [,2] ## [1,] 0 0.0000 ## [2,] 0 -0.8824 M <- M[-1, -1, drop=FALSE] d <- d * M[1, 1] # did we get it right? all.equal(d, dsave) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex1.html","id":"setup","dir":"Articles","previous_headings":"","what":"Setup","title":"Eigenvalues and Eigenvectors: Properties","text":"vignette uses example \\(3 \\times 3\\) matrix illustrate properties eigenvalues eigenvectors. consider variance-covariance matrix three variables, main thing matrix square symmetric, guarantees eigenvalues, \\(\\lambda_i\\) real numbers. Covariance matrices also positive semi-definite, meaning eigenvalues non-negative, \\(\\lambda_i \\ge 0\\). Get eigenvalues eigenvectors using eigen(); returns named list, eigenvalues named values eigenvectors named vectors. eigenvalues always returned decreasing order, column vectors corresponds elements values.","code":"A <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3, 3, byrow=TRUE) A ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 ev <- eigen(A) # extract components (values <- ev$values) ## [1] 17 8 7 (vectors <- ev$vectors) ## [,1] [,2] [,3] ## [1,] 0.7454 0.6667 0.0000 ## [2,] -0.5963 0.6667 0.4472 ## [3,] 0.2981 -0.3333 0.8944"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex1.html","id":"properties-of-eigenvalues-and-eigenvectors","dir":"Articles","previous_headings":"","what":"Properties of eigenvalues and eigenvectors","title":"Eigenvalues and Eigenvectors: Properties","text":"following steps illustrate main properties eigenvalues eigenvectors. use notation \\(= V' \\Lambda V\\) express decomposition matrix \\(\\), \\(V\\) matrix eigenvectors \\(\\Lambda = diag(\\lambda_1, \\lambda_2, \\dots, \\lambda_p)\\) diagonal matrix composed ordered eivenvalues, \\(\\lambda_1 \\ge \\lambda_2 \\ge \\dots \\lambda_p\\). Orthogonality: Eigenvectors always orthogonal, \\(V' V = \\). zapsmall() handy cleaning tiny values. trace() = sum eigenvalues, \\(\\sum \\lambda_i\\). sum squares = sum squares eigenvalues, \\(\\sum \\lambda_i^2\\). determinant = product eigenvalues, \\(det() = \\prod \\lambda_i\\). means determinant zero \\(\\lambda_i = 0\\). rank = number non-zero eigenvalues eigenvalues \\(^{-1}\\) = 1/eigenvalues . eigenvectors , except order, eigenvalues returned decreasing order. similar relations powers matrix: values(mpower(,p)) = values()^p, mpower(,2) = %*% , etc.","code":"crossprod(vectors) ## [,1] [,2] [,3] ## [1,] 1.000e+00 3.053e-16 5.551e-17 ## [2,] 3.053e-16 1.000e+00 0.000e+00 ## [3,] 5.551e-17 0.000e+00 1.000e+00 zapsmall(crossprod(vectors)) ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 0 1 0 ## [3,] 0 0 1 library(matlib) # use the matlib package tr(A) ## [1] 32 sum(values) ## [1] 32 sum(A^2) ## [1] 402 sum(values^2) ## [1] 402 det(A) ## [1] 952 prod(values) ## [1] 952 R(A) ## [1] 3 sum(values != 0) ## [1] 3 AI <- solve(A) AI ## [,1] [,2] [,3] ## [1,] 0.08824 0.02941 -0.01471 ## [2,] 0.02941 0.10504 0.01891 ## [3,] -0.01471 0.01891 0.13340 eigen(AI)$values ## [1] 0.14286 0.12500 0.05882 eigen(AI)$vectors ## [,1] [,2] [,3] ## [1,] 0.0000 0.6667 0.7454 ## [2,] 0.4472 0.6667 -0.5963 ## [3,] 0.8944 -0.3333 0.2981 eigen(A %*% A) ## eigen() decomposition ## $values ## [1] 289 64 49 ## ## $vectors ## [,1] [,2] [,3] ## [1,] 0.7454 0.6667 0.0000 ## [2,] -0.5963 0.6667 0.4472 ## [3,] 0.2981 -0.3333 0.8944 eigen(A %*% A %*% A)$values ## [1] 4913 512 343 eigen(mpower(A, 4))$values ## [1] 83521 4096 2401"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"setup","dir":"Articles","previous_headings":"","what":"Setup","title":"Eigenvalues: Spectral Decomposition","text":"vignette uses example \\(3 \\times 3\\) matrix illustrate properties eigenvalues eigenvectors. consider variance-covariance matrix three variables, main thing matrix square symmetric, guarantees eigenvalues, \\(\\lambda_i\\) real numbers, non-negative, \\(\\lambda_i \\ge 0\\). Get eigenvalues eigenvectors using eigen(); returns named list, eigenvalues named values eigenvectors named vectors. call L V , formulas correspond diagonal matrix, \\(\\mathbf{\\Lambda} = diag(\\lambda_1, \\lambda_2, \\lambda_3)\\), (orthogonal) matrix \\(\\mathbf{V}\\).","code":"A <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3, 3, byrow=TRUE) A ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 ev <- eigen(A) # extract components (L <- ev$values) ## [1] 17 8 7 (V <- ev$vectors) ## [,1] [,2] [,3] ## [1,] 0.7454 0.6667 0.0000 ## [2,] -0.5963 0.6667 0.4472 ## [3,] 0.2981 -0.3333 0.8944"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"matrix-factorization","dir":"Articles","previous_headings":"","what":"Matrix factorization","title":"Eigenvalues: Spectral Decomposition","text":"Factorization : = V diag(L) V’. , matrix \\(\\mathbf{}\\) can represented product \\(\\mathbf{}= \\mathbf{V} \\mathbf{\\Lambda} \\mathbf{V}'\\). V diagonalizes : L = V’ V. , matrix \\(\\mathbf{V}\\) transforms \\(\\mathbf{}\\) diagonal matrix \\(\\mathbf{\\Lambda}\\), corresponding orthogonal (uncorrelated) variables.","code":"V %*% diag(L) %*% t(V) ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 diag(L) ## [,1] [,2] [,3] ## [1,] 17 0 0 ## [2,] 0 8 0 ## [3,] 0 0 7 zapsmall(t(V) %*% A %*% V) ## [,1] [,2] [,3] ## [1,] 17 0 0 ## [2,] 0 8 0 ## [3,] 0 0 7"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"spectral-decomposition","dir":"Articles","previous_headings":"","what":"Spectral decomposition","title":"Eigenvalues: Spectral Decomposition","text":"basic idea eigenvalue–eigenvector pair generates rank 1 matrix, \\(\\lambda_i \\mathbf{v}_i \\mathbf{v}_i '\\), sum original matrix, \\(\\mathbf{} = \\sum_i \\lambda_i \\mathbf{v}_i \\mathbf{v}_i '\\). , summing gives , decompose :","code":"A1 = L[1] * V[,1] %*% t(V[,1]) A1 ## [,1] [,2] [,3] ## [1,] 9.444 -7.556 3.778 ## [2,] -7.556 6.044 -3.022 ## [3,] 3.778 -3.022 1.511 A2 = L[2] * V[,2] %*% t(V[,2]) A2 ## [,1] [,2] [,3] ## [1,] 3.556 3.556 -1.7778 ## [2,] 3.556 3.556 -1.7778 ## [3,] -1.778 -1.778 0.8889 A3 = L[3] * V[,3] %*% t(V[,3]) A3 ## [,1] [,2] [,3] ## [1,] 0 0.0 0.0 ## [2,] 0 1.4 2.8 ## [3,] 0 2.8 5.6 A1 + A2 + A3 ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 all.equal(A, A1+A2+A3) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"further-properties","dir":"Articles","previous_headings":"Spectral decomposition","what":"Further properties","title":"Eigenvalues: Spectral Decomposition","text":"Sum squares = sum sum squares A1, A2, A3 squared eigenvalue gives sum squares accounted latent vector first \\(\\) eigenvalues vectors give rank \\(\\) approximation ","code":"sum(A^2) ## [1] 402 c( sum(A1^2), sum(A2^2), sum(A3^2) ) ## [1] 289 64 49 sum( sum(A1^2), sum(A2^2), sum(A3^2) ) ## [1] 402 #' same as tr(A' A) tr(crossprod(A)) ## [1] 402 L^2 ## [1] 289 64 49 cumsum(L^2) # cumulative ## [1] 289 353 402 R(A1) ## [1] 1 R(A1 + A2) ## [1] 2 R(A1 + A2 + A3) ## [1] 3 # two dimensions sum((A1+A2)^2) ## [1] 353 sum((A1+A2)^2) / sum(A^2) # proportion ## [1] 0.8781"},{"path":"http://friendly.github.io/matlib/articles/ginv.html","id":"properties-of-generalized-inverse-moore-penrose-inverse","dir":"Articles","previous_headings":"","what":"Properties of generalized inverse (Moore-Penrose inverse)","title":"Generalized inverse","text":"generalized inverse defined matrix \\(^-\\) \\(* ^- * = \\) \\(^- * * ^- = ^-\\) addition, \\(* ^-\\) \\(^- * \\) symmetric, neither product gives identity matrix, %*% AI != AI %*% != ","code":"A %*% AI %*% A ## [,1] [,2] [,3] ## [1,] 4 4 -2 ## [2,] 4 4 -2 ## [3,] -2 -2 10 AI %*% A %*% AI ## [,1] [,2] [,3] ## [1,] 0.27778 0 0.05556 ## [2,] 0.00000 0 0.00000 ## [3,] 0.05556 0 0.11111 zapsmall(A %*% AI) ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 1 0 0 ## [3,] 0 0 1 zapsmall(AI %*% A) ## [,1] [,2] [,3] ## [1,] 1 1 0 ## [2,] 0 0 0 ## [3,] 0 0 1"},{"path":"http://friendly.github.io/matlib/articles/ginv.html","id":"rectangular-matrices","dir":"Articles","previous_headings":"","what":"Rectangular matrices","title":"Generalized inverse","text":"rectangular matrix, \\(^- = (^{T} )^{-1} ^{T}\\) generalized inverse \\(\\) \\((^{T} )^-\\) ginv \\((^{T} )\\) [See: Timm: EX 1.6.11] \\(4 \\times 3\\) matrix full rank, columns 2 3 sum column 1. generalized inverse \\(\\) \\((^{T} )^- ^{T}\\), AAI * t() Show generalized inverse:","code":"A <- cbind( 1, matrix(c(1, 0, 1, 0, 0, 1, 0, 1), nrow=4, byrow=TRUE)) A ## [,1] [,2] [,3] ## [1,] 1 1 0 ## [2,] 1 1 0 ## [3,] 1 0 1 ## [4,] 1 0 1 R(A) ## [1] 2 (AA <- t(A) %*% A) ## [,1] [,2] [,3] ## [1,] 4 2 2 ## [2,] 2 2 0 ## [3,] 2 0 2 (AAI <- Ginv(AA)) ## [,1] [,2] [,3] ## [1,] 0.5 -0.5 0 ## [2,] -0.5 1.0 0 ## [3,] 0.0 0.0 0 AI <- AAI %*% t(A) A %*% AI %*% A ## [,1] [,2] [,3] ## [1,] 1 1 0 ## [2,] 1 1 0 ## [3,] 1 0 1 ## [4,] 1 0 1 AI %*% A %*% AI ## [,1] [,2] [,3] [,4] ## [1,] 0.0 0.0 0.5 0.5 ## [2,] 0.5 0.5 -0.5 -0.5 ## [3,] 0.0 0.0 0.0 0.0"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"setup","dir":"Articles","previous_headings":"","what":"Setup","title":"Gram-Schmidt Orthogonalization and Regression","text":"use class data set, convert character factor sex dummy (0/1) variable male. later use regression, create variable IQ response variable Reorder predictors want, forming numeric matrix, X.","code":"library(matlib) data(class) class$male <- as.numeric(class$sex==\"M\") class <- transform(class, IQ = round(20 + height + 3*age -.1*weight -3*male + 10*rnorm(nrow(class)))) head(class) ## sex age height weight male IQ ## Alfred M 14 69.0 112.5 1 115 ## Alice F 13 56.5 84.0 0 104 ## Barbara F 13 65.3 98.0 0 112 ## Carol F 14 62.8 102.5 0 105 ## Henry M 14 63.5 102.5 1 110 ## James M 12 57.3 83.0 1 93 X <- as.matrix(class[,c(3,4,2,5)]) head(X) ## height weight age male ## Alfred 69.0 112.5 14 1 ## Alice 56.5 84.0 13 0 ## Barbara 65.3 98.0 13 0 ## Carol 62.8 102.5 14 0 ## Henry 63.5 102.5 14 1 ## James 57.3 83.0 12 1"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"orthogonalization-by-projections","dir":"Articles","previous_headings":"","what":"Orthogonalization by projections","title":"Gram-Schmidt Orthogonalization and Regression","text":"Gram-Schmidt process treats variables given order, according columns X. start new matrix Z consisting X[,1]. , find new variable Z[,2] orthogonal Z[,1] subtracting projection X[,2] Z[,1]. Continue way, subtracting projections X[,3] previous columns, forth Note column X linear combination previous columns, corresponding column Z zeros. computations similar following set linear regressions: columns Z now orthogonal, unit length, make standardize column unit length, giving Z orthonormal matrix, \\(Z' Z = \\).","code":"Z <- cbind(X[,1], 0, 0, 0) Z[,2] <- X[,2] - Proj(X[,2], Z[,1]) crossprod(Z[,1], Z[,2]) # verify orthogonality ## [,1] ## [1,] 7.276e-12 Z[,3] <- X[,3] - Proj(X[,3], Z[,1]) - Proj(X[,3], Z[,2]) Z[,4] <- X[,4] - Proj(X[,4], Z[,1]) - Proj(X[,4], Z[,2]) - Proj(X[,4], Z[,3]) z2 <- residuals(lm(X[,2] ~ X[,1]), type=\"response\") z3 <- residuals(lm(X[,3] ~ X[,1:2]), type=\"response\") z4 <- residuals(lm(X[,4] ~ X[,1:3]), type=\"response\") zapsmall(crossprod(Z)) # check orthogonality ## [,1] [,2] [,3] [,4] ## [1,] 57888 0 0 0 ## [2,] 0 3249 0 0 ## [3,] 0 0 7 0 ## [4,] 0 0 0 2 Z <- Z %*% diag(1 / len(Z)) # make each column unit length zapsmall(crossprod(Z)) # check orthonormal ## [,1] [,2] [,3] [,4] ## [1,] 1 0 0 0 ## [2,] 0 1 0 0 ## [3,] 0 0 1 0 ## [4,] 0 0 0 1 colnames(Z) <- colnames(X)"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"relationship-to-qr-factorization","dir":"Articles","previous_headings":"Orthogonalization by projections","what":"Relationship to QR factorization","title":"Gram-Schmidt Orthogonalization and Regression","text":"QR method uses essentially process, factoring matrix \\(\\mathbf{X}\\) \\(\\mathbf{X = Q R}\\), \\(\\mathbf{Q}\\) orthonormal matrix corresponding Z \\(\\mathbf{R}\\) upper triangular matrix. However, signs columns \\(\\mathbf{Q}\\) arbitrary, QR() returns QR(X)$Q signs reversed, compared Z.","code":"# same result as QR(X)$Q, but with signs reversed head(Z, 5) ## height weight age male ## Alfred 0.2868 0.07545 -0.3687 0.12456 ## Alice 0.2348 -0.08067 0.3569 -0.02177 ## Barbara 0.2714 -0.07715 -0.3862 -0.45170 ## Carol 0.2610 0.07058 0.1559 -0.20548 ## Henry 0.2639 0.05132 0.1047 0.40538 head(-QR(X)$Q, 5) ## [,1] [,2] [,3] [,4] ## [1,] 0.2868 0.07545 -0.3687 0.12456 ## [2,] 0.2348 -0.08067 0.3569 -0.02177 ## [3,] 0.2714 -0.07715 -0.3862 -0.45170 ## [4,] 0.2610 0.07058 0.1559 -0.20548 ## [5,] 0.2639 0.05132 0.1047 0.40538 all.equal( unname(Z), -QR(X)$Q ) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"regression-with-x-and-z","dir":"Articles","previous_headings":"","what":"Regression with X and Z","title":"Gram-Schmidt Orthogonalization and Regression","text":"carry two regressions IQ variables X Z. equivalent, sense \\(R^2\\) MSE models Residuals Type tests given anova() . Regression IQ original variables X Regression IQ orthogonalized variables Z illustrates anova() tests linear models sequential tests. test hypotheses extra contribution variable previous ones, given order. usually make substantive sense, except testing ordered (“hierarchical”) models.","code":"class2 <- data.frame(Z, IQ=class$IQ) mod1 <- lm(IQ ~ height + weight + age + male, data=class) anova(mod1) ## Analysis of Variance Table ## ## Response: IQ ## Df Sum Sq Mean Sq F value Pr(>F) ## height 1 389 389 6.08 0.033 * ## weight 1 196 196 3.07 0.110 ## age 1 82 82 1.28 0.284 ## male 1 12 12 0.18 0.678 ## Residuals 10 639 64 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 mod2 <- lm(IQ ~ height + weight + age + male, data=class2) anova(mod2) ## Analysis of Variance Table ## ## Response: IQ ## Df Sum Sq Mean Sq F value Pr(>F) ## height 1 389 389 6.08 0.033 * ## weight 1 196 196 3.07 0.110 ## age 1 82 82 1.28 0.284 ## male 1 12 12 0.18 0.678 ## Residuals 10 639 64 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"load-the-matlib-package","dir":"Articles","previous_headings":"","what":"Load the matlib package","title":"Inverse of a matrix","text":"defines: inv(), Inverse(); standard R function matrix inverse solve()","code":"library(matlib)"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"create-a-3-x-3-matrix","dir":"Articles","previous_headings":"","what":"Create a 3 x 3 matrix","title":"Inverse of a matrix","text":"ordinary inverse defined square matrices.","code":"A <- matrix( c(5, 1, 0, 3,-1, 2, 4, 0,-1), nrow=3, byrow=TRUE) det(A) ## [1] 16"},{"path":[]},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"deta-0-so-inverse-exists","dir":"Articles","previous_headings":"Basic properties","what":"1. det(A) != 0, so inverse exists","title":"Inverse of a matrix","text":"non-singular matrices inverse.","code":"(AI <- inv(A)) ## [,1] [,2] [,3] ## [1,] 0.0625 0.0625 0.125 ## [2,] 0.6875 -0.3125 -0.625 ## [3,] 0.2500 0.2500 -0.500"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"definition-of-the-inverse-a-1-a-a-a-1-i-or-ai-a-diagnrowa","dir":"Articles","previous_headings":"Basic properties","what":"2. Definition of the inverse: \\(A^{-1} A = A A^{-1} = I\\) or AI * A = diag(nrow(A))","title":"Inverse of a matrix","text":"inverse matrix \\(\\) defined matrix \\(^{-1}\\) multiplies \\(\\) give identity matrix, just , scalar \\(\\), \\(^{-1} = / = 1\\). NB: Sometimes get tiny -diagonal values (like 1.341e-13). function zapsmall() round 0.","code":"AI %*% A ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 0 1 0 ## [3,] 0 0 1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-is-reflexive-invinva-a","dir":"Articles","previous_headings":"Basic properties","what":"3. Inverse is reflexive: inv(inv(A)) = A","title":"Inverse of a matrix","text":"Taking inverse twice gets back started.","code":"inv(AI) ## [,1] [,2] [,3] ## [1,] 5 1 0 ## [2,] 3 -1 2 ## [3,] 4 0 -1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inva-is-symmetric-if-and-only-if-a-is-symmetric","dir":"Articles","previous_headings":"Basic properties","what":"4. inv(A) is symmetric if and only if A is symmetric","title":"Inverse of a matrix","text":"symmetric case:","code":"inv( t(A) ) ## [,1] [,2] [,3] ## [1,] 0.0625 0.6875 0.25 ## [2,] 0.0625 -0.3125 0.25 ## [3,] 0.1250 -0.6250 -0.50 is_symmetric_matrix(A) ## [1] FALSE is_symmetric_matrix( inv( t(A) ) ) ## [1] FALSE B <- matrix( c(4, 2, 2, 2, 3, 1, 2, 1, 3), nrow=3, byrow=TRUE) inv(B) ## [,1] [,2] [,3] ## [1,] 0.50 -0.25 -0.25 ## [2,] -0.25 0.50 0.00 ## [3,] -0.25 0.00 0.50 inv( t(B) ) ## [,1] [,2] [,3] ## [1,] 0.50 -0.25 -0.25 ## [2,] -0.25 0.50 0.00 ## [3,] -0.25 0.00 0.50 is_symmetric_matrix(B) ## [1] TRUE is_symmetric_matrix( inv( t(B) ) ) ## [1] TRUE all.equal( inv(B), inv( t(B) ) ) ## [1] TRUE"},{"path":[]},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-diagonal-matrix-diag-1-diagonal","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"1. inverse of diagonal matrix = diag( 1/ diagonal)","title":"Inverse of a matrix","text":"simple examples, often useful show results matrix calculations fractions, using MASS::fractions().","code":"D <- diag(c(1, 2, 4)) inv(D) ## [,1] [,2] [,3] ## [1,] 1 0.0 0.00 ## [2,] 0 0.5 0.00 ## [3,] 0 0.0 0.25 MASS::fractions( diag(1 / c(1, 2, 4)) ) ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 0 1/2 0 ## [3,] 0 0 1/4"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-an-inverse-invinva-a","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"2. Inverse of an inverse: inv(inv(A)) = A","title":"Inverse of a matrix","text":"","code":"A <- matrix(c(1, 2, 3, 2, 3, 0, 0, 1, 2), nrow=3, byrow=TRUE) AI <- inv(A) inv(AI) ## [,1] [,2] [,3] ## [1,] 1 2 3 ## [2,] 2 3 0 ## [3,] 0 1 2"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-a-transpose-invta-tinva","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"3. inverse of a transpose: inv(t(A)) = t(inv(A))","title":"Inverse of a matrix","text":"","code":"inv( t(A) ) ## [,1] [,2] [,3] ## [1,] 1.50 -1.0 0.50 ## [2,] -0.25 0.5 -0.25 ## [3,] -2.25 1.5 -0.25 t( inv(A) ) ## [,1] [,2] [,3] ## [1,] 1.50 -1.0 0.50 ## [2,] -0.25 0.5 -0.25 ## [3,] -2.25 1.5 -0.25"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-a-scalar-matrix-inv-ka-1k-inva","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"4. inverse of a scalar * matrix: inv( k*A ) = (1/k) * inv(A)","title":"Inverse of a matrix","text":"","code":"inv(5 * A) ## [,1] [,2] [,3] ## [1,] 0.3 -0.05 -0.45 ## [2,] -0.2 0.10 0.30 ## [3,] 0.1 -0.05 -0.05 (1/5) * inv(A) ## [,1] [,2] [,3] ## [1,] 0.3 -0.05 -0.45 ## [2,] -0.2 0.10 0.30 ## [3,] 0.1 -0.05 -0.05"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-a-matrix-product-inva-b-invb-inva","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"5. inverse of a matrix product: inv(A * B) = inv(B) %*% inv(A)","title":"Inverse of a matrix","text":"extends number terms: inverse product product inverses reverse order.","code":"B <- matrix(c(1, 2, 3, 1, 3, 2, 2, 4, 1), nrow=3, byrow=TRUE) C <- B[, 3:1] A %*% B ## [,1] [,2] [,3] ## [1,] 9 20 10 ## [2,] 5 13 12 ## [3,] 5 11 4 inv(A %*% B) ## [,1] [,2] [,3] ## [1,] 4.0 -1.50 -5.50 ## [2,] -2.0 0.70 2.90 ## [3,] 0.5 -0.05 -0.85 inv(B) %*% inv(A) ## [,1] [,2] [,3] ## [1,] 4.0 -1.50 -5.50 ## [2,] -2.0 0.70 2.90 ## [3,] 0.5 -0.05 -0.85 (ABC <- A %*% B %*% C) ## [,1] [,2] [,3] ## [1,] 77 118 49 ## [2,] 53 97 42 ## [3,] 41 59 24 inv(A %*% B %*% C) ## [,1] [,2] [,3] ## [1,] 1.5 -0.59 -2.03 ## [2,] -4.5 1.61 6.37 ## [3,] 8.5 -2.95 -12.15 inv(C) %*% inv(B) %*% inv(A) ## [,1] [,2] [,3] ## [1,] 1.5 -0.59 -2.03 ## [2,] -4.5 1.61 6.37 ## [3,] 8.5 -2.95 -12.15 inv(ABC) ## [,1] [,2] [,3] ## [1,] 1.5 -0.59 -2.03 ## [2,] -4.5 1.61 6.37 ## [3,] 8.5 -2.95 -12.15"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"det-a-1-1-deta-deta-1","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"6. \\(\\det (A^{-1}) = 1 / \\det(A) = [\\det(A)]^{-1}\\)","title":"Inverse of a matrix","text":"determinant inverse inverse (reciprocal) determinant","code":"det(AI) ## [1] 0.25 1 / det(A) ## [1] 0.25"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"geometric-interpretations","dir":"Articles","previous_headings":"","what":"Geometric interpretations","title":"Inverse of a matrix","text":"properties matrix inverse can easily understood geometric diagrams. , take \\(2 \\times 2\\) non-singular matrix \\(\\), larger determinant \\(\\), smaller determinant \\(^{-1}\\). Now, plot rows \\(\\) vectors \\(a_1, a_2\\) origin 2D space. illustrated vignette(\"det-ex1\"), area parallelogram defined vectors determinant. rows inverse \\(^{-1}\\) can shown vectors \\(^1, ^2\\) origin space. Thus, can see: shape \\(^{-1}\\) \\(90^o\\) rotation shape \\(\\). \\(^{-1}\\) small directions \\(\\) large. vector \\(^2\\) right angles \\(a_1\\) \\(^1\\) right angles \\(a_2\\) multiplied \\(\\) constant \\(k\\) make determinant larger (factor \\(k^2\\)), inverse divided factor preserve \\(^{-1} = \\). One might wonder whether properties depend symmetry \\(\\), another example, matrix <- matrix(c(2, 1, 1, 1), nrow=2), \\(\\det()=1\\). areas two parallelograms \\(\\det() = \\det(^{-1}) = 1\\).","code":"A <- matrix(c(2, 1, 1, 2), nrow=2, byrow=TRUE) A ## [,1] [,2] ## [1,] 2 1 ## [2,] 1 2 det(A) ## [1] 3 AI <- inv(A) MASS::fractions(AI) ## [,1] [,2] ## [1,] 2/3 -1/3 ## [2,] -1/3 2/3 det(AI) ## [1] 0.3333 par(mar=c(3,3,1,1)+.1) xlim <- c(-1,3) ylim <- c(-1,3) plot(xlim, ylim, type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) sum <- A[1,] + A[2,] # draw the parallelogram determined by the rows of A polygon( rbind(c(0,0), A[1,], sum, A[2,]), col=rgb(1,0,0,.2)) vectors(A, labels=c(expression(a[1]), expression(a[2])), pos.lab=c(4,2)) vectors(sum, origin=A[1,], col=\"gray\") vectors(sum, origin=A[2,], col=\"gray\") text(mean(A[,1]), mean(A[,2]), \"A\", cex=1.5) vectors(AI, labels=c(expression(a^1), expression(a^2)), pos.lab=c(4,2)) sum <- AI[1,] + AI[2,] polygon( rbind(c(0,0), AI[1,], sum, AI[2,]), col=rgb(0,0,1,.2)) text(mean(AI[,1])-.3, mean(AI[,2])-.2, expression(A^{-1}), cex=1.5) (A <- matrix(c(2, 1, 1, 1), nrow=2)) ## [,1] [,2] ## [1,] 2 1 ## [2,] 1 1 (AI <- inv(A)) ## [,1] [,2] ## [1,] 1 -1 ## [2,] -1 2"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"load-the-matlib-package","dir":"Articles","previous_headings":"","what":"Load the matlib package","title":"Matrix inversion by elementary row operations","text":"","code":"library(matlib)"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"create-a-3-x-3-matrix","dir":"Articles","previous_headings":"","what":"Create a 3 x 3 matrix","title":"Matrix inversion by elementary row operations","text":"","code":"A <- matrix( c(1, 2, 3, 2, 3, 0, 0, 1,-2), nrow=3, byrow=TRUE)"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"join-an-identity-matrix-to-a","dir":"Articles","previous_headings":"","what":"Join an identity matrix to A","title":"Matrix inversion by elementary row operations","text":"","code":"(AI <- cbind(A, diag(3))) ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1 0 0 ## [2,] 2 3 0 0 1 0 ## [3,] 0 1 -2 0 0 1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"apply-elementary-row-operations-to-reduce-a-to-an-identity-matrix-","dir":"Articles","previous_headings":"","what":"Apply elementary row operations to reduce A to an identity matrix.","title":"Matrix inversion by elementary row operations","text":"right three cols contain inv(). three ways: first, just using R arithmetic rows AI using ERO functions matlib package using echelon() function","code":""},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"using-r-arithmetic","dir":"Articles","previous_headings":"","what":"1. Using R arithmetic","title":"Matrix inversion by elementary row operations","text":"Now, elements diagonal zero","code":"(AI[2,] <- AI[2,] - 2*AI[1,]) # row 2 <- row 2 - 2 * row 1 ## [1] 0 -1 -6 -2 1 0 (AI[3,] <- AI[3,] + AI[2,]) # row 3 <- row 3 + row 2 ## [1] 0 0 -8 -2 1 1 (AI[2,] <- -1 * AI[2,]) # row 2 <- -1 * row 2 ## [1] 0 1 6 2 -1 0 (AI[3,] <- -(1/8) * AI[3,]) # row 3 <- -.25 * row 3 ## [1] 0.000 0.000 1.000 0.250 -0.125 -0.125 AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1.00 0.000 0.000 ## [2,] 0 1 6 2.00 -1.000 0.000 ## [3,] 0 0 1 0.25 -0.125 -0.125 #--continue, making above diagonal == 0 AI[2,] <- AI[2,] - 6 * AI[3,] # row 2 <- row 2 - 6 * row 3 AI[1,] <- AI[1,] - 3 * AI[3,] # row 1 <- row 1 - 3 * row 3 AI[1,] <- AI[1,] - 2 * AI[2,] # row 1 <- row 1 - 2 * row 2 AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -0.75 0.875 -1.125 ## [2,] 0 1 0 0.50 -0.250 0.750 ## [3,] 0 0 1 0.25 -0.125 -0.125 #-- last three cols are the inverse (AInv <- AI[,-(1:3)]) ## [,1] [,2] [,3] ## [1,] -0.75 0.875 -1.125 ## [2,] 0.50 -0.250 0.750 ## [3,] 0.25 -0.125 -0.125 #-- compare with inv() inv(A) ## [,1] [,2] [,3] ## [1,] -0.75 0.875 -1.125 ## [2,] 0.50 -0.250 0.750 ## [3,] 0.25 -0.125 -0.125"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"do-the-same-using-matlib-functions-rowadd-rowmult-and-rowswap","dir":"Articles","previous_headings":"","what":"2. Do the same, using matlib functions rowadd(), rowmult() and rowswap()","title":"Matrix inversion by elementary row operations","text":"","code":"AI <- cbind(A, diag(3)) AI <- rowadd(AI, 1, 2, -2) # row 2 <- row 2 - 2 * row 1 AI <- rowadd(AI, 2, 3, 1) # row 3 <- row 3 + row 2 AI <- rowmult(AI, 2, -1) # row 1 <- -1 * row 2 AI <- rowmult(AI, 3, -1/8) # row 3 <- -.25 * row 3 # show result so far AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1.00 0.000 0.000 ## [2,] 0 1 6 2.00 -1.000 0.000 ## [3,] 0 0 1 0.25 -0.125 -0.125 #--continue, making above-diagonal == 0 AI <- rowadd(AI, 3, 2, -6) # row 2 <- row 2 - 6 * row 3 AI <- rowadd(AI, 2, 1, -2) # row 1 <- row 1 - 2 * row 2 AI <- rowadd(AI, 3, 1, -3) # row 1 <- row 1 - 3 * row 3 AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -0.75 0.875 -1.125 ## [2,] 0 1 0 0.50 -0.250 0.750 ## [3,] 0 0 1 0.25 -0.125 -0.125"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"using-echelon","dir":"Articles","previous_headings":"","what":"3. Using echelon()","title":"Matrix inversion by elementary row operations","text":"echelon() steps row row, returns result interesting see steps, using argument verbose=TRUE. many cases, informative see numbers printed fractions.","code":"echelon( cbind(A, diag(3))) ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -0.75 0.875 -1.125 ## [2,] 0 1 0 0.50 -0.250 0.750 ## [3,] 0 0 1 0.25 -0.125 -0.125 echelon( cbind(A, diag(3)), verbose=TRUE, fractions=TRUE) ## ## Initial matrix: ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1 0 0 ## [2,] 2 3 0 0 1 0 ## [3,] 0 1 -2 0 0 1 ## ## row: 1 ## ## exchange rows 1 and 2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 2 3 0 0 1 0 ## [2,] 1 2 3 1 0 0 ## [3,] 0 1 -2 0 0 1 ## ## multiply row 1 by 1/2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 3/2 0 0 1/2 0 ## [2,] 1 2 3 1 0 0 ## [3,] 0 1 -2 0 0 1 ## ## subtract row 1 from row 2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 3/2 0 0 1/2 0 ## [2,] 0 1/2 3 1 -1/2 0 ## [3,] 0 1 -2 0 0 1 ## ## row: 2 ## ## exchange rows 2 and 3 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 3/2 0 0 1/2 0 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 1/2 3 1 -1/2 0 ## ## multiply row 2 by 3/2 and subtract from row 1 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 3 0 1/2 -3/2 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 1/2 3 1 -1/2 0 ## ## multiply row 2 by 1/2 and subtract from row 3 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 3 0 1/2 -3/2 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 0 4 1 -1/2 -1/2 ## ## row: 3 ## ## multiply row 3 by 1/4 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 3 0 1/2 -3/2 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 0 1 1/4 -1/8 -1/8 ## ## multiply row 3 by 3 and subtract from row 1 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -3/4 7/8 -9/8 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 0 1 1/4 -1/8 -1/8 ## ## multiply row 3 by 2 and add to row 2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -3/4 7/8 -9/8 ## [2,] 0 1 0 1/2 -1/4 3/4 ## [3,] 0 0 1 1/4 -1/8 -1/8"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"equations-in-two-unknowns","dir":"Articles","previous_headings":"","what":"Equations in two unknowns","title":"Solving Linear Equations","text":"equation two unknowns corresponds line 2D space. equations unique solution lines intersect point.","code":""},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"two-consistent-equations","dir":"Articles","previous_headings":"Equations in two unknowns","what":"Two consistent equations","title":"Solving Linear Equations","text":"Plot equations: Solve() convenience function shows solution comprehensible form:","code":"A <- matrix(c(1, 2, -1, 2), 2, 2) b <- c(2,1) showEqn(A, b) ## 1*x1 - 1*x2 = 2 ## 2*x1 + 2*x2 = 1 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 2 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] TRUE plotEqn(A,b) ## x[1] - 1*x[2] = 2 ## 2*x[1] + 2*x[2] = 1 Solve(A, b, fractions = TRUE) ## x1 = 5/4 ## x2 = -3/4"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-consistent-equations","dir":"Articles","previous_headings":"Equations in two unknowns","what":"Three consistent equations","title":"Solving Linear Equations","text":"three () equations two unknowns, \\(r(\\mathbf{}) \\le 2\\), \\(r(\\mathbf{}) \\le \\min(m,n)\\). equations consistent \\(r(\\mathbf{}) = r(\\mathbf{| b})\\). means whatever linear relations exist among rows \\(\\mathbf{}\\) among elements \\(\\mathbf{b}\\). Geometrically, means three lines intersect point. Plot equations:","code":"A <- matrix(c(1,2,3, -1, 2, 1), 3, 2) b <- c(2,1,3) showEqn(A, b) ## 1*x1 - 1*x2 = 2 ## 2*x1 + 2*x2 = 1 ## 3*x1 + 1*x2 = 3 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 2 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] TRUE Solve(A, b, fractions=TRUE) # show solution ## x1 = 5/4 ## x2 = -3/4 ## 0 = 0 plotEqn(A,b) ## x[1] - 1*x[2] = 2 ## 2*x[1] + 2*x[2] = 1 ## 3*x[1] + x[2] = 3"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-inconsistent-equations","dir":"Articles","previous_headings":"Equations in two unknowns","what":"Three inconsistent equations","title":"Solving Linear Equations","text":"Three equations two unknowns inconsistent \\(r(\\mathbf{}) < r(\\mathbf{| b})\\). can see result reducing \\(\\mathbf{} | \\mathbf{b}\\) echelon form, last row indicates inconsistency. Solve() shows explicitly: approximate solution sometimes available using generalized inverse. Plot equations. can see pair equations solution, three common, consistent solution.","code":"A <- matrix(c(1,2,3, -1, 2, 1), 3, 2) b <- c(2,1,6) showEqn(A, b) ## 1*x1 - 1*x2 = 2 ## 2*x1 + 2*x2 = 1 ## 3*x1 + 1*x2 = 6 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 3 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] \"Mean relative difference: 0.5\" echelon(A, b) ## [,1] [,2] [,3] ## [1,] 1 0 2.75 ## [2,] 0 1 -2.25 ## [3,] 0 0 -3.00 Solve(A, b, fractions=TRUE) ## x1 = 11/4 ## x2 = -9/4 ## 0 = -3 x <- MASS::ginv(A) %*% b x ## [,1] ## [1,] 2 ## [2,] -1 par(mar=c(4,4,0,0)+.1) plotEqn(A,b, xlim=c(-2, 4)) ## x[1] - 1*x[2] = 2 ## 2*x[1] + 2*x[2] = 1 ## 3*x[1] + x[2] = 6 points(x[1], x[2], pch=15)"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"equations-in-three-unknowns","dir":"Articles","previous_headings":"","what":"Equations in three unknowns","title":"Solving Linear Equations","text":"equation three unknowns corresponds plane 3D space. equations unique solution planes intersect point.","code":""},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-consistent-equations-1","dir":"Articles","previous_headings":"Equations in three unknowns","what":"Three consistent equations","title":"Solving Linear Equations","text":"equations consistent? Solve \\(\\mathbf{x}\\). Another way see solution reduce \\(\\mathbf{| b}\\) echelon form. result \\(\\mathbf{| ^{-1}b}\\), solution last column. Plot . plotEqn3d uses rgl 3D graphics. rotate figure, ’ll see orientation three planes intersect solution point, \\(\\mathbf{x} = (2, 3, -1)\\)","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) colnames(A) <- paste0('x', 1:3) b <- c(8, -11, -3) showEqn(A, b) ## 2*x1 + 1*x2 - 1*x3 = 8 ## -3*x1 - 1*x2 + 2*x3 = -11 ## -2*x1 + 1*x2 + 2*x3 = -3 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 3 3 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] TRUE solve(A, b) ## x1 x2 x3 ## 2 3 -1 solve(A) %*% b ## [,1] ## x1 2 ## x2 3 ## x3 -1 inv(A) %*% b ## [,1] ## [1,] 2 ## [2,] 3 ## [3,] -1 echelon(A, b) ## x1 x2 x3 ## [1,] 1 0 0 2 ## [2,] 0 1 0 3 ## [3,] 0 0 1 -1 echelon(A, b, verbose=TRUE, fractions=TRUE) ## ## Initial matrix: ## x1 x2 x3 ## [1,] 2 1 -1 8 ## [2,] -3 -1 2 -11 ## [3,] -2 1 2 -3 ## ## row: 1 ## ## exchange rows 1 and 2 ## x1 x2 x3 ## [1,] -3 -1 2 -11 ## [2,] 2 1 -1 8 ## [3,] -2 1 2 -3 ## ## multiply row 1 by -1/3 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 2 1 -1 8 ## [3,] -2 1 2 -3 ## ## multiply row 1 by 2 and subtract from row 2 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 1/3 1/3 2/3 ## [3,] -2 1 2 -3 ## ## multiply row 1 by 2 and add to row 3 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 1/3 1/3 2/3 ## [3,] 0 5/3 2/3 13/3 ## ## row: 2 ## ## exchange rows 2 and 3 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 5/3 2/3 13/3 ## [3,] 0 1/3 1/3 2/3 ## ## multiply row 2 by 3/5 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 1 2/5 13/5 ## [3,] 0 1/3 1/3 2/3 ## ## multiply row 2 by 1/3 and subtract from row 1 ## x1 x2 x3 ## [1,] 1 0 -4/5 14/5 ## [2,] 0 1 2/5 13/5 ## [3,] 0 1/3 1/3 2/3 ## ## multiply row 2 by 1/3 and subtract from row 3 ## x1 x2 x3 ## [1,] 1 0 -4/5 14/5 ## [2,] 0 1 2/5 13/5 ## [3,] 0 0 1/5 -1/5 ## ## row: 3 ## ## multiply row 3 by 5 ## x1 x2 x3 ## [1,] 1 0 -4/5 14/5 ## [2,] 0 1 2/5 13/5 ## [3,] 0 0 1 -1 ## ## multiply row 3 by 4/5 and add to row 1 ## x1 x2 x3 ## [1,] 1 0 0 2 ## [2,] 0 1 2/5 13/5 ## [3,] 0 0 1 -1 ## ## multiply row 3 by 2/5 and subtract from row 2 ## x1 x2 x3 ## [1,] 1 0 0 2 ## [2,] 0 1 0 3 ## [3,] 0 0 1 -1 plotEqn3d(A,b, xlim=c(0,4), ylim=c(0,4))"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-inconsistent-equations-1","dir":"Articles","previous_headings":"Equations in three unknowns","what":"Three inconsistent equations","title":"Solving Linear Equations","text":"equations consistent? .","code":"A <- matrix(c(1, 3, 1, 1, -2, -2, 2, 1, -1), 3, 3, byrow=TRUE) colnames(A) <- paste0('x', 1:3) b <- c(2, 3, 6) showEqn(A, b) ## 1*x1 + 3*x2 + 1*x3 = 2 ## 1*x1 - 2*x2 - 2*x3 = 3 ## 2*x1 + 1*x2 - 1*x3 = 6 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 3 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] \"Mean relative difference: 0.5\""},{"path":"http://friendly.github.io/matlib/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Michael Friendly. Author, maintainer. John Fox. Author. Phil Chalmers. Author. Georges Monette. Contributor. Gaston Sanchez. Contributor.","code":""},{"path":"http://friendly.github.io/matlib/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Friendly M, Fox J, Chalmers P (2024). matlib: Matrix Functions Teaching Learning Linear Algebra Multivariate Statistics. https://github.com/friendly/matlib, http://friendly.github.io/matlib/.","code":"@Manual{, title = {matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics}, author = {Michael Friendly and John Fox and Phil Chalmers}, year = {2024}, note = {https://github.com/friendly/matlib, http://friendly.github.io/matlib/}, }"},{"path":"http://friendly.github.io/matlib/index.html","id":"matlib-","dir":"","previous_headings":"","what":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"Matrix Functions Teaching Learning Linear Algebra Multivariate Statistics, http://friendly.github.io/matlib/ Version 0.9.9 functions originally designed tutorial purposes teaching & learning matrix algebra ideas using R. cases, functions provided concepts computations available elsewhere R, name obvious, e.g., R() rank matrix, tr() matrix trace. cases, provide cover functions show demonstrate algorithm detail, sometimes providing verbose = argument print details computations, e.g., Det() matrix determinant, Inverse() matrix inverse, using gaussianElimination() show steps. addition, collection functions provided drawing vector diagrams 2D 3D, illustrating various concepts linear algebra concretely available . example, showEqn(, b) shows matrix equations Ax = b text LaTeX form, plotEqn(, b) plotEqn3d(, b) plots equations 2D 3D space. matrix2latex() symbolicMatrix() facilitate writing matrix equations LaTeX vectors(), vectors3d() plot geometric vector diagrams 2D 3D, functions draw angles arcs. regvec3d() calculates plot vectors representing bivariate regression model, lm(y ~ x1 + x2)","code":""},{"path":"http://friendly.github.io/matlib/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"Get released version CRAN: development version R-universe: development version can also installed R library directly repo via: functions draw 3D graphs use rgl package. macOS, rgl requires XQuartz installed. installing XQuartz, ’s necessary either log back macOS account reboot Mac.","code":"install.packages(\"matlib\") install.packages('matlib', repos = c('https://friendly.r-universe.dev', 'https://cloud.r-project.org')) if (!require(remotes)) install.packages(\"remotes\") remotes::install_github(\"friendly/matlib\", build_vignettes = TRUE)"},{"path":"http://friendly.github.io/matlib/index.html","id":"topics","dir":"","previous_headings":"","what":"Topics","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"functions package grouped following topics Convenience functions: tr() - trace matrix R() - rank matrix J() - constant vector, matrix array len() - Euclidean length vector columns matrix vec() - vectorize matrix Proj(y, X) - projection vector y columns matrix X mpower(, p) - matrix powers square symmetric matrix xprod(...) - vector cross-product Determinants: functions calculating determinants cofactor expansion minor() - Minor [,j] cofactor() - Cofactor [,j] rowMinors() - Row minors [,] rowCofactors() - Row cofactors [,] Det() - Determinants elimination eigenvalues Elementary row operations: functions solving linear equations “manually” steps used row echelon form Gaussian elimination rowadd() - Add multiples rows rows rowmult() - Multiply rows constants rowswap() - Interchange two rows matrix Linear equations: functions illustrate linear equations form Ax = b showEqn(, b) - show matrices (, b) linear equations plotEqn(, b), plotEqn3d(, b) - plot matrices (, b) linear equations Gaussian elimination: functions illustrating Gaussian elimination solving systems linear equations form Ax = b. functions provide verbose=TRUE argument show intermediate steps fractions=TRUE argument show results using MASS::fractions(). gaussianElimination(, B) - reduces (,B) (,−1B) Inverse(X), inv() - uses gaussianElimination find inverse X, X−1 echelon(X) - uses gaussianElimination find reduced echelon form X Ginv(X) - uses gaussianElimination find generalized inverse X LU(X) - LU decomposition matrix X cholesky(X) - calculates Cholesky square root matrix swp() - matrix sweep operator Eigenvalues: functions illustrate algorithms calculating eigenvalues eigenvectors related matrix decompositions generalizations. Eigen() - eigenvalues eigenvectors SVD() - singular value decomposition, $mathbf{X = U D V}$ powerMethod() - find dominant eigenvector using power method showEig() - draw eigenvectors 2D scatterplot dataEllipse MoorePenrose() - illustrates Moore-Penrose inverse can calculated using SVD() Vector diagrams: functions drawing vector diagrams 2D 3D arrows3d() - draw nice 3D arrows corner(), arc() - draw corner arc showing angle two vectors 2D/3D pointOnLine() - position point along line vectors(), vectors3d() - plot geometric vector diagrams 2D/3D regvec3d() - calculate plot vectors representing bivariate regression model, lm(y ~ x1 + x2) mean-deviation form. Matrix equations matrix2latex(): Convert matrix LaTeX equation symbolicMatrix(): Create symbolic matrix LaTeX","code":""},{"path":"http://friendly.github.io/matlib/index.html","id":"vignettes-and-presentations","dir":"","previous_headings":"Topics","what":"Vignettes and presentations","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"small collection vignettes now available. Use browseVignettes(\"matlib\") explore . See also: Fox & Friendly, Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R, June 2016, useR! Conference, Stanford. Ivan Savov, Linear algebra explained four pages","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the Adjoint of a matrix — adjoint","title":"Calculate the Adjoint of a matrix — adjoint","text":"function calculates adjoint square matrix, defined transposed matrix cofactors elements.","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the Adjoint of a matrix — adjoint","text":"","code":"adjoint(A)"},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the Adjoint of a matrix — adjoint","text":"square matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the Adjoint of a matrix — adjoint","text":"matrix size ","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the Adjoint of a matrix — adjoint","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the Adjoint of a matrix — adjoint","text":"","code":"A <- J(3, 3) + 2*diag(3) adjoint(A) #> [,1] [,2] [,3] #> [1,] 8 -2 -2 #> [2,] -2 8 -2 #> [3,] -2 -2 8"},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":null,"dir":"Reference","previous_headings":"","what":"Angle between two vectors — angle","title":"Angle between two vectors — angle","text":"angle calculates angle two vectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Angle between two vectors — angle","text":"","code":"angle(x, y, degree = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Angle between two vectors — angle","text":"x numeric vector y numeric vector degree logical; angle computed degrees? FALSE result returned radians","code":""},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Angle between two vectors — angle","text":"scalar containing angle vectors","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Angle between two vectors — angle","text":"","code":"x <- c(2,1) y <- c(1,1) angle(x, y) # degrees #> [,1] #> [1,] 18.43495 angle(x, y, degree = FALSE) # radians #> [,1] #> [1,] 0.3217506 # visually xlim <- c(0,2.5) ylim <- c(0,2) # proper geometry requires asp=1 plot( xlim, ylim, type=\"n\", xlab=\"X\", ylab=\"Y\", asp=1, main = expression(theta == 18.4)) abline(v=0, h=0, col=\"gray\") vectors(rbind(x,y), col=c(\"red\", \"blue\"), cex.lab=c(2, 2)) text(.5, .37, expression(theta)) #### x <- c(-2,1) y <- c(1,1) angle(x, y) # degrees #> [,1] #> [1,] 108.4349 angle(x, y, degree = FALSE) # radians #> [,1] #> [1,] 1.892547 # visually xlim <- c(-2,1.5) ylim <- c(0,2) # proper geometry requires asp=1 plot( xlim, ylim, type=\"n\", xlab=\"X\", ylab=\"Y\", asp=1, main = expression(theta == 108.4)) abline(v=0, h=0, col=\"gray\") vectors(rbind(x,y), col=c(\"red\", \"blue\"), cex.lab=c(2, 2)) text(0, .4, expression(theta), cex=1.5)"},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw an arc showing the angle between vectors — arc","title":"Draw an arc showing the angle between vectors — arc","text":"utility function drawing vector diagrams. Draws circular arc show angle two vectors 2D 3D.","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw an arc showing the angle between vectors — arc","text":"","code":"arc(p1, p2, p3, d = 0.1, absolute = TRUE, ...)"},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw an arc showing the angle between vectors — arc","text":"p1 Starting point first vector p2 End point first vector, also start second vector p3 End point second vector d distance p2 along vector drawing corner absolute logical; TRUE, d taken absolute distance along vectors; otherwise calculated relative distance, .e., fraction length vectors. ... Arguments passed link[graphics]{lines} link[rgl]{lines3d}","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw an arc showing the angle between vectors — arc","text":"none","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw an arc showing the angle between vectors — arc","text":"implementation, two vectors specified three points, p1, p2, p3, meaning line p1 p2, another line p2 p3.","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw an arc showing the angle between vectors — arc","text":"https://math.stackexchange.com/questions/1507248/find-arc--two-tips--vectors--3d","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw an arc showing the angle between vectors — arc","text":"3D plot","code":"library(rgl) #> Warning: package 'rgl' was built under R version 4.3.3 #> #> Attaching package: 'rgl' #> The following object is masked from 'package:matlib': #> #> GramSchmidt vec <- rbind(diag(3), c(1,1,1)) rownames(vec) <- c(\"X\", \"Y\", \"Z\", \"J\") open3d() aspect3d(\"iso\") vectors3d(vec, col=c(rep(\"black\",3), \"red\"), lwd=2) # draw the XZ plane, whose equation is Y=0 planes3d(0, 0, 1, 0, col=\"gray\", alpha=0.2) # show projections of the unit vector J segments3d(rbind( c(1,1,1), c(1, 1, 0))) segments3d(rbind( c(0,0,0), c(1, 1, 0))) segments3d(rbind( c(1,0,0), c(1, 1, 0))) segments3d(rbind( c(0,1,0), c(1, 1, 0))) segments3d(rbind( c(1,1,1), c(1, 0, 0))) # show some orthogonal vectors p1 <- c(0,0,0) p2 <- c(1,1,0) p3 <- c(1,1,1) p4 <- c(1,0,0) # show some angles arc(p1, p2, p3, d=.2) arc(p4, p1, p2, d=.2) arc(p3, p1, p2, d=.2) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":1,\"objects\":{\"7\":{\"id\":7,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"0\",\"colors\":\"1\",\"centers\":\"2\",\"ignoreExtent\":false,\"flags\":41024},\"8\":{\"id\":8,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"3\",\"colors\":\"5\",\"centers\":\"6\",\"normals\":\"4\",\"ignoreExtent\":false,\"flags\":32771},\"9\":{\"id\":9,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"10\":{\"id\":10,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"11\":{\"id\":11,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"12\":{\"id\":12,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"19\",\"colors\":\"20\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"X\"],[\"Y\"],[\"Z\"],[\"J\"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"21\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"13\":{\"id\":13,\"type\":\"planes\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"22\",\"colors\":\"24\",\"offsets\":[[0]],\"centers\":\"25\",\"normals\":\"23\",\"ignoreExtent\":true,\"flags\":32803},\"14\":{\"id\":14,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"26\",\"colors\":\"27\",\"centers\":\"28\",\"ignoreExtent\":false,\"flags\":32832},\"15\":{\"id\":15,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"29\",\"colors\":\"30\",\"centers\":\"31\",\"ignoreExtent\":false,\"flags\":32832},\"16\":{\"id\":16,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"32\",\"colors\":\"33\",\"centers\":\"34\",\"ignoreExtent\":false,\"flags\":32832},\"17\":{\"id\":17,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"35\",\"colors\":\"36\",\"centers\":\"37\",\"ignoreExtent\":false,\"flags\":32832},\"18\":{\"id\":18,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"38\",\"colors\":\"39\",\"centers\":\"40\",\"ignoreExtent\":false,\"flags\":32832},\"19\":{\"id\":19,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"41\",\"colors\":\"42\",\"centers\":\"43\",\"ignoreExtent\":false,\"flags\":32832},\"20\":{\"id\":20,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"44\",\"colors\":\"45\",\"centers\":\"46\",\"ignoreExtent\":false,\"flags\":32832},\"21\":{\"id\":21,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"47\",\"colors\":\"48\",\"centers\":\"49\",\"ignoreExtent\":false,\"flags\":32832},\"5\":{\"id\":5,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"4\":{\"id\":4,\"type\":\"background\",\"material\":{},\"colors\":\"50\",\"centers\":\"51\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"6\":{\"id\":6,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"52\",\"centers\":\"53\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"1\":{\"id\":1,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":1,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.735036373138428],\"modelMatrix\":[[1,0,0,-0.5417932868003845],[0,0.3420201539993286,0.9396926164627075,-0.6947333812713623],[0,-0.9396926164627075,0.3420201539993286,-3.411468982696533],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.863703727722168,-13.46437454223633],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-0.01641346327960491,1.100000023841858,-0.01666666753590107,1.100000023841858,-0.01566154323518276,1.100000023841858],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,5],\"subscenes\":[],\"flags\":42355}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5121,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":8,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":6,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5121,\"count\":4,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":21,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":22,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":25,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":28,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":30,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":31,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":32,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":33,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":34,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":35,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":36,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":37,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":38,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":40,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":41,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":43,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":44,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":46,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":47,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":49,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":50,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":51,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":53,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":24,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":32,\"byteOffset\":24},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":752},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1400},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1616},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2480},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3128},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3344},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3560},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4208},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4856},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":5072},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5288},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5936},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6584},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6800},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7016},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7112},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7128},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":7224},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":7260},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7264},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":7280},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7328},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7334},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7340},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7352},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7358},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7364},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7376},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7382},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7388},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7400},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7406},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7412},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7424},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7430},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7436},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7448},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7568},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7572},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7692},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7812},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7816},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7936},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8056},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":8060},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":8180},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":8196},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8199},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":8203}],\"buffers\":[{\"byteLength\":8206,\"bytes\":\"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\\nF3twPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAF3twPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAF3twPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAF3twPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAF3twPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAF3twPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAF3twPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\nAACAPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAAACAPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAAACAPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAAACAPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAAACAPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAAACAPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAAACAPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA\\n//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAACA//9/PwAAAAAAAACA//9/PwAA\\n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\\ngD6ep1Y/q9z3vskRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6WUh8/\\nkN89P8oRgD6WUh8/kN89P8oRgD6WUh8/kN89P8oRgD4AAAAAqtx3P8kRgD4AAAAAqtx3P8kR\\ngD4AAAAAqtx3P8kRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6tGHS/\\nyCksPsoRgD6tGHS/yCksPsoRgD6tGHS/yCksPsoRgD6ep1a/q9z3vskRgD6ep1a/q9z3vskR\\ngD6ep1a/q9z3vskRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\n0r8gvBd7cD+5JRQ82hCruxd7cD+Kdyg8ZqTtOhd7cD8A69s7RgsDPBd7cD8AAAAA2hArPBd7\\ncD8A69u7RgsDPBd7cD+Kdyi8ZqTtOhd7cD+5JRS82hCruxd7cD8mCGq70r8gvBd7cD8mCGo7\\n0r8gvGandT+5JRQ82hCru2andT+Kdyg8ZqTtOmandT8A69s7RgsDPGandT8AAAAA2hArPGan\\ndT8A69u7RgsDPGandT+Kdyi8ZqTtOmandT+5JRS82hCru2andT8mCGq70r8gvGandT89Cnc/\\nPQp3Pz0Kdz9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT89Cnc/PQp3Pz0Kdz8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj89Cnc/PQp3Pz0Kdz+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD89Cnc/\\nPQp3Pz0Kdz+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz89Cnc/PQp3Pz0Kdz/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD89Cnc/PQp3Pz0Kdz+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj89Cnc/\\nPQp3Pz0Kdz+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD89Cnc/PQp3Pz0Kdz/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej89Cnc/PQp3Pz0Kdz+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej8AAIA/\\nAACAPwAAgD9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT8AAIA/AACAPwAAgD8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj8AAIA/AACAPwAAgD+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD8AAIA/\\nAACAPwAAgD+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz8AAIA/AACAPwAAgD/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD8AAIA/AACAPwAAgD+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj8AAIA/\\nAACAPwAAgD+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD8AAIA/AACAPwAAgD/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej8AAIA/AACAPwAAgD+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej9fzRM/\\nUc0TP/3MEz9fzRM/Uc0TP/3MEz9fzRM/Uc0TP/3MEz/+zBM/XM0TP1fNEz/+zBM/XM0TP1fN\\nEz/+zBM/XM0TP1fNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/9zBM/\\nX80TP1HNEz/9zBM/X80TP1HNEz/9zBM/X80TP1HNEz9XzRM//swTP1zNEz9XzRM//swTP1zN\\nEz9XzRM//swTP1zNEz9VzRM//swTP17NEz9VzRM//swTP17NEz9VzRM//swTP17NEz9RzRM/\\n/cwTP1/NEz9RzRM//cwTP1/NEz9RzRM//cwTP1/NEz9czRM/V80TP/7MEz9czRM/V80TP/7M\\nEz9czRM/V80TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9Lb1o+\\nU3ISv9S/Sj9Lb1o+U3ISv9S/Sj9Lb1o+U3ISv9S/Sj/gEjQ/FYMevxmzsj7gEjQ/FYMevxmz\\nsj7gEjQ/FYMevxmzsj4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr7Uv0o/\\nS29aPlNyEr/Uv0o/S29aPlNyEr/Uv0o/S29aPlNyEr8Zs7I+4BI0PxWDHr8Zs7I+4BI0PxWD\\nHr8Zs7I+4BI0PxWDHr8dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr5TchK/\\n1L9KP0tvWj5TchK/1L9KP0tvWj5TchK/1L9KP0tvWj4Vgx6/GbOyPuASND8Vgx6/GbOyPuAS\\nND8Vgx6/GbOyPuASND+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP/vOnc/\\n4w91P+bTeD9OlXg/lO50P9iadz/QNnk/ysl1PyAedj/m03g/7zp3P+MPdT/Ymnc/TpV4P5Tu\\ndD8gHnY/0DZ5P8rJdT/jD3U/5tN4P+86dz+U7nQ/2Jp3P06VeD/KyXU/IB52P9A2eT+GN3o/\\negx4P37Qez/jkXs/K+t3P26Xej9nM3w/X8Z4P7caeT9+0Hs/hjd6P3oMeD9ul3o/45F7Pyvr\\ndz+3Gnk/ZzN8P1/GeD96DHg/ftB7P4Y3ej8r63c/bpd6P+ORez9fxng/txp5P2czfD8AAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNzIw/AAAAAAAA\\nAAAAAAAAzcyMPwAAAAAAAAAAAAAAAM3MjD/NzIw/zcyMP83MjD8AAAD/AAAA/wAAAP//AAD/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzcyMPwAA\\nAAAAAAAAAAAAAM3MjD8AAAAAAAAAAAAAAADNzIw/zcyMP83MjD/NzIw/h3WGvImIiLwAAACA\\nzcyMP83MjD8AAACAh3WGvM3MjD8AAACAAAABAL++Pj+/vj4/v74+P83MTD6CIbY+pk86PwAA\\nAAAuVTo/Ygu2PgAAAAAAAMB/AADAfwAAwH8AAMB/AADAfwAAwH8BAQEBAQAAAAABAAAAAIA/\\nAACAPwAAAD8AAAABAQAAAAABAAAAAAA/AAAAPwAAAAABAAABAQAAAAABAAAAAIA/AAAAPwAA\\nAAAAAQABAQAAAAABAAAAAAA/AACAPwAAAAABAQEBAAAAAAABAAAAAIA/AAAAPwAAAD/Py1s/\\nz8tbPwAAAACdWFw/nVhcP6pADj3A+l0/wPpdP2kXjD2DpWA/g6VgP83MzD0oRGQ/KERkP5Wk\\nAz6Gumg/hrpoP8riHD7o5W0/6OVtP6xcMT4YnnM/GJ5zP/VyQD6Ytnk/mLZ5P0qwST4AAIA/\\nAACAP83MTD4AAAABz8tbP8/LWz8AAAAAnVhcP51YXD+qQA49wPpdP8D6XT9pF4w9g6VgP4Ol\\nYD/NzMw9KERkPyhEZD+VpAM+hrpoP4a6aD/K4hw+6OVtP+jlbT+sXDE+GJ5zPxiecz/1ckA+\\nmLZ5P5i2eT9KsEk+AACAPwAAgD/NzEw+zcxMPgAAAAAAAAAA/4RhPuaqxTwAAAAAd6FvPoDF\\nQj0AAAAAWrh2Pj2Ajj0AAAAAeJR2PsNwtz0AAAAA4TZvPjYB2z0AAAAA09ZgPs0m+D0AAAAA\\nJeBLPnEDBz4AAAAAGvAwPrD+DT4AAAAAw9AQPsPQED4AAAAAAAAAAc3MTD4AAAAAAAAAAP+E\\nYT7mqsU8AAAAAHehbz6AxUI9AAAAAFq4dj49gI49AAAAAHiUdj7DcLc9AAAAAOE2bz42Ads9\\nAAAAANPWYD7NJvg9AAAAACXgSz5xAwc+AAAAABrwMD6w/g0+AAAAAMPQED7D0BA+AAAAAJB7\\n7D2Qe+w9kHvsPQCBDD4AgQw+JbnnPTGsHj4xrB4+SjbcPdY3LD7WNyw+3EjKPeW+ND7lvjQ+\\nk3ayPcMBOD7DATg+H3GVPRzoNT4c6DU+9CFoPZqBLj6agS4+K54ePXIFIj5yBSI+e/agPMPQ\\nED7D0BA+AAAAAAAAAAGQe+w9kHvsPZB77D0AgQw+AIEMPiW55z0xrB4+MawePko23D3WNyw+\\n1jcsPtxIyj3lvjQ+5b40PpN2sj3DATg+wwE4Ph9xlT0c6DU+HOg1PvQhaD2agS4+moEuPiue\\nHj1yBSI+cgUiPnv2oDzD0BA+w9AQPgAAAACZmJg+mZiYPpmYmD4AAIA/AAAAAQEBAQAAAA==\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]}"},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw 3D arrows — arrows3d","title":"Draw 3D arrows — arrows3d","text":"Draws nice 3D arrows cone3ds tips.","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw 3D arrows — arrows3d","text":"","code":"arrows3d( coords, headlength = 0.035, head = \"end\", scale = NULL, radius = NULL, ref.length = NULL, draw = TRUE, ... )"},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw 3D arrows — arrows3d","text":"coords 2n x 3 matrix giving start end (x,y,z) coordinates n arrows, pairs. first vector pair taken starting coordinates arrow, second end coordinates. headlength Length arrow heads, device units head Position arrow head. head=\"end\" presently implemented. scale Scale factor base tip arrow head, vector length 3, giving relative scale factors X, Y, Z radius radius base arrow head ref.length length vector used scale arrow heads (permits drawing arrow heads size previous call); NULL, arrows scaled relative longest vector draw TRUE (default) draw arrow(s) ... rgl arguments passed segments3d cone3d, example, col lwd","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw 3D arrows — arrows3d","text":"invisibly returns length vector used scale arrow heads","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw 3D arrows — arrows3d","text":"function meant analogous arrows, 3D plots using rgl. headlength, scale radius set length, scale factor base radius arrow head, 3D cone. units terms ranges current rgl 3D scene.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw 3D arrows — arrows3d","text":"January Weiner, borrowed pca3d package, slightly modified John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw 3D arrows — arrows3d","text":"","code":"#none yet"},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":null,"dir":"Reference","previous_headings":"","what":"Build/Get transformation matrices — buildTmat","title":"Build/Get transformation matrices — buildTmat","text":"Recover history row operations performed. function combines transformation matrices single transformation matrix representing row operations may optionally print individual operations performed.","code":""},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Build/Get transformation matrices — buildTmat","text":"","code":"buildTmat(x, all = FALSE) # S3 method for trace as.matrix(x, ...) # S3 method for trace print(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Build/Get transformation matrices — buildTmat","text":"x matrix , joined vector constants, b, passed gaussianElimination row operator matrix functions logical; print individual transformation ies? ... additional arguments","code":""},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Build/Get transformation matrices — buildTmat","text":"transformation matrix list individual transformation matrices","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Build/Get transformation matrices — buildTmat","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Build/Get transformation matrices — buildTmat","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) # using row operations to reduce below diagonal to 0 Abt <- Ab <- cbind(A, b) Abt <- rowadd(Abt, 1, 2, 3/2) Abt <- rowadd(Abt, 1, 3, 1) Abt <- rowadd(Abt, 2, 3, -4) Abt #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # build T matrix and multiply by original form (T <- buildTmat(Abt)) #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] 1.5 1 0 #> [3,] -5.0 -4 1 T %*% Ab # same as Abt #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # print all transformation matrices buildTmat(Abt, TRUE) #> $T1 #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] 1.5 1 0 #> [3,] 0.0 0 1 #> #> $T2 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 1 0 1 #> #> $T3 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 -4 1 #> # invert transformation matrix to reverse operations inv(T) %*% Abt #> b #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 # gaussian elimination (soln <- gaussianElimination(A, b)) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 T <- buildTmat(soln) inv(T) %*% soln #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3"},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":null,"dir":"Reference","previous_headings":"","what":"Cholesky Square Root of a Matrix — cholesky","title":"Cholesky Square Root of a Matrix — cholesky","text":"Returns Cholesky square root non-singular, symmetric matrix X. purpose mainly demonstrate algorithm used Kennedy & Gentle (1980).","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cholesky Square Root of a Matrix — cholesky","text":"","code":"cholesky(X, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cholesky Square Root of a Matrix — cholesky","text":"X square symmetric matrix tol tolerance checking 0 pivot","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cholesky Square Root of a Matrix — cholesky","text":"Cholesky square root X","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Cholesky Square Root of a Matrix — cholesky","text":"Kennedy W.J. Jr, Gentle J.E. (1980). Statistical Computing. Marcel Dekker.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cholesky Square Root of a Matrix — cholesky","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Cholesky Square Root of a Matrix — cholesky","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 cholesky(C) #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 2 1 0 #> [3,] 3 0 1 cholesky(C) %*% t(cholesky(C)) # check #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10"},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw circles on an existing plot. — circle","title":"Draw circles on an existing plot. — circle","text":"Draw circles existing plot.","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw circles on an existing plot. — circle","text":"","code":"circle( x, y, radius, nv = 60, border = NULL, col = NA, lty = 1, density = NULL, angle = 45, lwd = 1 )"},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw circles on an existing plot. — circle","text":"x, y Coordinates center circle. x vector length 2, y ignored center taken x[1], x[2]. radius Radius (radii) circle(s) user units. nv Number vertices draw circle. border Color use drawing circumference. polygon col Color use filling circle. lty Line type circumference. density Density patterned fill. See polygon. angle Angle patterned fill. See polygon. lwd Line width circumference.","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw circles on an existing plot. — circle","text":"Invisibly returns list x y coordinates points circumference last circle displayed.","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw circles on an existing plot. — circle","text":"Rather depending aspect ratio par(\"asp\") set globally call plot, circle uses dimensions current plot x y coordinates draw circle rather ellipse. course, resize plot aspect ratio can change. function copied draw.circle","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw circles on an existing plot. — circle","text":"Jim Lemon, thanks David Winsemius density angle args","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw circles on an existing plot. — circle","text":"","code":"plot(1:5,seq(1,10,length=5), type=\"n\",xlab=\"\",ylab=\"\", main=\"Test draw.circle\") # draw three concentric circles circle(2, 4, c(1, 0.66, 0.33),border=\"purple\", col=c(\"#ff00ff\",\"#ff77ff\",\"#ffccff\"),lty=1,lwd=1) # draw some others circle(2.5, 8, 0.6,border=\"red\",lty=3,lwd=3) circle(4, 3, 0.7,border=\"green\",col=\"yellow\",lty=1, density=5,angle=30,lwd=10) circle(3.5, 8, 0.8,border=\"blue\",lty=2,lwd=2)"},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a horizontal circle — circle3d","title":"Draw a horizontal circle — circle3d","text":"utility function drawing horizontal circle (x,y) plane 3D graph","code":""},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a horizontal circle — circle3d","text":"","code":"circle3d(center, radius, segments = 100, fill = FALSE, ...)"},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a horizontal circle — circle3d","text":"center vector length 3. radius positive number. segments integer specifying number line segments use draw circle (default, 100). fill logical; TRUE, circle filled (default FALSE). ... rgl material properties circle.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a horizontal circle — circle3d","text":"3D plot","code":"ctr=c(0,0,0) circle3d(ctr, 3, fill = TRUE) circle3d(ctr - c(-1,-1,0), 3, col=\"blue\") circle3d(ctr + c(1,1,0), 3, col=\"red\") 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":1,\"objects\":{\"7\":{\"id\":7,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"0\",\"colors\":\"1\",\"centers\":\"2\",\"ignoreExtent\":false,\"flags\":41024},\"8\":{\"id\":8,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"3\",\"colors\":\"5\",\"centers\":\"6\",\"normals\":\"4\",\"ignoreExtent\":false,\"flags\":32771},\"9\":{\"id\":9,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"10\":{\"id\":10,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"11\":{\"id\":11,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"12\":{\"id\":12,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"19\",\"colors\":\"20\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"X\"],[\"Y\"],[\"Z\"],[\"J\"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"21\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"13\":{\"id\":13,\"type\":\"planes\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"22\",\"colors\":\"24\",\"offsets\":[[0]],\"centers\":\"25\",\"normals\":\"23\",\"ignoreExtent\":true,\"flags\":32803},\"14\":{\"id\":14,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"26\",\"colors\":\"27\",\"centers\":\"28\",\"ignoreExtent\":false,\"flags\":32832},\"15\":{\"id\":15,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"29\",\"colors\":\"30\",\"centers\":\"31\",\"ignoreExtent\":false,\"flags\":32832},\"16\":{\"id\":16,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"32\",\"colors\":\"33\",\"centers\":\"34\",\"ignoreExtent\":false,\"flags\":32832},\"17\":{\"id\":17,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"35\",\"colors\":\"36\",\"centers\":\"37\",\"ignoreExtent\":false,\"flags\":32832},\"18\":{\"id\":18,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"38\",\"colors\":\"39\",\"centers\":\"40\",\"ignoreExtent\":false,\"flags\":32832},\"19\":{\"id\":19,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"41\",\"colors\":\"42\",\"centers\":\"43\",\"ignoreExtent\":false,\"flags\":32832},\"20\":{\"id\":20,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"44\",\"colors\":\"45\",\"centers\":\"46\",\"ignoreExtent\":false,\"flags\":32832},\"21\":{\"id\":21,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"47\",\"colors\":\"48\",\"centers\":\"49\",\"ignoreExtent\":false,\"flags\":32832},\"22\":{\"id\":22,\"type\":\"triangles\",\"material\":{},\"vertices\":\"50\",\"colors\":\"52\",\"centers\":\"53\",\"normals\":\"51\",\"ignoreExtent\":false,\"flags\":32771},\"23\":{\"id\":23,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"54\",\"colors\":\"55\",\"centers\":\"56\",\"ignoreExtent\":false,\"flags\":32832},\"24\":{\"id\":24,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"57\",\"colors\":\"58\",\"centers\":\"59\",\"ignoreExtent\":false,\"flags\":32832},\"5\":{\"id\":5,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"4\":{\"id\":4,\"type\":\"background\",\"material\":{},\"colors\":\"60\",\"centers\":\"61\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"6\":{\"id\":6,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"62\",\"centers\":\"63\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"1\":{\"id\":1,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":1,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,19.24234580993652],\"modelMatrix\":[[1,0,0,-0.5],[0,0.3420201539993286,0.9396926164627075,-0.6807408332824707],[0,-0.9396926164627075,0.3420201539993286,-18.95722198486328],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-69.36643218994141],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-2.999622344970703,3.999622344970703,-2.998489618301392,4,-0.01566154323518276,1.100000023841858],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,5],\"subscenes\":[],\"flags\":42355}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5121,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":8,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":6,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5121,\"count\":4,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":21,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":22,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":25,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":28,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":30,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":31,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":32,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":33,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":34,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":35,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":36,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":37,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":38,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":40,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":41,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":43,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":44,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":46,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":47,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":49,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":50,\"componentType\":5126,\"count\":294,\"type\":\"VEC3\"},{\"bufferView\":51,\"componentType\":5126,\"count\":294,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":53,\"componentType\":5126,\"count\":98,\"type\":\"VEC3\"},{\"bufferView\":54,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":55,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":56,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":57,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":58,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":59,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":60,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":61,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":62,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":63,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":24,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":32,\"byteOffset\":24},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":752},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1400},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1616},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2480},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3128},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3344},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3560},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4208},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4856},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":5072},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5288},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5936},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6584},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6800},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7016},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7112},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7128},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":7224},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":7260},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7264},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":7280},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7328},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7334},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7340},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7352},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7358},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7364},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7376},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7382},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7388},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7400},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7406},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7412},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7424},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7430},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7436},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7448},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7568},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7572},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7692},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7812},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7816},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7936},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8056},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":8060},{\"buffer\":0,\"byteLength\":3528,\"byteOffset\":8180},{\"buffer\":0,\"byteLength\":3528,\"byteOffset\":11708},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":15236},{\"buffer\":0,\"byteLength\":1176,\"byteOffset\":15240},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":16416},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":17628},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":17632},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":18844},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":20056},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":20060},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":21272},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":21288},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":21291},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":21295}],\"buffers\":[{\"byteLength\":21298,\"bytes\":\"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\\nF3twPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAF3twPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAF3twPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAF3twPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAF3twPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAF3twPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAF3twPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\nAACAPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAAACAPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAAACAPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAAACAPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAAACAPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAAACAPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAAACAPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA\\n//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAACA//9/PwAAAAAAAACA//9/PwAA\\nAAAAAACA//9/PwAAAAAAAACA//9/PwAAAAAAAACA//9/PwAAAAAAAACA//9/PwAAAAAwjKk+\\nyRGAPv/paD8wjKk+yRGAPv/paD8wjKk+yRGAPv/paD+ep1Y/yRGAPqvc9z6ep1Y/yRGAPqvc\\n9z6ep1Y/yRGAPqvc9z6sGHQ/yhGAPscpLL6sGHQ/yhGAPscpLL6sGHQ/yhGAPscpLL6WUh8/\\nyhGAPpDfPb+WUh8/yhGAPpDfPb+WUh8/yhGAPpDfPb8AAAAAyRGAPqrcd78AAAAAyRGAPqrc\\nd78AAAAAyRGAPqrcd7+WUh+/yhGAPpDfPb+WUh+/yhGAPpDfPb+WUh+/yhGAPpDfPb+tGHS/\\nyhGAPsgpLL6tGHS/yhGAPsgpLL6tGHS/yhGAPsgpLL6ep1a/yRGAPqvc9z6ep1a/yRGAPqvc\\n9z6ep1a/yRGAPqvc9z4wjKm+yRGAPv/paD8wjKm+yRGAPv/paD8wjKm+yRGAPv/paD8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\nF3twP9K/IDy5JRQ8F3twP9oQqzuKdyg8F3twP2ak7boA69s7F3twP0YLA7wAAAAAF3twP9oQ\\nK7wA69u7F3twP0YLA7yKdyi8F3twP2ak7bq5JRS8F3twP9oQqzsmCGq7F3twP9K/IDwmCGo7\\nZqd1P9K/IDy5JRQ8Zqd1P9oQqzuKdyg8Zqd1P2ak7boA69s7Zqd1P0YLA7wAAAAAZqd1P9oQ\\nK7wA69u7Zqd1P0YLA7yKdyi8Zqd1P2ak7bq5JRS8Zqd1P9oQqzsmCGq7Zqd1P9K/IDwAAAAA\\nAAAAABd7cD8AAAAAiYiIvBd7cD8chi88Yy5RvBd7cD8AAAAAAAAAABd7cD8chi88Yy5RvBd7\\ncD+HdYY8jas9uxd7cD8AAAAAAAAAABd7cD+HdYY8jas9uxd7cD+Qe2w8iYgIPBd7cD8AAAAA\\nAAAAABd7cD+Qe2w8iYgIPBd7cD/iybo7o0yAPBd7cD8AAAAAAAAAABd7cD/iybo7o0yAPBd7\\ncD/iybq7o0yAPBd7cD8AAAAAAAAAABd7cD/iybq7o0yAPBd7cD+Qe2y8iYgIPBd7cD8AAAAA\\nAAAAABd7cD+Qe2y8iYgIPBd7cD+HdYa8jas9uxd7cD8AAAAAAAAAABd7cD+HdYa8jas9uxd7\\ncD8chi+8Yy5RvBd7cD8AAAAAAAAAABd7cD8chi+8Yy5RvBd7cD+amZaiiYiIvBd7cD8AAAAA\\n0fGIIgAAgD8AAAAAiYiIvBd7cD8chi88Yy5RvBd7cD8AAAAA0fGIIgAAgD8chi88Yy5RvBd7\\ncD+HdYY8jas9uxd7cD8AAAAA0fGIIgAAgD+HdYY8jas9uxd7cD+Qe2w8iYgIPBd7cD8AAAAA\\n0fGIIgAAgD+Qe2w8iYgIPBd7cD/iybo7o0yAPBd7cD8AAAAA0fGIIgAAgD/iybo7o0yAPBd7\\ncD/iybq7o0yAPBd7cD8AAAAA0fGIIgAAgD/iybq7o0yAPBd7cD+Qe2y8iYgIPBd7cD8AAAAA\\n0fGIIgAAgD+Qe2y8iYgIPBd7cD+HdYa8jas9uxd7cD8AAAAA0fGIIgAAgD+HdYa8jas9uxd7\\ncD8chi+8Yy5RvBd7cD8AAAAA0fGIIgAAgD8chi+8Yy5RvBd7cD+amZaiiYiIvBd7cD8AAAAA\\nAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAgP//fz8AAAAAAAAAgP//\\nfz8AAAAAAAAAgP//fz8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//\\nfz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAA\\nAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//\\nfz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8wjKk+\\n/+lov8kRgD4wjKk+/+lov8kRgD4wjKk+/+lov8kRgD6ep1Y/q9z3vskRgD6ep1Y/q9z3vskR\\ngD6ep1Y/q9z3vskRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6WUh8/\\nkN89P8oRgD6WUh8/kN89P8oRgD6WUh8/kN89P8oRgD4AAAAAqtx3P8kRgD4AAAAAqtx3P8kR\\ngD4AAAAAqtx3P8kRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6tGHS/\\nyCksPsoRgD6tGHS/yCksPsoRgD6tGHS/yCksPsoRgD6ep1a/q9z3vskRgD6ep1a/q9z3vskR\\ngD6ep1a/q9z3vskRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\n0r8gvBd7cD+5JRQ82hCruxd7cD+Kdyg8ZqTtOhd7cD8A69s7RgsDPBd7cD8AAAAA2hArPBd7\\ncD8A69u7RgsDPBd7cD+Kdyi8ZqTtOhd7cD+5JRS82hCruxd7cD8mCGq70r8gvBd7cD8mCGo7\\n0r8gvGandT+5JRQ82hCru2andT+Kdyg8ZqTtOmandT8A69s7RgsDPGandT8AAAAA2hArPGan\\ndT8A69u7RgsDPGandT+Kdyi8ZqTtOmandT+5JRS82hCru2andT8mCGq70r8gvGandT89Cnc/\\nPQp3Pz0Kdz9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT89Cnc/PQp3Pz0Kdz8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj89Cnc/PQp3Pz0Kdz+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD89Cnc/\\nPQp3Pz0Kdz+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz89Cnc/PQp3Pz0Kdz/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD89Cnc/PQp3Pz0Kdz+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj89Cnc/\\nPQp3Pz0Kdz+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD89Cnc/PQp3Pz0Kdz/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej89Cnc/PQp3Pz0Kdz+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej8AAIA/\\nAACAPwAAgD9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT8AAIA/AACAPwAAgD8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj8AAIA/AACAPwAAgD+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD8AAIA/\\nAACAPwAAgD+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz8AAIA/AACAPwAAgD/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD8AAIA/AACAPwAAgD+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj8AAIA/\\nAACAPwAAgD+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD8AAIA/AACAPwAAgD/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej8AAIA/AACAPwAAgD+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej9fzRM/\\nUc0TP/3MEz9fzRM/Uc0TP/3MEz9fzRM/Uc0TP/3MEz/+zBM/XM0TP1fNEz/+zBM/XM0TP1fN\\nEz/+zBM/XM0TP1fNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/9zBM/\\nX80TP1HNEz/9zBM/X80TP1HNEz/9zBM/X80TP1HNEz9XzRM//swTP1zNEz9XzRM//swTP1zN\\nEz9XzRM//swTP1zNEz9VzRM//swTP17NEz9VzRM//swTP17NEz9VzRM//swTP17NEz9RzRM/\\n/cwTP1/NEz9RzRM//cwTP1/NEz9RzRM//cwTP1/NEz9czRM/V80TP/7MEz9czRM/V80TP/7M\\nEz9czRM/V80TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9Lb1o+\\nU3ISv9S/Sj9Lb1o+U3ISv9S/Sj9Lb1o+U3ISv9S/Sj/gEjQ/FYMevxmzsj7gEjQ/FYMevxmz\\nsj7gEjQ/FYMevxmzsj4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr7Uv0o/\\nS29aPlNyEr/Uv0o/S29aPlNyEr/Uv0o/S29aPlNyEr8Zs7I+4BI0PxWDHr8Zs7I+4BI0PxWD\\nHr8Zs7I+4BI0PxWDHr8dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr5TchK/\\n1L9KP0tvWj5TchK/1L9KP0tvWj5TchK/1L9KP0tvWj4Vgx6/GbOyPuASND8Vgx6/GbOyPuAS\\nND8Vgx6/GbOyPuASND+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP/vOnc/\\n4w91P+bTeD9OlXg/lO50P9iadz/QNnk/ysl1PyAedj/m03g/7zp3P+MPdT/Ymnc/TpV4P5Tu\\ndD8gHnY/0DZ5P8rJdT/jD3U/5tN4P+86dz+U7nQ/2Jp3P06VeD/KyXU/IB52P9A2eT+GN3o/\\negx4P37Qez/jkXs/K+t3P26Xej9nM3w/X8Z4P7caeT9+0Hs/hjd6P3oMeD9ul3o/45F7Pyvr\\ndz+3Gnk/ZzN8P1/GeD96DHg/ftB7P4Y3ej8r63c/bpd6P+ORez9fxng/txp5P2czfD8AAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNzIw/AAAAAAAA\\nAAAAAAAAzcyMPwAAAAAAAAAAAAAAAM3MjD/NzIw/zcyMP83MjD8AAAD/AAAA/wAAAP//AAD/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzcyMPwAA\\nAAAAAAAAAAAAAM3MjD8AAAAAAAAAAAAAAADNzIw/zcyMP83MjD/NzIw/0Pk/wEHnP8AAAACA\\n0Pl/QAAAgEAAAACA0Pk/wAAAgEAAAACAAAABAL++Pj+/vj4/v74+P83MTD5roiq/1mXVPwAA\\nAAA2UdU/rmgqvwAAAAAAAMB/AADAfwAAwH8AAMB/AADAfwAAwH8BAQEBAQAAAAABAAAAAIA/\\n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\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAP//\\nfz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAAP//\\nfz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAgP//\\nfz8AAACAAAAAgP//fz8AAACAAAAAgP//fz8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgP//\\nfz8AAAAAAAAAgP//fz8AAAAAAAAAgP//fz8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACA\\nAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\n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\\nmZiYPpmYmD4AAIA/AAAAAQEBAQAAAA==\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]}"},{"path":"http://friendly.github.io/matlib/reference/class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class Data Set — class","title":"Class Data Set — class","text":"small artificial data set used illustrate statistical concepts.","code":""},{"path":"http://friendly.github.io/matlib/reference/class.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Class Data Set — class","text":"","code":"data(\"class\")"},{"path":"http://friendly.github.io/matlib/reference/class.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Class Data Set — class","text":"data frame 15 observations following 4 variables. sex factor levels F M age numeric vector height numeric vector weight numeric vector","code":""},{"path":"http://friendly.github.io/matlib/reference/class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Class Data Set — class","text":"","code":"data(class) plot(class)"},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":null,"dir":"Reference","previous_headings":"","what":"Cofactor of A[i,j] — cofactor","title":"Cofactor of A[i,j] — cofactor","text":"Returns cofactor element (,j) square matrix , .e., signed minor sub-matrix results row column j deleted.","code":""},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cofactor of A[i,j] — cofactor","text":"","code":"cofactor(A, i, j)"},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cofactor of A[i,j] — cofactor","text":"square matrix row index j column index","code":""},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cofactor of A[i,j] — cofactor","text":"cofactor [,j]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cofactor of A[i,j] — cofactor","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Cofactor of A[i,j] — cofactor","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) cofactor(M, 1, 1) #> [1] 11 cofactor(M, 1, 2) #> [1] -7 cofactor(M, 1, 3) #> [1] -5"},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a 3D cone — cone3d","title":"Draw a 3D cone — cone3d","text":"Draws cone 3D base point tip point, given radius base. used draw nice arrow heads arrows3d.","code":""},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a 3D cone — cone3d","text":"","code":"cone3d(base, tip, radius = 10, col = \"grey\", scale = NULL, ...)"},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a 3D cone — cone3d","text":"base coordinates base cone tip coordinates tip cone radius radius base col color scale scale factor base tip ... rgl arguments passed ; see rgl.material","code":""},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a 3D cone — cone3d","text":"returns integer object ID shape added scene","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw a 3D cone — cone3d","text":"January Weiner, borrowed pca3d package","code":""},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a 3D cone — cone3d","text":"","code":"# none yet"},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a corner showing the angle between two vectors — corner","title":"Draw a corner showing the angle between two vectors — corner","text":"utility function drawing vector diagrams. Draws two line segments indicate angle two vectors, typically used indicating orthogonal vectors right angles 2D 3D diagrams.","code":""},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a corner showing the angle between two vectors — corner","text":"","code":"corner(p1, p2, p3, d = 0.1, absolute = TRUE, ...)"},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a corner showing the angle between two vectors — corner","text":"p1 Starting point first vector p2 End point first vector, also start second vector p3 End point second vector d distance p2 along vector drawing corner absolute logical; TRUE, d taken absolute distance along vectors; otherwise calculated relative distance, .e., fraction length vectors. See pointOnLine precise definition. ... Arguments passed link[graphics]{lines} link[rgl]{lines3d}","code":""},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a corner showing the angle between two vectors — corner","text":"none","code":""},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw a corner showing the angle between two vectors — corner","text":"implementation, two vectors specified three points, p1, p2, p3, meaning line p1 p2, another line p2 p3.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a corner showing the angle between two vectors — corner","text":"","code":"# none yet"},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":null,"dir":"Reference","previous_headings":"","what":"Determinant of a Square Matrix — Det","title":"Determinant of a Square Matrix — Det","text":"Returns determinant square matrix X, computed either Gaussian elimination, expansion cofactors, product eigenvalues matrix. latter, X must symmetric.","code":""},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determinant of a Square Matrix — Det","text":"","code":"Det( X, method = c(\"elimination\", \"eigenvalues\", \"cofactors\"), verbose = FALSE, fractions = FALSE, ... )"},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determinant of a Square Matrix — Det","text":"X square matrix method one `\"elimination\"` (default), `\"eigenvalues\"`, `\"cofactors\"` (computation minors cofactors) verbose logical; TRUE, print intermediate steps fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). ... arguments passed gaussianElimination Eigen","code":""},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determinant of a Square Matrix — Det","text":"determinant X","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Determinant of a Square Matrix — Det","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Determinant of a Square Matrix — Det","text":"","code":"A <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric A #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 Det(A) #> [1] 1 Det(A, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 #> #> row: 1 #> #> exchange rows 1 and 3 #> [,1] [,2] [,3] #> [1,] 3 6 10 #> [2,] 2 5 6 #> [3,] 1 2 3 #> #> multiply row 1 by 1/3 #> [,1] [,2] [,3] #> [1,] 1 2 10/3 #> [2,] 2 5 6 #> [3,] 1 2 3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] #> [1,] 1 2 10/3 #> [2,] 0 1 -2/3 #> [3,] 1 2 3 #> #> subtract row 1 from row 3 #> [,1] [,2] [,3] #> [1,] 1 2 10/3 #> [2,] 0 1 -2/3 #> [3,] 0 0 -1/3 #> #> row: 2 #> #> multiply row 2 by 2 and subtract from row 1 #> [,1] [,2] [,3] #> [1,] 1 0 14/3 #> [2,] 0 1 -2/3 #> [3,] 0 0 -1/3 #> #> row: 3 #> #> multiply row 3 by -3 #> [,1] [,2] [,3] #> [1,] 1 0 14/3 #> [2,] 0 1 -2/3 #> [3,] 0 0 1 #> #> multiply row 3 by 14/3 and subtract from row 1 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 -2/3 #> [3,] 0 0 1 #> #> multiply row 3 by 2/3 and add to row 2 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 #> #> det = (-1)^1 x 3 x 1 x -1/3 = 1 B <- matrix(1:9, 3, 3) # a singular matrix B #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 Det(B) #> [1] 0 C <- matrix(c(1, .5, .5, 1), 2, 2) # square, symmetric, nonsingular Det(C) #> [1] 0.75 Det(C, method=\"eigenvalues\") #> [1] 0.75 Det(C, method=\"cofactors\") #> [1] 0.75"},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":null,"dir":"Reference","previous_headings":"","what":"Echelon Form of a Matrix — echelon","title":"Echelon Form of a Matrix — echelon","text":"Returns (reduced) row-echelon form matrix , using gaussianElimination.","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Echelon Form of a Matrix — echelon","text":"","code":"echelon(A, B, reduced = TRUE, ...)"},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Echelon Form of a Matrix — echelon","text":"coefficient matrix B right-hand side vector matrix. B matrix, result gives solutions column right-hand side equations coefficients . reduced logical; reduced row echelon form returned? FALSE non-reduced row echelon form returned ... arguments passed gaussianElimination","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Echelon Form of a Matrix — echelon","text":"reduced echelon form X.","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Echelon Form of a Matrix — echelon","text":"matrix square non-singular, reduced row-echelon result identity matrix, row-echelon upper triangle matrix. Otherwise, result -zero rows, rank matrix number -zero rows.","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Echelon Form of a Matrix — echelon","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Echelon Form of a Matrix — echelon","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) echelon(A, b, verbose=TRUE, fractions=TRUE) # reduced row-echelon form #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 echelon(A, b, reduced=FALSE, verbose=TRUE, fractions=TRUE) # row-echelon form #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 A <- matrix(c(1,2,3,4,5,6,7,8,10), 3, 3) # a nonsingular matrix A #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 10 echelon(A, reduced=FALSE) # the row-echelon form of A #> [,1] [,2] [,3] #> [1,] 1 2 3.333333 #> [2,] 0 1 1.833333 #> [3,] 0 0 1.000000 echelon(A) # the reduced row-echelon form of A #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 b <- 1:3 echelon(A, b) # solving the matrix equation Ax = b #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 1 #> [2,] 0 1 0 0 #> [3,] 0 0 1 0 echelon(A, diag(3)) # inverting A #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 -0.6666667 -0.6666667 1 #> [2,] 0 1 0 -1.3333333 3.6666667 -2 #> [3,] 0 0 1 1.0000000 -2.0000000 1 B <- matrix(1:9, 3, 3) # a singular matrix B #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 echelon(B) #> [,1] [,2] [,3] #> [1,] 1 0 -1 #> [2,] 0 1 2 #> [3,] 0 0 0 echelon(B, reduced=FALSE) #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 0 1 2 #> [3,] 0 0 0 echelon(B, b) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -1 1 #> [2,] 0 1 2 0 #> [3,] 0 0 0 0 echelon(B, diag(3)) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -1 -1.0 0 0.6666667 #> [2,] 0 1 2 0.5 0 -0.1666667 #> [3,] 0 0 0 -0.5 1 -0.5000000"},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":null,"dir":"Reference","previous_headings":"","what":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"Eigen calculates eigenvalues eigenvectors square, symmetric matrix using iterated QR decomposition","code":""},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"","code":"Eigen(X, tol = sqrt(.Machine$double.eps), max.iter = 100, retain.zeroes = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"X square symmetric matrix tol tolerance passed QR max.iter maximum number QR iterations retain.zeroes logical; retain 0 eigenvalues?","code":""},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"list two elements: values-- eigenvalues, vectors-- eigenvectors","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"John Fox Georges Monette","code":""},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 EC <- Eigen(C) # eigenanalysis of C EC$vectors %*% diag(EC$values) %*% t(EC$vectors) # check #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10"},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":null,"dir":"Reference","previous_headings":"","what":"Gaussian Elimination — gaussianElimination","title":"Gaussian Elimination — gaussianElimination","text":"gaussianElimination demonstrates algorithm row reduction used solving systems linear equations form \\(x = B\\). Optional arguments verbose fractions may used see algorithm works.","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gaussian Elimination — gaussianElimination","text":"","code":"gaussianElimination( A, B, tol = sqrt(.Machine$double.eps), verbose = FALSE, latex = FALSE, fractions = FALSE ) # S3 method for enhancedMatrix print(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gaussian Elimination — gaussianElimination","text":"coefficient matrix B right-hand side vector matrix. B matrix, result gives solutions column right-hand side equations coefficients . tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps latex logical; TRUE, verbose TRUE, print intermediate steps using LaTeX equation outputs rather R output fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). x matrix print ... arguments pass ","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gaussian Elimination — gaussianElimination","text":"B absent, returns reduced row-echelon form . B present, returns reduced row-echelon form , operations applied B.","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gaussian Elimination — gaussianElimination","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gaussian Elimination — gaussianElimination","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) gaussianElimination(A, b) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 gaussianElimination(A, b, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 gaussianElimination(A, b, verbose=TRUE, fractions=TRUE, latex=TRUE) #> #> Initial matrix: #> \\left[ #> \\begin{array}{llll} #> 2 & 1 & -1 & 8 \\\\ #> -3 & -1 & 2 & -11 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> row: 1 #> #> exchange rows 1 and 2 #> \\left[ #> \\begin{array}{llll} #> -3 & -1 & 2 & -11 \\\\ #> 2 & 1 & -1 & 8 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 1 by -1/3 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 2 & 1 & -1 & 8 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 1 by 2 and subtract from row 2 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 1 by 2 and add to row 3 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> 0 & 5/3 & 2/3 & 13/3 \\\\ #> \\end{array} #> \\right] #> #> #> row: 2 #> #> exchange rows 2 and 3 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 5/3 & 2/3 & 13/3 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 2 by 3/5 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 2 by 1/3 and subtract from row 1 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & -4/5 & 14/5 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 2 by 1/3 and subtract from row 3 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & -4/5 & 14/5 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 0 & 1/5 & -1/5 \\\\ #> \\end{array} #> \\right] #> #> #> row: 3 #> #> multiply row 3 by 5 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & -4/5 & 14/5 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 0 & 1 & -1 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 3 by 4/5 and add to row 1 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & 0 & 2 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 0 & 1 & -1 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 3 by 2/5 and subtract from row 2 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & 0 & 2 \\\\ #> 0 & 1 & 0 & 3 \\\\ #> 0 & 0 & 1 & -1 \\\\ #> \\end{array} #> \\right] #> # determine whether matrix is solvable gaussianElimination(A, numeric(3)) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 0 #> [2,] 0 1 0 0 #> [3,] 0 0 1 0 # find inverse matrix by elimination: A = I -> A^-1 A = A^-1 I -> I = A^-1 gaussianElimination(A, diag(3)) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 4 3 -1 #> [2,] 0 1 0 -2 -2 1 #> [3,] 0 0 1 5 4 -1 inv(A) #> [,1] [,2] [,3] #> [1,] 4 3 -1 #> [2,] -2 -2 1 #> [3,] 5 4 -1 # works for 1-row systems (issue # 30) A2 <- matrix(c(1, 1), nrow=1) b2 = 2 gaussianElimination(A2, b2) #> [,1] [,2] [,3] #> [1,] 1 1 2 showEqn(A2, b2) #> 1*x1 + 1*x2 = 2 # plotEqn works for this case plotEqn(A2, b2) #> x[1] + x[2] = 2"},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":null,"dir":"Reference","previous_headings":"","what":"Correct for aspect and coordinate ratio — getYmult","title":"Correct for aspect and coordinate ratio — getYmult","text":"Calculate multiplication factor Y dimension correct unequal plot aspect coordinate ratios current graphics device.","code":""},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Correct for aspect and coordinate ratio — getYmult","text":"","code":"getYmult()"},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Correct for aspect and coordinate ratio — getYmult","text":"correction factor Y dimension.","code":""},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Correct for aspect and coordinate ratio — getYmult","text":"getYmult retrieves plot aspect ratio coordinate ratio current graphics device, calculates multiplicative factor equalize X Y dimensions plotted graphic object.","code":""},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Correct for aspect and coordinate ratio — getYmult","text":"Jim Lemon","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":null,"dir":"Reference","previous_headings":"","what":"Generalized Inverse of a Matrix — Ginv","title":"Generalized Inverse of a Matrix — Ginv","text":"Ginv returns arbitrary generalized inverse matrix , using gaussianElimination.","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generalized Inverse of a Matrix — Ginv","text":"","code":"Ginv(A, tol = sqrt(.Machine$double.eps), verbose = FALSE, fractions = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generalized Inverse of a Matrix — Ginv","text":"numerical matrix tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)).","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generalized Inverse of a Matrix — Ginv","text":"generalized inverse , expressed fractions fractions=TRUE, rounded","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generalized Inverse of a Matrix — Ginv","text":"generalized inverse matrix \\(\\mathbf{}^-\\) satisfying \\(\\mathbf{^- } = \\mathbf{}\\). purpose function mainly show generalized inverse can computed using Gaussian elimination.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generalized Inverse of a Matrix — Ginv","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generalized Inverse of a Matrix — Ginv","text":"","code":"A <- matrix(c(1,2,3,4,5,6,7,8,10), 3, 3) # a nonsingular matrix A #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 10 Ginv(A, fractions=TRUE) # a generalized inverse of A = inverse of A #> [,1] [,2] [,3] #> [1,] -2/3 -2/3 1 #> [2,] -4/3 11/3 -2 #> [3,] 1 -2 1 round(Ginv(A) %*% A, 6) # check #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 B <- matrix(1:9, 3, 3) # a singular matrix B #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 Ginv(B, fractions=TRUE) # a generalized inverse of B #> [,1] [,2] [,3] #> [1,] -3/4 0 7/12 #> [2,] 0 0 0 #> [3,] 1/4 0 -1/12 B %*% Ginv(B) %*% B # check #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9"},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":null,"dir":"Reference","previous_headings":"","what":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"Carries simple Gram-Schmidt orthogonalization matrix. Treating columns matrix X given order, successive column first made orthogonal previous columns subtracting projections current column.","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"","code":"GramSchmidt( X, normalize = TRUE, verbose = FALSE, tol = sqrt(.Machine$double.eps), omit_zero_columns = TRUE )"},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"X matrix normalize logical; resulting columns normalized unit length? default TRUE verbose logical; TRUE, print intermediate steps. default FALSE tol tolerance detecting linear dependencies columns . default sqrt(.Machine$double.eps) omit_zero_columns TRUE (default), remove linearly dependent columns result","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"matrix size X, orthogonal columns (0 columns removed default)","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"Phil Chalmers, John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"","code":"(xx <- matrix(c( 1:3, 3:1, 1, 0, -2), 3, 3)) #> [,1] [,2] [,3] #> [1,] 1 3 1 #> [2,] 2 2 0 #> [3,] 3 1 -2 crossprod(xx) #> [,1] [,2] [,3] #> [1,] 14 10 -5 #> [2,] 10 14 1 #> [3,] -5 1 5 (zz <- GramSchmidt(xx, normalize=FALSE)) #> Error in GramSchmidt(xx, normalize = FALSE): unused argument (normalize = FALSE) zapsmall(crossprod(zz)) #> Error in eval(expr, envir, enclos): object 'zz' not found # normalized (zz <- GramSchmidt(xx)) #> Error in GramSchmidt(xx): argument \"v2\" is missing, with no default zapsmall(crossprod(zz)) #> Error in eval(expr, envir, enclos): object 'zz' not found # print steps GramSchmidt(xx, verbose=TRUE) #> Error in GramSchmidt(xx, verbose = TRUE): unused argument (verbose = TRUE) # A non-invertible matrix; hence, it is of deficient rank (xx <- matrix(c( 1:3, 3:1, 1, 0, -1), 3, 3)) #> [,1] [,2] [,3] #> [1,] 1 3 1 #> [2,] 2 2 0 #> [3,] 3 1 -1 R(xx) #> [1] 2 crossprod(xx) #> [,1] [,2] [,3] #> [1,] 14 10 -2 #> [2,] 10 14 2 #> [3,] -2 2 2 # GramSchmidt finds an orthonormal basis (zz <- GramSchmidt(xx)) #> Error in GramSchmidt(xx): argument \"v2\" is missing, with no default zapsmall(crossprod(zz)) #> Error in eval(expr, envir, enclos): object 'zz' not found"},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":null,"dir":"Reference","previous_headings":"","what":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"Calculates matrix uncorrelated columns using Gram-Schmidt process","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"","code":"gsorth(y, order, recenter = TRUE, rescale = TRUE, adjnames = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"y numeric matrix data frame order specified, permutation column indices y recenter logical; TRUE, result means original y, else means = 0 cols 2:p rescale logical; TRUE, result sd original, else, sd = residual sd adjnames logical; TRUE, colnames adjusted Y1, Y2.1, Y3.12, ...","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"matrix/data frame uncorrelated columns","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"function, originally heplots package now deprecated matlib. Use GramSchmidt instead.","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"","code":"if (FALSE) { set.seed(1234) A <- matrix(c(1:60 + rnorm(60)), 20, 3) cor(A) G <- gsorth(A) zapsmall(cor(G)) }"},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":null,"dir":"Reference","previous_headings":"","what":"Inverse of a Matrix — Inverse","title":"Inverse of a Matrix — Inverse","text":"Uses gaussianElimination find inverse square, non-singular matrix, \\(X\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Inverse of a Matrix — Inverse","text":"","code":"Inverse(X, tol = sqrt(.Machine$double.eps), verbose = FALSE, ...)"},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inverse of a Matrix — Inverse","text":"X square numeric matrix tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps ... arguments passed ","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inverse of a Matrix — Inverse","text":"inverse X","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Inverse of a Matrix — Inverse","text":"method purely didactic: identity matrix, \\(\\), appended \\(X\\), giving \\(X | \\). Applying Gaussian elimination gives \\(| X^{-1}\\), portion corresponding \\(X^{-1}\\) returned.","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Inverse of a Matrix — Inverse","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Inverse of a Matrix — Inverse","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) Inverse(A) #> [,1] [,2] [,3] #> [1,] 4 3 -1 #> [2,] -2 -2 1 #> [3,] 5 4 -1 Inverse(A, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 2 1 -1 1 0 0 #> [2,] -3 -1 2 0 1 0 #> [3,] -2 1 2 0 0 1 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] -3 -1 2 0 1 0 #> [2,] 2 1 -1 1 0 0 #> [3,] -2 1 2 0 0 1 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 2 1 -1 1 0 0 #> [3,] -2 1 2 0 0 1 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 1/3 1/3 1 2/3 0 #> [3,] -2 1 2 0 0 1 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 1/3 1/3 1 2/3 0 #> [3,] 0 5/3 2/3 0 -2/3 1 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 5/3 2/3 0 -2/3 1 #> [3,] 0 1/3 1/3 1 2/3 0 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 1/3 1/3 1 2/3 0 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -4/5 0 -1/5 -1/5 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 1/3 1/3 1 2/3 0 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -4/5 0 -1/5 -1/5 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 0 1/5 1 4/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -4/5 0 -1/5 -1/5 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 0 1 5 4 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 4 3 -1 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 0 1 5 4 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 4 3 -1 #> [2,] 0 1 0 -2 -2 1 #> [3,] 0 0 1 5 4 -1"},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":null,"dir":"Reference","previous_headings":"","what":"Test for square matrix — is_square_matrix","title":"Test for square matrix — is_square_matrix","text":"Test square matrix Test square, symmetric matrix Test orthogonal matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Test for square matrix — is_square_matrix","text":"","code":"is_square_matrix(x) is_symmetric_matrix(x) is_orthogonal_matrix(x)"},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Test for square matrix — is_square_matrix","text":"x numeric matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Test for square matrix — is_square_matrix","text":"TRUE x square matrix, else FALSE TRUE x square, symmetric matrix, else FALSE TRUE x orthogonal matrix, else FALSE","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a vector, matrix or array of constants — J","title":"Create a vector, matrix or array of constants — J","text":"function creates vector, matrix array constants, typically used unit vector unit matrix matrix expressions.","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a vector, matrix or array of constants — J","text":"","code":"J(..., constant = 1, dimnames = NULL)"},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a vector, matrix or array of constants — J","text":"... One arguments supplying dimensions array, non-negative integers constant value constant used array dimnames Either NULL names dimensions.","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a vector, matrix or array of constants — J","text":"\"dimnames\" attribute optional: present list one component dimension, either NULL character vector length given element \"dim\" attribute dimension. list can named, list names used names dimensions.","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a vector, matrix or array of constants — J","text":"","code":"J(3) #> [1] 1 1 1 J(2,3) #> [,1] [,2] [,3] #> [1,] 1 1 1 #> [2,] 1 1 1 J(2,3,2) #> , , 1 #> #> [,1] [,2] [,3] #> [1,] 1 1 1 #> [2,] 1 1 1 #> #> , , 2 #> #> [,1] [,2] [,3] #> [1,] 1 1 1 #> [2,] 1 1 1 #> J(2,3, constant=2, dimnames=list(letters[1:2], LETTERS[1:3])) #> A B C #> a 2 2 2 #> b 2 2 2 X <- matrix(1:6, nrow=2, ncol=3) dimnames(X) <- list(sex=c(\"M\", \"F\"), day=c(\"Mon\", \"Wed\", \"Fri\")) J(2) %*% X # column sums #> day #> Mon Wed Fri #> [1,] 3 7 11 X %*% J(3) # row sums #> #> sex [,1] #> M 9 #> F 12"},{"path":"http://friendly.github.io/matlib/reference/len.html","id":null,"dir":"Reference","previous_headings":"","what":"Length of a Vector or Column Lengths of a Matrix — len","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"len calculates Euclidean length (also called Euclidean norm) vector length column numeric matrix.","code":""},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"","code":"len(X)"},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"X numeric vector matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"scalar vector containing length(s)","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"","code":"len(1:3) #> [1] 3.741657 len(matrix(1:9, 3, 3)) #> [1] 3.741657 8.774964 13.928388 # distance between two vectors len(1:3 - c(1,1,1)) #> [1] 2.236068"},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":null,"dir":"Reference","previous_headings":"","what":"LU Decomposition — LU","title":"LU Decomposition — LU","text":"LU computes LU decomposition matrix, \\(\\), \\(P = L U\\), \\(L\\) lower triangle matrix, \\(U\\) upper triangle, \\(P\\) permutation matrix.","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"LU Decomposition — LU","text":"","code":"LU(A, b, tol = sqrt(.Machine$double.eps), verbose = FALSE, ...)"},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"LU Decomposition — LU","text":"coefficient matrix b right-hand side vector. supplied returned object also contain solved \\(d\\) x elements tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps ... additional arguments passed showEqn","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"LU Decomposition — LU","text":"list matrix components solution, P, L U. b supplied, vectors \\(d\\) x also returned.","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"LU Decomposition — LU","text":"LU decomposition used solve equation \\(x = b\\) calculating \\(L(Ux - d) = 0\\), \\(Ld = b\\). row exchanges necessary \\(\\) permutation matrix \\(P\\) required exchange rows \\(\\); otherwise, \\(P\\) identity matrix LU equation simplified \\(= L U\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"LU Decomposition — LU","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"LU Decomposition — LU","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) (ret <- LU(A)) # P is an identity; no row swapping #> $P #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 #> #> $L #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] -1.5 1 0 #> [3,] -1.0 4 1 #> #> $U #> [,1] [,2] [,3] #> [1,] 2 1.0 -1.0 #> [2,] 0 0.5 0.5 #> [3,] 0 0.0 -1.0 #> with(ret, L %*% U) # check that A = L * U #> [,1] [,2] [,3] #> [1,] 2 1 -1 #> [2,] -3 -1 2 #> [3,] -2 1 2 LU(A, b) #> $P #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 #> #> $L #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] -1.5 1 0 #> [3,] -1.0 4 1 #> #> $U #> [,1] [,2] [,3] #> [1,] 2 1.0 -1.0 #> [2,] 0 0.5 0.5 #> [3,] 0 0.0 -1.0 #> #> $d #> [,1] #> [1,] 8 #> [2,] 1 #> [3,] 1 #> #> $x #> [,1] #> [1,] 2 #> [2,] 3 #> [3,] -1 #> LU(A, b, verbose=TRUE) #> #> Initial equation: #> 2*x1 + x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + x2 + 2*x3 = -3 #> #> Lower triangle equation: #> x1 = 8 #> -1.5*x1 + x2 = -11 #> -x1 + 4*x2 + x3 = -3 #> #> Forward-solving operations: #> #> Equation: x1 = 8 #> Solution: x1 = 8 #> #> Equation: -1.5*x1 + x2 = -11 #> Substitution: -1.5*8 + x2 = -11 #> Solution: x2 = (-11 - -12) = 1 #> #> Equation: -x1 + 4*x2 + x3 = -3 #> Substitution: -8 + 4*1 + x3 = -3 #> Solution: x3 = (-3 - -4) = 1 #> #> Intermediate solution: d = (8, 1, 1) #> #> Upper triangle equation: #> 2*x1 + x2 - 1*x3 = 8 #> 0.5*x2 + 0.5*x3 = 1 #> - 1*x3 = 1 #> #> Back-solving operations: #> #> Equation: - 1*x3 = 1 #> Solution: x3 = 1/-1 = -1 #> #> Equation: 0.5*x2 + 0.5*x3 = 1 #> Substitution: 0.5*x2 + 0.5*-1 = 1 #> Solution: x2 = (1 - -0.5)/0.5 = 3 #> #> Equation: 2*x1 + x2 - 1*x3 = 8 #> Substitution: 2*x1 + -1 - 1*3 = 8 #> Solution: x1 = (8 - 4)/2 = 2 #> #> Final solution: x = (2, 3, -1) LU(A, b, verbose=TRUE, fractions=TRUE) #> #> Initial equation: #> 2*x1 + x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + x2 + 2*x3 = -3 #> #> Lower triangle equation: #> x1 = 8 #> -3/2*x1 + x2 = -11 #> -x1 + 4*x2 + x3 = -3 #> #> Forward-solving operations: #> #> Equation: x1 = 8 #> Solution: x1 = 8 #> #> Equation: -3/2*x1 + x2 = -11 #> Substitution: -3/2*8 + x2 = -11 #> Solution: x2 = (-11 - -12) = 1 #> #> Equation: -x1 + 4*x2 + x3 = -3 #> Substitution: -8 + 4*1 + x3 = -3 #> Solution: x3 = (-3 - -4) = 1 #> #> Intermediate solution: d = (8, 1, 1) #> #> Upper triangle equation: #> 2*x1 + x2 - 1*x3 = 8 #> 1/2*x2 + 1/2*x3 = 1 #> - 1*x3 = 1 #> #> Back-solving operations: #> #> Equation: - 1*x3 = 1 #> Solution: x3 = 1/-1 = -1 #> #> Equation: 1/2*x2 + 1/2*x3 = 1 #> Substitution: 1/2*x2 + 1/2*-1 = 1 #> Solution: x2 = (1 - -1/2)/1/2 = 3 #> #> Equation: 2*x1 + x2 - 1*x3 = 8 #> Substitution: 2*x1 + -1 - 1*3 = 8 #> Solution: x1 = (8 - 4)/2 = 2 #> #> Final solution: x = (2, 3, -1) # permutations required in this example A <- matrix(c(1, 1, -1, 2, 2, 4, 1, -1, 1), 3, 3, byrow=TRUE) b <- c(1, 2, 9) (ret <- LU(A, b)) #> $P #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 0 1 #> [3,] 0 1 0 #> #> $L #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 1 1 0 #> [3,] 2 0 1 #> #> $U #> [,1] [,2] [,3] #> [1,] 1 1 -1 #> [2,] 0 -2 2 #> [3,] 0 0 6 #> #> $d #> [,1] #> [1,] 1 #> [2,] 8 #> [3,] 0 #> #> $x #> [,1] #> [1,] 5 #> [2,] -4 #> [3,] 0 #> with(ret, P %*% A) #> [,1] [,2] [,3] #> [1,] 1 1 -1 #> [2,] 1 -1 1 #> [3,] 2 2 4 with(ret, L %*% U) #> [,1] [,2] [,3] #> [1,] 1 1 -1 #> [2,] 1 -1 1 #> [3,] 2 2 4"},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":null,"dir":"Reference","previous_headings":"","what":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"functions designed mainly tutorial purposes teaching & learning matrix algebra ideas applications statistical methods using R.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"cases, functions provided concepts available elsewhere R, function call name obvious. cases, functions provided show demonstrate algorithm, sometimes providing verbose argument print details computations. addition, collection functions provided drawing vector diagrams 2D 3D. meant production uses. methods efficient larger problems.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"topics","dir":"Reference","previous_headings":"","what":"Topics","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"functions package grouped following topics Convenience functions: tr, R, J, len, vec, Proj, mpower, vandermode Determinants: functions calculating determinants cofactor expansion minor, cofactor, rowMinors, rowCofactors Elementary row operations: functions solving linear equations \"manually\" steps used row echelon form Gaussian elimination rowadd, rowmult, rowswap Linear equations: functions illustrate linear equations form $x = b$ showEqn, plotEqn Gaussian elimination: functions illustrating Gaussian elimination solving systems linear equations form $x = b$. gaussianElimination, Inverse, inv, echelon, Ginv, LU, cholesky, swp Eigenvalues: functions illustrate algorithms calculating eigenvalues eigenvectors eigen, SVD, powerMethod, showEig Vector diagrams: functions drawing vector diagrams 2D 3D arrows3d, corner, arc, pointOnLine, vectors, vectors3d, regvec3d ideas implementations arose courses books authors. [Psychology 6140](http://friendly.apps01.yorku.ca/psy6140/) starting point. Fox (1984) introduced illustrations vector geometry.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"macos-installation-note","dir":"Reference","previous_headings":"","what":"macOS Installation Note","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"functions draw 3D graphs use rgl package. macOS, rgl package requires XQuartz installed. installing XQuartz, necessary either log back macOS account reboot Mac.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"Fox, J. Linear Statistical Models Related Methods. John Wiley Sons, 1984 Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert matrix to LaTeX equation — matrix2latex","title":"Convert matrix to LaTeX equation — matrix2latex","text":"function provides soft-wrapper xtable::xtableMatharray() additional support fractions output brackets.","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert matrix to LaTeX equation — matrix2latex","text":"","code":"matrix2latex( x, fractions = FALSE, brackets = TRUE, show.size = FALSE, digits = NULL, ... )"},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert matrix to LaTeX equation — matrix2latex","text":"x matrix fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). brackets logical character \"p\", \"b\", \"B\", \"V\". TRUE, uses square brackets around matrix, FALSE produces brackets. Otherwise \"p\") uses parentheses, ( ); \"b\") uses square brackets [ ], \"B\") uses braces { }, \"V\") uses vertical bars | |. show.size logical; TRUE shows size matrix appended subscript. digits Number digits display. digits == NULL (default), function sets digits = 0 elements x integers ... additional arguments passed xtable::xtableMatharray()","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Convert matrix to LaTeX equation — matrix2latex","text":"code brackets matches options AMS matrix LaTeX package: \\pmatrix{}, \\bmatrix{}, \\Bmatrix{}, ... .","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Convert matrix to LaTeX equation — matrix2latex","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert matrix to LaTeX equation — matrix2latex","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) matrix2latex(cbind(A,b)) #> \\left[ #> \\begin{array}{rrrr} #> 2 & 1 & -1 & 8 \\\\ #> -3 & -1 & 2 & -11 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> matrix2latex(cbind(A,b), digits = 0) #> \\left[ #> \\begin{array}{rrrr} #> 2 & 1 & -1 & 8 \\\\ #> -3 & -1 & 2 & -11 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> matrix2latex(cbind(A/2,b), fractions = TRUE) #> \\left[ #> \\begin{array}{llll} #> 1 & 1/2 & -1/2 & 8 \\\\ #> -3/2 & -1/2 & 1 & -11 \\\\ #> -1 & 1/2 & 1 & -3 \\\\ #> \\end{array} #> \\right] #> matrix2latex(A, digits=0, brackets=\"p\", show.size = TRUE) #> \\left( #> \\begin{array}{rrr} #> 2 & 1 & -1 \\\\ #> -3 & -1 & 2 \\\\ #> -2 & 1 & 2 \\\\ #> \\end{array} #> \\right) #> _{3 \\times 3}"},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":null,"dir":"Reference","previous_headings":"","what":"Minor of A[i,j] — minor","title":"Minor of A[i,j] — minor","text":"Returns minor element (,j) square matrix , .e., determinant sub-matrix results row column j deleted.","code":""},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Minor of A[i,j] — minor","text":"","code":"minor(A, i, j)"},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Minor of A[i,j] — minor","text":"square matrix row index j column index","code":""},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Minor of A[i,j] — minor","text":"minor [,j]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Minor of A[i,j] — minor","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Minor of A[i,j] — minor","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) minor(M, 1, 1) #> [1] 11 minor(M, 1, 2) #> [1] 7 minor(M, 1, 3) #> [1] -5"},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":null,"dir":"Reference","previous_headings":"","what":"Moore-Penrose inverse of a matrix — MoorePenrose","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"Moore-Penrose inverse generalization regular inverse square, non-singular, symmetric matrix cases (rectangular, singular), yet retain similar properties regular inverse.","code":""},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"","code":"MoorePenrose(X, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"X numeric matrix tol Tolerance singular (rank-deficient) matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"Moore-Penrose inverse X","code":""},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"","code":"X <- matrix(rnorm(20), ncol=2) # introduce a linear dependency in X[,3] X <- cbind(X, 1.5*X[, 1] - pi*X[, 2]) Y <- MoorePenrose(X) # demonstrate some properties of the M-P inverse # X Y X = X round(X %*% Y %*% X - X, 8) #> [,1] [,2] [,3] #> [1,] 0 0 0 #> [2,] 0 0 0 #> [3,] 0 0 0 #> [4,] 0 0 0 #> [5,] 0 0 0 #> [6,] 0 0 0 #> [7,] 0 0 0 #> [8,] 0 0 0 #> [9,] 0 0 0 #> [10,] 0 0 0 # Y X Y = Y round(Y %*% X %*% Y - Y, 8) #> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] #> [1,] 0 0 0 0 0 0 0 0 0 0 #> [2,] 0 0 0 0 0 0 0 0 0 0 #> [3,] 0 0 0 0 0 0 0 0 0 0 # X Y = t(X Y) round(X %*% Y - t(X %*% Y), 8) #> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] #> [1,] 0 0 0 0 0 0 0 0 0 0 #> [2,] 0 0 0 0 0 0 0 0 0 0 #> [3,] 0 0 0 0 0 0 0 0 0 0 #> [4,] 0 0 0 0 0 0 0 0 0 0 #> [5,] 0 0 0 0 0 0 0 0 0 0 #> [6,] 0 0 0 0 0 0 0 0 0 0 #> [7,] 0 0 0 0 0 0 0 0 0 0 #> [8,] 0 0 0 0 0 0 0 0 0 0 #> [9,] 0 0 0 0 0 0 0 0 0 0 #> [10,] 0 0 0 0 0 0 0 0 0 0 # Y X = t(Y X) round(Y %*% X - t(Y %*% X), 8) #> [,1] [,2] [,3] #> [1,] 0 0 0 #> [2,] 0 0 0 #> [3,] 0 0 0"},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":null,"dir":"Reference","previous_headings":"","what":"Matrix Power — mpower","title":"Matrix Power — mpower","text":"simple function demonstrate calculating power square symmetric matrix terms eigenvalues eigenvectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Matrix Power — mpower","text":"","code":"mpower(A, p, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Matrix Power — mpower","text":"square symmetric matrix p matrix power, necessarily positive integer tol tolerance determining matrix symmetric","code":""},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Matrix Power — mpower","text":"raised power p: ^p","code":""},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Matrix Power — mpower","text":"matrix power p can fraction non-integer. example, p=1/2 p=1/3 give square-root cube-root matrix. Negative powers also allowed. example, p=-1 gives inverse p=-1/2 gives inverse square-root.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Matrix Power — mpower","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 mpower(C, 2) #> [,1] [,2] [,3] #> [1,] 14 30 45 #> [2,] 30 65 96 #> [3,] 45 96 145 zapsmall(mpower(C, -1)) #> [,1] [,2] [,3] #> [1,] 14 -2 -3 #> [2,] -2 1 0 #> [3,] -3 0 1 solve(C) # check #> [,1] [,2] [,3] #> [1,] 14 -2 -3 #> [2,] -2 1 0 #> [3,] -3 0 1"},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot method for regvec3d objects — plot.regvec3d","title":"Plot method for regvec3d objects — plot.regvec3d","text":"plot method regvec3d objects uses low-level graphics tools package draw 3D 3D vector diagrams reflecting partial marginal relations y x1 x2 bivariate multiple linear regression model, lm(y ~ x1 + x2). summary method prints vectors vector lengths, followed summary model.","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot method for regvec3d objects — plot.regvec3d","text":"","code":"# S3 method for regvec3d plot( x, y, dimension = 3, col = c(\"black\", \"red\", \"blue\", \"brown\", \"lightgray\"), col.plane = \"gray\", cex.lab = 1.2, show.base = 2, show.marginal = FALSE, show.hplane = TRUE, show.angles = TRUE, error.sphere = c(\"none\", \"e\", \"y.hat\"), scale.error.sphere = x$scale, level.error.sphere = 0.95, grid = FALSE, add = FALSE, ... ) # S3 method for regvec3d summary(object, ...) # S3 method for regvec3d print(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot method for regvec3d objects — plot.regvec3d","text":"x “regvec3d” object y Ignored; included compatibility S3 generic dimension Number dimensions plot: 3 (default) 2 col vector 5 colors. col[1] used y residual (e) vectors, x1 x2; col[2] used vectors y -> yhat y -> e; col[3] used vectors yhat -> b1 yhat -> b2; col.plane Color base plane 3D plot axes 2D plot cex.lab character expansion applied vector labels. May number numeric vector corresponding rows X, recycled necessary. show.base show.base > 0, draws base plane 3D plot; show.base > 1, plane drawn thicker show.marginal TRUE also draws lines showing marginal relations y x1 x2 show.hplane TRUE, draws plane defined y, yhat origin 3D show.angles TRUE, draw label angle x1 x2 y yhat, corresponding respectively correlation xs multiple correlation error.sphere Plot sphere (2D, circle) radius proportional length residual vector, centered either origin (\"e\") fitted-values vector (\"y.hat\"; default \"none\".) scale.error.sphere Whether scale error sphere error.sphere=\"y.hat\"; defaults TRUE vectors representing variables scaled, case oblique projections error spheres can represent confidence intervals coefficients; otherwise defaults FALSE. level.error.sphere confidence level error sphere, applied scale.error.sphere=TRUE. grid TRUE, draws light grid base plane add TRUE, add current plot; otherwise start new rgl plot window ... Parameters passed functions [unused now] object regvec3d object summary method","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot method for regvec3d objects — plot.regvec3d","text":"None","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot method for regvec3d objects — plot.regvec3d","text":"3D diagram shows vector y plane formed predictors, x1 x2, variables represented deviation form, intercept need included. 2D diagram, using first two columns result, can used show projection space x1, x2 plane. drawing functions vectors link{vectors3d} used plot.regvec3d method work reasonably well variables shown commensurate scales, .e., either scale=TRUE normalize=TRUE.","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot method for regvec3d objects — plot.regvec3d","text":"Fox, J. (2016). Applied Regression Analysis Generalized Linear Models, 3rd ed., Sage, Chapter 10.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot method for regvec3d objects — plot.regvec3d","text":"","code":"if (require(carData)) { data(\"Duncan\", package=\"carData\") dunc.reg <- regvec3d(prestige ~ income + education, data=Duncan) plot(dunc.reg) plot(dunc.reg, dimension=2) plot(dunc.reg, error.sphere=\"e\") summary(dunc.reg) # Example showing Simpson's paradox data(\"States\", package=\"carData\") states.vec <- regvec3d(SATM ~ pay + percent, data=States, scale=TRUE) plot(states.vec, show.marginal=TRUE) plot(states.vec, show.marginal=TRUE, dimension=2) summary(states.vec) } #> Loading required package: carData #> x y z length #> income 0.7754622 0.0000000 0.0000000 0.7754622 #> education 0.6842863 0.6509930 0.0000000 0.9444785 #> prestige 0.8378014 0.3553340 0.4145197 1.0000000 #> residuals 0.0000000 0.0000000 0.4145197 0.4145197 #> prestige hat 0.8378014 0.3553340 0.0000000 0.9100403 #> b1 income 0.4642947 0.0000000 0.0000000 0.4642947 #> b2 education 0.3735067 0.3553340 0.0000000 0.5155284 #> prestige hat 1 0.8378014 0.0000000 0.0000000 0.8378014 #> prestige hat 2 0.6172234 0.5871929 0.0000000 0.8519156 #> #> Call: #> lm(formula = formula, data = Data) #> #> Residuals: #> Min 1Q Median 3Q Max #> -29.538 -6.417 0.655 6.605 34.641 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) -6.06466 4.27194 -1.420 0.163 #> income. 0.59873 0.11967 5.003 1.05e-05 *** #> education. 0.54583 0.09825 5.555 1.73e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 13.37 on 42 degrees of freedom #> Multiple R-squared: 0.8282,\tAdjusted R-squared: 0.82 #> F-statistic: 101.2 on 2 and 42 DF, p-value: < 2.2e-16 #> #> x y z length #> pay 1.0000000 0.0000000 0.000000 1.0000000 #> percent 0.6630098 0.7486108 0.000000 1.0000000 #> SATM -0.4853306 -0.7164880 0.501098 1.0000000 #> residuals 0.0000000 0.0000000 0.501098 0.5010980 #> SATM hat -0.4853306 -0.7164880 0.000000 0.8653905 #> b1 pay 0.1492295 0.0000000 0.000000 0.1492295 #> b2 percent -0.6345601 -0.7164880 0.000000 0.9570901 #> SATM hat 1 -0.4853306 0.0000000 0.000000 0.4853306 #> SATM hat 2 -0.5689615 -0.6424199 0.000000 0.8581495 #> #> Call: #> lm(formula = formula, data = Data) #> #> Residuals: #> Min 1Q Median 3Q Max #> -29.697 -13.788 0.701 9.988 42.961 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 513.6990 16.9174 30.365 < 2e-16 *** #> pay. 0.9718 0.6292 1.545 0.129 #> percent. -1.3743 0.1387 -9.906 3.45e-13 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 17.68 on 48 degrees of freedom #> Multiple R-squared: 0.7489,\tAdjusted R-squared: 0.7384 #> F-statistic: 71.58 on 2 and 48 DF, p-value: 3.947e-15 #>"},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Linear Equations — plotEqn","title":"Plot Linear Equations — plotEqn","text":"Shows matrices \\(, b\\) look like system linear equations, \\(x = b\\) two unknowns, x1, x2, plotting line equation.","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Linear Equations — plotEqn","text":"","code":"plotEqn( A, b, vars, xlim, ylim, col = 1:nrow(A), lwd = 2, lty = 1, axes = TRUE, labels = TRUE, solution = TRUE )"},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Linear Equations — plotEqn","text":"either matrix coefficients system linear equations, matrix cbind(,b). matrix must two columns. b supplied, vector constants right hand side equations, length matching number rows . vars numeric character vector names variables. supplied, length must equal number unknowns equations, .e., 2. default c(expression(x[1]), expression(x[2])). xlim horizontal axis limits first variable ylim vertical axis limits second variable; missing, ylim calculated range set equations xlim. col scalar vector colors lines, recycled necessary lwd scalar vector line widths lines, recycled necessary lty scalar vector line types lines, recycled necessary axes logical; draw horizontal vertical axes (0,0)? labels logical, vector character labels equations; TRUE, equation labeled using character string resulting showEqn, modified xs properly subscripted. solution logical; solution points pairs equations marked?","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Linear Equations — plotEqn","text":"nothing; used side effect making plot","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot Linear Equations — plotEqn","text":"Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot Linear Equations — plotEqn","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Linear Equations — plotEqn","text":"","code":"# consistent equations A<- matrix(c(1,2,3, -1, 2, 1),3,2) b <- c(2,1,3) showEqn(A, b) #> 1*x1 - 1*x2 = 2 #> 2*x1 + 2*x2 = 1 #> 3*x1 + 1*x2 = 3 plotEqn(A,b) #> x[1] - 1*x[2] = 2 #> 2*x[1] + 2*x[2] = 1 #> 3*x[1] + x[2] = 3 # inconsistent equations b <- c(2,1,6) showEqn(A, b) #> 1*x1 - 1*x2 = 2 #> 2*x1 + 2*x2 = 1 #> 3*x1 + 1*x2 = 6 plotEqn(A,b) #> x[1] - 1*x[2] = 2 #> 2*x[1] + 2*x[2] = 1 #> 3*x[1] + x[2] = 6"},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Linear Equations in 3D — plotEqn3d","title":"Plot Linear Equations in 3D — plotEqn3d","text":"Shows matrices \\(, b\\) look like system linear equations, \\(x = b\\) three unknowns, x1, x2, x3, plotting plane equation.","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Linear Equations in 3D — plotEqn3d","text":"","code":"plotEqn3d( A, b, vars, xlim = c(-2, 2), ylim = c(-2, 2), zlim, col = 2:(nrow(A) + 1), alpha = 0.9, labels = FALSE, solution = TRUE, axes = TRUE, lit = FALSE )"},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Linear Equations in 3D — plotEqn3d","text":"either matrix coefficients system linear equations, matrix cbind(,b) matrix must three columns. b supplied, vector constants right hand side equations, length matching number rows . vars numeric character vector names variables. supplied, length must equal number unknowns equations. default paste0(\"x\", 1:ncol(). xlim axis limits first variable ylim axis limits second variable zlim horizontal axis limits second variable; missing, zlim calculated range set equations xlim ylim col scalar vector colors lines, recycled necessary alpha transparency applied plane labels logical, vector character labels equations; yet implemented. solution logical; solution point equations marked (possible) axes logical; whether frame plot coordinate axes lit logical, specifying lighting calculation take place geometry; see rgl.material","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Linear Equations in 3D — plotEqn3d","text":"nothing; used side effect making plot","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot Linear Equations in 3D — plotEqn3d","text":"Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot Linear Equations in 3D — plotEqn3d","text":"Michael Friendly, John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Linear Equations in 3D — plotEqn3d","text":"3D plot","code":"# three consistent equations in three unknowns A <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3,3) b <- c(1,2,4) plotEqn3d(A,b) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":90,\"objects\":{\"135\":{\"id\":135,\"type\":\"clipplanes\",\"offsets\":[[2],[2],[2],[2],[3],[3]],\"normals\":\"0\",\"flags\":512},\"136\":{\"id\":136,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"1\",\"colors\":\"2\",\"centers\":\"3\",\"ignoreExtent\":false,\"flags\":32832},\"137\":{\"id\":137,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"4\",\"colors\":\"5\",\"centers\":\"6\",\"ignoreExtent\":false,\"flags\":32832},\"139\":{\"id\":139,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":0,\"floating\":true,\"edge\":[0,1,1]},\"vertices\":\"7\",\"colors\":\"8\",\"texts\":[[\"x1\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"9\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"140\":{\"id\":140,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":1,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"10\",\"colors\":\"11\",\"texts\":[[\"x2\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"12\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"141\":{\"id\":141,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":2,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"13\",\"colors\":\"14\",\"texts\":[[\"x3\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"15\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"142\":{\"id\":142,\"type\":\"planes\",\"material\":{\"alpha\":[0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108],\"lit\":false,\"isTransparent\":true},\"vertices\":\"16\",\"colors\":\"18\",\"offsets\":[[-1],[-2],[-4]],\"centers\":\"19\",\"normals\":\"17\",\"ignoreExtent\":true,\"flags\":32802},\"143\":{\"id\":143,\"type\":\"spheres\",\"material\":{},\"vertices\":\"20\",\"colors\":\"21\",\"radii\":[[0.2000000029802322]],\"centers\":\"22\",\"ignoreExtent\":false,\"fastTransparency\":true,\"flags\":32771},\"94\":{\"id\":94,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"95\":{\"id\":95,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"23\",\"centers\":\"24\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"138\":{\"id\":138,\"type\":\"bboxdeco\",\"material\":{\"front\":\"lines\",\"back\":\"lines\"},\"vertices\":\"25\",\"colors\":\"26\",\"axes\":{\"mode\":[\"pretty\",\"pretty\",\"pretty\"],\"step\":[1,1,1],\"nticks\":[5,5,5],\"marklen\":[15,15,15],\"expand\":[1.029999971389771,1.029999971389771,1.029999971389771]},\"draw_front\":true,\"flags\":32769},\"134\":{\"id\":134,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":90,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,20.17857933044434],\"modelMatrix\":[[1.190238118171692,0,0,0],[0,0.4070854187011719,0.7456386089324951,0],[0,-1.118457913398743,0.2713902592658997,-20.17857933044434],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703012466431,-72.74143981933594],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1.190238118171692,1.190238118171692,0.7934920191764832],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[1,2,1,2,1,3],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"inherit\",\"projection\":\"inherit\",\"model\":\"inherit\",\"mouse\":\"inherit\"},\"objects\":[135,136,94],\"parent\":90,\"subscenes\":[],\"flags\":33600},\"90\":{\"id\":90,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":90,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,20.17857933044434],\"modelMatrix\":[[1.190238118171692,0,0,0],[0,0.4070854187011719,0.7456386089324951,0],[0,-1.118457913398743,0.2713902592658997,-20.17857933044434],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703012466431,-72.74143981933594],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1.190238118171692,1.190238118171692,0.7934920191764832],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-2,2,-2,2,-3,3],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[95,138,137,139,140,141,142,143,94,134],\"subscenes\":134,\"flags\":34675}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5120,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":2,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":3,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5120,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":6,\"componentType\":5120,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":9,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":10,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":12,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":14,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":15,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5120,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":18,\"componentType\":5121,\"count\":36,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":19,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":21,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":22,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":24,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":25,\"componentType\":5126,\"count\":17,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":18,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":18},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":30},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":34},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":40},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":52},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":64},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":76},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":80},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":92},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":108},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":120},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":132},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":136},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":148},{\"buffer\":0,\"byteLength\":9,\"byteOffset\":184},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":193},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":340},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":484},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":496},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":500},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":512},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":516},{\"buffer\":0,\"byteLength\":204,\"byteOffset\":520},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":724}],\"buffers\":[{\"byteLength\":728,\"bytes\":\"AQAA/wAAAAEAAP8AAAABAAD/AQEBAQEBAwMDAwMDAAAAAQEBAQMDA/7+/f7+/QICAwICAwAA\\nAAH+/v0CAgMAAAAAwH8AAIBAAACAPwAAAAEAAMB/AACAQAAAgD8AAMB/AACAQAAAgD8AAAAB\\nAADAfwAAgEAAAIA/AADAfwAAgEAAAIA/AAAAAQAAwH8AAIBAAACAP9mJnb0AAADAAABAwMVO\\nbD4AAABAAABAQAAAgL8AAADAAABAQA38AvwL/gL+CN9Ta+XfU2vl31Nr5d9Ta+XfU2vl31Nr\\n5d9Ta+XfU2vl31Nr5d9Ta+XfU2vl31Nr5WHQT+Vh0E/lYdBP5WHQT+Vh0E/lYdBP5WHQT+Vh\\n0E/lYdBP5WHQT+Vh0E/lYdBP5SKX5uUil+blIpfm5SKX5uUil+blIpfm5SKX5uUil+blIpfm\\n5SKX5uUil+blIpfm5QAAAAdpkL6rqiq/AACAP/Mt3z6rqio/AACAvwAAwH8AAMB/AADAfwAA\\nwH8AAMB/AADAf6uqKr8QPvg9AACAP6uqKj8QPng+AACAvwAAwH8AAMB/AADAfwAAwH8AAMB/\\nAADAf6uqKr+rqio/VlVVP6uqKj+rqiq/q6oqPgAAwH8AAMB/AADAfwAAwH8AAMB/AADAf7W0\\ntD00WKE+YYUOPwAAAAG1tLQ9NFihPmGFDj8BAQEBAAAAAAAAAMAAAMB/AADAfwAAgL8AAMB/\\nAADAfwAAAAAAAMB/AADAfwAAgD8AAMB/AADAfwAAAEAAAMB/AADAfwAAwH8AAADAAADAfwAA\\nwH8AAIC/AADAfwAAwH8AAAAAAADAfwAAwH8AAIA/AADAfwAAwH8AAABAAADAfwAAwH8AAMB/\\nAABAwAAAwH8AAMB/AAAAwAAAwH8AAMB/AACAvwAAwH8AAMB/AAAAAAAAwH8AAMB/AACAPwAA\\nwH8AAMB/AAAAQAAAwH8AAMB/AABAQAAAAAE=\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]}"},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":null,"dir":"Reference","previous_headings":"","what":"Position of a point along a line — pointOnLine","title":"Position of a point along a line — pointOnLine","text":"utility function drawing vector diagrams. Find position interpolated point along line x1 x2.","code":""},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Position of a point along a line — pointOnLine","text":"","code":"pointOnLine(x1, x2, d, absolute = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Position of a point along a line — pointOnLine","text":"x1 vector length 2 3, representing starting point line 2D 3D space x2 vector length 2 3, representing ending point line 2D 3D space d distance along line x1 x2 point found. absolute logical; TRUE, d taken absolute distance along line; otherwise calculated relative distance, .e., fraction length line.","code":""},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Position of a point along a line — pointOnLine","text":"interpolated point, vector length x1","code":""},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Position of a point along a line — pointOnLine","text":"function takes step length d along line defined difference two points, x2 - x1. absolute=FALSE, step proportional difference, absolute=TRUE, difference first scaled unit length step always length d. Note physical length line different directions graph depends aspect ratio plot axes, lines length appear equal aspect ratio one (asp=1 2D, aspect3d(\"iso\") 3D).","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Position of a point along a line — pointOnLine","text":"","code":"x1 <- c(0, 0) x2 <- c(1, 4) pointOnLine(x1, x2, 0.5) #> [1] 0.1212678 0.4850713 pointOnLine(x1, x2, 0.5, absolute=FALSE) #> [1] 0.5 2.0 pointOnLine(x1, x2, 1.1) #> [1] 0.2667892 1.0671568 y1 <- c(1, 2, 3) y2 <- c(3, 2, 1) pointOnLine(y1, y2, 0.5) #> [1] 1.353553 2.000000 2.646447 pointOnLine(y1, y2, 0.5, absolute=FALSE) #> [1] 2 2 2"},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":null,"dir":"Reference","previous_headings":"","what":"Power Method for Eigenvectors — powerMethod","title":"Power Method for Eigenvectors — powerMethod","text":"Finds dominant eigenvalue, \\(\\lambda_1\\), corresponding eigenvector, \\(v_1\\), square matrix applying Hotelling's (1933) Power Method scaling.","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Power Method for Eigenvectors — powerMethod","text":"","code":"powerMethod(A, v = NULL, eps = 1e-06, maxiter = 100, plot = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Power Method for Eigenvectors — powerMethod","text":"square numeric matrix v optional starting vector; supplied, uses unit vector length equal number rows / columns x. eps convergence threshold terminating iterations maxiter maximum number iterations plot logical; TRUE, plot series iterated eigenvectors?","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Power Method for Eigenvectors — powerMethod","text":"list containing eigenvector (vector), eigenvalue (value), iterations (iter), iteration history (vector_iterations)","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Power Method for Eigenvectors — powerMethod","text":"method based upon fact repeated multiplication matrix \\(\\) trial vector \\(v_1^{(k)}\\) converges value eigenvector, $$v_1^{(k+1)} = v_1^{(k)} / \\vert\\vert v_1^{(k)} \\vert\\vert $$ corresponding eigenvalue found $$\\lambda_1 = \\frac{v_1^T v_1}{v_1^T v_1}$$ pre-computer days, method extended find subsequent eigenvalue - eigenvector pairs \"deflation\", .e., applying method new matrix. \\(- \\lambda_1 v_1 v_1^{T} \\). method still used computer-intensive applications huge matrices dominant eigenvector required, e.g., Google Page Rank algorithm.","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Power Method for Eigenvectors — powerMethod","text":"Hotelling, H. (1933). Analysis complex statistical variables principal components. Journal Educational Psychology, 24, 417-441, 498-520.","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Power Method for Eigenvectors — powerMethod","text":"Gaston Sanchez (matrixkit)","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Power Method for Eigenvectors — powerMethod","text":"","code":"A <- cbind(c(7, 3), c(3, 6)) powerMethod(A) #> $vector_iterations #> v1 v2 v3 v4 v5 v6 v7 v8 #> [1,] 1 0.7432941 0.7559462 0.7604661 0.7620956 0.7626851 0.7628986 0.7629760 #> [2,] 1 0.6689647 0.6546338 0.6493776 0.6474645 0.6467700 0.6465181 0.6464268 #> v9 v10 v11 v12 #> [1,] 0.7630040 0.7630142 0.7630179 0.7630192 #> [2,] 0.6463937 0.6463817 0.6463774 0.6463758 #> #> $iter #> [1] 12 #> #> $vector #> [,1] #> [1,] 0.7630197 #> [2,] 0.6463752 #> #> $value #> [1] 9.541381 #> eigen(A)$values[1] # check #> [1] 9.541381 eigen(A)$vectors[,1] #> [1] -0.7630200 -0.6463749 # demonstrate how the power method converges to a solution powerMethod(A, v = c(-.5, 1), plot = TRUE) B <- cbind(c(1, 2, 0), c(2, 1, 3), c(0, 3, 1)) (rv <- powerMethod(B)) #> $vector_iterations #> v1 v2 v3 v4 v5 v6 v7 v8 #> [1,] 1 0.3841106 0.4184463 0.3819585 0.3989921 0.3885977 0.3943249 0.3910547 #> [2,] 1 0.7682213 0.6695140 0.7275400 0.6952733 0.7137158 0.7033401 0.7092289 #> [3,] 1 0.5121475 0.6137212 0.5699063 0.5978297 0.5827535 0.5914563 0.5865753 #> v9 v10 v11 v12 v13 v14 v15 #> [1,] 0.3928994 0.3918549 0.3924457 0.3921115 0.3923006 0.3921936 0.3922541 #> [2,] 0.7059033 0.7077867 0.7067218 0.7073245 0.7069836 0.7071765 0.7070674 #> [3,] 0.5893476 0.5877820 0.5886685 0.5881672 0.5884509 0.5882904 0.5883812 #> v16 v17 v18 v19 v20 v21 v22 #> [1,] 0.3922199 0.3922393 0.3922283 0.3922345 0.3922310 0.3922330 0.3922319 #> [2,] 0.7071291 0.7070942 0.7071139 0.7071027 0.7071091 0.7071055 0.7071075 #> [3,] 0.5883298 0.5883589 0.5883425 0.5883518 0.5883465 0.5883495 0.5883478 #> v23 #> [1,] 0.3922325 #> [2,] 0.7071064 #> [3,] 0.5883487 #> #> $iter #> [1] 23 #> #> $vector #> [,1] #> [1,] 0.3922321 #> [2,] 0.7071070 #> [3,] 0.5883482 #> #> $value #> [1] 4.605551 #> # deflate to find 2nd latent vector l <- rv$value v <- c(rv$vector) B1 <- B - l * outer(v, v) powerMethod(B1) #> $vector_iterations #> v1 v2 v3 v4 v5 v6 v7 #> [1,] 1 -0.06371093 0.5108612 -0.3439621 0.4104417 -0.3851914 0.3949269 #> [2,] 1 0.65894964 -0.6993467 0.7059478 -0.7069361 0.7070820 -0.7071035 #> [3,] 1 -0.74948402 0.4999350 -0.6191347 0.5760026 -0.5930115 0.5865470 #> v8 v9 v10 v11 v12 v13 #> [1,] -0.3911967 0.3926292 -0.3920796 0.3922906 -0.3922096 0.3922407 #> [2,] 0.7071066 -0.7071071 0.7071072 -0.7071072 0.7071072 -0.7071072 #> [3,] -0.5890376 0.5880832 -0.5884497 0.5883090 -0.5883630 0.5883423 #> v14 v15 v16 #> [1,] -0.3922287 0.3922333 -0.3922316 #> [2,] 0.7071072 -0.7071072 0.7071072 #> [3,] -0.5883503 0.5883472 -0.5883484 #> #> $iter #> [1] 16 #> #> $vector #> [,1] #> [1,] 0.3922322 #> [2,] -0.7071072 #> [3,] 0.5883479 #> #> $value #> [1] -2.605551 #> eigen(B)$vectors # check #> [,1] [,2] [,3] #> [1,] 0.3922323 8.320503e-01 -0.3922323 #> [2,] 0.7071068 6.568970e-16 0.7071068 #> [3,] 0.5883484 -5.547002e-01 -0.5883484 # a positive, semi-definite matrix, with eigenvalues 12, 6, 0 C <- matrix(c(7, 4, 1, 4, 4, 4, 1, 4, 7), 3, 3) eigen(C)$vectors #> [,1] [,2] [,3] #> [1,] -0.5773503 7.071068e-01 0.4082483 #> [2,] -0.5773503 6.938894e-16 -0.8164966 #> [3,] -0.5773503 -7.071068e-01 0.4082483 powerMethod(C) #> $vector_iterations #> v1 v2 #> [1,] 1 0.5773503 #> [2,] 1 0.5773503 #> [3,] 1 0.5773503 #> #> $iter #> [1] 2 #> #> $vector #> [,1] #> [1,] 0.5773503 #> [2,] 0.5773503 #> [3,] 0.5773503 #> #> $value #> [1] 12 #>"},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":null,"dir":"Reference","previous_headings":"","what":"Print Matrices or Matrix Operations Side by Side — printMatEqn","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"function designed print collection matrices, vectors, character strings matrix expressions side side. typical use illustrate matrix equations compact comprehensible way.","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"","code":"printMatEqn(..., space = 1, tol = sqrt(.Machine$double.eps), fractions = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"... matrices character operations passed printed console. can include named arguments, character string operation symbols (e.g., \"+\") space amount blank spaces place around operations \"+\", \"-\", \"=\", etc tol tolerance rounding fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)).","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"NULL; formatted sequence matrices matrix operations printed console","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) x <- c(2, 3, -1) # provide implicit or explicit labels printMatEqn(AA = A, \"*\", xx = x, '=', b = A %*% x) #> AA xx b #> 2 1 -1 * 2 = 8 #> -3 -1 2 3 -11 #> -2 1 2 -1 -3 printMatEqn(A, \"*\", x, '=', b = A %*% x) #> A x b #> 2 1 -1 * 2 = 8 #> -3 -1 2 3 -11 #> -2 1 2 -1 -3 printMatEqn(A, \"*\", x, '=', A %*% x) #> A x A %*% x #> 2 1 -1 * 2 = 8 #> -3 -1 2 3 -11 #> -2 1 2 -1 -3 # compare with showEqn b <- c(4, 2, 1) printMatEqn(A, x=paste0(\"x\", 1:3),\"=\", b) #> A x b #> 2 1 -1 x1 = 4 #> -3 -1 2 x2 2 #> -2 1 2 x3 1 showEqn(A, b) #> 2*x1 + 1*x2 - 1*x3 = 4 #> -3*x1 - 1*x2 + 2*x3 = 2 #> -2*x1 + 1*x2 + 2*x3 = 1 # decimal example A <- matrix(c(0.5, 1, 3, 0.75, 2.8, 4), nrow = 2) x <- c(0.5, 3.7, 2.3) y <- c(0.7, -1.2) b <- A %*% x - y printMatEqn(A, \"*\", x, \"-\", y, \"=\", b) #> A x y b #> 0.50 3.00 2.80 * 0.5 - 0.7 = 17.090 #> 1.00 0.75 4.00 3.7 -1.2 13.675 #> 2.3 printMatEqn(A, \"*\", x, \"-\", y, \"=\", b, fractions=TRUE) #> A x y b #> 1/2 3 14/5 * 1/2 - 7/10 = 1709/100 #> 1 3/4 4 37/10 -6/5 547/40 #> 23/10"},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":null,"dir":"Reference","previous_headings":"","what":"Print a matrix, allowing fractions or LaTeX output — printMatrix","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"Print matrix, allowing fractions LaTeX output","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"","code":"printMatrix( A, parent = TRUE, fractions = FALSE, latex = FALSE, tol = sqrt(.Machine$double.eps) )"},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"numeric matrix parent flag used search parent envir suitable definitions arguments. Set TRUE (default) want use inputs provided. fractions TRUE, print numbers rational fractions, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). latex TRUE, print matrix LaTeX format tol Tolerance rounding small numbers 0","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"formatted matrix","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"","code":"A <- matrix(1:12, 3, 4) / 6 printMatrix(A, fractions=TRUE) #> [,1] [,2] [,3] [,4] #> [1,] 1/6 2/3 7/6 5/3 #> [2,] 1/3 5/6 4/3 11/6 #> [3,] 1/2 1 3/2 2 printMatrix(A, latex=TRUE) #> \\left[ #> \\begin{array}{rrrr} #> 0.16666667 & 0.66666667 & 1.16666667 & 1.66666667 \\\\ #> 0.33333333 & 0.83333333 & 1.33333333 & 1.83333333 \\\\ #> 0.50000000 & 1.00000000 & 1.50000000 & 2.00000000 \\\\ #> \\end{array} #> \\right] #>"},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":null,"dir":"Reference","previous_headings":"","what":"Projection of Vector y on columns of X — Proj","title":"Projection of Vector y on columns of X — Proj","text":"Fitting linear model, lm(y ~ X), least squares can thought geometrically orthogonal projection y column space X. function designed allow exploration projections orthogonality.","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projection of Vector y on columns of X — Proj","text":"","code":"Proj(y, X, list = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Projection of Vector y on columns of X — Proj","text":"y vector, treated one-column matrix X vector matrix. Number rows y X must match list logical; FALSE, return just projected vector; otherwise returns list","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Projection of Vector y on columns of X — Proj","text":"projection y X (list=FALSE) list elements y P","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Projection of Vector y on columns of X — Proj","text":"projection defined \\(P y\\) \\(P = X (X'X)^- X'\\) \\(X^-\\) generalized inverse.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Projection of Vector y on columns of X — Proj","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Projection of Vector y on columns of X — Proj","text":"","code":"X <- matrix( c(1, 1, 1, 1, 1, -1, 1, -1), 4,2, byrow=TRUE) y <- 1:4 Proj(y, X[,1]) # project y on unit vector #> [1] 2.5 2.5 2.5 2.5 Proj(y, X[,2]) #> [1] -1 -1 1 1 Proj(y, X) #> [1] 1.5 1.5 3.5 3.5 # project unit vector on line between two points y <- c(1,1) p1 <- c(0,0) p2 <- c(1,0) Proj(y, cbind(p1, p2)) #> [1] 1 0 # orthogonal complements y <- 1:4 yp <-Proj(y, X, list=TRUE) yp$y #> [1] 1.5 1.5 3.5 3.5 P <- yp$P IP <- diag(4) - P yc <- c(IP %*% y) crossprod(yp$y, yc) #> [,1] #> [1,] 0 # P is idempotent: P P = P P %*% P #> [,1] [,2] [,3] [,4] #> [1,] 0.5 0.5 0.0 0.0 #> [2,] 0.5 0.5 0.0 0.0 #> [3,] 0.0 0.0 0.5 0.5 #> [4,] 0.0 0.0 0.5 0.5 all.equal(P, P %*% P) #> [1] TRUE"},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":null,"dir":"Reference","previous_headings":"","what":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"QR computes QR decomposition matrix, \\(X\\), orthonormal matrix, \\(Q\\) upper triangular matrix, \\(R\\), \\(X = Q R\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"","code":"QR(X, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"X numeric matrix tol tolerance detecting linear dependencies columns X","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"list three elements, consisting orthonormal matrix Q, upper triangular matrix R, rank matrix X","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"QR decomposition plays important role many statistical techniques. particular can used solve equation \\(Ax = b\\) given matrix \\(\\) vector \\(b\\). function included simply show algorithm Gram-Schmidt orthogonalization. standard qr function faster accurate.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"John Fox Georges Monette","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"","code":"A <- matrix(c(1,2,3,4,5,6,7,8,10), 3, 3) # a square nonsingular matrix res <- QR(A) res #> $Q #> [,1] [,2] [,3] #> [1,] -0.2672612 -0.8728716 -0.4082483 #> [2,] -0.5345225 -0.2182179 0.8164966 #> [3,] -0.8017837 0.4364358 -0.4082483 #> #> $R #> [,1] [,2] [,3] #> [1,] -3.741657 -8.552360 -14.1648458 #> [2,] 0.000000 -1.963961 -3.4914862 #> [3,] 0.000000 0.000000 -0.4082483 #> #> $rank #> [1] 3 #> q <- res$Q zapsmall( t(q) %*% q) # check that q' q = I #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 r <- res$R q %*% r # check that q r = A #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 10 # relation to determinant: det(A) = prod(diag(R)) det(A) #> [1] -3 prod(diag(r)) #> [1] -3 B <- matrix(1:9, 3, 3) # a singular matrix QR(B) #> $Q #> [,1] [,2] [,3] #> [1,] -0.2672612 -0.8728716 0 #> [2,] -0.5345225 -0.2182179 0 #> [3,] -0.8017837 0.4364358 0 #> #> $R #> [,1] [,2] [,3] #> [1,] -3.741657 -8.552360 -13.363062 #> [2,] 0.000000 -1.963961 -3.927922 #> [3,] 0.000000 0.000000 0.000000 #> #> $rank #> [1] 2 #>"},{"path":"http://friendly.github.io/matlib/reference/R.html","id":null,"dir":"Reference","previous_headings":"","what":"Rank of a Matrix — R","title":"Rank of a Matrix — R","text":"Returns rank matrix X, using QR decomposition, QR. Included simple function, rank something different obvious use matrix rank.","code":""},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rank of a Matrix — R","text":"","code":"R(X)"},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rank of a Matrix — R","text":"X matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Rank of a Matrix — R","text":"rank X","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rank of a Matrix — R","text":"","code":"M <- outer(1:3, 3:1) M #> [,1] [,2] [,3] #> [1,] 3 2 1 #> [2,] 6 4 2 #> [3,] 9 6 3 R(M) #> [1] 1 M <- matrix(1:9, 3, 3) M #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 R(M) #> [1] 2 # why rank=2? echelon(M) #> [,1] [,2] [,3] #> [1,] 1 0 -1 #> [2,] 0 1 2 #> [3,] 0 0 0 set.seed(1234) M <- matrix(sample(1:9), 3, 3) M #> [,1] [,2] [,3] #> [1,] 6 1 7 #> [2,] 5 8 9 #> [3,] 4 2 3 R(M) #> [1] 3"},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Vector space representation of a two-variable regression model — regvec3d","title":"Vector space representation of a two-variable regression model — regvec3d","text":"regvec3d calculates 3D vectors represent projection two-variable multiple regression model n-D observation space 3D mean-deviation variable space span, thus showing regression y x1 x2 model lm(y ~ x1 + x2). result can used draw 2D 3D vector diagrams accurately reflecting partial marginal relations y x1 x2 vectors representation.","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Vector space representation of a two-variable regression model — regvec3d","text":"","code":"regvec3d(x1, ...) # S3 method for formula regvec3d( formula, data = NULL, which = 1:2, name.x1, name.x2, name.y, name.e, name.y.hat, name.b1.x1, name.b2.x2, abbreviate = 0, ... ) # S3 method for default regvec3d( x1, x2, y, scale = FALSE, normalize = TRUE, name.x1 = deparse(substitute(x1)), name.x2 = deparse(substitute(x2)), name.y = deparse(substitute(y)), name.e = \"residuals\", name.y.hat = paste0(name.y, \"hat\"), name.b1.x1 = paste0(\"b1\", name.x1), name.b2.x2 = paste0(\"b2\", name.x2), name.y1.hat = paste0(name.y, \"hat 1\"), name.y2.hat = paste0(name.y, \"hat 2\"), ... )"},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Vector space representation of a two-variable regression model — regvec3d","text":"x1 generic argument first predictor passed default method ... Arguments passed methods formula two-sided formula linear regression model. must contain two quantitative predictors (x1 x2) right-hand-side. predictors included, y, x1 x2 taken residuals linear fits variables. data data frame variables model found Indices predictors variables model taken x1 x2 name.x1 Name x1 used result plots. default, taken name x1 variable formula, possibly abbreviated according abbreviate. name.x2 Ditto name x2 name.y Ditto name y name.e Name residual vector. Default: \"residuals\" name.y.hat Name fitted vector name.b1.x1 Name vector corresponding partial coefficient x1 name.b2.x2 Name vector corresponding partial coefficient x2 abbreviate integer. abbreviate >0, names x1, x2 y abbreviated length combined name.* arguments x2 second predictor variable model y response variable model scale logical; TRUE, standardize y, x1, x2 standard scores normalize logical; TRUE, normalize vector relative maximum length name.y1.hat Name vector corresponding marginal coefficient x1 name.y2.hat Name vector corresponding marginal coefficient x2","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Vector space representation of a two-variable regression model — regvec3d","text":"object class “regvec3d”, containing following components model “lm” object corresponding lm(y ~ x1 + x2). vectors 9 x 3 matrix, whose rows correspond variables model, residual vector, fitted vector, partial fits x1, x2, marginal fits y x1 x2. columns effectively represent x1, x2, y, named \"x\", \"y\" \"z\".","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Vector space representation of a two-variable regression model — regvec3d","text":"additional variables included model, e.g., lm(y ~ x1 + x2 + x3 + ...), y, x1 x2 taken residuals separate linear fits x3 + ..., thus showing partial relations net (adjusting ) additional predictors. 3D diagram shows vector y plane formed predictors, x1 x2, variables represented deviation form, intercept need included. 2D diagram, using first two columns result, can used show projection space x1, x2 plane. views, ANOVA representation various sums squares regression predictors appears lengths various vectors. example, error sum squares squared length e vector, regression sum squares squared length yhat vector. drawing functions vectors link{vectors3d} used plot.regvec3d method work reasonably well variables shown commensurate scales, .e., either scale=TRUE normalize=TRUE.","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"methods-by-class-","dir":"Reference","previous_headings":"","what":"Methods (by class)","title":"Vector space representation of a two-variable regression model — regvec3d","text":"regvec3d(formula): Formula method regvec3d regvec3d(default): Default method regvec3d","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Vector space representation of a two-variable regression model — regvec3d","text":"Fox, J. (2016). Applied Regression Analysis Generalized Linear Models, 3rd ed., Sage, Chapter 10. Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vector space representation of a two-variable regression model — regvec3d","text":"","code":"library(rgl) therapy.vec <- regvec3d(therapy ~ perstest + IE, data=therapy) therapy.vec #> x y z #> perstest 0.50000000 0.0000000 0.0000000 #> IE 0.02000000 0.3893584 0.0000000 #> therapy 0.60000000 0.7499516 0.2785185 #> residuals 0.00000000 0.0000000 0.2785185 #> therapy hat 0.60000000 0.7499516 0.0000000 #> b1 perstest 0.56147757 0.0000000 0.0000000 #> b2 IE 0.03852243 0.7499516 0.0000000 #> therapy hat 1 0.60000000 0.0000000 0.0000000 #> therapy hat 2 0.04000000 0.7787169 0.0000000 plot(therapy.vec, col.plane=\"darkgreen\") plot(therapy.vec, dimension=2)"},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":null,"dir":"Reference","previous_headings":"","what":"Add multiples of rows to other rows — rowadd","title":"Add multiples of rows to other rows — rowadd","text":"elementary row operation rowadd adds multiples one rows rows matrix. usually used means solve systems linear equations, form \\(x = b\\), rowadd corresponds adding equals equals.","code":""},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add multiples of rows to other rows — rowadd","text":"","code":"rowadd(x, from, to, mult)"},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add multiples of rows to other rows — rowadd","text":"x numeric matrix, possibly consisting coefficient matrix, , joined vector constants, b. index one source rows. vector, must length . index one destination rows mult multiplier(s)","code":""},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add multiples of rows to other rows — rowadd","text":"matrix x, modified","code":""},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add multiples of rows to other rows — rowadd","text":"functions rowmult rowswap complete basic operations used reduction row echelon form Gaussian elimination. functions used demonstration purposes.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add multiples of rows to other rows — rowadd","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) # using row operations to reduce below diagonal to 0 Ab <- cbind(A, b) (Ab <- rowadd(Ab, 1, 2, 3/2)) # row 2 <- row 2 + 3/2 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] -2 1.0 2.0 -3 (Ab <- rowadd(Ab, 1, 3, 1)) # row 3 <- row 3 + 1 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 2.0 1.0 5 (Ab <- rowadd(Ab, 2, 3, -4)) # row 3 <- row 3 - 4 row 2 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # multiply to make diagonals = 1 (Ab <- rowmult(Ab, 1:3, c(1/2, 2, -1))) #> b #> [1,] 1 0.5 -0.5 4 #> [2,] 0 1.0 1.0 2 #> [3,] 0 0.0 1.0 -1 # The matrix is now in triangular form # Could continue to reduce above diagonal to zero echelon(A, b, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1"},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":null,"dir":"Reference","previous_headings":"","what":"Row Cofactors of A[i,] — rowCofactors","title":"Row Cofactors of A[i,] — rowCofactors","text":"Returns vector cofactors row square matrix . determinant, Det(), can found M[,] %*% rowCofactors(M,) row, .","code":""},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Row Cofactors of A[i,] — rowCofactors","text":"","code":"rowCofactors(A, i)"},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Row Cofactors of A[i,] — rowCofactors","text":"square matrix row index","code":""},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Row Cofactors of A[i,] — rowCofactors","text":"vector cofactors [,]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Row Cofactors of A[i,] — rowCofactors","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Row Cofactors of A[i,] — rowCofactors","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) minor(M, 1, 1) #> [1] 11 minor(M, 1, 2) #> [1] 7 minor(M, 1, 3) #> [1] -5 rowCofactors(M, 1) #> [1] 11 -7 -5 Det(M) #> [1] 148 # expansion by cofactors of row 1 M[1,] %*% rowCofactors(M,1) #> [,1] #> [1,] 148"},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":null,"dir":"Reference","previous_headings":"","what":"Row Minors of A[i,] — rowMinors","title":"Row Minors of A[i,] — rowMinors","text":"Returns vector minors row square matrix ","code":""},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Row Minors of A[i,] — rowMinors","text":"","code":"rowMinors(A, i)"},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Row Minors of A[i,] — rowMinors","text":"square matrix row index","code":""},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Row Minors of A[i,] — rowMinors","text":"vector minors [,]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Row Minors of A[i,] — rowMinors","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Row Minors of A[i,] — rowMinors","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) minor(M, 1, 1) #> [1] 11 minor(M, 1, 2) #> [1] 7 minor(M, 1, 3) #> [1] -5 rowMinors(M, 1) #> [1] 11 7 -5"},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":null,"dir":"Reference","previous_headings":"","what":"Multiply Rows by Constants — rowmult","title":"Multiply Rows by Constants — rowmult","text":"Multiplies one rows matrix constants. corresponds multiplying dividing equations constants.","code":""},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Multiply Rows by Constants — rowmult","text":"","code":"rowmult(x, row, mult)"},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Multiply Rows by Constants — rowmult","text":"x matrix, possibly consisting coefficient matrix, , joined vector constants, b. row index one rows. mult row multiplier(s)","code":""},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Multiply Rows by Constants — rowmult","text":"matrix x, modified","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Multiply Rows by Constants — rowmult","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) # using row operations to reduce below diagonal to 0 Ab <- cbind(A, b) (Ab <- rowadd(Ab, 1, 2, 3/2)) # row 2 <- row 2 + 3/2 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] -2 1.0 2.0 -3 (Ab <- rowadd(Ab, 1, 3, 1)) # row 3 <- row 3 + 1 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 2.0 1.0 5 (Ab <- rowadd(Ab, 2, 3, -4)) #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # multiply to make diagonals = 1 (Ab <- rowmult(Ab, 1:3, c(1/2, 2, -1))) #> b #> [1,] 1 0.5 -0.5 4 #> [2,] 0 1.0 1.0 2 #> [3,] 0 0.0 1.0 -1 # The matrix is now in triangular form"},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":null,"dir":"Reference","previous_headings":"","what":"Interchange two rows of a matrix — rowswap","title":"Interchange two rows of a matrix — rowswap","text":"elementary row operation corresponds interchanging two equations.","code":""},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Interchange two rows of a matrix — rowswap","text":"","code":"rowswap(x, from, to)"},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Interchange two rows of a matrix — rowswap","text":"x matrix, possibly consisting coefficient matrix, , joined vector constants, b. source row. destination row","code":""},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Interchange two rows of a matrix — rowswap","text":"matrix x, rows interchanged","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":null,"dir":"Reference","previous_headings":"","what":"Show the eigenvectors associated with a covariance matrix — showEig","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"function designed illustrating eigenvectors associated covariance matrix given bivariate data set. draws data ellipse data adds vectors showing eigenvectors covariance matrix.","code":""},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"","code":"showEig( X, col.vec = \"blue\", lwd.vec = 3, mult = sqrt(qchisq(levels, 2)), asp = 1, levels = c(0.5, 0.95), plot.points = TRUE, add = !plot.points, ... )"},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"X two-column matrix data frame col.vec color eigenvectors lwd.vec line width eigenvectors mult length multiplier(s) eigenvectors asp aspect ratio plot, set asp=1 default, passed dataEllipse levels passed dataEllipse determining coverage data ellipse(s) plot.points logical; points plotted? add logical; call add existing plot? ... arguments passed link[car]{dataEllipse}","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"","code":"x <- rnorm(200) y <- .5 * x + .5 * rnorm(200) X <- cbind(x,y) showEig(X) # Duncan data data(Duncan, package=\"carData\") showEig(Duncan[, 2:3], levels=0.68) showEig(Duncan[,2:3], levels=0.68, robust=TRUE, add=TRUE, fill=TRUE)"},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":null,"dir":"Reference","previous_headings":"","what":"Show Matrices (A, b) as Linear Equations — showEqn","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"Shows matrices \\(, b\\) look like system linear equations, \\(x = b\\), written set equations.","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"","code":"showEqn( A, b, vars, simplify = FALSE, reduce = FALSE, fractions = FALSE, latex = FALSE )"},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"either matrix coefficients system linear equations, matrix cbind(,b). Alternatively, can class 'lm' print equations design matrix linear regression model b supplied, vector constants right hand side equations. omitted values b1, b2, ..., bn used placeholders vars numeric character vector names variables. supplied, length must equal number unknowns equations. default paste0(\"x\", 1:ncol(). simplify logical; try simplify equations? reduce logical; show unique linear equations fractions logical; express numbers rational fractions, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). latex logical; print equations form suitable LaTeX output?","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"one-column character matrix, one row equation","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"Michael Friendly, John Fox, Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) showEqn(A, b) #> 2*x1 + 1*x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + 1*x2 + 2*x3 = -3 # show numerically x <- solve(A, b) showEqn(A, b, vars=x) #> 2*2 + 1*3 - 1*-1 = 8 #> -3*2 - 1*3 + 2*-1 = -11 #> -2*2 + 1*3 + 2*-1 = -3 showEqn(A, b, simplify=TRUE) #> 2*x1 + x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + x2 + 2*x3 = -3 showEqn(A, b, latex=TRUE) #> \\begin{array}{lllllll} #> 2 \\cdot x_1 &+& 1 \\cdot x_2 &-& 1 \\cdot x_3 &=& 8 \\\\ #> -3 \\cdot x_1 &-& 1 \\cdot x_2 &+& 2 \\cdot x_3 &=& -11 \\\\ #> -2 \\cdot x_1 &+& 1 \\cdot x_2 &+& 2 \\cdot x_3 &=& -3 \\\\ #> \\end{array} # lower triangle of equation with zeros omitted (for back solving) A <- matrix(c(2, 1, 2, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) U <- LU(A)$U showEqn(U, simplify=TRUE, fractions=TRUE) #> 2*x1 + x2 + 2*x3 = b1 #> 1/2*x2 + 5*x3 = b2 #> - 16*x3 = b3 showEqn(U, b, simplify=TRUE, fractions=TRUE) #> 2*x1 + x2 + 2*x3 = 8 #> 1/2*x2 + 5*x3 = -11 #> - 16*x3 = -3 #################### # Linear models Design Matricies data(mtcars) ancova <- lm(mpg ~ wt + vs, mtcars) summary(ancova) #> #> Call: #> lm(formula = mpg ~ wt + vs, data = mtcars) #> #> Residuals: #> Min 1Q Median 3Q Max #> -3.7071 -2.4415 -0.3129 1.4319 6.0156 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 33.0042 2.3554 14.012 1.92e-14 *** #> wt -4.4428 0.6134 -7.243 5.63e-08 *** #> vs 3.1544 1.1907 2.649 0.0129 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 2.78 on 29 degrees of freedom #> Multiple R-squared: 0.801,\tAdjusted R-squared: 0.7873 #> F-statistic: 58.36 on 2 and 29 DF, p-value: 6.818e-11 #> showEqn(ancova) #> 1*x1 + 2.62*x2 + 0*x3 = b1 #> 1*x1 + 2.875*x2 + 0*x3 = b2 #> 1*x1 + 2.32*x2 + 1*x3 = b3 #> 1*x1 + 3.215*x2 + 1*x3 = b4 #> 1*x1 + 3.44*x2 + 0*x3 = b5 #> 1*x1 + 3.46*x2 + 1*x3 = b6 #> 1*x1 + 3.57*x2 + 0*x3 = b7 #> 1*x1 + 3.19*x2 + 1*x3 = b8 #> 1*x1 + 3.15*x2 + 1*x3 = b9 #> 1*x1 + 3.44*x2 + 1*x3 = b10 #> 1*x1 + 3.44*x2 + 1*x3 = b11 #> 1*x1 + 4.07*x2 + 0*x3 = b12 #> 1*x1 + 3.73*x2 + 0*x3 = b13 #> 1*x1 + 3.78*x2 + 0*x3 = b14 #> 1*x1 + 5.25*x2 + 0*x3 = b15 #> 1*x1 + 5.424*x2 + 0*x3 = b16 #> 1*x1 + 5.345*x2 + 0*x3 = b17 #> 1*x1 + 2.2*x2 + 1*x3 = b18 #> 1*x1 + 1.615*x2 + 1*x3 = b19 #> 1*x1 + 1.835*x2 + 1*x3 = b20 #> 1*x1 + 2.465*x2 + 1*x3 = b21 #> 1*x1 + 3.52*x2 + 0*x3 = b22 #> 1*x1 + 3.435*x2 + 0*x3 = b23 #> 1*x1 + 3.84*x2 + 0*x3 = b24 #> 1*x1 + 3.845*x2 + 0*x3 = b25 #> 1*x1 + 1.935*x2 + 1*x3 = b26 #> 1*x1 + 2.14*x2 + 0*x3 = b27 #> 1*x1 + 1.513*x2 + 1*x3 = b28 #> 1*x1 + 3.17*x2 + 0*x3 = b29 #> 1*x1 + 2.77*x2 + 0*x3 = b30 #> 1*x1 + 3.57*x2 + 0*x3 = b31 #> 1*x1 + 2.78*x2 + 1*x3 = b32 showEqn(ancova, simplify=TRUE) #> x1 + 2.62*x2 = b1 #> x1 + 2.875*x2 = b2 #> x1 + 2.32*x2 + x3 = b3 #> x1 + 3.215*x2 + x3 = b4 #> x1 + 3.44*x2 = b5 #> x1 + 3.46*x2 + x3 = b6 #> x1 + 3.57*x2 = b7 #> x1 + 3.19*x2 + x3 = b8 #> x1 + 3.15*x2 + x3 = b9 #> x1 + 3.44*x2 + x3 = b10 #> x1 + 3.44*x2 + x3 = b11 #> x1 + 4.07*x2 = b12 #> x1 + 3.73*x2 = b13 #> x1 + 3.78*x2 = b14 #> x1 + 5.25*x2 = b15 #> x1 + 5.424*x2 = b16 #> x1 + 5.345*x2 = b17 #> x1 + 2.2*x2 + x3 = b18 #> x1 + 1.615*x2 + x3 = b19 #> x1 + 1.835*x2 + x3 = b20 #> x1 + 2.465*x2 + x3 = b21 #> x1 + 3.52*x2 = b22 #> x1 + 3.435*x2 = b23 #> x1 + 3.84*x2 = b24 #> x1 + 3.845*x2 = b25 #> x1 + 1.935*x2 + x3 = b26 #> x1 + 2.14*x2 = b27 #> x1 + 1.513*x2 + x3 = b28 #> x1 + 3.17*x2 = b29 #> x1 + 2.77*x2 = b30 #> x1 + 3.57*x2 = b31 #> x1 + 2.78*x2 + x3 = b32 showEqn(ancova, vars=round(coef(ancova),2)) #> 1*33 + 2.62*-4.44 + 0*3.15 = b1 #> 1*33 + 2.875*-4.44 + 0*3.15 = b2 #> 1*33 + 2.32*-4.44 + 1*3.15 = b3 #> 1*33 + 3.215*-4.44 + 1*3.15 = b4 #> 1*33 + 3.44*-4.44 + 0*3.15 = b5 #> 1*33 + 3.46*-4.44 + 1*3.15 = b6 #> 1*33 + 3.57*-4.44 + 0*3.15 = b7 #> 1*33 + 3.19*-4.44 + 1*3.15 = b8 #> 1*33 + 3.15*-4.44 + 1*3.15 = b9 #> 1*33 + 3.44*-4.44 + 1*3.15 = b10 #> 1*33 + 3.44*-4.44 + 1*3.15 = b11 #> 1*33 + 4.07*-4.44 + 0*3.15 = b12 #> 1*33 + 3.73*-4.44 + 0*3.15 = b13 #> 1*33 + 3.78*-4.44 + 0*3.15 = b14 #> 1*33 + 5.25*-4.44 + 0*3.15 = b15 #> 1*33 + 5.424*-4.44 + 0*3.15 = b16 #> 1*33 + 5.345*-4.44 + 0*3.15 = b17 #> 1*33 + 2.2*-4.44 + 1*3.15 = b18 #> 1*33 + 1.615*-4.44 + 1*3.15 = b19 #> 1*33 + 1.835*-4.44 + 1*3.15 = b20 #> 1*33 + 2.465*-4.44 + 1*3.15 = b21 #> 1*33 + 3.52*-4.44 + 0*3.15 = b22 #> 1*33 + 3.435*-4.44 + 0*3.15 = b23 #> 1*33 + 3.84*-4.44 + 0*3.15 = b24 #> 1*33 + 3.845*-4.44 + 0*3.15 = b25 #> 1*33 + 1.935*-4.44 + 1*3.15 = b26 #> 1*33 + 2.14*-4.44 + 0*3.15 = b27 #> 1*33 + 1.513*-4.44 + 1*3.15 = b28 #> 1*33 + 3.17*-4.44 + 0*3.15 = b29 #> 1*33 + 2.77*-4.44 + 0*3.15 = b30 #> 1*33 + 3.57*-4.44 + 0*3.15 = b31 #> 1*33 + 2.78*-4.44 + 1*3.15 = b32 showEqn(ancova, vars=round(coef(ancova),2), simplify=TRUE) #> 33 + 2.62*-4.44 = b1 #> 33 + 2.875*-4.44 = b2 #> 33 + 2.32*-4.44 + 3.15 = b3 #> 33 + 3.215*-4.44 + 3.15 = b4 #> 33 + 3.44*-4.44 = b5 #> 33 + 3.46*-4.44 + 3.15 = b6 #> 33 + 3.57*-4.44 = b7 #> 33 + 3.19*-4.44 + 3.15 = b8 #> 33 + 3.15*-4.44 + 3.15 = b9 #> 33 + 3.44*-4.44 + 3.15 = b10 #> 33 + 3.44*-4.44 + 3.15 = b11 #> 33 + 4.07*-4.44 = b12 #> 33 + 3.73*-4.44 = b13 #> 33 + 3.78*-4.44 = b14 #> 33 + 5.25*-4.44 = b15 #> 33 + 5.424*-4.44 = b16 #> 33 + 5.345*-4.44 = b17 #> 33 + 2.2*-4.44 + 3.15 = b18 #> 33 + 1.615*-4.44 + 3.15 = b19 #> 33 + 1.835*-4.44 + 3.15 = b20 #> 33 + 2.465*-4.44 + 3.15 = b21 #> 33 + 3.52*-4.44 = b22 #> 33 + 3.435*-4.44 = b23 #> 33 + 3.84*-4.44 = b24 #> 33 + 3.845*-4.44 = b25 #> 33 + 1.935*-4.44 + 3.15 = b26 #> 33 + 2.14*-4.44 = b27 #> 33 + 1.513*-4.44 + 3.15 = b28 #> 33 + 3.17*-4.44 = b29 #> 33 + 2.77*-4.44 = b30 #> 33 + 3.57*-4.44 = b31 #> 33 + 2.78*-4.44 + 3.15 = b32 twoway_int <- lm(mpg ~ vs * am, mtcars) summary(twoway_int) #> #> Call: #> lm(formula = mpg ~ vs * am, data = mtcars) #> #> Residuals: #> Min 1Q Median 3Q Max #> -6.971 -1.973 0.300 2.036 6.250 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 15.050 1.002 15.017 6.34e-15 *** #> vs 5.693 1.651 3.448 0.0018 ** #> am 4.700 1.736 2.708 0.0114 * #> vs:am 2.929 2.541 1.153 0.2589 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 3.472 on 28 degrees of freedom #> Multiple R-squared: 0.7003,\tAdjusted R-squared: 0.6682 #> F-statistic: 21.81 on 3 and 28 DF, p-value: 1.735e-07 #> car::Anova(twoway_int) #> Anova Table (Type II tests) #> #> Response: mpg #> Sum Sq Df F value Pr(>F) #> vs 367.41 1 30.4836 6.687e-06 *** #> am 276.03 1 22.9021 4.984e-05 *** #> vs:am 16.01 1 1.3283 0.2589 #> Residuals 337.48 28 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 showEqn(twoway_int) #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b1 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b2 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b3 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b4 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b5 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b6 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b7 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b8 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b9 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b10 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b11 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b12 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b13 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b14 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b15 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b16 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b17 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b18 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b19 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b20 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b21 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b22 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b23 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b24 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b25 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b26 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b27 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b28 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b29 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b30 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b31 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b32 showEqn(twoway_int, reduce=TRUE) #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b1 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b2 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b3 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b4 showEqn(twoway_int, reduce=TRUE, simplify=TRUE) #> x1 + x3 = b1 #> x1 + x2 + x3 + x4 = b2 #> x1 + x2 = b3 #> x1 = b4 # Piece-wise linear regression x <- c(1:10, 13:22) y <- numeric(20) y[1:10] <- 20:11 + rnorm(10, 0, 1.5) y[11:20] <- seq(11, 15, len=10) + rnorm(10, 0, 1.5) plot(x, y, pch = 16) x2 <- as.numeric(x > 10) mod <- lm(y ~ x + I((x - 10) * x2)) summary(mod) #> #> Call: #> lm(formula = y ~ x + I((x - 10) * x2)) #> #> Residuals: #> Min 1Q Median 3Q Max #> -2.4470 -0.6140 -0.4304 1.0993 2.4990 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 20.9943 0.9522 22.048 6.05e-14 *** #> x -0.9731 0.1412 -6.891 2.61e-06 *** #> I((x - 10) * x2) 1.3166 0.2203 5.977 1.50e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 1.45 on 17 degrees of freedom #> Multiple R-squared: 0.7444,\tAdjusted R-squared: 0.7143 #> F-statistic: 24.75 on 2 and 17 DF, p-value: 9.223e-06 #> lines(x, fitted(mod)) showEqn(mod) #> 1*x1 + 1*x2 + 0*x3 = b1 #> 1*x1 + 2*x2 + 0*x3 = b2 #> 1*x1 + 3*x2 + 0*x3 = b3 #> 1*x1 + 4*x2 + 0*x3 = b4 #> 1*x1 + 5*x2 + 0*x3 = b5 #> 1*x1 + 6*x2 + 0*x3 = b6 #> 1*x1 + 7*x2 + 0*x3 = b7 #> 1*x1 + 8*x2 + 0*x3 = b8 #> 1*x1 + 9*x2 + 0*x3 = b9 #> 1*x1 + 10*x2 + 0*x3 = b10 #> 1*x1 + 13*x2 + 3*x3 = b11 #> 1*x1 + 14*x2 + 4*x3 = b12 #> 1*x1 + 15*x2 + 5*x3 = b13 #> 1*x1 + 16*x2 + 6*x3 = b14 #> 1*x1 + 17*x2 + 7*x3 = b15 #> 1*x1 + 18*x2 + 8*x3 = b16 #> 1*x1 + 19*x2 + 9*x3 = b17 #> 1*x1 + 20*x2 + 10*x3 = b18 #> 1*x1 + 21*x2 + 11*x3 = b19 #> 1*x1 + 22*x2 + 12*x3 = b20 showEqn(mod, vars=round(coef(mod),2)) #> 1*20.99 + 1*-0.97 + 0*1.32 = b1 #> 1*20.99 + 2*-0.97 + 0*1.32 = b2 #> 1*20.99 + 3*-0.97 + 0*1.32 = b3 #> 1*20.99 + 4*-0.97 + 0*1.32 = b4 #> 1*20.99 + 5*-0.97 + 0*1.32 = b5 #> 1*20.99 + 6*-0.97 + 0*1.32 = b6 #> 1*20.99 + 7*-0.97 + 0*1.32 = b7 #> 1*20.99 + 8*-0.97 + 0*1.32 = b8 #> 1*20.99 + 9*-0.97 + 0*1.32 = b9 #> 1*20.99 + 10*-0.97 + 0*1.32 = b10 #> 1*20.99 + 13*-0.97 + 3*1.32 = b11 #> 1*20.99 + 14*-0.97 + 4*1.32 = b12 #> 1*20.99 + 15*-0.97 + 5*1.32 = b13 #> 1*20.99 + 16*-0.97 + 6*1.32 = b14 #> 1*20.99 + 17*-0.97 + 7*1.32 = b15 #> 1*20.99 + 18*-0.97 + 8*1.32 = b16 #> 1*20.99 + 19*-0.97 + 9*1.32 = b17 #> 1*20.99 + 20*-0.97 + 10*1.32 = b18 #> 1*20.99 + 21*-0.97 + 11*1.32 = b19 #> 1*20.99 + 22*-0.97 + 12*1.32 = b20 showEqn(mod, simplify=TRUE) #> x1 + x2 = b1 #> x1 + 2*x2 = b2 #> x1 + 3*x2 = b3 #> x1 + 4*x2 = b4 #> x1 + 5*x2 = b5 #> x1 + 6*x2 = b6 #> x1 + 7*x2 = b7 #> x1 + 8*x2 = b8 #> x1 + 9*x2 = b9 #> x1 + 10*x2 = b10 #> x1 + 13*x2 + 3*x3 = b11 #> x1 + 14*x2 + 4*x3 = b12 #> x1 + 15*x2 + 5*x3 = b13 #> x1 + 16*x2 + 6*x3 = b14 #> x1 + 17*x2 + 7*x3 = b15 #> x1 + 18*x2 + 8*x3 = b16 #> x1 + 19*x2 + 9*x3 = b17 #> x1 + 20*x2 + 10*x3 = b18 #> x1 + 21*x2 + 11*x3 = b19 #> x1 + 22*x2 + 12*x3 = b20"},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":null,"dir":"Reference","previous_headings":"","what":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"Solve equation system \\(Ax = b\\), given coefficient matrix \\(\\) right-hand side vector \\(b\\), using link{gaussianElimination}. Display solutions using showEqn.","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"","code":"Solve( A, b = rep(0, nrow(A)), vars, verbose = FALSE, simplify = TRUE, fractions = FALSE, ... )"},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":", matrix coefficients system linear equations b, vector constants right hand side equations. default vector zeros, giving homogeneous equations \\(Ax = 0\\). vars numeric character vector names variables. supplied, length must equal number unknowns equations. default paste0(\"x\", 1:ncol(). verbose, logical; show steps Gaussian elimination algorithm? simplify logical; try simplify equations? fractions logical; express numbers rational fractions, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). ..., arguments passed link{gaussianElimination} showEqn","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"function used primarily side effect printing solution readable form, invisibly returns solution character vector","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"function mimics base function solve supplied two arguments, (, b), gives prettier result, set equations solution. call solve() single argument overloads , returning inverse matrix . sense, use function inv instead.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"","code":"A1 <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b1 <- c(8, -11, -3) Solve(A1, b1) # unique solution #> x1 = 2 #> x2 = 3 #> x3 = -1 A2 <- matrix(1:9, 3, 3) b2 <- 1:3 Solve(A2, b2, fractions=TRUE) # underdetermined #> x1 - 1*x3 = 1 #> x2 + 2*x3 = 0 #> 0 = 0 b3 <- c(1, 2, 4) Solve(A2, b3, fractions=TRUE) # overdetermined #> x1 - 1*x3 = 5/3 #> x2 + 2*x3 = -1/6 #> 0 = -1/2"},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":null,"dir":"Reference","previous_headings":"","what":"Singular Value Decomposition of a Matrix — SVD","title":"Singular Value Decomposition of a Matrix — SVD","text":"Compute singular-value decomposition matrix \\(X\\) either Jacobi rotations (default) eigenstructure \\(X'X\\) using Eigen. methods iterative. result consists two orthonormal matrices, \\(U\\), \\(V\\) vector \\(d\\) singular values, \\(X = U diag(d) V'\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Singular Value Decomposition of a Matrix — SVD","text":"","code":"SVD( X, method = c(\"Jacobi\", \"eigen\"), tol = sqrt(.Machine$double.eps), max.iter = 100 )"},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Singular Value Decomposition of a Matrix — SVD","text":"X square symmetric matrix method either \"Jacobi\" (default) \"eigen\" tol zero convergence tolerance max.iter maximum number iterations","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Singular Value Decomposition of a Matrix — SVD","text":"list three elements: d-- singular values, U-- left singular vectors, V-- right singular vectors","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Singular Value Decomposition of a Matrix — SVD","text":"default method numerically stable, eigenstructure method much simpler. Singular values zero retained solution.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Singular Value Decomposition of a Matrix — SVD","text":"John Fox Georges Monette","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Singular Value Decomposition of a Matrix — SVD","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 SVD(C) #> $d #> [1] 14.93303437 1.00000000 0.06696563 #> #> $U #> [,1] [,2] [,3] #> [1,] 0.2505248 4.308756e-14 0.9681102 #> [2,] 0.5370109 8.320503e-01 -0.1389662 #> [3,] 0.8055164 -5.547002e-01 -0.2084492 #> #> $V #> [,1] [,2] [,3] #> [1,] 0.2505248 2.960306e-15 0.9681102 #> [2,] 0.5370109 8.320503e-01 -0.1389662 #> [3,] 0.8055164 -5.547002e-01 -0.2084492 #> # least squares by the SVD data(\"workers\") X <- cbind(1, as.matrix(workers[, c(\"Experience\", \"Skill\")])) head(X) #> Experience Skill #> Abby 1 0 2 #> Betty 1 5 5 #> Charles 1 5 8 #> Doreen 1 10 6 #> Ethan 1 10 10 #> Francie 1 15 7 y <- workers$Income head(y) #> [1] 20 35 40 30 50 50 (svd <- SVD(X)) #> $d #> [1] 66.864276 8.885751 1.100924 #> #> $U #> Experience Skill #> Abby 0.01366778 0.21621629 0.62512040 #> Betty 0.10046906 0.26924846 0.34867115 #> Charles 0.12007689 0.56866664 -0.06013463 #> Doreen 0.17419846 0.12266851 0.34475908 #> Ethan 0.20034223 0.52189275 -0.20031530 #> Francie 0.24792785 -0.02391144 0.34084702 #> Georges 0.34780102 0.22873284 -0.20813943 #> Harry 0.40192259 -0.21726529 0.19675429 #> Isaac 0.50179576 0.03537900 -0.35223216 #> Juan 0.55591732 -0.41061914 0.05266156 #> #> $V #> [,1] [,2] [,3] #> [1,] 0.03984368 0.1475406 0.98825314 #> [2,] 0.89856830 -0.4378649 0.02914291 #> [3,] 0.43702116 0.8868518 -0.15002142 #> VdU <- svd$V %*% diag(1/svd$d) %*%t(svd$U) (b <- VdU %*% y) #> [,1] #> [1,] 14.7808811 #> [2,] 0.1130069 #> [3,] 3.4053991 coef(lm(Income ~ Experience + Skill, data=workers)) #> (Intercept) Experience Skill #> 14.7808811 0.1130069 3.4053991"},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":null,"dir":"Reference","previous_headings":"","what":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"function draws rgl scene consisting representation identity matrix 3 x 3 matrix , together corresponding representation matrices U, D, V SVD decomposition, = U D V'.","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"","code":"svdDemo(A, shape = c(\"cube\", \"sphere\"), alpha = 0.7, col = rainbow(6))"},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"3 x 3 numeric matrix shape Basic shape used represent identity matrix: \"cube\" \"sphere\" alpha transparency value used draw shape col Vector 6 colors faces basic cube","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"Nothing","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"Original idea Duncan Murdoch","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"3D plot","code":"A <- matrix(c(1,2,0.1, 0.1,1,0.1, 0.1,0.1,0.5), 3,3) svdDemo(A) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":182,\"objects\":{\"200\":{\"id\":200,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"0\",\"colors\":\"2\",\"centers\":\"3\",\"normals\":\"1\",\"ignoreExtent\":false,\"flags\":32811},\"201\":{\"id\":201,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"4\",\"colors\":\"5\",\"centers\":\"6\",\"ignoreExtent\":false,\"flags\":41024},\"202\":{\"id\":202,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"203\":{\"id\":203,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"204\":{\"id\":204,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"205\":{\"id\":205,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"19\",\"colors\":\"21\",\"centers\":\"22\",\"normals\":\"20\",\"ignoreExtent\":false,\"flags\":32771},\"206\":{\"id\":206,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"23\",\"colors\":\"25\",\"centers\":\"26\",\"normals\":\"24\",\"ignoreExtent\":false,\"flags\":32771},\"207\":{\"id\":207,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"27\",\"colors\":\"29\",\"centers\":\"30\",\"normals\":\"28\",\"ignoreExtent\":false,\"flags\":32771},\"208\":{\"id\":208,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"31\",\"colors\":\"32\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"33\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"209\":{\"id\":209,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"34\",\"colors\":\"35\",\"texts\":[[\"Identity\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"36\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"210\":{\"id\":210,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"37\",\"colors\":\"39\",\"centers\":\"40\",\"normals\":\"38\",\"ignoreExtent\":false,\"flags\":32811},\"211\":{\"id\":211,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"41\",\"colors\":\"42\",\"centers\":\"43\",\"ignoreExtent\":false,\"flags\":41024},\"212\":{\"id\":212,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"44\",\"colors\":\"46\",\"centers\":\"47\",\"normals\":\"45\",\"ignoreExtent\":false,\"flags\":32771},\"213\":{\"id\":213,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"48\",\"colors\":\"50\",\"centers\":\"51\",\"normals\":\"49\",\"ignoreExtent\":false,\"flags\":32771},\"214\":{\"id\":214,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"52\",\"colors\":\"54\",\"centers\":\"55\",\"normals\":\"53\",\"ignoreExtent\":false,\"flags\":32771},\"215\":{\"id\":215,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"56\",\"colors\":\"58\",\"centers\":\"59\",\"normals\":\"57\",\"ignoreExtent\":false,\"flags\":32771},\"216\":{\"id\":216,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"60\",\"colors\":\"62\",\"centers\":\"63\",\"normals\":\"61\",\"ignoreExtent\":false,\"flags\":32771},\"217\":{\"id\":217,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"64\",\"colors\":\"66\",\"centers\":\"67\",\"normals\":\"65\",\"ignoreExtent\":false,\"flags\":32771},\"218\":{\"id\":218,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"68\",\"colors\":\"69\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"70\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"219\":{\"id\":219,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"71\",\"colors\":\"72\",\"texts\":[[\"A\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"73\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"220\":{\"id\":220,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"74\",\"colors\":\"76\",\"centers\":\"77\",\"normals\":\"75\",\"ignoreExtent\":false,\"flags\":32811},\"221\":{\"id\":221,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"78\",\"colors\":\"79\",\"centers\":\"80\",\"ignoreExtent\":false,\"flags\":41024},\"222\":{\"id\":222,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"81\",\"colors\":\"83\",\"centers\":\"84\",\"normals\":\"82\",\"ignoreExtent\":false,\"flags\":32771},\"223\":{\"id\":223,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"85\",\"colors\":\"87\",\"centers\":\"88\",\"normals\":\"86\",\"ignoreExtent\":false,\"flags\":32771},\"224\":{\"id\":224,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"89\",\"colors\":\"91\",\"centers\":\"92\",\"normals\":\"90\",\"ignoreExtent\":false,\"flags\":32771},\"225\":{\"id\":225,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"93\",\"colors\":\"95\",\"centers\":\"96\",\"normals\":\"94\",\"ignoreExtent\":false,\"flags\":32771},\"226\":{\"id\":226,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"97\",\"colors\":\"99\",\"centers\":\"100\",\"normals\":\"98\",\"ignoreExtent\":false,\"flags\":32771},\"227\":{\"id\":227,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"101\",\"colors\":\"103\",\"centers\":\"104\",\"normals\":\"102\",\"ignoreExtent\":false,\"flags\":32771},\"228\":{\"id\":228,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"105\",\"colors\":\"106\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"107\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"229\":{\"id\":229,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"108\",\"colors\":\"109\",\"texts\":[[\"U\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"110\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"230\":{\"id\":230,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"111\",\"colors\":\"113\",\"centers\":\"114\",\"normals\":\"112\",\"ignoreExtent\":false,\"flags\":32811},\"231\":{\"id\":231,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"115\",\"colors\":\"116\",\"centers\":\"117\",\"ignoreExtent\":false,\"flags\":41024},\"232\":{\"id\":232,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"118\",\"colors\":\"120\",\"centers\":\"121\",\"normals\":\"119\",\"ignoreExtent\":false,\"flags\":32771},\"233\":{\"id\":233,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"122\",\"colors\":\"124\",\"centers\":\"125\",\"normals\":\"123\",\"ignoreExtent\":false,\"flags\":32771},\"234\":{\"id\":234,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"126\",\"colors\":\"128\",\"centers\":\"129\",\"normals\":\"127\",\"ignoreExtent\":false,\"flags\":32771},\"235\":{\"id\":235,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"130\",\"colors\":\"132\",\"centers\":\"133\",\"normals\":\"131\",\"ignoreExtent\":false,\"flags\":32771},\"236\":{\"id\":236,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"134\",\"colors\":\"136\",\"centers\":\"137\",\"normals\":\"135\",\"ignoreExtent\":false,\"flags\":32771},\"237\":{\"id\":237,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"138\",\"colors\":\"140\",\"centers\":\"141\",\"normals\":\"139\",\"ignoreExtent\":false,\"flags\":32771},\"238\":{\"id\":238,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"142\",\"colors\":\"143\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"144\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"239\":{\"id\":239,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"145\",\"colors\":\"146\",\"texts\":[[\"D\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"147\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"240\":{\"id\":240,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"148\",\"colors\":\"150\",\"centers\":\"151\",\"normals\":\"149\",\"ignoreExtent\":false,\"flags\":32811},\"241\":{\"id\":241,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"152\",\"colors\":\"153\",\"centers\":\"154\",\"ignoreExtent\":false,\"flags\":41024},\"242\":{\"id\":242,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"155\",\"colors\":\"157\",\"centers\":\"158\",\"normals\":\"156\",\"ignoreExtent\":false,\"flags\":32771},\"243\":{\"id\":243,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"159\",\"colors\":\"161\",\"centers\":\"162\",\"normals\":\"160\",\"ignoreExtent\":false,\"flags\":32771},\"244\":{\"id\":244,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"163\",\"colors\":\"165\",\"centers\":\"166\",\"normals\":\"164\",\"ignoreExtent\":false,\"flags\":32771},\"245\":{\"id\":245,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"167\",\"colors\":\"169\",\"centers\":\"170\",\"normals\":\"168\",\"ignoreExtent\":false,\"flags\":32771},\"246\":{\"id\":246,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"171\",\"colors\":\"173\",\"centers\":\"174\",\"normals\":\"172\",\"ignoreExtent\":false,\"flags\":32771},\"247\":{\"id\":247,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"175\",\"colors\":\"177\",\"centers\":\"178\",\"normals\":\"176\",\"ignoreExtent\":false,\"flags\":32771},\"248\":{\"id\":248,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"179\",\"colors\":\"180\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"181\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"249\":{\"id\":249,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"182\",\"colors\":\"183\",\"texts\":[[\"V\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"184\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"186\":{\"id\":186,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"185\":{\"id\":185,\"type\":\"background\",\"material\":{},\"colors\":\"185\",\"centers\":\"186\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"187\":{\"id\":187,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"187\",\"centers\":\"188\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"188\":{\"id\":188,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,8.030556678771973],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-8.030556678771973],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419755935669,0,0],[0,0,-3.863703489303589,-28.94922828674316],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0.625,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.200000047683716,1.200000047683716,-1.200000047683716,1.200000047683716,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[200,201,202,203,204,205,206,207,208,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"189\":{\"id\":189,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0.5,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[209,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"190\":{\"id\":190,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,823.132080078125],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-823.132080078125],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419994354248,0,0],[0,0,-3.863703727722168,-2967.29638671875],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0.625,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[123,-123,123,-123,123,-123],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":186,\"parent\":182,\"subscenes\":[],\"flags\":256},\"191\":{\"id\":191,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,823.132080078125],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-823.132080078125],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703727722168,-2967.29638671875],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0.5,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[123,-123,123,-123,123,-123],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":186,\"parent\":182,\"subscenes\":[],\"flags\":256},\"192\":{\"id\":192,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,13.65478897094727],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-13.65478897094727],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.304420232772827,0,0],[0,0,-3.863703727722168,-49.22393798828125],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0.625,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.200000047683716,1.200000047683716,-3.099999904632568,3.099999904632568,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[210,211,212,213,214,215,216,217,218,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"193\":{\"id\":193,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0.5,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[219,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"194\":{\"id\":194,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,8.803891181945801],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-8.803891181945801],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419994354248,0,0],[0,0,-3.863702774047852,-31.73700332641602],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0.125,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.344589829444885,1.344589829444885,-1.394332528114319,1.394332528114319,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[220,221,222,223,224,225,226,227,228,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"195\":{\"id\":195,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[229,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"196\":{\"id\":196,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,11.47779846191406],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-11.47779846191406],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419755935669,0,0],[0,0,-3.863703489303589,-41.37614059448242],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0.125,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-2.438215970993042,2.438215970993042,-1.200000047683716,1.200000047683716,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[230,231,232,233,234,235,236,237,238,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"197\":{\"id\":197,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[239,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"198\":{\"id\":198,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,8.803891181945801],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-8.803891181945801],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419994354248,0,0],[0,0,-3.863702774047852,-31.73700332641602],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0.125,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.394332528114319,1.394332528114319,-1.344589829444885,1.344589829444885,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[240,241,242,243,244,245,246,247,248,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"199\":{\"id\":199,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[249,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"182\":{\"id\":182,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":182,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,823.132080078125],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-823.132080078125],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703727722168,-2967.29638671875],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[123,-123,123,-123,123,-123],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[187,186,188,189,190,191,192,193,194,195,196,197,198,199],\"subscenes\":[188,189,190,191,192,193,194,195,196,197,198,199],\"flags\":42363}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5120,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5120,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":2,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":3,\"componentType\":5120,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":6,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":21,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":22,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":25,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":26,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":28,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":30,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":31,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":32,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":33,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":34,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":35,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":36,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":37,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":38,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":40,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":41,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":43,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":44,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":46,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":47,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":49,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":50,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":51,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":53,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":54,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":55,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":56,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":57,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":58,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":59,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":60,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":61,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":62,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":63,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":64,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":65,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":66,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":67,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":68,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":69,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":70,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":71,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":72,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":73,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":74,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":75,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":76,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":77,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":78,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":79,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":80,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":81,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":82,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":83,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":84,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":85,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":86,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":87,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":88,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":89,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":90,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":91,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":92,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":93,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":94,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":95,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":96,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":97,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":98,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":99,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":100,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":101,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":102,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":103,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":104,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":105,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":106,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":107,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":108,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":109,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":110,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":111,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":112,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":113,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":114,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":115,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":116,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":117,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":118,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":119,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":120,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":121,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":122,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":123,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":124,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":125,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":126,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":127,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":128,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":129,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":130,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":131,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":132,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":133,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":134,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":135,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":136,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":137,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":138,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":139,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":140,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":141,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":142,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":143,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":144,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":145,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":146,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":147,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":148,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":149,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":150,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":151,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":152,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":153,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":154,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":155,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":156,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":157,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":158,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":159,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":160,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":161,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":162,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":163,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":164,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":165,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":166,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":167,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":168,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":169,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":170,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":171,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":172,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":173,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":174,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":175,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":176,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":177,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":178,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":179,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":180,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":181,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":182,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":183,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":184,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":185,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":186,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":187,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":188,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":72,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":72},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":144},{\"buffer\":0,\"byteLength\":18,\"byteOffset\":240},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":258},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":294},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":300},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":372},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1020},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":1668},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1684},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1900},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2548},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":3196},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3212},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3428},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4076},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":4724},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4740},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4956},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5604},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":6252},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6268},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":6484},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":7132},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7296},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":7312},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":7528},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":8176},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":8824},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":8840},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":9056},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9200},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":9204},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9348},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9351},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9355},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":9360},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":9648},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":9936},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":10032},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":10104},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":10140},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":10144},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":10216},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":10864},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":11512},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":11528},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":11744},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":12392},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":13040},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":13056},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":13272},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":13920},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":14568},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":14584},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":14800},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":15448},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":16096},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":16112},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":16328},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":16976},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":17140},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":17156},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":17372},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":18020},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":18668},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":18684},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":18900},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":19044},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":19048},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":19192},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":19195},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":19199},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":19204},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":19492},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":19780},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":19876},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":19948},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":19984},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":19988},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":20060},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":20708},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":21356},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":21372},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":21588},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":22236},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":22884},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":22900},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":23116},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":23764},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":24412},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":24428},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":24644},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":25292},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":25940},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":25956},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":26172},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":26820},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":26984},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":27000},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":27216},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":27864},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":28512},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":28528},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":28744},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":28888},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":28892},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":29036},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":29039},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":29043},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":29048},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":29336},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":29624},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":29720},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":29792},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":29828},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":29832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":29904},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":30552},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":31200},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":31216},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":31432},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":32080},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":32728},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":32744},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":32960},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":33608},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":34256},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":34272},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":34488},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":35136},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":35784},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":35800},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":36016},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":36664},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":36828},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":36844},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":37060},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":37708},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":38356},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":38372},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":38588},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":38732},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":38736},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":38880},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":38883},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":38887},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":38892},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":39180},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":39468},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":39564},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":39636},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":39672},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":39676},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":39748},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":40396},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":41044},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":41060},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":41276},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":41924},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":42572},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":42588},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":42804},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":43452},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":44100},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":44116},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":44332},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":44980},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":45628},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":45644},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":45860},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":46508},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":46672},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":46688},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":46904},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":47552},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":48200},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":48216},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":48432},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":48576},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":48580},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48724},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":48727},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48731},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":48736},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48752},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":48755},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48759}],\"buffers\":[{\"byteLength\":48762,\"bytes\":\"/////wH/AQH/Af///wH//wEBAQEBAQH/Af//AQH/AQEBAf8B//////8B/wEB/wH/////Af//\\nAf8B//8B//8BAf8BAQEB/wEBAAD/AAD/AAD/AAD/AAEAAAEAAAEAAAEAAQAAAQAAAQAAAQAA\\n/wAA/wAA/wAA/wAAAP8AAP8AAP8AAP8AAAABAAABAAABAAAB/wAAsv8AALL/AACy/wAAsv8A\\nALL//wCy//8Asv8AALL/AACy/wAAsv//ALL//wCy/wAAsv//ALL//wCy/wAAsv8AALL/AACy\\n//8Asv//ALL//wCy//8Asv//ALL//wCyAAD/AAEAAQAA/wAAAP8AAAABAAAAAQAAAAAAAAEA\\nAAAAAAABAAAA/wAAAAAAAP8AAAAAAAD/AAAAAQAAAAAAPwAAAAAAAAAAAAAAAAAAAD8AAAAA\\nAAAAAAAAAAAAAAA/AAAAvwAAAAAAAAAAAAAAAAAAAL8AAAAAAAAAAAAAAAAAAAC/zcxMPwAA\\nAAAAAAAAzcxMPwAAAADNzEw9zcxMP5WkA73K4hw9zcxMPwAAAAAAAAAAzcxMP5WkA73K4hw9\\nzcxMP0qwSb2qQA48zcxMPwAAAAAAAAAAzcxMP0qwSb2qQA48zcxMP6xcMb3NzMy8zcxMPwAA\\nAAAAAAAAzcxMP6xcMb3NzMy8zcxMP2kXjLz1ckC9zcxMPwAAAAAAAAAAzcxMP2kXjLz1ckC9\\nzcxMP2kXjDz1ckC9zcxMPwAAAAAAAAAAzcxMP2kXjDz1ckC9zcxMP6xcMT3NzMy8zcxMPwAA\\nAAAAAAAAzcxMP6xcMT3NzMy8zcxMP0qwST2qQA48zcxMPwAAAAAAAAAAzcxMP0qwST2qQA48\\nzcxMP5WkAz3K4hw9zcxMPwAAAAAAAAAAzcxMP5WkAz3K4hw9zcxMP2bmYSPNzEw9AACAP2bm\\nYSMAAAAAzcxMPwAAAADNzEw9zcxMP5WkA73K4hw9AACAP2bmYSMAAAAAzcxMP5WkA73K4hw9\\nzcxMP0qwSb2qQA48AACAP2bmYSMAAAAAzcxMP0qwSb2qQA48zcxMP6xcMb3NzMy8AACAP2bm\\nYSMAAAAAzcxMP6xcMb3NzMy8zcxMP2kXjLz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjLz1ckC9\\nzcxMP2kXjDz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjDz1ckC9zcxMP6xcMT3NzMy8AACAP2bm\\nYSMAAAAAzcxMP6xcMT3NzMy8zcxMP0qwST2qQA48AACAP2bmYSMAAAAAzcxMP0qwST2qQA48\\nzcxMP5WkAz3K4hw9AACAP2bmYSMAAAAAzcxMP5WkAz3K4hw9zcxMP2bmYSPNzEw9AACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAA\\nAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAli9qPjF5\\nqr6VL2o/li9qPjF5qr6VL2o/li9qPjF5qr6VL2o/lS9qPqzTV78mN/k+lS9qPqzTV78mN/k+\\nlS9qPqzTV78mN/k+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+lS9qPk0x\\nIL/76D6/lS9qPk0xIL/76D6/lS9qPk0xIL/76D6/lS9qPgAAAAAkN3m/lS9qPgAAAAAkN3m/\\nlS9qPgAAAAAkN3m/lC9qPksxID/56D6/lC9qPksxID/56D6/lC9qPksxID/56D6/li9qPuRt\\ndT9tGi2+li9qPuRtdT9tGi2+li9qPuRtdT9tGi2+lS9qPqzTVz8mN/k+lS9qPqzTVz8mN/k+\\nlS9qPqzTVz8mN/k+li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/v74+P7++\\nPj+/vj4/AACAP87MTD8chi+8ux/xPM7MTD+WON68o0yAPM7MTD9Ps/y8Szuyu87MTD9A8KS8\\n6JDEvM7MTD8AAAAApEwAvc7MTD9A8KQ86JDEvM7MTD9Ps/w8Szuyu87MTD+WON48o0yAPM7M\\nTD8chi88ux/xPN7dXT8chi+8ux/xPN7dXT+WON68o0yAPN7dXT9Ps/y8Szuyu97dXT9A8KS8\\n6JDEvN7dXT8AAAAApEwAvd7dXT9A8KQ86JDEvN7dXT9Ps/w8Szuyu97dXT+WON48o0yAPN7d\\nXT8chi88ux/xPAAAAADNzEw/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAADNzEw/\\nAAAAAJWkAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAADNzEw/AAAAAEqwST3NzEw/qkAOPKxc\\nMT3NzEw/zczMvAAAAADNzEw/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAADNzEw/\\nAAAAAGkXjDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAADNzEw/AAAAAGkXjLzNzEw/9XJAvaxc\\nMb3NzEw/zczMvAAAAADNzEw/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAADNzEw/\\nAAAAAEqwSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAADNzEw/AAAAAJWkA73NzEw/yuIcPWbm\\nYaPNzEw/zcxMPQAAAAAAAIA/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAAAAAIA/\\nAAAAAJWkAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAAAAAIA/AAAAAEqwST3NzEw/qkAOPKxc\\nMT3NzEw/zczMvAAAAAAAAIA/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAAAAAIA/\\nAAAAAGkXjDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAAAAAIA/AAAAAGkXjLzNzEw/9XJAvaxc\\nMb3NzEw/zczMvAAAAAAAAIA/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAAAAAIA/\\nAAAAAEqwSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAAAAAIA/AAAAAJWkA73NzEw/yuIcPWbm\\nYaPNzEw/zcxMPQAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAA\\nAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAIAAAIA/\\nAAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAA\\nAIAAAIA/AAAAADF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qP6zTVz+VL2o+\\nJjf5PqzTVz+VL2o+Jjf5PqzTVz+VL2o+Jjf5PuRtdT+WL2o+bRotvuRtdT+WL2o+bRotvuRt\\ndT+WL2o+bRotvk0xID+VL2o+++g+v00xID+VL2o+++g+v00xID+VL2o+++g+vwAAAACVL2o+\\nJDd5vwAAAACVL2o+JDd5vwAAAACVL2o+JDd5v0sxIL+UL2o++eg+v0sxIL+UL2o++eg+v0sx\\nIL+UL2o++eg+v+Rtdb+WL2o+bRotvuRtdb+WL2o+bRotvuRtdb+WL2o+bRotvqzTV7+VL2o+\\nJjf5PqzTV7+VL2o+Jjf5PqzTV7+VL2o+Jjf5PjF5qr6WL2o+lS9qPzF5qr6WL2o+lS9qPzF5\\nqr6WL2o+lS9qP7++Pj+/vj4/v74+PwAAgD8chi88zsxMP7sf8TyWON48zsxMP6NMgDxPs/w8\\nzsxMP0s7srtA8KQ8zsxMP+iQxLwAAAAAzsxMP6RMAL1A8KS8zsxMP+iQxLxPs/y8zsxMP0s7\\nsruWON68zsxMP6NMgDwchi+8zsxMP7sf8Twchi883t1dP7sf8TyWON483t1dP6NMgDxPs/w8\\n3t1dP0s7srtA8KQ83t1dP+iQxLwAAAAA3t1dP6RMAL1A8KS83t1dP+iQxLxPs/y83t1dP0s7\\nsruWON683t1dP6NMgDwchi+83t1dP7sf8TwAAAAAAAAAAM3MTD8AAAAAzcxMvc3MTD+VpAM9\\nyuIcvc3MTD8AAAAAAAAAAM3MTD+VpAM9yuIcvc3MTD9KsEk9qkAOvM3MTD8AAAAAAAAAAM3M\\nTD9KsEk9qkAOvM3MTD+sXDE9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDE9zczMPM3MTD9pF4w8\\n9XJAPc3MTD8AAAAAAAAAAM3MTD9pF4w89XJAPc3MTD9pF4y89XJAPc3MTD8AAAAAAAAAAM3M\\nTD9pF4y89XJAPc3MTD+sXDG9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDG9zczMPM3MTD9KsEm9\\n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\\nzcxMv6xcMb3NzMy8zcxMv0qwSb2qQA48AACAv2bmYSMAAAAAzcxMv0qwSb2qQA48zcxMv5Wk\\nA73K4hw9AACAv2bmYSMAAAAAzcxMv5WkA73K4hw9zcxMv2bmYaPNzEw9AACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAA\\nAAAAAACAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAAAA\\nAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAli9qvjF5qj6VL2o/\\nli9qvjF5qj6VL2o/li9qvjF5qj6VL2o/lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzT\\nVz8mN/k+li9qvuRtdT9tGi2+li9qvuRtdT9tGi2+li9qvuRtdT9tGi2+lS9qvk0xID/76D6/\\nlS9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAA\\nAIAkN3m/lC9qvksxIL/56D6/lC9qvksxIL/56D6/lC9qvksxIL/56D6/li9qvuRtdb9tGi2+\\nli9qvuRtdb9tGi2+li9qvuRtdb9tGi2+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvqzT\\nV78mN/k+li9qvjF5qr6VL2o/li9qvjF5qr6VL2o/li9qvjF5qr6VL2o/v74+P7++Pj+/vj4/\\nAACAP87MTL8chi88ux/xPM7MTL+WON48o0yAPM7MTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7M\\nTL8AAAAApEwAvc7MTL9A8KS86JDEvM7MTL9Ps/y8Szuyu87MTL+WON68o0yAPM7MTL8chi+8\\nux/xPN7dXb8chi88ux/xPN7dXb+WON48o0yAPN7dXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7d\\nXb8AAAAApEwAvd7dXb9A8KS86JDEvN7dXb9Ps/y8Szuyu97dXb+WON68o0yAPN7dXb8chi+8\\nux/xPAAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAv74+P7++Pj+/vj4/AACAPwAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAAAAAAAAAzcxMvwAAAADNzEw9zcxMv5WkAz3K4hw9\\nzcxMvwAAAAAAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAAAAAAAAzcxMv0qw\\nST2qQA48zcxMv6xcMT3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMT3NzMy8zcxMv2kXjDz1ckC9\\nzcxMvwAAAAAAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAAAAAAAAzcxMv2kX\\njLz1ckC9zcxMv6xcMb3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMb3NzMy8zcxMv0qwSb2qQA48\\nzcxMvwAAAAAAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAAAAAAAAzcxMv5Wk\\nA73K4hw9zcxMv2bmYaPNzEw9zcxMvwAAAABm5mEjAACAvwAAAADNzEw9zcxMv5WkAz3K4hw9\\nzcxMvwAAAABm5mEjAACAv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAABm5mEjAACAv0qw\\nST2qQA48zcxMv6xcMT3NzMy8zcxMvwAAAABm5mEjAACAv6xcMT3NzMy8zcxMv2kXjDz1ckC9\\nzcxMvwAAAABm5mEjAACAv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAABm5mEjAACAv2kX\\njLz1ckC9zcxMv6xcMb3NzMy8zcxMvwAAAABm5mEjAACAv6xcMb3NzMy8zcxMv0qwSb2qQA48\\nzcxMvwAAAABm5mEjAACAv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAABm5mEjAACAv5Wk\\nA73K4hw9zcxMv2bmYaPNzEw9zcxMvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvzF5qj6VL2o/li9qvjF5qj6VL2o/li9qvjF5qj6VL2o/\\nli9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvuRtdT9tGi2+li9qvuRt\\ndT9tGi2+li9qvuRtdT9tGi2+li9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvk0xID/76D6/\\nlS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvk0xIL/76D6/li9qvk0x\\nIL/76D6/li9qvk0xIL/76D6/li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+\\nli9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvjF5qr6VL2o/li9qvjF5\\nqr6VL2o/li9qvjF5qr6VL2o/li9qvr++Pj+/vj4/v74+PwAAgD8chi88ux/xPM7MTL+WON48\\no0yAPM7MTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7MTL8AAAAApEwAvc7MTL9A8KS86JDEvM7M\\nTL9Ps/y8Szuyu87MTL+WON68o0yAPM7MTL8chi+8ux/xPM7MTL8chi88ux/xPN7dXb+WON48\\no0yAPN7dXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7dXb8AAAAApEwAvd7dXb9A8KS86JDEvN7d\\nXb9Ps/y8Szuyu97dXb+WON68o0yAPN7dXb8chi+8ux/xPN7dXb8AAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAACamZk/AAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAAAAAAAJqZmT+amZm/AAAAAAAAAAAAAAAA\\nmpmZvwAAAAAAAAAAAAAAAJqZmb8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAA\\nAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/mpmZvwAAAAAAAAAAAAAAAJqZmb8AAAAAAAAAAAAA\\nAACamZm/AAAAAAAAAQAAAAAAmpmZv2ZmRsAzMzO/AACAv83MjL8AAAC/AACAP5qZOUCamZm+\\nzcxMP2ZmZj8AAAC/AACAv83MjL8AAAC/zcxMv2ZmZr8AAAA/mpmZP2ZmRkAzMzM/AACAP5qZ\\nOUCamZm+zcxMP2ZmZj8AAAC/AACAP5qZOUCamZm+mpmZP2ZmRkAzMzM/AACAP83MjD8AAAA/\\nmpmZv2ZmRsAzMzO/AACAv5qZOcCamZk+zcxMv2ZmZr8AAAA/AACAv83MjL8AAAC/mpmZv2Zm\\nRsAzMzO/zcxMP2ZmZj8AAAC/AACAP83MjD8AAAA/AACAv5qZOcCamZk+AACAv5qZOcCamZk+\\nAACAP83MjD8AAAA/mpmZP2ZmRkAzMzM/zcxMv2ZmZr8AAAA/f3T8vaM14z18dHy/f3T8vaM1\\n4z18dHy/f3T8vaM14z18dHy/f3T8vaM14z18dHy/JYBkv0cx4j6Ypbg9JYBkv0cx4j6Ypbg9\\nJYBkv0cx4j6Ypbg9JYBkv0cx4j6Ypbg9/Pp6P9Lno73SZDi+/Pp6P9Lno73SZDi+/Pp6P9Ln\\no73SZDi+/Pp6P9Lno73SZDi+/Pp6v9Lnoz3SZDg+/Pp6v9Lnoz3SZDg+/Pp6v9Lnoz3SZDg+\\n/Pp6v9Lnoz3SZDg+JYBkP0cx4r6Ypbi9JYBkP0cx4r6Ypbi9JYBkP0cx4r6Ypbi9JYBkP0cx\\n4r6Ypbi9f3T8PaM14718dHw/f3T8PaM14718dHw/f3T8PaM14718dHw/f3T8PaM14718dHw/\\n/wAAsv8AALL/AACy/wAAsv8AALL//wCy//8Asv8AALL/AACy/wAAsv//ALL//wCy/wAAsv//\\nALL//wCy/wAAsv8AALL/AACy//8Asv//ALL//wCy//8Asv//ALL//wCyzszMvcTMzL0AAAC/\\n0MzMPQAAgD/MzMw9AACAPwAAAEDMzMw9AACAvwAAAMDMzMy9zszMvQAAgL/OzMy9zszMPcjM\\nzD0AAAA/AAAAAQAAAAAAAAEAAAAAAAABAAAA/wAAAAAAAP8AAAAAAAD/AAAAAQAAAD8AAAAA\\nAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAPwAAAL8AAAAAAAAAAAAAAAAAAAC/AAAAAAAA\\nAAAAAAAAAAAAv83MTD8AAAAAAAAAAM3MTD8AAAAAzcxMPc3MTD+VpAO9yuIcPc3MTD8AAAAA\\nAAAAAM3MTD+VpAO9yuIcPc3MTD9KsEm9qkAOPM3MTD8AAAAAAAAAAM3MTD9KsEm9qkAOPM3M\\nTD+sXDG9zczMvM3MTD8AAAAAAAAAAM3MTD+sXDG9zczMvM3MTD9pF4y89XJAvc3MTD8AAAAA\\nAAAAAM3MTD9pF4y89XJAvc3MTD9pF4w89XJAvc3MTD8AAAAAAAAAAM3MTD9pF4w89XJAvc3M\\nTD+sXDE9zczMvM3MTD8AAAAAAAAAAM3MTD+sXDE9zczMvM3MTD9KsEk9qkAOPM3MTD8AAAAA\\nAAAAAM3MTD9KsEk9qkAOPM3MTD+VpAM9yuIcPc3MTD8AAAAAAAAAAM3MTD+VpAM9yuIcPc3M\\nTD9m5mEjzcxMPQAAgD9m5mEjAAAAAM3MTD8AAAAAzcxMPc3MTD+VpAO9yuIcPQAAgD9m5mEj\\nAAAAAM3MTD+VpAO9yuIcPc3MTD9KsEm9qkAOPAAAgD9m5mEjAAAAAM3MTD9KsEm9qkAOPM3M\\nTD+sXDG9zczMvAAAgD9m5mEjAAAAAM3MTD+sXDG9zczMvM3MTD9pF4y89XJAvQAAgD9m5mEj\\nAAAAAM3MTD9pF4y89XJAvc3MTD9pF4w89XJAvQAAgD9m5mEjAAAAAM3MTD9pF4w89XJAvc3M\\nTD+sXDE9zczMvAAAgD9m5mEjAAAAAM3MTD+sXDE9zczMvM3MTD9KsEk9qkAOPAAAgD9m5mEj\\nAAAAAM3MTD9KsEk9qkAOPM3MTD+VpAM9yuIcPQAAgD9m5mEjAAAAAM3MTD+VpAM9yuIcPc3M\\nTD9m5mEjzcxMPQAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAJYvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Uvaj6s01e/\\nJjf5PpUvaj6s01e/Jjf5PpUvaj6s01e/Jjf5PpYvaj7kbXW/bRotvpYvaj7kbXW/bRotvpYv\\naj7kbXW/bRotvpUvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj4AAAAA\\nJDd5v5Uvaj4AAAAAJDd5v5Uvaj4AAAAAJDd5v5Qvaj5LMSA/+eg+v5Qvaj5LMSA/+eg+v5Qv\\naj5LMSA/+eg+v5Yvaj7kbXU/bRotvpYvaj7kbXU/bRotvpYvaj7kbXU/bRotvpUvaj6s01c/\\nJjf5PpUvaj6s01c/Jjf5PpUvaj6s01c/Jjf5PpYvaj4xeao+lS9qP5Yvaj4xeao+lS9qP5Yv\\naj4xeao+lS9qP7++Pj+/vj4/v74+PwAAgD/OzEw/HIYvvLsf8TzOzEw/ljjevKNMgDzOzEw/\\nT7P8vEs7srvOzEw/QPCkvOiQxLzOzEw/AAAAAKRMAL3OzEw/QPCkPOiQxLzOzEw/T7P8PEs7\\nsrvOzEw/ljjePKNMgDzOzEw/HIYvPLsf8Tze3V0/HIYvvLsf8Tze3V0/ljjevKNMgDze3V0/\\nT7P8vEs7srve3V0/QPCkvOiQxLze3V0/AAAAAKRMAL3e3V0/QPCkPOiQxLze3V0/T7P8PEs7\\nsrve3V0/ljjePKNMgDze3V0/HIYvPLsf8TwAAAAAzcxMPwAAAAAAAAAAzcxMP83MTD2VpAM9\\nzcxMP8riHD0AAAAAzcxMPwAAAACVpAM9zcxMP8riHD1KsEk9zcxMP6pADjwAAAAAzcxMPwAA\\nAABKsEk9zcxMP6pADjysXDE9zcxMP83MzLwAAAAAzcxMPwAAAACsXDE9zcxMP83MzLxpF4w8\\nzcxMP/VyQL0AAAAAzcxMPwAAAABpF4w8zcxMP/VyQL1pF4y8zcxMP/VyQL0AAAAAzcxMPwAA\\n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\\nQD3NzEw/AAAAAGbmYSMAAIA/aReMvPVyQD3NzEw/rFwxvc3MzDzNzEw/AAAAAGbmYSMAAIA/\\nrFwxvc3MzDzNzEw/SrBJvapADrzNzEw/AAAAAGbmYSMAAIA/SrBJvapADrzNzEw/laQDvcri\\nHL3NzEw/AAAAAGbmYSMAAIA/laQDvcriHL3NzEw/ZuZho83MTL3NzEw/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAA\\nAIAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAA\\nAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/MXmqPpUvar+WL2o+\\nMXmqPpUvar+WL2o+MXmqPpUvar+WL2o+rNNXPyY3+b6VL2o+rNNXPyY3+b6VL2o+rNNXPyY3\\n+b6VL2o+5G11P20aLT6WL2o+5G11P20aLT6WL2o+5G11P20aLT6WL2o+TTEgP/voPj+VL2o+\\nTTEgP/voPj+VL2o+TTEgP/voPj+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3\\neT+VL2o+TTEgv/voPj+WL2o+TTEgv/voPj+WL2o+TTEgv/voPj+WL2o+5G11v20aLT6WL2o+\\n5G11v20aLT6WL2o+5G11v20aLT6WL2o+rNNXvyY3+b6VL2o+rNNXvyY3+b6VL2o+rNNXvyY3\\n+b6VL2o+MXmqvpUvar+WL2o+MXmqvpUvar+WL2o+MXmqvpUvar+WL2o+v74+P7++Pj+/vj4/\\nAACAPxyGLzy7H/G8zsxMP5Y43jyjTIC8zsxMP0+z/DxLO7I7zsxMP0DwpDzokMQ8zsxMPwAA\\nAACkTAA9zsxMP0DwpLzokMQ8zsxMP0+z/LxLO7I7zsxMP5Y43ryjTIC8zsxMPxyGL7y7H/G8\\nzsxMPxyGLzy7H/G83t1dP5Y43jyjTIC83t1dP0+z/DxLO7I73t1dP0DwpDzokMQ83t1dPwAA\\nAACkTAA93t1dP0DwpLzokMQ83t1dP0+z/LxLO7I73t1dP5Y43ryjTIC83t1dPxyGL7y7H/G8\\n3t1dP83MTL8AAAAAAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3M\\nTL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9\\nzczMvM3MTL8AAAAAAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3M\\nTL9pF4w89XJAvc3MTL9pF4y89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9\\nzczMvM3MTL8AAAAAAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3M\\nTL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGj\\nzcxMPQAAgL9m5mEjAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPQAAgL9m5mEjAAAAAM3M\\nTL+VpAM9yuIcPc3MTL9KsEk9qkAOPAAAgL9m5mEjAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9\\nzczMvAAAgL9m5mEjAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvQAAgL9m5mEjAAAAAM3M\\nTL9pF4w89XJAvc3MTL9pF4y89XJAvQAAgL9m5mEjAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9\\nzczMvAAAgL9m5mEjAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPAAAgL9m5mEjAAAAAM3M\\nTL9KsEm9qkAOPM3MTL+VpAO9yuIcPQAAgL9m5mEjAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGj\\nzcxMPQAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAA\\ngL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAJYvar4xeao+lS9qP5Yvar4xeao+lS9qP5Yvar4xeao+lS9qP5Uvar6s01c/Jjf5PpUv\\nar6s01c/Jjf5PpUvar6s01c/Jjf5PpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar7kbXU/\\nbRotvpUvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar4AAACAJDd5v5Uv\\nar4AAACAJDd5v5Uvar4AAACAJDd5v5Qvar5LMSC/+eg+v5Qvar5LMSC/+eg+v5Qvar5LMSC/\\n+eg+v5Yvar7kbXW/bRotvpYvar7kbXW/bRotvpYvar7kbXW/bRotvpUvar6s01e/Jjf5PpUv\\nar6s01e/Jjf5PpUvar6s01e/Jjf5PpYvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+\\nlS9qP7++Pj+/vj4/v74+PwAAgD/OzEy/HIYvPLsf8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7\\nsrvOzEy/QPCkPOiQxLzOzEy/AAAAAKRMAL3OzEy/QPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/\\nljjevKNMgDzOzEy/HIYvvLsf8Tze3V2/HIYvPLsf8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7\\nsrve3V2/QPCkPOiQxLze3V2/AAAAAKRMAL3e3V2/QPCkvOiQxLze3V2/T7P8vEs7srve3V2/\\nljjevKNMgDze3V2/HIYvvLsf8TwAAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL++Pj+/vj4/v74+PwAAgD8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAAAAAAAAAM3MTL8AAAAA\\nzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3M\\nTL8AAAAAAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDE9\\nzczMvM3MTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4w89XJAvc3MTL9pF4y89XJAvc3M\\nTL8AAAAAAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDG9\\nzczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3M\\nTL8AAAAAAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAZuZhIwAAgL8AAAAA\\nzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAZuZhIwAAgL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3M\\nTL8AAAAAZuZhIwAAgL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDE9\\nzczMvM3MTL9pF4w89XJAvc3MTL8AAAAAZuZhIwAAgL9pF4w89XJAvc3MTL9pF4y89XJAvc3M\\nTL8AAAAAZuZhIwAAgL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDG9\\nzczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAZuZhIwAAgL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3M\\nTL8AAAAAZuZhIwAAgL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACA\\nAAAAAAAAgL8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8xeao+lS9qP5Yvar4xeao+\\nlS9qP5Yvar4xeao+lS9qP5Yvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUv\\nar7kbXU/bRotvpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar5NMSA/++g+v5Uvar5NMSA/\\n++g+v5Uvar5NMSA/++g+v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uv\\nar5NMSC/++g+v5Yvar5NMSC/++g+v5Yvar5NMSC/++g+v5Yvar7kbXW/bRotvpYvar7kbXW/\\nbRotvpYvar7kbXW/bRotvpYvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUv\\nar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar6/vj4/v74+P7++Pj8AAIA/\\nHIYvPLsf8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7srvOzEy/QPCkPOiQxLzOzEy/AAAAAKRM\\nAL3OzEy/QPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/ljjevKNMgDzOzEy/HIYvvLsf8TzOzEy/\\nHIYvPLsf8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7srve3V2/QPCkPOiQxLze3V2/AAAAAKRM\\nAL3e3V2/QPCkvOiQxLze3V2/T7P8vEs7srve3V2/ljjevKNMgDze3V2/HIYvvLsf8Tze3V2/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAAAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/\\nmpmZvwAAAAAAAAAAAAAAAJqZmb8AAAAAAAAAAAAAAACamZm/AAAAAQAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/AAAAAAAAAAAAAAAAmpmZP5qZmb8AAAAAAAAAAAAA\\nAACamZm/AAAAAAAAAAAAAAAAmpmZvwAAAAAAAAEAAAAAAJ0FpD+lyhw/Y8t9v4UbrD9ZYeA+\\nWgCAPxAYDj99ebK/rl5dP33Y+z6CLJy/tDaQv4UbrD9ZYeA+WgCAP33Y+76CLJw/tDaQP50F\\n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\\nLb6WL2o+5G11v20aLb6WL2o+5G11v20aLb6VL2o+TTEgv/voPr+VL2o+TTEgv/voPr+VL2o+\\nTTEgv/voPr+VL2o+AAAAACQ3eb+VL2o+AAAAACQ3eb+VL2o+AAAAACQ3eb+UL2o+SzEgP/no\\nPr+UL2o+SzEgP/noPr+UL2o+SzEgP/noPr+WL2o+5G11P20aLb6WL2o+5G11P20aLb6WL2o+\\n5G11P20aLb6VL2o+rNNXPyY3+T6VL2o+rNNXPyY3+T6VL2o+rNNXPyY3+T6WL2o+MXmqPpUv\\naj+WL2o+MXmqPpUvaj+WL2o+MXmqPpUvaj+/vj4/v74+P7++Pj8AAIA/zsxMPxyGL7y7H/E8\\nzsxMP5Y43ryjTIA8zsxMP0+z/LxLO7K7zsxMP0DwpLzokMS8zsxMPwAAAACkTAC9zsxMP0Dw\\npDzokMS8zsxMP0+z/DxLO7K7zsxMP5Y43jyjTIA8zsxMPxyGLzy7H/E83t1dPxyGL7y7H/E8\\n3t1dP5Y43ryjTIA83t1dP0+z/LxLO7K73t1dP0DwpLzokMS83t1dPwAAAACkTAC93t1dP0Dw\\npDzokMS83t1dP0+z/DxLO7K73t1dP5Y43jyjTIA83t1dPxyGLzy7H/E8AAAAAM3MTD8AAAAA\\nAAAAAM3MTD/NzEw9laQDPc3MTD/K4hw9AAAAAM3MTD8AAAAAlaQDPc3MTD/K4hw9SrBJPc3M\\nTD+qQA48AAAAAM3MTD8AAAAASrBJPc3MTD+qQA48rFwxPc3MTD/NzMy8AAAAAM3MTD8AAAAA\\nrFwxPc3MTD/NzMy8aReMPM3MTD/1ckC9AAAAAM3MTD8AAAAAaReMPM3MTD/1ckC9aReMvM3M\\nTD/1ckC9AAAAAM3MTD8AAAAAaReMvM3MTD/1ckC9rFwxvc3MTD/NzMy8AAAAAM3MTD8AAAAA\\nrFwxvc3MTD/NzMy8SrBJvc3MTD+qQA48AAAAAM3MTD8AAAAASrBJvc3MTD+qQA48laQDvc3M\\nTD/K4hw9AAAAAM3MTD8AAAAAlaQDvc3MTD/K4hw9ZuZho83MTD/NzEw9AAAAAAAAgD8AAAAA\\nAAAAAM3MTD/NzEw9laQDPc3MTD/K4hw9AAAAAAAAgD8AAAAAlaQDPc3MTD/K4hw9SrBJPc3M\\nTD+qQA48AAAAAAAAgD8AAAAASrBJPc3MTD+qQA48rFwxPc3MTD/NzMy8AAAAAAAAgD8AAAAA\\nrFwxPc3MTD/NzMy8aReMPM3MTD/1ckC9AAAAAAAAgD8AAAAAaReMPM3MTD/1ckC9aReMvM3M\\nTD/1ckC9AAAAAAAAgD8AAAAAaReMvM3MTD/1ckC9rFwxvc3MTD/NzMy8AAAAAAAAgD8AAAAA\\nrFwxvc3MTD/NzMy8SrBJvc3MTD+qQA48AAAAAAAAgD8AAAAASrBJvc3MTD+qQA48laQDvc3M\\nTD/K4hw9AAAAAAAAgD8AAAAAlaQDvc3MTD/K4hw9ZuZho83MTD/NzEw9AAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAMXmqPpYvaj6VL2o/\\nMXmqPpYvaj6VL2o/MXmqPpYvaj6VL2o/rNNXP5Uvaj4mN/k+rNNXP5Uvaj4mN/k+rNNXP5Uv\\naj4mN/k+5G11P5Yvaj5tGi2+5G11P5Yvaj5tGi2+5G11P5Yvaj5tGi2+TTEgP5Uvaj776D6/\\nTTEgP5Uvaj776D6/TTEgP5Uvaj776D6/AAAAAJUvaj4kN3m/AAAAAJUvaj4kN3m/AAAAAJUv\\naj4kN3m/SzEgv5Qvaj756D6/SzEgv5Qvaj756D6/SzEgv5Qvaj756D6/5G11v5Yvaj5tGi2+\\n5G11v5Yvaj5tGi2+5G11v5Yvaj5tGi2+rNNXv5Uvaj4mN/k+rNNXv5Uvaj4mN/k+rNNXv5Uv\\naj4mN/k+MXmqvpYvaj6VL2o/MXmqvpYvaj6VL2o/MXmqvpYvaj6VL2o/v74+P7++Pj+/vj4/\\nAACAPxyGLzzOzEw/ux/xPJY43jzOzEw/o0yAPE+z/DzOzEw/Szuyu0DwpDzOzEw/6JDEvAAA\\nAADOzEw/pEwAvUDwpLzOzEw/6JDEvE+z/LzOzEw/Szuyu5Y43rzOzEw/o0yAPByGL7zOzEw/\\nux/xPByGLzze3V0/ux/xPJY43jze3V0/o0yAPE+z/Dze3V0/Szuyu0DwpDze3V0/6JDEvAAA\\nAADe3V0/pEwAvUDwpLze3V0/6JDEvE+z/Lze3V0/Szuyu5Y43rze3V0/o0yAPByGL7ze3V0/\\nux/xPAAAAAAAAAAAzcxMPwAAAADNzEy9zcxMP5WkAz3K4hy9zcxMPwAAAAAAAAAAzcxMP5Wk\\nAz3K4hy9zcxMP0qwST2qQA68zcxMPwAAAAAAAAAAzcxMP0qwST2qQA68zcxMP6xcMT3NzMw8\\nzcxMPwAAAAAAAAAAzcxMP6xcMT3NzMw8zcxMP2kXjDz1ckA9zcxMPwAAAAAAAAAAzcxMP2kX\\njDz1ckA9zcxMP2kXjLz1ckA9zcxMPwAAAAAAAAAAzcxMP2kXjLz1ckA9zcxMP6xcMb3NzMw8\\nzcxMPwAAAAAAAAAAzcxMP6xcMb3NzMw8zcxMP0qwSb2qQA68zcxMPwAAAAAAAAAAzcxMP0qw\\nSb2qQA68zcxMP5WkA73K4hy9zcxMPwAAAAAAAAAAzcxMP5WkA73K4hy9zcxMP2bmYaPNzEy9\\nzcxMPwAAAABm5mEjAACAPwAAAADNzEy9zcxMP5WkAz3K4hy9zcxMPwAAAABm5mEjAACAP5Wk\\nAz3K4hy9zcxMP0qwST2qQA68zcxMPwAAAABm5mEjAACAP0qwST2qQA68zcxMP6xcMT3NzMw8\\nzcxMPwAAAABm5mEjAACAP6xcMT3NzMw8zcxMP2kXjDz1ckA9zcxMPwAAAABm5mEjAACAP2kX\\njDz1ckA9zcxMP2kXjLz1ckA9zcxMPwAAAABm5mEjAACAP2kXjLz1ckA9zcxMP6xcMb3NzMw8\\nzcxMPwAAAABm5mEjAACAP6xcMb3NzMw8zcxMP0qwSb2qQA68zcxMPwAAAABm5mEjAACAP0qw\\nSb2qQA68zcxMP5WkA73K4hy9zcxMPwAAAABm5mEjAACAP5WkA73K4hy9zcxMP2bmYaPNzEy9\\nzcxMPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAACAAACAPwAA\\nAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAIAAAAAAAACAPwAA\\nAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAA\\nAACAPzF5qj6VL2q/li9qPjF5qj6VL2q/li9qPjF5qj6VL2q/li9qPqzTVz8mN/m+lS9qPqzT\\nVz8mN/m+lS9qPqzTVz8mN/m+lS9qPuRtdT9tGi0+li9qPuRtdT9tGi0+li9qPuRtdT9tGi0+\\nli9qPk0xID/76D4/lS9qPk0xID/76D4/lS9qPk0xID/76D4/lS9qPgAAAAAkN3k/lS9qPgAA\\nAAAkN3k/lS9qPgAAAAAkN3k/lS9qPk0xIL/76D4/li9qPk0xIL/76D4/li9qPk0xIL/76D4/\\nli9qPuRtdb9tGi0+li9qPuRtdb9tGi0+li9qPuRtdb9tGi0+li9qPqzTV78mN/m+lS9qPqzT\\nV78mN/m+lS9qPqzTV78mN/m+lS9qPjF5qr6VL2q/li9qPjF5qr6VL2q/li9qPjF5qr6VL2q/\\nli9qPr++Pj+/vj4/v74+PwAAgD8chi88ux/xvM7MTD+WON48o0yAvM7MTD9Ps/w8SzuyO87M\\nTD9A8KQ86JDEPM7MTD8AAAAApEwAPc7MTD9A8KS86JDEPM7MTD9Ps/y8SzuyO87MTD+WON68\\no0yAvM7MTD8chi+8ux/xvM7MTD8chi88ux/xvN7dXT+WON48o0yAvN7dXT9Ps/w8SzuyO97d\\nXT9A8KQ86JDEPN7dXT8AAAAApEwAPd7dXT9A8KS86JDEPN7dXT9Ps/y8SzuyO97dXT+WON68\\no0yAvN7dXT8chi+8ux/xvN7dXT/NzEy/AAAAAAAAAADNzEy/AAAAAM3MTD3NzEy/laQDPcri\\nHD3NzEy/AAAAAAAAAADNzEy/laQDPcriHD3NzEy/SrBJPapADjzNzEy/AAAAAAAAAADNzEy/\\nSrBJPapADjzNzEy/rFwxPc3MzLzNzEy/AAAAAAAAAADNzEy/rFwxPc3MzLzNzEy/aReMPPVy\\nQL3NzEy/AAAAAAAAAADNzEy/aReMPPVyQL3NzEy/aReMvPVyQL3NzEy/AAAAAAAAAADNzEy/\\naReMvPVyQL3NzEy/rFwxvc3MzLzNzEy/AAAAAAAAAADNzEy/rFwxvc3MzLzNzEy/SrBJvapA\\nDjzNzEy/AAAAAAAAAADNzEy/SrBJvapADjzNzEy/laQDvcriHD3NzEy/AAAAAAAAAADNzEy/\\nlaQDvcriHD3NzEy/ZuZho83MTD0AAIC/ZuZhIwAAAADNzEy/AAAAAM3MTD3NzEy/laQDPcri\\nHD0AAIC/ZuZhIwAAAADNzEy/laQDPcriHD3NzEy/SrBJPapADjwAAIC/ZuZhIwAAAADNzEy/\\nSrBJPapADjzNzEy/rFwxPc3MzLwAAIC/ZuZhIwAAAADNzEy/rFwxPc3MzLzNzEy/aReMPPVy\\nQL0AAIC/ZuZhIwAAAADNzEy/aReMPPVyQL3NzEy/aReMvPVyQL0AAIC/ZuZhIwAAAADNzEy/\\naReMvPVyQL3NzEy/rFwxvc3MzLwAAIC/ZuZhIwAAAADNzEy/rFwxvc3MzLzNzEy/SrBJvapA\\nDjwAAIC/ZuZhIwAAAADNzEy/SrBJvapADjzNzEy/laQDvcriHD0AAIC/ZuZhIwAAAADNzEy/\\nlaQDvcriHD3NzEy/ZuZho83MTD0AAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAACWL2q+MXmqPpUvaj+WL2q+MXmqPpUvaj+WL2q+MXmqPpUv\\naj+VL2q+rNNXPyY3+T6VL2q+rNNXPyY3+T6VL2q+rNNXPyY3+T6WL2q+5G11P20aLb6WL2q+\\n5G11P20aLb6WL2q+5G11P20aLb6VL2q+TTEgP/voPr+VL2q+TTEgP/voPr+VL2q+TTEgP/vo\\nPr+VL2q+AAAAgCQ3eb+VL2q+AAAAgCQ3eb+VL2q+AAAAgCQ3eb+UL2q+SzEgv/noPr+UL2q+\\nSzEgv/noPr+UL2q+SzEgv/noPr+WL2q+5G11v20aLb6WL2q+5G11v20aLb6WL2q+5G11v20a\\nLb6VL2q+rNNXvyY3+T6VL2q+rNNXvyY3+T6VL2q+rNNXvyY3+T6WL2q+MXmqvpUvaj+WL2q+\\nMXmqvpUvaj+WL2q+MXmqvpUvaj+/vj4/v74+P7++Pj8AAIA/zsxMvxyGLzy7H/E8zsxMv5Y4\\n3jyjTIA8zsxMv0+z/DxLO7K7zsxMv0DwpDzokMS8zsxMvwAAAACkTAC9zsxMv0DwpLzokMS8\\nzsxMv0+z/LxLO7K7zsxMv5Y43ryjTIA8zsxMvxyGL7y7H/E83t1dvxyGLzy7H/E83t1dv5Y4\\n3jyjTIA83t1dv0+z/DxLO7K73t1dv0DwpDzokMS83t1dvwAAAACkTAC93t1dv0DwpLzokMS8\\n3t1dv0+z/LxLO7K73t1dv5Y43ryjTIA83t1dvxyGL7y7H/E8AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/vj4/v74+P7++Pj8AAIA/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAAAAAAAAAADNzEy/AAAAAM3MTD3NzEy/laQDPcriHD3NzEy/AAAAAAAAAADNzEy/laQDPcri\\nHD3NzEy/SrBJPapADjzNzEy/AAAAAAAAAADNzEy/SrBJPapADjzNzEy/rFwxPc3MzLzNzEy/\\nAAAAAAAAAADNzEy/rFwxPc3MzLzNzEy/aReMPPVyQL3NzEy/AAAAAAAAAADNzEy/aReMPPVy\\nQL3NzEy/aReMvPVyQL3NzEy/AAAAAAAAAADNzEy/aReMvPVyQL3NzEy/rFwxvc3MzLzNzEy/\\nAAAAAAAAAADNzEy/rFwxvc3MzLzNzEy/SrBJvapADjzNzEy/AAAAAAAAAADNzEy/SrBJvapA\\nDjzNzEy/laQDvcriHD3NzEy/AAAAAAAAAADNzEy/laQDvcriHD3NzEy/ZuZho83MTD3NzEy/\\nAAAAAGbmYSMAAIC/AAAAAM3MTD3NzEy/laQDPcriHD3NzEy/AAAAAGbmYSMAAIC/laQDPcri\\nHD3NzEy/SrBJPapADjzNzEy/AAAAAGbmYSMAAIC/SrBJPapADjzNzEy/rFwxPc3MzLzNzEy/\\nAAAAAGbmYSMAAIC/rFwxPc3MzLzNzEy/aReMPPVyQL3NzEy/AAAAAGbmYSMAAIC/aReMPPVy\\nQL3NzEy/aReMvPVyQL3NzEy/AAAAAGbmYSMAAIC/aReMvPVyQL3NzEy/rFwxvc3MzLzNzEy/\\nAAAAAGbmYSMAAIC/rFwxvc3MzLzNzEy/SrBJvapADjzNzEy/AAAAAGbmYSMAAIC/SrBJvapA\\nDjzNzEy/laQDvcriHD3NzEy/AAAAAGbmYSMAAIC/laQDvcriHD3NzEy/ZuZho83MTD3NzEy/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAIAAAIC/AAAAAAAA\\nAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nMXmqPpUvaj+WL2q+MXmqPpUvaj+WL2q+MXmqPpUvaj+WL2q+rNNXPyY3+T6VL2q+rNNXPyY3\\n+T6VL2q+rNNXPyY3+T6VL2q+5G11P20aLb6WL2q+5G11P20aLb6WL2q+5G11P20aLb6WL2q+\\nTTEgP/voPr+VL2q+TTEgP/voPr+VL2q+TTEgP/voPr+VL2q+AAAAgCQ3eb+VL2q+AAAAgCQ3\\neb+VL2q+AAAAgCQ3eb+VL2q+TTEgv/voPr+WL2q+TTEgv/voPr+WL2q+TTEgv/voPr+WL2q+\\n5G11v20aLb6WL2q+5G11v20aLb6WL2q+5G11v20aLb6WL2q+rNNXvyY3+T6VL2q+rNNXvyY3\\n+T6VL2q+rNNXvyY3+T6VL2q+MXmqvpUvaj+WL2q+MXmqvpUvaj+WL2q+MXmqvpUvaj+WL2q+\\nv74+P7++Pj+/vj4/AACAPxyGLzy7H/E8zsxMv5Y43jyjTIA8zsxMv0+z/DxLO7K7zsxMv0Dw\\npDzokMS8zsxMvwAAAACkTAC9zsxMv0DwpLzokMS8zsxMv0+z/LxLO7K7zsxMv5Y43ryjTIA8\\nzsxMvxyGL7y7H/E8zsxMvxyGLzy7H/E83t1dv5Y43jyjTIA83t1dv0+z/DxLO7K73t1dv0Dw\\npDzokMS83t1dvwAAAACkTAC93t1dv0DwpLzokMS83t1dv0+z/LxLO7K73t1dv5Y43ryjTIA8\\n3t1dvxyGL7y7H/E83t1dvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/\\nAAAAAAAAAAAAAAAAmpmZP5qZmb8AAAAAAAAAAAAAAACamZm/AAAAAAAAAAAAAAAAmpmZvwAA\\nAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAACamZk/AAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAAAAAAAJqZ\\nmT+amZm/AAAAAAAAAAAAAAAAmpmZvwAAAAAAAAAAAAAAAJqZmb8AAAAAAAABAAAAAAC7CxzA\\nCiX9vq1Pqr67CxzACiX9Pq1Pqr67CxxACiX9Pq1Pqr67CxxACiX9vq1Pqr67CxzACiX9Pq1P\\nqr67CxzACiX9Pq1Pqj67CxxACiX9Pq1Pqj67CxxACiX9Pq1Pqr67CxxACiX9vq1Pqr67CxxA\\nCiX9Pq1Pqr67CxxACiX9Pq1Pqj67CxxACiX9vq1Pqj67CxzACiX9vq1Pqr67CxzACiX9vq1P\\nqj67CxzACiX9Pq1Pqj67CxzACiX9Pq1Pqr67CxzACiX9vq1Pqr67CxxACiX9vq1Pqr67CxxA\\nCiX9vq1Pqj67CxzACiX9vq1Pqj67CxzACiX9vq1Pqj67CxxACiX9vq1Pqj67CxxACiX9Pq1P\\nqj67CxzACiX9Pq1Pqj4AAAAAAAAAAP//f78AAAAAAAAAAP//f78AAAAAAAAAAP//f78AAAAA\\nAAAAAP//f78AAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAA\\nAAAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAgP//fz8AAAAA\\nAAAAgP//fz8AAAAAAAAAgP//fz8AAAAAAAAAgP//fz//AACy/wAAsv8AALL/AACy/wAAsv//\\nALL//wCy/wAAsv8AALL/AACy//8Asv//ALL/AACy//8Asv//ALL/AACy/wAAsv8AALL//wCy\\n//8Asv//ALL//wCy//8Asv//ALIAAAAAAAAAAK1Pqr4AAAAACiX9PgAAAAC7CxxAAAAAAAAA\\nAAC7CxzAAAAAAAAAAAAAAAAACiX9vgAAAAAAAAAAAAAAAK1Pqj4AAAABAAAAAAAAAQAAAAAA\\nAAEAAAD/AAAAAAAA/wAAAAAAAP8AAAABAAAAPwAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAA\\nAAAAAAA/AAAAvwAAAAAAAAAAAAAAAAAAAL8AAAAAAAAAAAAAAAAAAAC/zcxMPwAAAAAAAAAA\\nzcxMPwAAAADNzEw9zcxMP5WkA73K4hw9zcxMPwAAAAAAAAAAzcxMP5WkA73K4hw9zcxMP0qw\\nSb2qQA48zcxMPwAAAAAAAAAAzcxMP0qwSb2qQA48zcxMP6xcMb3NzMy8zcxMPwAAAAAAAAAA\\nzcxMP6xcMb3NzMy8zcxMP2kXjLz1ckC9zcxMPwAAAAAAAAAAzcxMP2kXjLz1ckC9zcxMP2kX\\njDz1ckC9zcxMPwAAAAAAAAAAzcxMP2kXjDz1ckC9zcxMP6xcMT3NzMy8zcxMPwAAAAAAAAAA\\nzcxMP6xcMT3NzMy8zcxMP0qwST2qQA48zcxMPwAAAAAAAAAAzcxMP0qwST2qQA48zcxMP5Wk\\nAz3K4hw9zcxMPwAAAAAAAAAAzcxMP5WkAz3K4hw9zcxMP2bmYSPNzEw9AACAP2bmYSMAAAAA\\nzcxMPwAAAADNzEw9zcxMP5WkA73K4hw9AACAP2bmYSMAAAAAzcxMP5WkA73K4hw9zcxMP0qw\\nSb2qQA48AACAP2bmYSMAAAAAzcxMP0qwSb2qQA48zcxMP6xcMb3NzMy8AACAP2bmYSMAAAAA\\nzcxMP6xcMb3NzMy8zcxMP2kXjLz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjLz1ckC9zcxMP2kX\\njDz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjDz1ckC9zcxMP6xcMT3NzMy8AACAP2bmYSMAAAAA\\nzcxMP6xcMT3NzMy8zcxMP0qwST2qQA48AACAP2bmYSMAAAAAzcxMP0qwST2qQA48zcxMP5Wk\\nAz3K4hw9AACAP2bmYSMAAAAAzcxMP5WkAz3K4hw9zcxMP2bmYSPNzEw9AACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAIAAAAAA\\nAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACA\\nAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAli9qPjF5qr6VL2o/\\nli9qPjF5qr6VL2o/li9qPjF5qr6VL2o/lS9qPqzTV78mN/k+lS9qPqzTV78mN/k+lS9qPqzT\\nV78mN/k+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+lS9qPk0xIL/76D6/\\nlS9qPk0xIL/76D6/lS9qPk0xIL/76D6/lS9qPgAAAAAkN3m/lS9qPgAAAAAkN3m/lS9qPgAA\\nAAAkN3m/lC9qPksxID/56D6/lC9qPksxID/56D6/lC9qPksxID/56D6/li9qPuRtdT9tGi2+\\nli9qPuRtdT9tGi2+li9qPuRtdT9tGi2+lS9qPqzTVz8mN/k+lS9qPqzTVz8mN/k+lS9qPqzT\\nVz8mN/k+li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/v74+P7++Pj+/vj4/\\nAACAP87MTD8chi+8ux/xPM7MTD+WON68o0yAPM7MTD9Ps/y8Szuyu87MTD9A8KS86JDEvM7M\\nTD8AAAAApEwAvc7MTD9A8KQ86JDEvM7MTD9Ps/w8Szuyu87MTD+WON48o0yAPM7MTD8chi88\\nux/xPN7dXT8chi+8ux/xPN7dXT+WON68o0yAPN7dXT9Ps/y8Szuyu97dXT9A8KS86JDEvN7d\\nXT8AAAAApEwAvd7dXT9A8KQ86JDEvN7dXT9Ps/w8Szuyu97dXT+WON48o0yAPN7dXT8chi88\\nux/xPAAAAADNzEw/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAADNzEw/AAAAAJWk\\nAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAADNzEw/AAAAAEqwST3NzEw/qkAOPKxcMT3NzEw/\\nzczMvAAAAADNzEw/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAADNzEw/AAAAAGkX\\njDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAADNzEw/AAAAAGkXjLzNzEw/9XJAvaxcMb3NzEw/\\nzczMvAAAAADNzEw/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAADNzEw/AAAAAEqw\\nSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAADNzEw/AAAAAJWkA73NzEw/yuIcPWbmYaPNzEw/\\nzcxMPQAAAAAAAIA/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAAAAAIA/AAAAAJWk\\nAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAAAAAIA/AAAAAEqwST3NzEw/qkAOPKxcMT3NzEw/\\nzczMvAAAAAAAAIA/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAAAAAIA/AAAAAGkX\\njDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAAAAAIA/AAAAAGkXjLzNzEw/9XJAvaxcMb3NzEw/\\nzczMvAAAAAAAAIA/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAAAAAIA/AAAAAEqw\\nSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAAAAAIA/AAAAAJWkA73NzEw/yuIcPWbmYaPNzEw/\\nzcxMPQAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/\\nAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAIAAAIA/AAAAAAAA\\nAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/\\nAAAAADF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qP6zTVz+VL2o+Jjf5PqzT\\nVz+VL2o+Jjf5PqzTVz+VL2o+Jjf5PuRtdT+WL2o+bRotvuRtdT+WL2o+bRotvuRtdT+WL2o+\\nbRotvk0xID+VL2o+++g+v00xID+VL2o+++g+v00xID+VL2o+++g+vwAAAACVL2o+JDd5vwAA\\nAACVL2o+JDd5vwAAAACVL2o+JDd5v0sxIL+UL2o++eg+v0sxIL+UL2o++eg+v0sxIL+UL2o+\\n+eg+v+Rtdb+WL2o+bRotvuRtdb+WL2o+bRotvuRtdb+WL2o+bRotvqzTV7+VL2o+Jjf5PqzT\\nV7+VL2o+Jjf5PqzTV7+VL2o+Jjf5PjF5qr6WL2o+lS9qPzF5qr6WL2o+lS9qPzF5qr6WL2o+\\nlS9qP7++Pj+/vj4/v74+PwAAgD8chi88zsxMP7sf8TyWON48zsxMP6NMgDxPs/w8zsxMP0s7\\nsrtA8KQ8zsxMP+iQxLwAAAAAzsxMP6RMAL1A8KS8zsxMP+iQxLxPs/y8zsxMP0s7sruWON68\\nzsxMP6NMgDwchi+8zsxMP7sf8Twchi883t1dP7sf8TyWON483t1dP6NMgDxPs/w83t1dP0s7\\nsrtA8KQ83t1dP+iQxLwAAAAA3t1dP6RMAL1A8KS83t1dP+iQxLxPs/y83t1dP0s7sruWON68\\n3t1dP6NMgDwchi+83t1dP7sf8TwAAAAAAAAAAM3MTD8AAAAAzcxMvc3MTD+VpAM9yuIcvc3M\\nTD8AAAAAAAAAAM3MTD+VpAM9yuIcvc3MTD9KsEk9qkAOvM3MTD8AAAAAAAAAAM3MTD9KsEk9\\nqkAOvM3MTD+sXDE9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDE9zczMPM3MTD9pF4w89XJAPc3M\\nTD8AAAAAAAAAAM3MTD9pF4w89XJAPc3MTD9pF4y89XJAPc3MTD8AAAAAAAAAAM3MTD9pF4y8\\n9XJAPc3MTD+sXDG9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDG9zczMPM3MTD9KsEm9qkAOvM3M\\nTD8AAAAAAAAAAM3MTD9KsEm9qkAOvM3MTD+VpAO9yuIcvc3MTD8AAAAAAAAAAM3MTD+VpAO9\\nyuIcvc3MTD9m5mGjzcxMvc3MTD8AAAAAZuZhIwAAgD8AAAAAzcxMvc3MTD+VpAM9yuIcvc3M\\nTD8AAAAAZuZhIwAAgD+VpAM9yuIcvc3MTD9KsEk9qkAOvM3MTD8AAAAAZuZhIwAAgD9KsEk9\\nqkAOvM3MTD+sXDE9zczMPM3MTD8AAAAAZuZhIwAAgD+sXDE9zczMPM3MTD9pF4w89XJAPc3M\\nTD8AAAAAZuZhIwAAgD9pF4w89XJAPc3MTD9pF4y89XJAPc3MTD8AAAAAZuZhIwAAgD9pF4y8\\n9XJAPc3MTD+sXDG9zczMPM3MTD8AAAAAZuZhIwAAgD+sXDG9zczMPM3MTD9KsEm9qkAOvM3M\\nTD8AAAAAZuZhIwAAgD9KsEm9qkAOvM3MTD+VpAO9yuIcvc3MTD8AAAAAZuZhIwAAgD+VpAO9\\nyuIcvc3MTD9m5mGjzcxMvc3MTD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8xeao+lS9qv5Yvaj4xeao+lS9qv5Yvaj4xeao+lS9qv5Yv\\naj6s01c/Jjf5vpUvaj6s01c/Jjf5vpUvaj6s01c/Jjf5vpUvaj7kbXU/bRotPpYvaj7kbXU/\\nbRotPpYvaj7kbXU/bRotPpYvaj5NMSA/++g+P5Uvaj5NMSA/++g+P5Uvaj5NMSA/++g+P5Uv\\naj4AAAAAJDd5P5Uvaj4AAAAAJDd5P5Uvaj4AAAAAJDd5P5Uvaj5NMSC/++g+P5Yvaj5NMSC/\\n++g+P5Yvaj5NMSC/++g+P5Yvaj7kbXW/bRotPpYvaj7kbXW/bRotPpYvaj7kbXW/bRotPpYv\\naj6s01e/Jjf5vpUvaj6s01e/Jjf5vpUvaj6s01e/Jjf5vpUvaj4xeaq+lS9qv5Yvaj4xeaq+\\nlS9qv5Yvaj4xeaq+lS9qv5Yvaj6/vj4/v74+P7++Pj8AAIA/HIYvPLsf8bzOzEw/ljjePKNM\\ngLzOzEw/T7P8PEs7sjvOzEw/QPCkPOiQxDzOzEw/AAAAAKRMAD3OzEw/QPCkvOiQxDzOzEw/\\nT7P8vEs7sjvOzEw/ljjevKNMgLzOzEw/HIYvvLsf8bzOzEw/HIYvPLsf8bze3V0/ljjePKNM\\ngLze3V0/T7P8PEs7sjve3V0/QPCkPOiQxDze3V0/AAAAAKRMAD3e3V0/QPCkvOiQxDze3V0/\\nT7P8vEs7sjve3V0/ljjevKNMgLze3V0/HIYvvLsf8bze3V0/zcxMvwAAAAAAAAAAzcxMvwAA\\nAADNzEw9zcxMv5WkAz3K4hw9zcxMvwAAAAAAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48\\nzcxMvwAAAAAAAAAAzcxMv0qwST2qQA48zcxMv6xcMT3NzMy8zcxMvwAAAAAAAAAAzcxMv6xc\\nMT3NzMy8zcxMv2kXjDz1ckC9zcxMvwAAAAAAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9\\nzcxMvwAAAAAAAAAAzcxMv2kXjLz1ckC9zcxMv6xcMb3NzMy8zcxMvwAAAAAAAAAAzcxMv6xc\\nMb3NzMy8zcxMv0qwSb2qQA48zcxMvwAAAAAAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9\\nzcxMvwAAAAAAAAAAzcxMv5WkA73K4hw9zcxMv2bmYaPNzEw9AACAv2bmYSMAAAAAzcxMvwAA\\nAADNzEw9zcxMv5WkAz3K4hw9AACAv2bmYSMAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48\\nAACAv2bmYSMAAAAAzcxMv0qwST2qQA48zcxMv6xcMT3NzMy8AACAv2bmYSMAAAAAzcxMv6xc\\nMT3NzMy8zcxMv2kXjDz1ckC9AACAv2bmYSMAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9\\nAACAv2bmYSMAAAAAzcxMv2kXjLz1ckC9zcxMv6xcMb3NzMy8AACAv2bmYSMAAAAAzcxMv6xc\\nMb3NzMy8zcxMv0qwSb2qQA48AACAv2bmYSMAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9\\nAACAv2bmYSMAAAAAzcxMv5WkA73K4hw9zcxMv2bmYaPNzEw9AACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAAAAAACAvwAA\\nAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAli9qvjF5qj6VL2o/li9qvjF5\\nqj6VL2o/li9qvjF5qj6VL2o/lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+\\nli9qvuRtdT9tGi2+li9qvuRtdT9tGi2+li9qvuRtdT9tGi2+lS9qvk0xID/76D6/lS9qvk0x\\nID/76D6/lS9qvk0xID/76D6/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/\\nlC9qvksxIL/56D6/lC9qvksxIL/56D6/lC9qvksxIL/56D6/li9qvuRtdb9tGi2+li9qvuRt\\ndb9tGi2+li9qvuRtdb9tGi2+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+\\nli9qvjF5qr6VL2o/li9qvjF5qr6VL2o/li9qvjF5qr6VL2o/v74+P7++Pj+/vj4/AACAP87M\\nTL8chi88ux/xPM7MTL+WON48o0yAPM7MTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7MTL8AAAAA\\npEwAvc7MTL9A8KS86JDEvM7MTL9Ps/y8Szuyu87MTL+WON68o0yAPM7MTL8chi+8ux/xPN7d\\nXb8chi88ux/xPN7dXb+WON48o0yAPN7dXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7dXb8AAAAA\\npEwAvd7dXb9A8KS86JDEvN7dXb9Ps/y8Szuyu97dXb+WON68o0yAPN7dXb8chi+8ux/xPAAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nv74+P7++Pj+/vj4/AACAPwAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAAAAAAAAAzcxMvwAAAADNzEw9zcxMv5WkAz3K4hw9zcxMvwAA\\nAAAAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAAAAAAAAzcxMv0qwST2qQA48\\nzcxMv6xcMT3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMT3NzMy8zcxMv2kXjDz1ckC9zcxMvwAA\\nAAAAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAAAAAAAAzcxMv2kXjLz1ckC9\\nzcxMv6xcMb3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMb3NzMy8zcxMv0qwSb2qQA48zcxMvwAA\\nAAAAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAAAAAAAAzcxMv5WkA73K4hw9\\nzcxMv2bmYaPNzEw9zcxMvwAAAABm5mEjAACAvwAAAADNzEw9zcxMv5WkAz3K4hw9zcxMvwAA\\nAABm5mEjAACAv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAABm5mEjAACAv0qwST2qQA48\\nzcxMv6xcMT3NzMy8zcxMvwAAAABm5mEjAACAv6xcMT3NzMy8zcxMv2kXjDz1ckC9zcxMvwAA\\nAABm5mEjAACAv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAABm5mEjAACAv2kXjLz1ckC9\\nzcxMv6xcMb3NzMy8zcxMvwAAAABm5mEjAACAv6xcMb3NzMy8zcxMv0qwSb2qQA48zcxMvwAA\\nAABm5mEjAACAv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAABm5mEjAACAv5WkA73K4hw9\\nzcxMv2bmYaPNzEw9zcxMvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvzF5qj6VL2o/li9qvjF5qj6VL2o/li9qvjF5qj6VL2o/li9qvqzT\\nVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvuRtdT9tGi2+li9qvuRtdT9tGi2+\\nli9qvuRtdT9tGi2+li9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvgAA\\nAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvk0xIL/76D6/li9qvk0xIL/76D6/\\nli9qvk0xIL/76D6/li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+li9qvqzT\\nV78mN/k+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvjF5qr6VL2o/li9qvjF5qr6VL2o/\\nli9qvjF5qr6VL2o/li9qvr++Pj+/vj4/v74+PwAAgD8chi88ux/xPM7MTL+WON48o0yAPM7M\\nTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7MTL8AAAAApEwAvc7MTL9A8KS86JDEvM7MTL9Ps/y8\\nSzuyu87MTL+WON68o0yAPM7MTL8chi+8ux/xPM7MTL8chi88ux/xPN7dXb+WON48o0yAPN7d\\nXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7dXb8AAAAApEwAvd7dXb9A8KS86JDEvN7dXb9Ps/y8\\n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\\nzcxMPQAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAJYvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Uvaj6s01e/Jjf5PpUv\\naj6s01e/Jjf5PpUvaj6s01e/Jjf5PpYvaj7kbXW/bRotvpYvaj7kbXW/bRotvpYvaj7kbXW/\\nbRotvpUvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj4AAAAAJDd5v5Uv\\naj4AAAAAJDd5v5Uvaj4AAAAAJDd5v5Qvaj5LMSA/+eg+v5Qvaj5LMSA/+eg+v5Qvaj5LMSA/\\n+eg+v5Yvaj7kbXU/bRotvpYvaj7kbXU/bRotvpYvaj7kbXU/bRotvpUvaj6s01c/Jjf5PpUv\\naj6s01c/Jjf5PpUvaj6s01c/Jjf5PpYvaj4xeao+lS9qP5Yvaj4xeao+lS9qP5Yvaj4xeao+\\nlS9qP7++Pj+/vj4/v74+PwAAgD/OzEw/HIYvvLsf8TzOzEw/ljjevKNMgDzOzEw/T7P8vEs7\\nsrvOzEw/QPCkvOiQxLzOzEw/AAAAAKRMAL3OzEw/QPCkPOiQxLzOzEw/T7P8PEs7srvOzEw/\\nljjePKNMgDzOzEw/HIYvPLsf8Tze3V0/HIYvvLsf8Tze3V0/ljjevKNMgDze3V0/T7P8vEs7\\nsrve3V0/QPCkvOiQxLze3V0/AAAAAKRMAL3e3V0/QPCkPOiQxLze3V0/T7P8PEs7srve3V0/\\nljjePKNMgDze3V0/HIYvPLsf8TwAAAAAzcxMPwAAAAAAAAAAzcxMP83MTD2VpAM9zcxMP8ri\\nHD0AAAAAzcxMPwAAAACVpAM9zcxMP8riHD1KsEk9zcxMP6pADjwAAAAAzcxMPwAAAABKsEk9\\nzcxMP6pADjysXDE9zcxMP83MzLwAAAAAzcxMPwAAAACsXDE9zcxMP83MzLxpF4w8zcxMP/Vy\\nQL0AAAAAzcxMPwAAAABpF4w8zcxMP/VyQL1pF4y8zcxMP/VyQL0AAAAAzcxMPwAAAABpF4y8\\nzcxMP/VyQL2sXDG9zcxMP83MzLwAAAAAzcxMPwAAAACsXDG9zcxMP83MzLxKsEm9zcxMP6pA\\nDjwAAAAAzcxMPwAAAABKsEm9zcxMP6pADjyVpAO9zcxMP8riHD0AAAAAzcxMPwAAAACVpAO9\\nzcxMP8riHD1m5mGjzcxMP83MTD0AAAAAAACAPwAAAAAAAAAAzcxMP83MTD2VpAM9zcxMP8ri\\nHD0AAAAAAACAPwAAAACVpAM9zcxMP8riHD1KsEk9zcxMP6pADjwAAAAAAACAPwAAAABKsEk9\\nzcxMP6pADjysXDE9zcxMP83MzLwAAAAAAACAPwAAAACsXDE9zcxMP83MzLxpF4w8zcxMP/Vy\\nQL0AAAAAAACAPwAAAABpF4w8zcxMP/VyQL1pF4y8zcxMP/VyQL0AAAAAAACAPwAAAABpF4y8\\nzcxMP/VyQL2sXDG9zcxMP83MzLwAAAAAAACAPwAAAACsXDG9zcxMP83MzLxKsEm9zcxMP6pA\\nDjwAAAAAAACAPwAAAABKsEm9zcxMP6pADjyVpAO9zcxMP8riHD0AAAAAAACAPwAAAACVpAO9\\nzcxMP8riHD1m5mGjzcxMP83MTD0AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAIAAAAAA\\nAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAA\\nAIAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACA\\nAACAPwAAAAAAAACAAACAPwAAAAAxeao+li9qPpUvaj8xeao+li9qPpUvaj8xeao+li9qPpUv\\naj+s01c/lS9qPiY3+T6s01c/lS9qPiY3+T6s01c/lS9qPiY3+T7kbXU/li9qPm0aLb7kbXU/\\nli9qPm0aLb7kbXU/li9qPm0aLb5NMSA/lS9qPvvoPr9NMSA/lS9qPvvoPr9NMSA/lS9qPvvo\\nPr8AAAAAlS9qPiQ3eb8AAAAAlS9qPiQ3eb8AAAAAlS9qPiQ3eb9LMSC/lC9qPvnoPr9LMSC/\\nlC9qPvnoPr9LMSC/lC9qPvnoPr/kbXW/li9qPm0aLb7kbXW/li9qPm0aLb7kbXW/li9qPm0a\\nLb6s01e/lS9qPiY3+T6s01e/lS9qPiY3+T6s01e/lS9qPiY3+T4xeaq+li9qPpUvaj8xeaq+\\nli9qPpUvaj8xeaq+li9qPpUvaj+/vj4/v74+P7++Pj8AAIA/HIYvPM7MTD+7H/E8ljjePM7M\\nTD+jTIA8T7P8PM7MTD9LO7K7QPCkPM7MTD/okMS8AAAAAM7MTD+kTAC9QPCkvM7MTD/okMS8\\nT7P8vM7MTD9LO7K7ljjevM7MTD+jTIA8HIYvvM7MTD+7H/E8HIYvPN7dXT+7H/E8ljjePN7d\\nXT+jTIA8T7P8PN7dXT9LO7K7QPCkPN7dXT/okMS8AAAAAN7dXT+kTAC9QPCkvN7dXT/okMS8\\nT7P8vN7dXT9LO7K7ljjevN7dXT+jTIA8HIYvvN7dXT+7H/E8AAAAAAAAAADNzEw/AAAAAM3M\\nTL3NzEw/laQDPcriHL3NzEw/AAAAAAAAAADNzEw/laQDPcriHL3NzEw/SrBJPapADrzNzEw/\\nAAAAAAAAAADNzEw/SrBJPapADrzNzEw/rFwxPc3MzDzNzEw/AAAAAAAAAADNzEw/rFwxPc3M\\nzDzNzEw/aReMPPVyQD3NzEw/AAAAAAAAAADNzEw/aReMPPVyQD3NzEw/aReMvPVyQD3NzEw/\\nAAAAAAAAAADNzEw/aReMvPVyQD3NzEw/rFwxvc3MzDzNzEw/AAAAAAAAAADNzEw/rFwxvc3M\\nzDzNzEw/SrBJvapADrzNzEw/AAAAAAAAAADNzEw/SrBJvapADrzNzEw/laQDvcriHL3NzEw/\\nAAAAAAAAAADNzEw/laQDvcriHL3NzEw/ZuZho83MTL3NzEw/AAAAAGbmYSMAAIA/AAAAAM3M\\nTL3NzEw/laQDPcriHL3NzEw/AAAAAGbmYSMAAIA/laQDPcriHL3NzEw/SrBJPapADrzNzEw/\\nAAAAAGbmYSMAAIA/SrBJPapADrzNzEw/rFwxPc3MzDzNzEw/AAAAAGbmYSMAAIA/rFwxPc3M\\nzDzNzEw/aReMPPVyQD3NzEw/AAAAAGbmYSMAAIA/aReMPPVyQD3NzEw/aReMvPVyQD3NzEw/\\nAAAAAGbmYSMAAIA/aReMvPVyQD3NzEw/rFwxvc3MzDzNzEw/AAAAAGbmYSMAAIA/rFwxvc3M\\nzDzNzEw/SrBJvapADrzNzEw/AAAAAGbmYSMAAIA/SrBJvapADrzNzEw/laQDvcriHL3NzEw/\\nAAAAAGbmYSMAAIA/laQDvcriHL3NzEw/ZuZho83MTL3NzEw/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/\\nAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/MXmqPpUvar+WL2o+MXmqPpUv\\nar+WL2o+MXmqPpUvar+WL2o+rNNXPyY3+b6VL2o+rNNXPyY3+b6VL2o+rNNXPyY3+b6VL2o+\\n5G11P20aLT6WL2o+5G11P20aLT6WL2o+5G11P20aLT6WL2o+TTEgP/voPj+VL2o+TTEgP/vo\\nPj+VL2o+TTEgP/voPj+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3eT+VL2o+\\nTTEgv/voPj+WL2o+TTEgv/voPj+WL2o+TTEgv/voPj+WL2o+5G11v20aLT6WL2o+5G11v20a\\nLT6WL2o+5G11v20aLT6WL2o+rNNXvyY3+b6VL2o+rNNXvyY3+b6VL2o+rNNXvyY3+b6VL2o+\\nMXmqvpUvar+WL2o+MXmqvpUvar+WL2o+MXmqvpUvar+WL2o+v74+P7++Pj+/vj4/AACAPxyG\\nLzy7H/G8zsxMP5Y43jyjTIC8zsxMP0+z/DxLO7I7zsxMP0DwpDzokMQ8zsxMPwAAAACkTAA9\\nzsxMP0DwpLzokMQ8zsxMP0+z/LxLO7I7zsxMP5Y43ryjTIC8zsxMPxyGL7y7H/G8zsxMPxyG\\nLzy7H/G83t1dP5Y43jyjTIC83t1dP0+z/DxLO7I73t1dP0DwpDzokMQ83t1dPwAAAACkTAA9\\n3t1dP0DwpLzokMQ83t1dP0+z/LxLO7I73t1dP5Y43ryjTIC83t1dPxyGL7y7H/G83t1dP83M\\nTL8AAAAAAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAM9\\nyuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvM3M\\nTL8AAAAAAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4w8\\n9XJAvc3MTL9pF4y89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvM3M\\nTL8AAAAAAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEm9\\nqkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPQAA\\ngL9m5mEjAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPQAAgL9m5mEjAAAAAM3MTL+VpAM9\\nyuIcPc3MTL9KsEk9qkAOPAAAgL9m5mEjAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvAAA\\ngL9m5mEjAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvQAAgL9m5mEjAAAAAM3MTL9pF4w8\\n9XJAvc3MTL9pF4y89XJAvQAAgL9m5mEjAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvAAA\\ngL9m5mEjAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPAAAgL9m5mEjAAAAAM3MTL9KsEm9\\nqkAOPM3MTL+VpAO9yuIcPQAAgL9m5mEjAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPQAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAAgL8AAAAA\\nAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAJYv\\nar4xeao+lS9qP5Yvar4xeao+lS9qP5Yvar4xeao+lS9qP5Uvar6s01c/Jjf5PpUvar6s01c/\\nJjf5PpUvar6s01c/Jjf5PpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar7kbXU/bRotvpUv\\nar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar4AAACAJDd5v5Uvar4AAACA\\nJDd5v5Uvar4AAACAJDd5v5Qvar5LMSC/+eg+v5Qvar5LMSC/+eg+v5Qvar5LMSC/+eg+v5Yv\\nar7kbXW/bRotvpYvar7kbXW/bRotvpYvar7kbXW/bRotvpUvar6s01e/Jjf5PpUvar6s01e/\\nJjf5PpUvar6s01e/Jjf5PpYvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+lS9qP7++\\nPj+/vj4/v74+PwAAgD/OzEy/HIYvPLsf8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7srvOzEy/\\nQPCkPOiQxLzOzEy/AAAAAKRMAL3OzEy/QPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/ljjevKNM\\ngDzOzEy/HIYvvLsf8Tze3V2/HIYvPLsf8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7srve3V2/\\nQPCkPOiQxLze3V2/AAAAAKRMAL3e3V2/QPCkvOiQxLze3V2/T7P8vEs7srve3V2/ljjevKNM\\ngDze3V2/HIYvvLsf8TwAAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAL++Pj+/vj4/v74+PwAAgD8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAAAAAAAAAM3MTL8AAAAAzcxMPc3M\\nTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAA\\nAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDE9zczMvM3M\\nTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4w89XJAvc3MTL9pF4y89XJAvc3MTL8AAAAA\\nAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDG9zczMvM3M\\nTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAA\\nAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAZuZhIwAAgL8AAAAAzcxMPc3M\\nTL+VpAM9yuIcPc3MTL8AAAAAZuZhIwAAgL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAA\\nZuZhIwAAgL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDE9zczMvM3M\\nTL9pF4w89XJAvc3MTL8AAAAAZuZhIwAAgL9pF4w89XJAvc3MTL9pF4y89XJAvc3MTL8AAAAA\\nZuZhIwAAgL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDG9zczMvM3M\\nTL9KsEm9qkAOPM3MTL8AAAAAZuZhIwAAgL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAA\\nZuZhIwAAgL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAA\\ngL8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8xeao+lS9qP5Yvar4xeao+lS9qP5Yv\\nar4xeao+lS9qP5Yvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUvar7kbXU/\\nbRotvpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uv\\nar5NMSA/++g+v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uvar5NMSC/\\n++g+v5Yvar5NMSC/++g+v5Yvar5NMSC/++g+v5Yvar7kbXW/bRotvpYvar7kbXW/bRotvpYv\\nar7kbXW/bRotvpYvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUvar4xeaq+\\nlS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar6/vj4/v74+P7++Pj8AAIA/HIYvPLsf\\n8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7srvOzEy/QPCkPOiQxLzOzEy/AAAAAKRMAL3OzEy/\\nQPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/ljjevKNMgDzOzEy/HIYvvLsf8TzOzEy/HIYvPLsf\\n8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7srve3V2/QPCkPOiQxLze3V2/AAAAAKRMAL3e3V2/\\nQPCkvOiQxLze3V2/T7P8vEs7srve3V2/ljjevKNMgDze3V2/HIYvvLsf8Tze3V2/AAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAAAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/mpmZvwAA\\nAAAAAAAAAAAAAJqZmb8AAAAAAAAAAAAAAACamZm/AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqZ\\nmT8AAAAAAAAAAAAAAACamZk/AAAAAAAAAAAAAAAAmpmZP5qZmb8AAAAAAAAAAAAAAACamZm/\\nAAAAAAAAAAAAAAAAmpmZvwAAAAAAAAEAAAAAAJmYmD6ZmJg+mZiYPgAAgD8AAAABAQEBAAAA\\n\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]} if (FALSE) { B <- matrix(c( 1, 0, 1, 0, 2, 0, 1, 0, 2), 3, 3) svdDemo(B) # a positive, semi-definite matrix with eigenvalues 12, 6, 0 C <- matrix(c(7, 4, 1, 4, 4, 4, 1, 4, 7), 3, 3) svdDemo(C) }"},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":null,"dir":"Reference","previous_headings":"","what":"The Matrix Sweep Operator — swp","title":"The Matrix Sweep Operator — swp","text":"swp function “sweeps” matrix rows columns given index produce new matrix rows columns “partialled ” orthogonalization. defined fundamental statistical operation multivariate methods Beaton (1964) expanded Dempster (1969). closely related orthogonal projection, applied cross-products covariance matrix, rather data.","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The Matrix Sweep Operator — swp","text":"","code":"swp(M, index)"},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The Matrix Sweep Operator — swp","text":"M numeric matrix index numeric vector indicating rows/columns swept. entries must less equal number rows columns M. missing, function sweeps rows/columns 1:min(dim(M)).","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The Matrix Sweep Operator — swp","text":"matrix M rows columns indices swept.","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"The Matrix Sweep Operator — swp","text":"M partitioned matrix $$\\left[ \\begin{array}{cc} \\mathbf {R} & \\mathbf {S} \\\\ \\mathbf {T} & \\mathbf {U} \\end{array} \\right]$$ \\(R\\) \\(q \\times q\\) swp(M, 1:q) gives $$\\left[ \\begin{array}{cc} \\mathbf {R}^{-1} & \\mathbf {R}^{-1}\\mathbf {S} \\\\ -\\mathbf {TR}^{-1} & \\mathbf {U}-\\mathbf {TR}^{-1}\\mathbf {S} \\\\ \\end{array} \\right]$$","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"The Matrix Sweep Operator — swp","text":"Beaton, . E. (1964), Use Special Matrix Operations Statistical Calculus, Princeton, NJ: Educational Testing Service. Dempster, . P. (1969) Elements Continuous Multivariate Analysis. Addison-Wesley, Reading, Mass.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"The Matrix Sweep Operator — swp","text":"","code":"data(therapy) mod3 <- lm(therapy ~ perstest + IE + sex, data=therapy) X <- model.matrix(mod3) XY <- cbind(X, therapy=therapy$therapy) XY #> (Intercept) perstest IE sexM therapy #> John 1 26 3 1 32 #> Susan 1 24 4 0 40 #> Mary 1 22 8 0 44 #> Paul 1 33 4 1 44 #> Jenny 1 27 6 0 48 #> Rick 1 36 4 1 52 #> Cathy 1 30 10 0 56 #> Robert 1 38 4 1 56 #> Lisa 1 30 12 0 60 #> Tina 1 34 15 0 68 M <- crossprod(XY) swp(M, 1) #> (Intercept) perstest IE sexM therapy #> (Intercept) -0.1 30 7 0.4 50 #> perstest 30.0 250 10 13.0 300 #> IE 7.0 10 152 -13.0 304 #> sexM 0.4 13 -13 2.4 -16 #> therapy 50.0 300 304 -16.0 1000 swp(M, 1:2) #> (Intercept) perstest IE sexM therapy #> (Intercept) -3.70 0.120 5.80 -1.160 14.0 #> perstest 0.12 -0.004 0.04 0.052 1.2 #> IE 5.80 0.040 151.60 -13.520 292.0 #> sexM -1.16 0.052 -13.52 1.724 -31.6 #> therapy 14.00 1.200 292.00 -31.600 640.0"},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"Constructs LaTeX code symbolic matrix, like: rendered LaTeX, produces: $$ \\begin{pmatrix} x_{11} & x_{12} & \\cdots & x_{1m} \\\\ x_{21} & x_{22} & \\cdots & x_{2m} \\\\ \\vdots & \\vdots & & \\vdots \\\\ x_{n1} & x_{n2} & \\cdots & x_{nm} \\\\ \\end{pmatrix} $$ Alternatively, number rows /columns can integers, generating matrix given size. function prints resulting code console, , using write_clip, can copied console, can used used markdown chunk Rmd qmd document, e.g,","code":"\\begin{pmatrix} x_{11} & x_{12} & \\dots & x_{1m} \\ x_{21} & x_{22} & \\dots & x_{2m} \\ \\vdots & \\vdots & \\ddots & \\vdots \\ x_{n1} & x_{n2} & \\dots & x_{nm} \\end{pmatrix} ```{r results = \"asis\"} symbolicMatrix(\"\\lambda\", nrow=3, ncol=3, diag=TRUE, lhs = \"\\boldsymbol{\\Lambda}\") ```"},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"","code":"symbolicMatrix( symbol = \"x\", nrow = \"n\", ncol = \"m\", matrix = \"pmatrix\", diag = FALSE, comma = FALSE, exponent, transpose = FALSE, lhs, print = TRUE )"},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"symbol name matrix elements, character string. LaTeX symbols, backslash must escaped, e.g, \\beta. nrow Number rows, single character representing rows symbolically, integer, generating many rows. ncol Number columns, single character representing columns symbolically, integer, generating many columns. matrix Character string giving LaTeX matrix environment used \\begin{}, \\end{}. Typically one : \"pmatrix\" uses parentheses: \"(\", \")\" \"bmatrix\" uses square brackets: \"[\", \"]\" \"Bmatrix\" uses braces: \"{\", \"}\" \"vmatrix\" uses vertical bars: \"|\", \"|\" \"Vmatrix\" uses double vertical bars: \"||\", \"||\" \"matrix\" generates plain matrix without delimeters diag logical; TRUE, -diagonal elements 0 (nrow must == ncol) comma logical; TRUE, commas inserted row column subscripts exponent specified, e.g., \"-1\", \"1/2\", exponent applied matrix transpose TRUE, transpose symbol \"\\top\" appended matrix; may also character string, e.g., \"T\", \"\\prime\", \"\\textsf{T}\" lhs optional LaTeX expression, e.g, \"\\boldsymbol\\Lamda\", left-hand side equation matrix right-hand side. print logical; print LaTeX code matrix console?; default: TRUE","code":""},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"Returns invisibly LaTeX representation matrix character string. Use cat() display console, write_clip copy clipboard","code":""},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"implementation assumes LaTeX amsmath package available uses shorthands \\begin{pmatrix}, ... rather . function experimental. features may added. E.g., nice : Specify exponents matrix elements, e.g, diagonal matrix square roots eigenvalues, \\lambda_i^{1/2} giving \\(\\lambda_i^{1/2}\\) Specify \"accents\" symbols, e.g., want elements given bars hats, e.g., \\widehat{\\beta}_{ij}, giving \\(\\widehat{\\beta}_{ij}\\)","code":"\\left( \\begin{array} ... \\end{array} \\right)"},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"","code":"symbolicMatrix() #> Error in symbolicMatrix(): could not find function \"symbolicMatrix\" # return value mat <- symbolicMatrix(print = FALSE) #> Error in symbolicMatrix(print = FALSE): could not find function \"symbolicMatrix\" str(mat) #> Error in eval(expr, envir, enclos): object 'mat' not found cat(mat) #> Error in eval(expr, envir, enclos): object 'mat' not found # copy to clipboard #clipr::write_clip(mat) # can't be done in non-interactive mode # numeric rows/cols symbolicMatrix(ncol=3) #> Error in symbolicMatrix(ncol = 3): could not find function \"symbolicMatrix\" symbolicMatrix(nrow=4) #> Error in symbolicMatrix(nrow = 4): could not find function \"symbolicMatrix\" symbolicMatrix(nrow=4, ncol=4) #> Error in symbolicMatrix(nrow = 4, ncol = 4): could not find function \"symbolicMatrix\" # diagonal matrices symbolicMatrix(nrow=3, ncol=3, diag=TRUE) #> Error in symbolicMatrix(nrow = 3, ncol = 3, diag = TRUE): could not find function \"symbolicMatrix\" symbolicMatrix(nrow=\"n\", ncol=\"n\", diag=TRUE) #> Error in symbolicMatrix(nrow = \"n\", ncol = \"n\", diag = TRUE): could not find function \"symbolicMatrix\" # commas, exponents, transpose symbolicMatrix(\"\\\\beta\", comma=TRUE, exponent=\"-1\") #> Error in symbolicMatrix(\"\\\\beta\", comma = TRUE, exponent = \"-1\"): could not find function \"symbolicMatrix\" symbolicMatrix(\"\\\\beta\", comma=TRUE, transpose=TRUE) #> Error in symbolicMatrix(\"\\\\beta\", comma = TRUE, transpose = TRUE): could not find function \"symbolicMatrix\" symbolicMatrix(\"\\\\beta\", comma=TRUE, exponent=\"-1\", transpose=TRUE) #> Error in symbolicMatrix(\"\\\\beta\", comma = TRUE, exponent = \"-1\", transpose = TRUE): could not find function \"symbolicMatrix\" # represent the SVD, X = U D V' symbolically X <- symbolicMatrix(\"x\", \"n\", \"p\") #> Error in symbolicMatrix(\"x\", \"n\", \"p\"): could not find function \"symbolicMatrix\" U <- symbolicMatrix(\"u\", \"n\", \"k\") #> Error in symbolicMatrix(\"u\", \"n\", \"k\"): could not find function \"symbolicMatrix\" D <- symbolicMatrix(\"\\\\lambda\", \"k\", \"k\", diag=TRUE) #> Error in symbolicMatrix(\"\\\\lambda\", \"k\", \"k\", diag = TRUE): could not find function \"symbolicMatrix\" V <- symbolicMatrix(\"v\", \"k\", \"p\", transpose = TRUE) #> Error in symbolicMatrix(\"v\", \"k\", \"p\", transpose = TRUE): could not find function \"symbolicMatrix\" cat(\"\\\\mathrm{SVD:}\\n\", X, \"=\\n\", U, D, V) #> Error in eval(expr, envir, enclos): object 'X' not found"},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a Symmetric Matrix from a Vector — symMat","title":"Create a Symmetric Matrix from a Vector — symMat","text":"Creates square symmetric matrix vector.","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a Symmetric Matrix from a Vector — symMat","text":"","code":"symMat(x, diag = TRUE, byrow = FALSE, names = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a Symmetric Matrix from a Vector — symMat","text":"x numeric vector used fill upper lower triangle matrix. diag Logical. TRUE (default), diagonals created matrix replaced elements x; otherwise, diagonals created matrix replaced \"1\". byrow Logical. FALSE (default), created matrix filled columns; otherwise, matrix filled rows. names Either logical character vector names rows columns matrix. FALSE, names assigned; TRUE, rows columns named X1, X2, ... .","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a Symmetric Matrix from a Vector — symMat","text":"symmetric square matrix based column major ordering elements x.","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a Symmetric Matrix from a Vector — symMat","text":"Originally metaSEM::vec2symMat, Mike W.-L. Cheung ; modified Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a Symmetric Matrix from a Vector — symMat","text":"","code":"symMat(1:6) #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 4 5 #> [3,] 3 5 6 symMat(1:6, byrow=TRUE) #> [,1] [,2] [,3] #> [1,] 1 2 4 #> [2,] 2 3 5 #> [3,] 4 5 6 symMat(5:0, diag=FALSE) #> [,1] [,2] [,3] [,4] #> [1,] 1 5 4 3 #> [2,] 5 1 2 1 #> [3,] 4 2 1 0 #> [4,] 3 1 0 1"},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":null,"dir":"Reference","previous_headings":"","what":"Therapy Data — therapy","title":"Therapy Data — therapy","text":"toy data set outcome therapy relation personality test (perstest) scale internal-external locus control (IE) used illustrate linear multiple regression.","code":""},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Therapy Data — therapy","text":"","code":"data(\"therapy\")"},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Therapy Data — therapy","text":"data frame 10 observations following 4 variables. sex factor levels F M perstest score personality test, numeric vector therapy outcome psychotherapy, numeric vector IE score scale internal-external locus control, numeric vector","code":""},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Therapy Data — therapy","text":"","code":"data(therapy) plot(therapy ~ perstest, data=therapy, pch=16) abline(lm(therapy ~ perstest, data=therapy), col=\"red\") plot(therapy ~ perstest, data=therapy, cex=1.5, pch=16, col=ifelse(sex==\"M\", \"red\",\"blue\"))"},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":null,"dir":"Reference","previous_headings":"","what":"Trace of a Matrix — tr","title":"Trace of a Matrix — tr","text":"Calculates trace square numeric matrix, .e., sum diagonal elements","code":""},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trace of a Matrix — tr","text":"","code":"tr(X)"},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trace of a Matrix — tr","text":"X numeric matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trace of a Matrix — tr","text":"numeric value, sum diag(X)","code":""},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trace of a Matrix — tr","text":"","code":"X <- matrix(1:9, 3, 3) tr(X) #> [1] 15"},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":null,"dir":"Reference","previous_headings":"","what":"Vandermode Matrix — vandermode","title":"Vandermode Matrix — vandermode","text":"function returns Vandermode matrix numeric vector, x, whose columns vector raised powers 0:n.","code":""},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Vandermode Matrix — vandermode","text":"","code":"vandermode(x, n)"},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Vandermode Matrix — vandermode","text":"x numeric vector n numeric scalar","code":""},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Vandermode Matrix — vandermode","text":"matrix size length(x) x n","code":""},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vandermode Matrix — vandermode","text":"","code":"vandermode(1:5, 4) #> [,1] [,2] [,3] [,4] #> [1,] 1 1 1 1 #> [2,] 1 2 4 8 #> [3,] 1 3 9 27 #> [4,] 1 4 16 64 #> [5,] 1 5 25 125"},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":null,"dir":"Reference","previous_headings":"","what":"Vectorize a Matrix — vec","title":"Vectorize a Matrix — vec","text":"Returns 1-column matrix, stacking columns x, matrix vector. Also supports comma-separated inputs similar concatenation function c.","code":""},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Vectorize a Matrix — vec","text":"","code":"vec(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Vectorize a Matrix — vec","text":"x matrix vector ... (optional) additional objects stacked","code":""},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Vectorize a Matrix — vec","text":"one-column matrix containing elements x ... column order","code":""},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vectorize a Matrix — vec","text":"","code":"vec(1:3) #> [,1] #> [1,] 1 #> [2,] 2 #> [3,] 3 vec(matrix(1:6, 2, 3)) #> [,1] #> [1,] 1 #> [2,] 2 #> [3,] 3 #> [4,] 4 #> [5,] 5 #> [6,] 6 vec(c(\"hello\", \"world\")) #> [,1] #> [1,] \"hello\" #> [2,] \"world\" vec(\"hello\", \"world\") #> [,1] #> [1,] \"hello\" #> [2,] \"world\" vec(1:3, \"hello\", \"world\") #> [,1] #> [1,] \"1\" #> [2,] \"2\" #> [3,] \"3\" #> [4,] \"hello\" #> [5,] \"world\""},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw geometric vectors in 2D — vectors","title":"Draw geometric vectors in 2D — vectors","text":"function draws vectors 2D plot, way facilitates constructing vector diagrams. allows vectors specified rows matrix, can draw labels vectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw geometric vectors in 2D — vectors","text":"","code":"vectors( X, origin = c(0, 0), lwd = 2, angle = 13, length = 0.15, labels = TRUE, cex.lab = 1.5, pos.lab = 4, frac.lab = 1, ... )"},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw geometric vectors in 2D — vectors","text":"X vector two-column matrix representing set geometric vectors; matrix, one vector drawn row origin origin drawn, vector length 2. lwd line width(s) vectors, constant vector length equal number rows X. angle angle argument passed arrows determining angle arrow heads. length length argument passed arrows determining length arrow heads. labels logical character vector labels vectors. TRUE X matrix, labels taken rownames(X). NULL, labels drawn. cex.lab character expansion applied vector labels. May number numeric vector corresponding rows X, recycled necessary. pos.lab label position relative label point text, recycled necessary. frac.lab location label point, fraction distance origin X, recycled necessary. Values frac.lab > 1 locate label beyond end vector. ... arguments passed graphics functions.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw geometric vectors in 2D — vectors","text":"none","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw geometric vectors in 2D — vectors","text":"","code":"# shows addition of vectors u <- c(3,1) v <- c(1,3) sum <- u+v xlim <- c(0,5) ylim <- c(0,5) # proper geometry requires asp=1 plot( xlim, ylim, type=\"n\", xlab=\"X\", ylab=\"Y\", asp=1) abline(v=0, h=0, col=\"gray\") vectors(rbind(u,v,`u+v`=sum), col=c(\"red\", \"blue\", \"purple\"), cex.lab=c(2, 2, 2.2)) # show the opposing sides of the parallelogram vectors(sum, origin=u, col=\"red\", lty=2) vectors(sum, origin=v, col=\"blue\", lty=2) # projection of vectors vectors(Proj(v,u), labels=\"P(v,u)\", lwd=3) vectors(v, origin=Proj(v,u)) corner(c(0,0), Proj(v,u), v, col=\"grey\")"},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw 3D vectors — vectors3d","title":"Draw 3D vectors — vectors3d","text":"function draws vectors 3D plot, way facilitates constructing vector diagrams. allows vectors specified rows matrix, can draw labels vectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw 3D vectors — vectors3d","text":"","code":"vectors3d( X, origin = c(0, 0, 0), headlength = 0.035, ref.length = NULL, radius = 1/60, labels = TRUE, cex.lab = 1.2, adj.lab = 0.5, frac.lab = 1.1, draw = TRUE, ... )"},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw 3D vectors — vectors3d","text":"X vector three-column matrix representing set geometric vectors; matrix, one vector drawn row origin origin drawn, vector length 3. headlength headlength argument passed arrows3d determining length arrow heads ref.length vector length used scaling arrow heads size; NULL longest vector used scale arrow heads radius radius base arrow heads labels logical character vector labels vectors. TRUE X matrix, labels taken rownames(X). FALSE NULL, labels drawn. cex.lab character expansion applied vector labels. May number numeric vector corresponding rows X, recycled necessary. adj.lab label position relative label point text3d, recycled necessary. frac.lab location label point, fraction distance origin X, recycled necessary. Values frac.lab > 1 locate label beyond end vector. draw TRUE (default), draw vector(s). ... arguments passed graphics functions.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw 3D vectors — vectors3d","text":"invisibly returns vector ref.length used scale arrow heads","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"bugs","dir":"Reference","previous_headings":"","what":"Bugs","title":"Draw 3D vectors — vectors3d","text":"present, color (color=) argument handled expected one vector drawn.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw 3D vectors — vectors3d","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw 3D vectors — vectors3d","text":"3D plot","code":"vec <- rbind(diag(3), c(1,1,1)) rownames(vec) <- c(\"X\", \"Y\", \"Z\", \"J\") library(rgl) open3d() vectors3d(vec, color=c(rep(\"black\",3), \"red\"), lwd=2) # draw the XZ plane, whose equation is Y=0 planes3d(0, 0, 1, 0, col=\"gray\", alpha=0.2) vectors3d(c(1,1,0), col=\"green\", lwd=2) # show projections of the unit vector J segments3d(rbind(c(1,1,1), c(1, 1, 0))) segments3d(rbind(c(0,0,0), c(1, 1, 0))) segments3d(rbind(c(1,0,0), c(1, 1, 0))) segments3d(rbind(c(0,1,0), c(1, 1, 0))) # show some orthogonal vectors p1 <- c(0,0,0) p2 <- c(1,1,0) p3 <- c(1,1,1) p4 <- c(1,0,0) corner(p1, p2, p3, col=\"red\") corner(p1, p4, p2, col=\"red\") corner(p1, p4, p3, col=\"blue\") 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":250,\"objects\":{\"256\":{\"id\":256,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"0\",\"colors\":\"1\",\"centers\":\"2\",\"ignoreExtent\":false,\"flags\":41024},\"257\":{\"id\":257,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"3\",\"colors\":\"5\",\"centers\":\"6\",\"normals\":\"4\",\"ignoreExtent\":false,\"flags\":32771},\"258\":{\"id\":258,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"259\":{\"id\":259,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"260\":{\"id\":260,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"261\":{\"id\":261,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"19\",\"colors\":\"20\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"X\"],[\"Y\"],[\"Z\"],[\"J\"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"21\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"262\":{\"id\":262,\"type\":\"planes\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"22\",\"colors\":\"24\",\"offsets\":[[0]],\"centers\":\"25\",\"normals\":\"23\",\"ignoreExtent\":true,\"flags\":32803},\"263\":{\"id\":263,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"26\",\"colors\":\"27\",\"centers\":\"28\",\"ignoreExtent\":false,\"flags\":41024},\"264\":{\"id\":264,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"29\",\"colors\":\"31\",\"centers\":\"32\",\"normals\":\"30\",\"ignoreExtent\":false,\"flags\":32771},\"265\":{\"id\":265,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"33\",\"colors\":\"34\",\"centers\":\"35\",\"ignoreExtent\":false,\"flags\":32832},\"266\":{\"id\":266,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"36\",\"colors\":\"37\",\"centers\":\"38\",\"ignoreExtent\":false,\"flags\":32832},\"267\":{\"id\":267,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"39\",\"colors\":\"40\",\"centers\":\"41\",\"ignoreExtent\":false,\"flags\":32832},\"268\":{\"id\":268,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"42\",\"colors\":\"43\",\"centers\":\"44\",\"ignoreExtent\":false,\"flags\":32832},\"269\":{\"id\":269,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"45\",\"colors\":\"46\",\"centers\":\"47\",\"ignoreExtent\":false,\"flags\":32832},\"270\":{\"id\":270,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"48\",\"colors\":\"49\",\"centers\":\"50\",\"ignoreExtent\":false,\"flags\":32832},\"271\":{\"id\":271,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"51\",\"colors\":\"52\",\"centers\":\"53\",\"ignoreExtent\":false,\"flags\":32832},\"254\":{\"id\":254,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"253\":{\"id\":253,\"type\":\"background\",\"material\":{},\"colors\":\"54\",\"centers\":\"55\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"255\":{\"id\":255,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"56\",\"centers\":\"57\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"250\":{\"id\":250,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":250,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.735036373138428],\"modelMatrix\":[[1,0,0,-0.5417932868003845],[0,0.3420201539993286,0.9396926164627075,-0.6947333812713623],[0,-0.9396926164627075,0.3420201539993286,-3.411468982696533],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.863703727722168,-13.46437454223633],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-0.01641346327960491,1.100000023841858,-0.01666666753590107,1.100000023841858,-0.01566154323518276,1.100000023841858],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,254],\"subscenes\":[],\"flags\":42355}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5121,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":8,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":6,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5121,\"count\":4,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":21,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":22,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":25,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":28,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":30,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":31,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":32,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":33,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":34,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":35,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":36,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":37,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":38,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":40,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":41,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":43,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":44,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":46,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":47,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":49,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":50,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":51,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":53,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":54,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":55,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":56,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":57,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":24,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":32,\"byteOffset\":24},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":752},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1400},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1616},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2480},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3128},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3344},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3560},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4208},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4856},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":5072},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5288},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5936},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6584},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6800},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7016},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7112},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7128},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":7224},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":7260},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7264},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":7280},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7328},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7334},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7340},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":7352},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":8000},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8648},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":8652},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8868},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8874},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8880},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8892},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8898},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8904},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8916},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8922},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8928},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8940},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8946},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8952},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":8964},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9000},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9004},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9040},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9076},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9080},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9116},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9152},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9156},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":9192},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9208},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9211},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9215}],\"buffers\":[{\"byteLength\":9218,\"bytes\":\"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\\nF3twPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAF3twPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAF3twPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAF3twPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAF3twPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAF3twPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAF3twPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\nAACAPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAAACAPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAAACAPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAAACAPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAAACAPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAAACAPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAAACAPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA\\n//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAACA//9/PwAAAAAAAACA//9/PwAA\\n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\\ngD6ep1Y/q9z3vskRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6WUh8/\\nkN89P8oRgD6WUh8/kN89P8oRgD6WUh8/kN89P8oRgD4AAAAAqtx3P8kRgD4AAAAAqtx3P8kR\\ngD4AAAAAqtx3P8kRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6tGHS/\\nyCksPsoRgD6tGHS/yCksPsoRgD6tGHS/yCksPsoRgD6ep1a/q9z3vskRgD6ep1a/q9z3vskR\\ngD6ep1a/q9z3vskRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\n0r8gvBd7cD+5JRQ82hCruxd7cD+Kdyg8ZqTtOhd7cD8A69s7RgsDPBd7cD8AAAAA2hArPBd7\\ncD8A69u7RgsDPBd7cD+Kdyi8ZqTtOhd7cD+5JRS82hCruxd7cD8mCGq70r8gvBd7cD8mCGo7\\n0r8gvGandT+5JRQ82hCru2andT+Kdyg8ZqTtOmandT8A69s7RgsDPGandT8AAAAA2hArPGan\\ndT8A69u7RgsDPGandT+Kdyi8ZqTtOmandT+5JRS82hCru2andT8mCGq70r8gvGandT89Cnc/\\nPQp3Pz0Kdz9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT89Cnc/PQp3Pz0Kdz8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj89Cnc/PQp3Pz0Kdz+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD89Cnc/\\nPQp3Pz0Kdz+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz89Cnc/PQp3Pz0Kdz/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD89Cnc/PQp3Pz0Kdz+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj89Cnc/\\nPQp3Pz0Kdz+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD89Cnc/PQp3Pz0Kdz/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej89Cnc/PQp3Pz0Kdz+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej8AAIA/\\nAACAPwAAgD9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT8AAIA/AACAPwAAgD8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj8AAIA/AACAPwAAgD+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD8AAIA/\\nAACAPwAAgD+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz8AAIA/AACAPwAAgD/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD8AAIA/AACAPwAAgD+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj8AAIA/\\nAACAPwAAgD+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD8AAIA/AACAPwAAgD/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej8AAIA/AACAPwAAgD+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej9fzRM/\\nUc0TP/3MEz9fzRM/Uc0TP/3MEz9fzRM/Uc0TP/3MEz/+zBM/XM0TP1fNEz/+zBM/XM0TP1fN\\nEz/+zBM/XM0TP1fNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/9zBM/\\nX80TP1HNEz/9zBM/X80TP1HNEz/9zBM/X80TP1HNEz9XzRM//swTP1zNEz9XzRM//swTP1zN\\nEz9XzRM//swTP1zNEz9VzRM//swTP17NEz9VzRM//swTP17NEz9VzRM//swTP17NEz9RzRM/\\n/cwTP1/NEz9RzRM//cwTP1/NEz9RzRM//cwTP1/NEz9czRM/V80TP/7MEz9czRM/V80TP/7M\\nEz9czRM/V80TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9Lb1o+\\nU3ISv9S/Sj9Lb1o+U3ISv9S/Sj9Lb1o+U3ISv9S/Sj/gEjQ/FYMevxmzsj7gEjQ/FYMevxmz\\nsj7gEjQ/FYMevxmzsj4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr7Uv0o/\\nS29aPlNyEr/Uv0o/S29aPlNyEr/Uv0o/S29aPlNyEr8Zs7I+4BI0PxWDHr8Zs7I+4BI0PxWD\\nHr8Zs7I+4BI0PxWDHr8dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr5TchK/\\n1L9KP0tvWj5TchK/1L9KP0tvWj5TchK/1L9KP0tvWj4Vgx6/GbOyPuASND8Vgx6/GbOyPuAS\\nND8Vgx6/GbOyPuASND+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP/vOnc/\\n4w91P+bTeD9OlXg/lO50P9iadz/QNnk/ysl1PyAedj/m03g/7zp3P+MPdT/Ymnc/TpV4P5Tu\\ndD8gHnY/0DZ5P8rJdT/jD3U/5tN4P+86dz+U7nQ/2Jp3P06VeD/KyXU/IB52P9A2eT+GN3o/\\negx4P37Qez/jkXs/K+t3P26Xej9nM3w/X8Z4P7caeT9+0Hs/hjd6P3oMeD9ul3o/45F7Pyvr\\ndz+3Gnk/ZzN8P1/GeD96DHg/ftB7P4Y3ej8r63c/bpd6P+ORez9fxng/txp5P2czfD8AAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNzIw/AAAAAAAA\\nAAAAAAAAzcyMPwAAAAAAAAAAAAAAAM3MjD/NzIw/zcyMP83MjD8AAAD/AAAA/wAAAP//AAD/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzcyMPwAA\\nAAAAAAAAAAAAAM3MjD8AAAAAAAAAAAAAAADNzIw/zcyMP83MjD/NzIw/h3WGvImIiLwAAACA\\nzcyMP83MjD8AAACAh3WGvM3MjD8AAACAAAABAL++Pj+/vj4/v74+P83MTD6CIbY+pk86PwAA\\nAAAuVTo/Ygu2PgAAAAAAAMB/AADAfwAAwH8AAMB/AADAfwAAwH8AAAABAQAAAQABAAAAAAA/\\nAAAAPwAAAAA9Cnc/PQp3PwAAAAA9Cnc/PQp3P4mIiDyy+ng/yRl1P2MuUTw9Cnc/PQp3PwAA\\nAACy+ng/yRl1P2MuUTzbAno/oBF0P42rPTs9Cnc/PQp3PwAAAADbAno/oBF0P42rPTsdp3k/\\nXm10P4mICLw9Cnc/PQp3PwAAAAAdp3k/Xm10P4mICLxmEng/FQJ2P6NMgLw9Cnc/PQp3PwAA\\nAABmEng/FQJ2P6NMgLwVAnY/ZhJ4P6NMgLw9Cnc/PQp3PwAAAAAVAnY/ZhJ4P6NMgLxebXQ/\\nHad5P4mICLw9Cnc/PQp3PwAAAABebXQ/Had5P4mICLygEXQ/2wJ6P42rPTs9Cnc/PQp3PwAA\\nAACgEXQ/2wJ6P42rPTvJGXU/svp4P2MuUTw9Cnc/PQp3PwAAAADJGXU/svp4P2MuUTw9Cnc/\\nPQp3P4mIiDwAAIA/AACAPwAAAAA9Cnc/PQp3P4mIiDyy+ng/yRl1P2MuUTwAAIA/AACAPwAA\\nAACy+ng/yRl1P2MuUTzbAno/oBF0P42rPTsAAIA/AACAPwAAAADbAno/oBF0P42rPTsdp3k/\\nXm10P4mICLwAAIA/AACAPwAAAAAdp3k/Xm10P4mICLxmEng/FQJ2P6NMgLwAAIA/AACAPwAA\\nAABmEng/FQJ2P6NMgLwVAnY/ZhJ4P6NMgLwAAIA/AACAPwAAAAAVAnY/ZhJ4P6NMgLxebXQ/\\nHad5P4mICLwAAIA/AACAPwAAAABebXQ/Had5P4mICLygEXQ/2wJ6P42rPTsAAIA/AACAPwAA\\nAACgEXQ/2wJ6P42rPTvJGXU/svp4P2MuUTwAAIA/AACAPwAAAADJGXU/svp4P2MuUTw9Cnc/\\nPQp3P4mIiDzFBDU/IgU1PwAAAADFBDU/IgU1PwAAAADFBDU/IgU1PwAAAADZBDU/EAU1P/98\\ntLXZBDU/EAU1P/98tLXZBDU/EAU1P/98tLXUBDU/EwU1PwGX+zTUBDU/EwU1PwGX+zTUBDU/\\nEwU1PwGX+zTeBDU/CAU1P+Z3CzbeBDU/CAU1P+Z3CzbeBDU/CAU1P+Z3Czb0BDU/9AQ1PyN9\\nNDb0BDU/9AQ1PyN9NDb0BDU/9AQ1PyN9NDYIBTU/3wQ1P+LICjYIBTU/3wQ1P+LICjYIBTU/\\n3wQ1P+LICjYTBTU/1AQ1P+3a+DQTBTU/1AQ1P+3a+DQTBTU/1AQ1P+3a+DQQBTU/2QQ1P/98\\ntLUQBTU/2QQ1P/98tLUQBTU/2QQ1P/98tLUiBTU/xQQ1PwAAAAAiBTU/xQQ1PwAAAAAiBTU/\\nxQQ1PwAAAACgReM++G6NvKpaZT+gReM++G6NvKpaZT+gReM++G6NvKpaZT9lEkw/G7a9vgwT\\n9D5lEkw/G7a9vgwT9D5lEkw/G7a9vgwT9D56kmA/QrbmvnaIKb56kmA/QrbmvnaIKb56kmA/\\nQrbmvnaIKb5YiyU//k9hvqD4Or9YiyU//k9hvqD4Or9YiyU//k9hvqD4Or+6blo+um5aPtYS\\ndL+6blo+um5aPtYSdL+6blo+um5aPtYSdL8AUGG+WIslP6D4Or8AUGG+WIslP6D4Or8AUGG+\\nWIslP6D4Or9Ctua+epJgP3aIKb5Ctua+epJgP3aIKb5Ctua+epJgP3aIKb4dtr2+ZRJMPw0T\\n9D4dtr2+ZRJMPw0T9D4dtr2+ZRJMPw0T9D74bo28oEXjPqpaZT/4bo28oEXjPqpaZT/4bo28\\noEXjPqpaZT8AAQABuq93P8Jkdj/SvyA8RK14PzhndT/aEKs7vOZ4P74tdT9mpO26QEF4PzvT\\ndT9GCwO8Pgp3Pz4Kdz/aECu8O9N1P0BBeD9GCwO8vy11P7zmeD9mpO26N2d1P0OteD/aEKs7\\nwmR2P7qvdz/SvyA8UKx6P1dheT/SvyA82ql7P85jeD/aEKs7U+N7P1YqeD9mpO261j17P9LP\\neD9GCwO81AZ6P9MGej/aECu80M94P9c9ez9GCwO8Vip4P1Pjez9mpO26zmN4P9upez/aEKs7\\nV2F5P1Csej/SvyA8AQEBAQEAAAAAAQAAAACAPwAAgD8AAAA/AAAAAQEAAAAAAQAAAAAAPwAA\\nAD8AAAAAAQAAAQEAAAAAAQAAAACAPwAAAD8AAAAAAAEAAQEAAAAAAQAAAAAAPwAAgD8AAAAA\\n6OVtP+jlbT8AAAAA6OVtP+jlbT/NzMw9AACAPwAAgD/NzMw9AQAAAejlbT/o5W0/AAAAAOjl\\nbT/o5W0/zczMPQAAgD8AAIA/zczMPWZmZj8AAAAAAAAAAGZmZj/NzMw9AAAAAAAAgD/NzMw9\\nAAAAAAEAAAFmZmY/AAAAAAAAAABmZmY/zczMPQAAAAAAAIA/zczMPQAAAABmZmY/AAAAAAAA\\nAABmZmY/w9CQPcPQkD0AAIA/w9CQPcPQkD0AAAEBZmZmPwAAAAAAAAAAZmZmP8PQkD3D0JA9\\nAACAP8PQkD3D0JA9mZiYPpmYmD6ZmJg+AACAPwAAAAEBAQEAAAA=\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]} rgl.bringtotop()"},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":null,"dir":"Reference","previous_headings":"","what":"Workers Data — workers","title":"Workers Data — workers","text":"toy data set comprised information workers Income relation variables, used illustrating linear multiple regression.","code":""},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Workers Data — workers","text":"","code":"data(\"workers\")"},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Workers Data — workers","text":"data frame 10 observations following 4 variables. Income income job, numeric vector Experience number years experience, numeric vector Skill skill level job, numeric vector Gender factor levels Female Male","code":""},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Workers Data — workers","text":"","code":"data(workers) plot(Income ~ Experience, data=workers, main=\"Income ~ Experience\", pch=20, cex=2) # simple linear regression reg1 <- lm(Income ~ Experience, data=workers) abline(reg1, col=\"red\", lwd=3) # quadratic fit? plot(Income ~ Experience, data=workers, main=\"Income ~ poly(Experience,2)\", pch=20, cex=2) reg2 <- lm(Income ~ poly(Experience,2), data=workers) fit2 <-predict(reg2) abline(reg1, col=\"red\", lwd=1, lty=1) lines(workers$Experience, fit2, col=\"blue\", lwd=3) # How does Income depend on a factor? plot(Income ~ Gender, data=workers, main=\"Income ~ Gender\") points(workers$Gender, jitter(workers$Income), cex=2, pch=20) means<-aggregate(workers$Income,list(workers$Gender),mean) points(means,col=\"red\", pch=\"+\", cex=2) lines(means,col=\"red\", lwd=2)"},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":null,"dir":"Reference","previous_headings":"","what":"Generalized Vector Cross Product — xprod","title":"Generalized Vector Cross Product — xprod","text":"Given two linearly independent length 3 vectors **** **b**, cross product, \\(\\mathbf{} \\times \\mathbf{b}\\) (read \"cross b\"), vector perpendicular **** **b** thus normal plane containing .","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generalized Vector Cross Product — xprod","text":"","code":"xprod(...)"},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generalized Vector Cross Product — xprod","text":"... N-1 linearly independent vectors length, N.","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generalized Vector Cross Product — xprod","text":"Returns generalized vector cross-product, vector length N.","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generalized Vector Cross Product — xprod","text":"generalization idea applies two dimensional vectors. See: [https://en.wikipedia.org/wiki/Cross_product] geometric algebraic properties.","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generalized Vector Cross Product — xprod","text":"Matthew Lundberg, [Stack Overflow post][https://stackoverflow.com/questions/36798301/r-compute-cross-product--vectors-physics]","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generalized Vector Cross Product — xprod","text":"","code":"xprod(1:3, 4:6) #> [1] -3 6 -3 # This works for an dimension xprod(c(0,1)) # 2d #> [1] 1 0 xprod(c(1,0,0), c(0,1,0)) # 3d #> [1] 0 0 1 xprod(c(1,1,1), c(0,1,0)) # 3d #> [1] -1 0 1 xprod(c(1,0,0,0), c(0,1,0,0), c(0,0,1,0)) # 4d #> [1] 0 0 0 -1"},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-099","dir":"Changelog","previous_headings":"","what":"matlib 0.9.9","title":"matlib 0.9.9","text":"added symbolicMatrix() create symbolic matrix","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-098","dir":"Changelog","previous_headings":"","what":"matlib 0.9.8","title":"matlib 0.9.8","text":"CRAN release: 2024-07-25 added circle() drawing circles diagrams vectors() now handles 0-length vectors gracefully #50. matrix2latex() generalized allow different bracket types optionally show size matrix.","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-097","dir":"Changelog","previous_headings":"","what":"matlib 0.9.7","title":"matlib 0.9.7","text":"inv() aliases now return invisible matrix verbose = TRUE match behaviour related functions (e.g., gaussianElimination()) GramSchmidt() gains argument, omit_zero_columns control whether -zero columns retained output (issue #48) [Thx: @ggrothendieck] Merge pull request #49 JF retain column names GramSchmidt().","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-096","dir":"Changelog","previous_headings":"","what":"matlib 0.9.6","title":"matlib 0.9.6","text":"CRAN release: 2022-12-08 fix subtle problems related use MASS::fractions() various display functions, #42. (Thx: Phil Chalmers) Fix problem `showEqn(…, simplify=TRUE), #45. (Thx: John Fox) Remove Suggests: rglwidget now rgl package (Thx: Duncan Murdoch); Merge pull request #39 dmurdoch/norglwidget","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-095","dir":"Changelog","previous_headings":"","what":"matlib 0.9.5","title":"matlib 0.9.5","text":"CRAN release: 2021-08-21 fix ‘CRAN packages requiring webshot2 declaring ’ fix error Proj.Rd","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-094","dir":"Changelog","previous_headings":"","what":"matlib 0.9.4","title":"matlib 0.9.4","text":"CRAN release: 2020-10-29 added xprod() vector cross-product added data-beta vignette fix sprintf warning LU [Phil Chalmers] better plotting planes plotEqn3d, alpha=0.9","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-093","dir":"Changelog","previous_headings":"","what":"matlib 0.9.3","title":"matlib 0.9.3","text":"CRAN release: 2020-04-02 gaussianElimination() friends now handle one-row one-column matrices [suggestion Jana Jarecki] improvements plotEqn()","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-092","dir":"Changelog","previous_headings":"","what":"matlib 0.9.2","title":"matlib 0.9.2","text":"CRAN release: 2019-05-29 Bug fix arrows3d.r [Thx: Douglas Whitaker] Bump package version matlib gets hex sticker Incorporated numerical tolerance GramSchmidt() [John Fox] Improved computation SVD [John Fox] now export printMatrix() now export circle3d() [req: Marco Scazzocchio] now use_revdep()","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-091","dir":"Changelog","previous_headings":"","what":"matlib 0.9.1","title":"matlib 0.9.1","text":"CRAN release: 2018-04-04 fix references car datatsets -> carData","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-090","dir":"Changelog","previous_headings":"","what":"matlib 0.9.0","title":"matlib 0.9.0","text":"showEqn() gains reduced logical print unique regression equations lm()-type object passed. May combined simplify logical argument reductions echelon() gains reduced logical indicate whether reduced non-reduced form computed powerMethod() gains plot = TRUE logical draw iteration history added support 'lm' objects showEqn() show design matrix equations added verbose option GramSchmidt() another example added printMatEqn() print matrix expressions side--side prepare release cumulative major version Phil Chalmers now recognized officially package author [aut]","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-083","dir":"Changelog","previous_headings":"","what":"matlib 0.8.3","title":"matlib 0.8.3","text":"rename functions consistency: eig() -> Eigen(), point_on_line() -> pointOnLine(), power_method() -> powerMethod(), row_cofactors() -> rowCofactors(), row_minors() -> rowMinors(). add Det() compute determinants elimination, eigenvalues, minors cofactors, possibility verbose output. plotEqn3d() gets axes argument lit control lighting planes; lit solves problem planes becoming indistinguishable rotations. add svdDemo() function illustrate SVD 3 x 3 matrix [thx: Duncan Murdoch] add symMat() create square symmetric matrix vector. add angle() calculate angle vectors powerMethod() gets keep argument, possible use plotting convergence eigenvectors. add adjoint(), round methods determinants add GramSchmidt() Gram-Schmidt algorithm columns matrix. existing function gsorth() deprecated removed. gsorth() deprecated. fixed use MASS::fractions gaussianElimination added printMatEqn() print matrix expressions side--side","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-081","dir":"Changelog","previous_headings":"","what":"matlib 0.8.1","title":"matlib 0.8.1","text":"CRAN release: 2016-09-17 remove inst/doc satisfy CRAN","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-080","dir":"Changelog","previous_headings":"","what":"matlib 0.8.0","title":"matlib 0.8.0","text":"add vignette properties determinants (det-ex1) add vignette evaluation determinants (det-ex2) add vignette matrix inverse (inv-ex1) now use travis-ci check builds add vignette matrix inverse using EROs (inv-ex2) extended use geometric diagrams vignettes add vignette generalized inverse (ginv) added J() unit vectors, matrices added LU() LU decomposition","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-073","dir":"Changelog","previous_headings":"","what":"matlib 0.7.3","title":"matlib 0.7.3","text":"CRAN release: 2016-06-06 Changed gaussianElimination() defining local ERO functions make algorithm clearer; verbose mode, show ERO. Added draw argument vectors3d() arrows3d(), defaults TRUE. FALSE, just returns returns “reg.length” help scaling. Optionally scale error spheres (circles) produced regvec3d() project confidence intervals x1 x2 axes. Small cosmetic changes regvec3d(). showEqn() gaussianElimination() get latex arguments, print results LaTeX format [thx: Phil Chalmers]","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-072","dir":"Changelog","previous_headings":"","what":"matlib 0.7.2","title":"matlib 0.7.2","text":"CRAN release: 2016-02-08 added argument error.sphere plot.regvec3d() [JF] remove use lengths() corner() avoid R version dependency","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-070","dir":"Changelog","previous_headings":"","what":"matlib 0.7.0","title":"matlib 0.7.0","text":"CRAN release: 2016-01-06 use corner() vectors3d.Rd added arc() 2D, 3D vector diagrams show angles vectors added regvec3d() 2D, 3D vector diagrams representing bivariate multiple regression model, lm(y ~ x1 + x2) [thx: John Fox] added internal .arrows() produce nice arrows 2D vector() diagrams fixed numerous small problems vector diagrams fixed erroneous statements vignettes showEqn() now aligns terms vertically prints without quotes reversed sense absolute points_on_line() clarified documentation","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-060","dir":"Changelog","previous_headings":"","what":"matlib 0.6.0","title":"matlib 0.6.0","text":"CRAN release: 2015-12-15 added vandermode() function added vec() convenience function vectorize matrix added is_square_matrix() tests added power_method(), power method dominant eigenvector [thx: Gaston Sanchez] added arrows3d() 3D geometric diagrams added vectors3d() 3D geometric diagrams added corner() 2D, 3D geometric diagrams added documentation content man/matlib.Rd README.md","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-052","dir":"Changelog","previous_headings":"","what":"matlib 0.5.2","title":"matlib 0.5.2","text":"CRAN release: 2015-11-19 added swp() function added vignette(\"gramreg\") - Gram-Schmidt Orthogonalization Regression","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-051","dir":"Changelog","previous_headings":"","what":"matlib 0.5.1","title":"matlib 0.5.1","text":"CRAN release: 2015-11-10 added len() convenience function Euclidean lengths added plotEqn3d() function using rgl plot equations 3 unknowns reorganized matlib.R become package .Rd document renamed proj() -> Proj() avoid conflict stats::proj() added vectors() plotting geometric diagrams added vignette(“linear-equations”) - Solving Linear Equations","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-041","dir":"Changelog","previous_headings":"","what":"matlib 0.4.1","title":"matlib 0.4.1","text":"CRAN release: 2015-11-05 Initial CRAN release","code":""}] +[{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"data-space","dir":"Articles","previous_headings":"","what":"Data space","title":"Vector Spaces of Least Squares and Linear Equations","text":"start simple linear regression problem, shown data space. Fit linear model, y ~ x. intercept b0 = 2.5 slope b1 = -1. Plot data least squares line.","code":"x <- c(1, 1, -1, -1) y <- 1:4 (mod <- lm(y ~ x)) ## ## Call: ## lm(formula = y ~ x) ## ## Coefficients: ## (Intercept) x ## 2.5 -1.0 par(mar=c(4,4,1,1)+.1) plot(y ~ x, pch=16, cex=1.5) abline(mod, lwd=2) abline(h = coef(mod)[1], col=\"grey\")"},{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"linear-equation-beta-space","dir":"Articles","previous_headings":"","what":"Linear equation (\\(\\beta\\)) space","title":"Vector Spaces of Least Squares and Linear Equations","text":"problem can represented matrix equation, \\(\\mathbf{y} = [\\mathbf{1}, \\mathbf{x}] \\mathbf{b} + \\mathbf{e} = \\mathbf{X} \\mathbf{b} + \\mathbf{e}\\). equation form \\(y_i = b_0 + b_1 x_i + e_i\\). least squares solution minimizes \\(\\sum e_i^2\\). can also describe representing four equations two unknowns, c(\"b0\", \"b1\"). equation corresponds line \\((b_0, b_1)\\) space. Let’s plot . plotEqn draws point intersection pair lines — solution pair observations. space, observation equations can satisfied simultaneously, best approximate solution can represented space coefficients linear model \\(y = X \\beta\\), intercept already included first column \\(X\\). LS solution shown black point, corresponding \\((b_0, b_1) = (2.5, -1)\\).","code":"X <- cbind(1, x) printMatEqn(y, \"=\", X, \"*\", vec(c(\"b0\", \"b1\")), \"+\", vec(paste0(\"e\", 1:4))) ## y X ## 1 = 1 1 * b0 + e1 ## 2 1 1 b1 e2 ## 3 1 -1 e3 ## 4 1 -1 e4 showEqn(X, y, vars=c(\"b0\", \"b1\"), simplify=TRUE) ## b0 + b1 = 1 ## b0 + b1 = 2 ## b0 - 1*b1 = 3 ## b0 - 1*b1 = 4 plotEqn(X, y, vars=c(\"b0\", \"b1\"), xlim=c(-2, 4)) ## b0 + b1 = 1 ## b0 + b1 = 2 ## b0 - 1*b1 = 3 ## b0 - 1*b1 = 4 plotEqn(X, y, vars=c(\"b0\", \"b1\"), xlim=c(-2, 4)) ## b0 + b1 = 1 ## b0 + b1 = 2 ## b0 - 1*b1 = 3 ## b0 - 1*b1 = 4 solution <- lm( y ~ 0 + X) loc <- coef(solution) points(x=loc[1], y=loc[2], pch=16, cex=1.5)"},{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"observation-space","dir":"Articles","previous_headings":"","what":"Observation space","title":"Vector Spaces of Least Squares and Linear Equations","text":"also third vector space, one coordinate axes refer observations, \\(:n\\), data \\((y_i, x_{i0}, x_{i1}, ...)\\). \\(n\\)-length vectors space relate variables y predictors x1, x2 … . , x0 unit vector, J(n), corresponding intercept model. \\(n\\) observations, space \\(n\\) dimensions. case simple linear regression, fitted values, \\(\\widehat{\\mathbf{y}}\\) correspond projection \\(\\mathbf{y}\\) plane spanned \\(\\mathbf{x_0}, \\mathbf{x_1}\\), yhat <- Proj(y, c(bind(x0, x1))). space, vector residuals, \\(\\mathbf{e}\\) orthogonal complement \\(\\widehat{\\mathbf{y}}\\), .e., \\(\\widehat{\\mathbf{y}} \\perp \\mathbf{e}\\). Another geometrical description residual vector normal vector plane. space corresponds matrix algebra representation linear regression, \\[ \\mathbf{y} = \\mathbf{X} \\widehat{\\mathbf{b}} + \\mathbf{e} = \\widehat{\\mathbf{y}} + \\mathbf{e} \\] fact, least squares solution can derived purely requirement vector \\(\\widehat{\\mathbf{y}}\\) orthogonal vector residuals, \\(\\mathbf{e}\\), .e., \\(\\widehat{\\mathbf{y}}' \\mathbf{e} = 0\\). (margins vignette small give proof assertion.) Observation space can illustrated vector diagram developed , \\(n=3\\) dimensional space, actual data problem. , create x0, x1 y simple example. implies following linear equations, ignoring residuals. display observation space, First create basic 3D plot showing coordinate axes. , use vectors3d() draw vectors x0, x1 y. plane spanned x0, x1 can specified normal vector orthogonal , using new matlib::xprod() function. Finally, use Proj() find projection y plane. plot interactive HTML version. Use mouse wheel expand/contract plot. Drag rotate different view. can also spin plot around ’s axis create movie, isn’t done vignette. comparison, can also show least squares solution data \\(\\beta\\) space. linear equation (\\(\\beta\\)) space.","code":"O <- c(0, 0, 0) # origin x0 <- J(3) # intercept x1 <- c(0, 1, -1) # x y <- c(1, 1, 4) # y y <- 2 * y / floor(len(y)) # make length more convenient for 3D plot X <- cbind(x0, x1) # make a matrix showEqn(X, y, vars=colnames(X), simplify=TRUE) ## x0 = 0.5 ## x0 + x1 = 0.5 ## x0 - 1*x1 = 2 win <- rgl::open3d() # (1) draw observation axes E <- diag(3) rownames(E) <- c(\"1\", \"2\", \"3\") vectors3d(E, lwd=2, color=\"blue\") # (2) draw variable vectors vectors3d(t(X), lwd=2, headlength=0.07) vectors3d(y, labels=c(\"\", \"y\"), color=\"red\", lwd=3, headlength=0.07) # (3) draw the plane spanned by x0, x1 normal <- xprod(x0, x1) rgl::planes3d(normal, col=\"turquoise\", alpha=0.2) # (4) draw projection of y on X py <- Proj(y, X) rgl::segments3d(rbind( y, py)) # draw y to plane rgl::segments3d(rbind( O, py)) # origin to py in the plane corner( O, py, y, d=0.15) # show it's a right angle arc(y, O, py, d=0.2, color=\"red\") play3d(spin3d()) par(mar=c(4,4,1,1)+.1) X <- cbind(x0, x1) plotEqn(X, y, vars=c(\"b0\", \"b1\"), xlim=c(-2, 4)) ## b0 = 0.5 ## b0 + b1 = 0.5 ## b0 - 1*b1 = 2 solution <- lm( y ~ 0 + X) loc <- coef(solution) points(x=loc[1], y=loc[2], pch=16, cex=1.5) abline(v=loc[1], lty=2) abline(h=loc[2], lty=2)"},{"path":"http://friendly.github.io/matlib/articles/data-beta.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Vector Spaces of Least Squares and Linear Equations","text":"Dempster, . P. (1969). Elements Continuous Multivariate Analysis, Addison-Wesley, Fox, J. (1984). Linear Statistical Models Related Methods. NY: John Wiley Sons. Friendly, M.; Monette, G. & Fox, J. (2013). Elliptical Insights: Understanding Statistical Methods Elliptical Geometry Statistical Science, 28, 1-39. Monette, G. (1990). “Geometry Multiple Regression Interactive 3-D Graphics” : Fox, J. & Long, S. (Eds.) Modern Methods Data Analysis, SAGE Publications, 209-256","code":""},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"create-a-2-x-2-matrix","dir":"Articles","previous_headings":"","what":"Create a 2 x 2 matrix","title":"Properties of determinants","text":"","code":"A <- matrix(c(3, 1, 2, 4), nrow=2, byrow=TRUE) A ## [,1] [,2] ## [1,] 3 1 ## [2,] 2 4 det(A) ## [1] 10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"interchange-two-rows-or-cols-changes-the-sign----1-deta","dir":"Articles","previous_headings":"","what":"1. Interchange two rows or cols changes the sign: -> -1 * det(A)","title":"Properties of determinants","text":"","code":"det(A[ 2:1, ]) ## [1] -10 det(A[, 2:1 ]) ## [1] -10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"transpose---det-a-unchanged","dir":"Articles","previous_headings":"","what":"2. transpose -> det (A) unchanged","title":"Properties of determinants","text":"","code":"det( t(A) ) ## [1] 10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"multiply-row-k---k-deta","dir":"Articles","previous_headings":"","what":"3. multiply row * k -> k * det(A)","title":"Properties of determinants","text":"Note multiply rows different constants requires diagonal matrix left.","code":"diag(c(3, 1)) %*% A ## [,1] [,2] ## [1,] 9 3 ## [2,] 2 4 det( diag(c(3, 1)) %*% A) ## [1] 30"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"multiply-matrix-k---k2-deta","dir":"Articles","previous_headings":"","what":"4. multiply matrix * k -> k^2 * det(A)","title":"Properties of determinants","text":"multiplying matrix constant multiplies row.","code":"det(3 * A) ## [1] 90 3^2 * det(A) ## [1] 90"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"det-a-b---deta-detb","dir":"Articles","previous_headings":"","what":"5. det (A B) -> det(A) * det(B)","title":"Properties of determinants","text":"determinant product product determinants. holds number terms matrix product.","code":"B <- matrix(c(4, 2, 3, 5), nrow=2, byrow=TRUE) B ## [,1] [,2] ## [1,] 4 2 ## [2,] 3 5 det(A %*% B) ## [1] 140 det(A) * det(B) ## [1] 140"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"proportional-rows-or-columns---det-0","dir":"Articles","previous_headings":"","what":"6. proportional rows or columns -> det() == 0","title":"Properties of determinants","text":"just add additional copy column 1 matrix, C[,3] == C[,1]. determinant 0 columns linearly dependent.","code":"C <- matrix(c(1, 5, 2, 6, 4, 4), nrow=3, byrow=TRUE) C <- cbind(C, C[,1]) C ## [,1] [,2] [,3] ## [1,] 1 5 1 ## [2,] 2 6 2 ## [3,] 4 4 4 det(C) ## [1] 0"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"add-multiple-of-one-row-to-another---det-unchanged","dir":"Articles","previous_headings":"","what":"7. Add multiple of one row to another -> det unchanged","title":"Properties of determinants","text":"principle behind one elementary row operations.","code":"A[2,] <- A[2,] - 2*A[1,] det(A) ## [1] 10"},{"path":"http://friendly.github.io/matlib/articles/det-ex1.html","id":"geometric-interpretation","dir":"Articles","previous_headings":"","what":"8. Geometric interpretation","title":"Properties of determinants","text":"Many aspects matrices vectors geometric interpretations. \\(2 \\times 2\\) matrices, determinant area parallelogram defined rows (columns), plotted 2D space. (\\(3 \\times 3\\) matrices, determinant volume parallelpiped 3D space.) matlib package handy functions (vectors()) drawing geometric diagrams. simple visual proof fact determinants easiest see case diagonal matrix, row vectors orthogonal, area just height x width. Plot : Finally, can also see determinant zero rows columns proportional. vectors called collinear. enclose area.","code":"A <- matrix(c(3, 1, 2, 4), nrow=2, byrow=TRUE) A ## [,1] [,2] ## [1,] 3 1 ## [2,] 2 4 det(A) ## [1] 10 library(matlib) xlim <- c(0,6) ylim <- c(0,6) par(mar=c(3,3,1,1)+.1) plot(xlim, ylim, type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) sum <- A[1,] + A[2,] # draw the parallelogram determined by the rows of A polygon( rbind(c(0,0), A[1,], sum, A[2,]), col=rgb(1,0,0,.2)) vectors(A, labels=c(\"a1\", \"a2\"), pos.lab=c(4,2)) vectors(sum, origin=A[1,], col=\"gray\") vectors(sum, origin=A[2,], col=\"gray\") # add some annotations text(0,6, \"det(A) is the area of its row vectors\", pos=4) text(mean(A[,1]), mean(A[,2]), \"det(A)\", cex=1.25) (D <- 2 * diag(2)) ## [,1] [,2] ## [1,] 2 0 ## [2,] 0 2 det(D) ## [1] 4 par(mar=c(3,3,1,1)+.1) plot(c(0,2), c(0,2), type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) sum <- D[1,] + D[2,] polygon( rbind(c(0,0), D[1,], sum, D[2,]), col=rgb(0,1,0,.2)) vectors(D, labels=c(\"d1\", \"d2\"), pos.lab=c(3,4)) vectors(sum, origin=D[1,], col=\"gray\") vectors(sum, origin=D[2,], col=\"gray\") text(mean(D[,1]), mean(D[,2]), \"det(D)\", cex=1.25) (B <- matrix(c(1, 2, 2, 4), 2,2)) ## [,1] [,2] ## [1,] 1 2 ## [2,] 2 4 det(B) ## [1] 0 par(mar=c(3,3,1,1)+.1) plot(c(0,4), c(0,4), type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) vectors(B, labels=c(\"b1\", \"b2\"), pos.lab=c(4,2))"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"calculate-det-by-cofactor-expansion","dir":"Articles","previous_headings":"","what":"1. Calculate det() by cofactor expansion","title":"Evaluation of determinants","text":"Set \\(3 \\times 3\\) matrix, find determinant (know answer ).","code":"A <- matrix(c(4, 2, 1, 5, 6, 7, 1, 0, 3), nrow=3, byrow=TRUE) det(A) ## [1] 50"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"find-cofactors-of-row-1-elements","dir":"Articles","previous_headings":"1. Calculate det() by cofactor expansion","what":"Find cofactors of row 1 elements","title":"Evaluation of determinants","text":"cofactor \\(A_{,j}\\) element \\(a_{,j}\\) signed determinant left row , column j matrix \\(\\) deleted. NB: R, negative subscripts delete rows columns.","code":"cat(cofactor(A, 1, 1), \" == \", 1 * det( (A[-1, -1]), \"\\n\" )) ## 18 == 18 cat(cofactor(A, 1, 2), \" == \", -1 * det( (A[-1, -2]), \"\\n\" )) ## -8 == -8 cat(cofactor(A, 1, 3), \" == \", 1 * det( (A[-1, -3]), \"\\n\" )) ## -6 == -6"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"det-product-of-row-with-cofactors","dir":"Articles","previous_headings":"1. Calculate det() by cofactor expansion","what":"det() = product of row with cofactors","title":"Evaluation of determinants","text":"symbols: \\(\\det() = a_{1,1} * A_{1,1} + a_{1,2} * A_{1,2} + a_{1,3} * A_{1,3}\\) rowCofactors() convenience function, calculates together Voila: Multiply row 1 times cofactors elements. NB: R, multiplication gives \\(1 \\times 1\\) matrix.","code":"rowCofactors(A, 1) ## [1] 18 -8 -6 A[1,] %*% rowCofactors(A, 1) ## [,1] ## [1,] 50 all.equal( det(A), c(A[1,] %*% rowCofactors(A, 1)) ) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"finding-det-by-gaussian-elimination-pivoting","dir":"Articles","previous_headings":"","what":"2. Finding det() by Gaussian elimination (pivoting)","title":"Evaluation of determinants","text":"example follows Green Carroll, Table 2.2. Start 4 x 4 matrix, \\(M\\), save det(M). det() product ‘pivots’, leading diagonal elements. step reduces row 1 column 1 0, may discarded. NB: R, dropping row/column can change matrix vector, use drop = FALSE inside subscript.","code":"M <- matrix(c(2, 3, 1, 2, 4, 2, 3, 4, 1, 4, 2, 2, 3, 1, 0, 1), nrow=4, ncol=4, byrow=TRUE) (dsave <- det(M)) ## [1] 15 # ### 'pivot' on the leading diagonal element, M[1,1]: (d <- M[1,1]) ## [1] 2 #-- Reduce row 1, col 1 to 0 (M[1,] <- M[1,, drop=FALSE] / M[1, 1]) ## [,1] [,2] [,3] [,4] ## [1,] 1 1.5 0.5 1 (M <- M - M[,1] %*% M[1,, drop=FALSE]) ## [,1] [,2] [,3] [,4] ## [1,] 0 0.0 0.0 0 ## [2,] 0 -4.0 1.0 0 ## [3,] 0 2.5 1.5 1 ## [4,] 0 -3.5 -1.5 -2 #-- Drop first row and column M <- M[-1, -1] #-- Accumulate the product of pivots d <- d * M[1, 1]"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"repeat-reducing-new-row-col-1-to-0","dir":"Articles","previous_headings":"2. Finding det() by Gaussian elimination (pivoting)","what":"Repeat, reducing new row, col 1 to 0","title":"Evaluation of determinants","text":"","code":"(M[1,] <- M[1,, drop=FALSE] / M[1,1]) ## [,1] [,2] [,3] ## [1,] 1 -0.25 0 (M <- M - M[,1] %*% M[1,, drop=FALSE]) ## [,1] [,2] [,3] ## [1,] 0 0.000 0 ## [2,] 0 2.125 1 ## [3,] 0 -2.375 -2 M <- M[-1, -1] d = d * M[1, 1]"},{"path":"http://friendly.github.io/matlib/articles/det-ex2.html","id":"repeat-once-more--d-detm","dir":"Articles","previous_headings":"2. Finding det() by Gaussian elimination (pivoting)","what":"Repeat once more. d = det(M)","title":"Evaluation of determinants","text":"","code":"(M[1,] <- M[1,, drop=FALSE] / M[1,1]) ## [,1] [,2] ## [1,] 1 0.4706 (M <- M - M[,1] %*% M[1,, drop=FALSE]) ## [,1] [,2] ## [1,] 0 0.0000 ## [2,] 0 -0.8824 M <- M[-1, -1, drop=FALSE] d <- d * M[1, 1] # did we get it right? all.equal(d, dsave) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex1.html","id":"setup","dir":"Articles","previous_headings":"","what":"Setup","title":"Eigenvalues and Eigenvectors: Properties","text":"vignette uses example \\(3 \\times 3\\) matrix illustrate properties eigenvalues eigenvectors. consider variance-covariance matrix three variables, main thing matrix square symmetric, guarantees eigenvalues, \\(\\lambda_i\\) real numbers. Covariance matrices also positive semi-definite, meaning eigenvalues non-negative, \\(\\lambda_i \\ge 0\\). Get eigenvalues eigenvectors using eigen(); returns named list, eigenvalues named values eigenvectors named vectors. eigenvalues always returned decreasing order, column vectors corresponds elements values.","code":"A <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3, 3, byrow=TRUE) A ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 ev <- eigen(A) # extract components (values <- ev$values) ## [1] 17 8 7 (vectors <- ev$vectors) ## [,1] [,2] [,3] ## [1,] 0.7454 0.6667 0.0000 ## [2,] -0.5963 0.6667 0.4472 ## [3,] 0.2981 -0.3333 0.8944"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex1.html","id":"properties-of-eigenvalues-and-eigenvectors","dir":"Articles","previous_headings":"","what":"Properties of eigenvalues and eigenvectors","title":"Eigenvalues and Eigenvectors: Properties","text":"following steps illustrate main properties eigenvalues eigenvectors. use notation \\(= V' \\Lambda V\\) express decomposition matrix \\(\\), \\(V\\) matrix eigenvectors \\(\\Lambda = diag(\\lambda_1, \\lambda_2, \\dots, \\lambda_p)\\) diagonal matrix composed ordered eivenvalues, \\(\\lambda_1 \\ge \\lambda_2 \\ge \\dots \\lambda_p\\). Orthogonality: Eigenvectors always orthogonal, \\(V' V = \\). zapsmall() handy cleaning tiny values. trace() = sum eigenvalues, \\(\\sum \\lambda_i\\). sum squares = sum squares eigenvalues, \\(\\sum \\lambda_i^2\\). determinant = product eigenvalues, \\(det() = \\prod \\lambda_i\\). means determinant zero \\(\\lambda_i = 0\\). rank = number non-zero eigenvalues eigenvalues \\(^{-1}\\) = 1/eigenvalues . eigenvectors , except order, eigenvalues returned decreasing order. similar relations powers matrix: values(mpower(,p)) = values()^p, mpower(,2) = %*% , etc.","code":"crossprod(vectors) ## [,1] [,2] [,3] ## [1,] 1.000e+00 3.053e-16 5.551e-17 ## [2,] 3.053e-16 1.000e+00 0.000e+00 ## [3,] 5.551e-17 0.000e+00 1.000e+00 zapsmall(crossprod(vectors)) ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 0 1 0 ## [3,] 0 0 1 library(matlib) # use the matlib package tr(A) ## [1] 32 sum(values) ## [1] 32 sum(A^2) ## [1] 402 sum(values^2) ## [1] 402 det(A) ## [1] 952 prod(values) ## [1] 952 R(A) ## [1] 3 sum(values != 0) ## [1] 3 AI <- solve(A) AI ## [,1] [,2] [,3] ## [1,] 0.08824 0.02941 -0.01471 ## [2,] 0.02941 0.10504 0.01891 ## [3,] -0.01471 0.01891 0.13340 eigen(AI)$values ## [1] 0.14286 0.12500 0.05882 eigen(AI)$vectors ## [,1] [,2] [,3] ## [1,] 0.0000 0.6667 0.7454 ## [2,] 0.4472 0.6667 -0.5963 ## [3,] 0.8944 -0.3333 0.2981 eigen(A %*% A) ## eigen() decomposition ## $values ## [1] 289 64 49 ## ## $vectors ## [,1] [,2] [,3] ## [1,] 0.7454 0.6667 0.0000 ## [2,] -0.5963 0.6667 0.4472 ## [3,] 0.2981 -0.3333 0.8944 eigen(A %*% A %*% A)$values ## [1] 4913 512 343 eigen(mpower(A, 4))$values ## [1] 83521 4096 2401"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"setup","dir":"Articles","previous_headings":"","what":"Setup","title":"Eigenvalues: Spectral Decomposition","text":"vignette uses example \\(3 \\times 3\\) matrix illustrate properties eigenvalues eigenvectors. consider variance-covariance matrix three variables, main thing matrix square symmetric, guarantees eigenvalues, \\(\\lambda_i\\) real numbers, non-negative, \\(\\lambda_i \\ge 0\\). Get eigenvalues eigenvectors using eigen(); returns named list, eigenvalues named values eigenvectors named vectors. call L V , formulas correspond diagonal matrix, \\(\\mathbf{\\Lambda} = diag(\\lambda_1, \\lambda_2, \\lambda_3)\\), (orthogonal) matrix \\(\\mathbf{V}\\).","code":"A <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3, 3, byrow=TRUE) A ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 ev <- eigen(A) # extract components (L <- ev$values) ## [1] 17 8 7 (V <- ev$vectors) ## [,1] [,2] [,3] ## [1,] 0.7454 0.6667 0.0000 ## [2,] -0.5963 0.6667 0.4472 ## [3,] 0.2981 -0.3333 0.8944"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"matrix-factorization","dir":"Articles","previous_headings":"","what":"Matrix factorization","title":"Eigenvalues: Spectral Decomposition","text":"Factorization : = V diag(L) V’. , matrix \\(\\mathbf{}\\) can represented product \\(\\mathbf{}= \\mathbf{V} \\mathbf{\\Lambda} \\mathbf{V}'\\). V diagonalizes : L = V’ V. , matrix \\(\\mathbf{V}\\) transforms \\(\\mathbf{}\\) diagonal matrix \\(\\mathbf{\\Lambda}\\), corresponding orthogonal (uncorrelated) variables.","code":"V %*% diag(L) %*% t(V) ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 diag(L) ## [,1] [,2] [,3] ## [1,] 17 0 0 ## [2,] 0 8 0 ## [3,] 0 0 7 zapsmall(t(V) %*% A %*% V) ## [,1] [,2] [,3] ## [1,] 17 0 0 ## [2,] 0 8 0 ## [3,] 0 0 7"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"spectral-decomposition","dir":"Articles","previous_headings":"","what":"Spectral decomposition","title":"Eigenvalues: Spectral Decomposition","text":"basic idea eigenvalue–eigenvector pair generates rank 1 matrix, \\(\\lambda_i \\mathbf{v}_i \\mathbf{v}_i '\\), sum original matrix, \\(\\mathbf{} = \\sum_i \\lambda_i \\mathbf{v}_i \\mathbf{v}_i '\\). , summing gives , decompose :","code":"A1 = L[1] * V[,1] %*% t(V[,1]) A1 ## [,1] [,2] [,3] ## [1,] 9.444 -7.556 3.778 ## [2,] -7.556 6.044 -3.022 ## [3,] 3.778 -3.022 1.511 A2 = L[2] * V[,2] %*% t(V[,2]) A2 ## [,1] [,2] [,3] ## [1,] 3.556 3.556 -1.7778 ## [2,] 3.556 3.556 -1.7778 ## [3,] -1.778 -1.778 0.8889 A3 = L[3] * V[,3] %*% t(V[,3]) A3 ## [,1] [,2] [,3] ## [1,] 0 0.0 0.0 ## [2,] 0 1.4 2.8 ## [3,] 0 2.8 5.6 A1 + A2 + A3 ## [,1] [,2] [,3] ## [1,] 13 -4 2 ## [2,] -4 11 -2 ## [3,] 2 -2 8 all.equal(A, A1+A2+A3) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/eigen-ex2.html","id":"further-properties","dir":"Articles","previous_headings":"Spectral decomposition","what":"Further properties","title":"Eigenvalues: Spectral Decomposition","text":"Sum squares = sum sum squares A1, A2, A3 squared eigenvalue gives sum squares accounted latent vector first \\(\\) eigenvalues vectors give rank \\(\\) approximation ","code":"sum(A^2) ## [1] 402 c( sum(A1^2), sum(A2^2), sum(A3^2) ) ## [1] 289 64 49 sum( sum(A1^2), sum(A2^2), sum(A3^2) ) ## [1] 402 #' same as tr(A' A) tr(crossprod(A)) ## [1] 402 L^2 ## [1] 289 64 49 cumsum(L^2) # cumulative ## [1] 289 353 402 R(A1) ## [1] 1 R(A1 + A2) ## [1] 2 R(A1 + A2 + A3) ## [1] 3 # two dimensions sum((A1+A2)^2) ## [1] 353 sum((A1+A2)^2) / sum(A^2) # proportion ## [1] 0.8781"},{"path":"http://friendly.github.io/matlib/articles/ginv.html","id":"properties-of-generalized-inverse-moore-penrose-inverse","dir":"Articles","previous_headings":"","what":"Properties of generalized inverse (Moore-Penrose inverse)","title":"Generalized inverse","text":"generalized inverse defined matrix \\(^-\\) \\(* ^- * = \\) \\(^- * * ^- = ^-\\) addition, \\(* ^-\\) \\(^- * \\) symmetric, neither product gives identity matrix, %*% AI != AI %*% != ","code":"A %*% AI %*% A ## [,1] [,2] [,3] ## [1,] 4 4 -2 ## [2,] 4 4 -2 ## [3,] -2 -2 10 AI %*% A %*% AI ## [,1] [,2] [,3] ## [1,] 0.27778 0 0.05556 ## [2,] 0.00000 0 0.00000 ## [3,] 0.05556 0 0.11111 zapsmall(A %*% AI) ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 1 0 0 ## [3,] 0 0 1 zapsmall(AI %*% A) ## [,1] [,2] [,3] ## [1,] 1 1 0 ## [2,] 0 0 0 ## [3,] 0 0 1"},{"path":"http://friendly.github.io/matlib/articles/ginv.html","id":"rectangular-matrices","dir":"Articles","previous_headings":"","what":"Rectangular matrices","title":"Generalized inverse","text":"rectangular matrix, \\(^- = (^{T} )^{-1} ^{T}\\) generalized inverse \\(\\) \\((^{T} )^-\\) ginv \\((^{T} )\\) [See: Timm: EX 1.6.11] \\(4 \\times 3\\) matrix full rank, columns 2 3 sum column 1. generalized inverse \\(\\) \\((^{T} )^- ^{T}\\), AAI * t() Show generalized inverse:","code":"A <- cbind( 1, matrix(c(1, 0, 1, 0, 0, 1, 0, 1), nrow=4, byrow=TRUE)) A ## [,1] [,2] [,3] ## [1,] 1 1 0 ## [2,] 1 1 0 ## [3,] 1 0 1 ## [4,] 1 0 1 R(A) ## [1] 2 (AA <- t(A) %*% A) ## [,1] [,2] [,3] ## [1,] 4 2 2 ## [2,] 2 2 0 ## [3,] 2 0 2 (AAI <- Ginv(AA)) ## [,1] [,2] [,3] ## [1,] 0.5 -0.5 0 ## [2,] -0.5 1.0 0 ## [3,] 0.0 0.0 0 AI <- AAI %*% t(A) A %*% AI %*% A ## [,1] [,2] [,3] ## [1,] 1 1 0 ## [2,] 1 1 0 ## [3,] 1 0 1 ## [4,] 1 0 1 AI %*% A %*% AI ## [,1] [,2] [,3] [,4] ## [1,] 0.0 0.0 0.5 0.5 ## [2,] 0.5 0.5 -0.5 -0.5 ## [3,] 0.0 0.0 0.0 0.0"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"setup","dir":"Articles","previous_headings":"","what":"Setup","title":"Gram-Schmidt Orthogonalization and Regression","text":"use class data set, convert character factor sex dummy (0/1) variable male. later use regression, create variable IQ response variable Reorder predictors want, forming numeric matrix, X.","code":"library(matlib) data(class) class$male <- as.numeric(class$sex==\"M\") class <- transform(class, IQ = round(20 + height + 3*age -.1*weight -3*male + 10*rnorm(nrow(class)))) head(class) ## sex age height weight male IQ ## Alfred M 14 69.0 112.5 1 121 ## Alice F 13 56.5 84.0 0 96 ## Barbara F 13 65.3 98.0 0 118 ## Carol F 14 62.8 102.5 0 121 ## Henry M 14 63.5 102.5 1 105 ## James M 12 57.3 83.0 1 102 X <- as.matrix(class[,c(3,4,2,5)]) head(X) ## height weight age male ## Alfred 69.0 112.5 14 1 ## Alice 56.5 84.0 13 0 ## Barbara 65.3 98.0 13 0 ## Carol 62.8 102.5 14 0 ## Henry 63.5 102.5 14 1 ## James 57.3 83.0 12 1"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"orthogonalization-by-projections","dir":"Articles","previous_headings":"","what":"Orthogonalization by projections","title":"Gram-Schmidt Orthogonalization and Regression","text":"Gram-Schmidt process treats variables given order, according columns X. start new matrix Z consisting X[,1]. , find new variable Z[,2] orthogonal Z[,1] subtracting projection X[,2] Z[,1]. Continue way, subtracting projections X[,3] previous columns, forth Note column X linear combination previous columns, corresponding column Z zeros. computations similar following set linear regressions: columns Z now orthogonal, unit length, make standardize column unit length, giving Z orthonormal matrix, \\(Z' Z = \\).","code":"Z <- cbind(X[,1], 0, 0, 0) Z[,2] <- X[,2] - Proj(X[,2], Z[,1]) crossprod(Z[,1], Z[,2]) # verify orthogonality ## [,1] ## [1,] 7.276e-12 Z[,3] <- X[,3] - Proj(X[,3], Z[,1]) - Proj(X[,3], Z[,2]) Z[,4] <- X[,4] - Proj(X[,4], Z[,1]) - Proj(X[,4], Z[,2]) - Proj(X[,4], Z[,3]) z2 <- residuals(lm(X[,2] ~ X[,1]), type=\"response\") z3 <- residuals(lm(X[,3] ~ X[,1:2]), type=\"response\") z4 <- residuals(lm(X[,4] ~ X[,1:3]), type=\"response\") zapsmall(crossprod(Z)) # check orthogonality ## [,1] [,2] [,3] [,4] ## [1,] 57888 0 0 0 ## [2,] 0 3249 0 0 ## [3,] 0 0 7 0 ## [4,] 0 0 0 2 Z <- Z %*% diag(1 / len(Z)) # make each column unit length zapsmall(crossprod(Z)) # check orthonormal ## [,1] [,2] [,3] [,4] ## [1,] 1 0 0 0 ## [2,] 0 1 0 0 ## [3,] 0 0 1 0 ## [4,] 0 0 0 1 colnames(Z) <- colnames(X)"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"relationship-to-qr-factorization","dir":"Articles","previous_headings":"Orthogonalization by projections","what":"Relationship to QR factorization","title":"Gram-Schmidt Orthogonalization and Regression","text":"QR method uses essentially process, factoring matrix \\(\\mathbf{X}\\) \\(\\mathbf{X = Q R}\\), \\(\\mathbf{Q}\\) orthonormal matrix corresponding Z \\(\\mathbf{R}\\) upper triangular matrix. However, signs columns \\(\\mathbf{Q}\\) arbitrary, QR() returns QR(X)$Q signs reversed, compared Z.","code":"# same result as QR(X)$Q, but with signs reversed head(Z, 5) ## height weight age male ## Alfred 0.2868 0.07545 -0.3687 0.12456 ## Alice 0.2348 -0.08067 0.3569 -0.02177 ## Barbara 0.2714 -0.07715 -0.3862 -0.45170 ## Carol 0.2610 0.07058 0.1559 -0.20548 ## Henry 0.2639 0.05132 0.1047 0.40538 head(-QR(X)$Q, 5) ## [,1] [,2] [,3] [,4] ## [1,] 0.2868 0.07545 -0.3687 0.12456 ## [2,] 0.2348 -0.08067 0.3569 -0.02177 ## [3,] 0.2714 -0.07715 -0.3862 -0.45170 ## [4,] 0.2610 0.07058 0.1559 -0.20548 ## [5,] 0.2639 0.05132 0.1047 0.40538 all.equal( unname(Z), -QR(X)$Q ) ## [1] TRUE"},{"path":"http://friendly.github.io/matlib/articles/gramreg.html","id":"regression-with-x-and-z","dir":"Articles","previous_headings":"","what":"Regression with X and Z","title":"Gram-Schmidt Orthogonalization and Regression","text":"carry two regressions IQ variables X Z. equivalent, sense \\(R^2\\) MSE models Residuals Type tests given anova() . Regression IQ original variables X Regression IQ orthogonalized variables Z illustrates anova() tests linear models sequential tests. test hypotheses extra contribution variable previous ones, given order. usually make substantive sense, except testing ordered (“hierarchical”) models.","code":"class2 <- data.frame(Z, IQ=class$IQ) mod1 <- lm(IQ ~ height + weight + age + male, data=class) anova(mod1) ## Analysis of Variance Table ## ## Response: IQ ## Df Sum Sq Mean Sq F value Pr(>F) ## height 1 356 356 8.44 0.016 * ## weight 1 0 0 0.00 0.972 ## age 1 17 17 0.40 0.540 ## male 1 124 124 2.94 0.117 ## Residuals 10 422 42 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 mod2 <- lm(IQ ~ height + weight + age + male, data=class2) anova(mod2) ## Analysis of Variance Table ## ## Response: IQ ## Df Sum Sq Mean Sq F value Pr(>F) ## height 1 356 356 8.44 0.016 * ## weight 1 0 0 0.00 0.972 ## age 1 17 17 0.40 0.540 ## male 1 124 124 2.94 0.117 ## Residuals 10 422 42 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"load-the-matlib-package","dir":"Articles","previous_headings":"","what":"Load the matlib package","title":"Inverse of a matrix","text":"defines: inv(), Inverse(); standard R function matrix inverse solve()","code":"library(matlib)"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"create-a-3-x-3-matrix","dir":"Articles","previous_headings":"","what":"Create a 3 x 3 matrix","title":"Inverse of a matrix","text":"ordinary inverse defined square matrices.","code":"A <- matrix( c(5, 1, 0, 3,-1, 2, 4, 0,-1), nrow=3, byrow=TRUE) det(A) ## [1] 16"},{"path":[]},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"deta-0-so-inverse-exists","dir":"Articles","previous_headings":"Basic properties","what":"1. det(A) != 0, so inverse exists","title":"Inverse of a matrix","text":"non-singular matrices inverse.","code":"(AI <- inv(A)) ## [,1] [,2] [,3] ## [1,] 0.0625 0.0625 0.125 ## [2,] 0.6875 -0.3125 -0.625 ## [3,] 0.2500 0.2500 -0.500"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"definition-of-the-inverse-a-1-a-a-a-1-i-or-ai-a-diagnrowa","dir":"Articles","previous_headings":"Basic properties","what":"2. Definition of the inverse: \\(A^{-1} A = A A^{-1} = I\\) or AI * A = diag(nrow(A))","title":"Inverse of a matrix","text":"inverse matrix \\(\\) defined matrix \\(^{-1}\\) multiplies \\(\\) give identity matrix, just , scalar \\(\\), \\(^{-1} = / = 1\\). NB: Sometimes get tiny -diagonal values (like 1.341e-13). function zapsmall() round 0.","code":"AI %*% A ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 0 1 0 ## [3,] 0 0 1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-is-reflexive-invinva-a","dir":"Articles","previous_headings":"Basic properties","what":"3. Inverse is reflexive: inv(inv(A)) = A","title":"Inverse of a matrix","text":"Taking inverse twice gets back started.","code":"inv(AI) ## [,1] [,2] [,3] ## [1,] 5 1 0 ## [2,] 3 -1 2 ## [3,] 4 0 -1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inva-is-symmetric-if-and-only-if-a-is-symmetric","dir":"Articles","previous_headings":"Basic properties","what":"4. inv(A) is symmetric if and only if A is symmetric","title":"Inverse of a matrix","text":"symmetric case:","code":"inv( t(A) ) ## [,1] [,2] [,3] ## [1,] 0.0625 0.6875 0.25 ## [2,] 0.0625 -0.3125 0.25 ## [3,] 0.1250 -0.6250 -0.50 is_symmetric_matrix(A) ## [1] FALSE is_symmetric_matrix( inv( t(A) ) ) ## [1] FALSE B <- matrix( c(4, 2, 2, 2, 3, 1, 2, 1, 3), nrow=3, byrow=TRUE) inv(B) ## [,1] [,2] [,3] ## [1,] 0.50 -0.25 -0.25 ## [2,] -0.25 0.50 0.00 ## [3,] -0.25 0.00 0.50 inv( t(B) ) ## [,1] [,2] [,3] ## [1,] 0.50 -0.25 -0.25 ## [2,] -0.25 0.50 0.00 ## [3,] -0.25 0.00 0.50 is_symmetric_matrix(B) ## [1] TRUE is_symmetric_matrix( inv( t(B) ) ) ## [1] TRUE all.equal( inv(B), inv( t(B) ) ) ## [1] TRUE"},{"path":[]},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-diagonal-matrix-diag-1-diagonal","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"1. inverse of diagonal matrix = diag( 1/ diagonal)","title":"Inverse of a matrix","text":"simple examples, often useful show results matrix calculations fractions, using MASS::fractions().","code":"D <- diag(c(1, 2, 4)) inv(D) ## [,1] [,2] [,3] ## [1,] 1 0.0 0.00 ## [2,] 0 0.5 0.00 ## [3,] 0 0.0 0.25 MASS::fractions( diag(1 / c(1, 2, 4)) ) ## [,1] [,2] [,3] ## [1,] 1 0 0 ## [2,] 0 1/2 0 ## [3,] 0 0 1/4"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-an-inverse-invinva-a","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"2. Inverse of an inverse: inv(inv(A)) = A","title":"Inverse of a matrix","text":"","code":"A <- matrix(c(1, 2, 3, 2, 3, 0, 0, 1, 2), nrow=3, byrow=TRUE) AI <- inv(A) inv(AI) ## [,1] [,2] [,3] ## [1,] 1 2 3 ## [2,] 2 3 0 ## [3,] 0 1 2"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-a-transpose-invta-tinva","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"3. inverse of a transpose: inv(t(A)) = t(inv(A))","title":"Inverse of a matrix","text":"","code":"inv( t(A) ) ## [,1] [,2] [,3] ## [1,] 1.50 -1.0 0.50 ## [2,] -0.25 0.5 -0.25 ## [3,] -2.25 1.5 -0.25 t( inv(A) ) ## [,1] [,2] [,3] ## [1,] 1.50 -1.0 0.50 ## [2,] -0.25 0.5 -0.25 ## [3,] -2.25 1.5 -0.25"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-a-scalar-matrix-inv-ka-1k-inva","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"4. inverse of a scalar * matrix: inv( k*A ) = (1/k) * inv(A)","title":"Inverse of a matrix","text":"","code":"inv(5 * A) ## [,1] [,2] [,3] ## [1,] 0.3 -0.05 -0.45 ## [2,] -0.2 0.10 0.30 ## [3,] 0.1 -0.05 -0.05 (1/5) * inv(A) ## [,1] [,2] [,3] ## [1,] 0.3 -0.05 -0.45 ## [2,] -0.2 0.10 0.30 ## [3,] 0.1 -0.05 -0.05"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"inverse-of-a-matrix-product-inva-b-invb-inva","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"5. inverse of a matrix product: inv(A * B) = inv(B) %*% inv(A)","title":"Inverse of a matrix","text":"extends number terms: inverse product product inverses reverse order.","code":"B <- matrix(c(1, 2, 3, 1, 3, 2, 2, 4, 1), nrow=3, byrow=TRUE) C <- B[, 3:1] A %*% B ## [,1] [,2] [,3] ## [1,] 9 20 10 ## [2,] 5 13 12 ## [3,] 5 11 4 inv(A %*% B) ## [,1] [,2] [,3] ## [1,] 4.0 -1.50 -5.50 ## [2,] -2.0 0.70 2.90 ## [3,] 0.5 -0.05 -0.85 inv(B) %*% inv(A) ## [,1] [,2] [,3] ## [1,] 4.0 -1.50 -5.50 ## [2,] -2.0 0.70 2.90 ## [3,] 0.5 -0.05 -0.85 (ABC <- A %*% B %*% C) ## [,1] [,2] [,3] ## [1,] 77 118 49 ## [2,] 53 97 42 ## [3,] 41 59 24 inv(A %*% B %*% C) ## [,1] [,2] [,3] ## [1,] 1.5 -0.59 -2.03 ## [2,] -4.5 1.61 6.37 ## [3,] 8.5 -2.95 -12.15 inv(C) %*% inv(B) %*% inv(A) ## [,1] [,2] [,3] ## [1,] 1.5 -0.59 -2.03 ## [2,] -4.5 1.61 6.37 ## [3,] 8.5 -2.95 -12.15 inv(ABC) ## [,1] [,2] [,3] ## [1,] 1.5 -0.59 -2.03 ## [2,] -4.5 1.61 6.37 ## [3,] 8.5 -2.95 -12.15"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"det-a-1-1-deta-deta-1","dir":"Articles","previous_headings":"More properties of matrix inverse","what":"6. \\(\\det (A^{-1}) = 1 / \\det(A) = [\\det(A)]^{-1}\\)","title":"Inverse of a matrix","text":"determinant inverse inverse (reciprocal) determinant","code":"det(AI) ## [1] 0.25 1 / det(A) ## [1] 0.25"},{"path":"http://friendly.github.io/matlib/articles/inv-ex1.html","id":"geometric-interpretations","dir":"Articles","previous_headings":"","what":"Geometric interpretations","title":"Inverse of a matrix","text":"properties matrix inverse can easily understood geometric diagrams. , take \\(2 \\times 2\\) non-singular matrix \\(\\), larger determinant \\(\\), smaller determinant \\(^{-1}\\). Now, plot rows \\(\\) vectors \\(a_1, a_2\\) origin 2D space. illustrated vignette(\"det-ex1\"), area parallelogram defined vectors determinant. rows inverse \\(^{-1}\\) can shown vectors \\(^1, ^2\\) origin space. Thus, can see: shape \\(^{-1}\\) \\(90^o\\) rotation shape \\(\\). \\(^{-1}\\) small directions \\(\\) large. vector \\(^2\\) right angles \\(a_1\\) \\(^1\\) right angles \\(a_2\\) multiplied \\(\\) constant \\(k\\) make determinant larger (factor \\(k^2\\)), inverse divided factor preserve \\(^{-1} = \\). One might wonder whether properties depend symmetry \\(\\), another example, matrix <- matrix(c(2, 1, 1, 1), nrow=2), \\(\\det()=1\\). areas two parallelograms \\(\\det() = \\det(^{-1}) = 1\\).","code":"A <- matrix(c(2, 1, 1, 2), nrow=2, byrow=TRUE) A ## [,1] [,2] ## [1,] 2 1 ## [2,] 1 2 det(A) ## [1] 3 AI <- inv(A) MASS::fractions(AI) ## [,1] [,2] ## [1,] 2/3 -1/3 ## [2,] -1/3 2/3 det(AI) ## [1] 0.3333 par(mar=c(3,3,1,1)+.1) xlim <- c(-1,3) ylim <- c(-1,3) plot(xlim, ylim, type=\"n\", xlab=\"X1\", ylab=\"X2\", asp=1) sum <- A[1,] + A[2,] # draw the parallelogram determined by the rows of A polygon( rbind(c(0,0), A[1,], sum, A[2,]), col=rgb(1,0,0,.2)) vectors(A, labels=c(expression(a[1]), expression(a[2])), pos.lab=c(4,2)) vectors(sum, origin=A[1,], col=\"gray\") vectors(sum, origin=A[2,], col=\"gray\") text(mean(A[,1]), mean(A[,2]), \"A\", cex=1.5) vectors(AI, labels=c(expression(a^1), expression(a^2)), pos.lab=c(4,2)) sum <- AI[1,] + AI[2,] polygon( rbind(c(0,0), AI[1,], sum, AI[2,]), col=rgb(0,0,1,.2)) text(mean(AI[,1])-.3, mean(AI[,2])-.2, expression(A^{-1}), cex=1.5) (A <- matrix(c(2, 1, 1, 1), nrow=2)) ## [,1] [,2] ## [1,] 2 1 ## [2,] 1 1 (AI <- inv(A)) ## [,1] [,2] ## [1,] 1 -1 ## [2,] -1 2"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"load-the-matlib-package","dir":"Articles","previous_headings":"","what":"Load the matlib package","title":"Matrix inversion by elementary row operations","text":"","code":"library(matlib)"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"create-a-3-x-3-matrix","dir":"Articles","previous_headings":"","what":"Create a 3 x 3 matrix","title":"Matrix inversion by elementary row operations","text":"","code":"A <- matrix( c(1, 2, 3, 2, 3, 0, 0, 1,-2), nrow=3, byrow=TRUE)"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"join-an-identity-matrix-to-a","dir":"Articles","previous_headings":"","what":"Join an identity matrix to A","title":"Matrix inversion by elementary row operations","text":"","code":"(AI <- cbind(A, diag(3))) ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1 0 0 ## [2,] 2 3 0 0 1 0 ## [3,] 0 1 -2 0 0 1"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"apply-elementary-row-operations-to-reduce-a-to-an-identity-matrix-","dir":"Articles","previous_headings":"","what":"Apply elementary row operations to reduce A to an identity matrix.","title":"Matrix inversion by elementary row operations","text":"right three cols contain inv(). three ways: first, just using R arithmetic rows AI using ERO functions matlib package using echelon() function","code":""},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"using-r-arithmetic","dir":"Articles","previous_headings":"","what":"1. Using R arithmetic","title":"Matrix inversion by elementary row operations","text":"Now, elements diagonal zero","code":"(AI[2,] <- AI[2,] - 2*AI[1,]) # row 2 <- row 2 - 2 * row 1 ## [1] 0 -1 -6 -2 1 0 (AI[3,] <- AI[3,] + AI[2,]) # row 3 <- row 3 + row 2 ## [1] 0 0 -8 -2 1 1 (AI[2,] <- -1 * AI[2,]) # row 2 <- -1 * row 2 ## [1] 0 1 6 2 -1 0 (AI[3,] <- -(1/8) * AI[3,]) # row 3 <- -.25 * row 3 ## [1] 0.000 0.000 1.000 0.250 -0.125 -0.125 AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1.00 0.000 0.000 ## [2,] 0 1 6 2.00 -1.000 0.000 ## [3,] 0 0 1 0.25 -0.125 -0.125 #--continue, making above diagonal == 0 AI[2,] <- AI[2,] - 6 * AI[3,] # row 2 <- row 2 - 6 * row 3 AI[1,] <- AI[1,] - 3 * AI[3,] # row 1 <- row 1 - 3 * row 3 AI[1,] <- AI[1,] - 2 * AI[2,] # row 1 <- row 1 - 2 * row 2 AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -0.75 0.875 -1.125 ## [2,] 0 1 0 0.50 -0.250 0.750 ## [3,] 0 0 1 0.25 -0.125 -0.125 #-- last three cols are the inverse (AInv <- AI[,-(1:3)]) ## [,1] [,2] [,3] ## [1,] -0.75 0.875 -1.125 ## [2,] 0.50 -0.250 0.750 ## [3,] 0.25 -0.125 -0.125 #-- compare with inv() inv(A) ## [,1] [,2] [,3] ## [1,] -0.75 0.875 -1.125 ## [2,] 0.50 -0.250 0.750 ## [3,] 0.25 -0.125 -0.125"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"do-the-same-using-matlib-functions-rowadd-rowmult-and-rowswap","dir":"Articles","previous_headings":"","what":"2. Do the same, using matlib functions rowadd(), rowmult() and rowswap()","title":"Matrix inversion by elementary row operations","text":"","code":"AI <- cbind(A, diag(3)) AI <- rowadd(AI, 1, 2, -2) # row 2 <- row 2 - 2 * row 1 AI <- rowadd(AI, 2, 3, 1) # row 3 <- row 3 + row 2 AI <- rowmult(AI, 2, -1) # row 1 <- -1 * row 2 AI <- rowmult(AI, 3, -1/8) # row 3 <- -.25 * row 3 # show result so far AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1.00 0.000 0.000 ## [2,] 0 1 6 2.00 -1.000 0.000 ## [3,] 0 0 1 0.25 -0.125 -0.125 #--continue, making above-diagonal == 0 AI <- rowadd(AI, 3, 2, -6) # row 2 <- row 2 - 6 * row 3 AI <- rowadd(AI, 2, 1, -2) # row 1 <- row 1 - 2 * row 2 AI <- rowadd(AI, 3, 1, -3) # row 1 <- row 1 - 3 * row 3 AI ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -0.75 0.875 -1.125 ## [2,] 0 1 0 0.50 -0.250 0.750 ## [3,] 0 0 1 0.25 -0.125 -0.125"},{"path":"http://friendly.github.io/matlib/articles/inv-ex2.html","id":"using-echelon","dir":"Articles","previous_headings":"","what":"3. Using echelon()","title":"Matrix inversion by elementary row operations","text":"echelon() steps row row, returns result interesting see steps, using argument verbose=TRUE. many cases, informative see numbers printed fractions.","code":"echelon( cbind(A, diag(3))) ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -0.75 0.875 -1.125 ## [2,] 0 1 0 0.50 -0.250 0.750 ## [3,] 0 0 1 0.25 -0.125 -0.125 echelon( cbind(A, diag(3)), verbose=TRUE, fractions=TRUE) ## ## Initial matrix: ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 2 3 1 0 0 ## [2,] 2 3 0 0 1 0 ## [3,] 0 1 -2 0 0 1 ## ## row: 1 ## ## exchange rows 1 and 2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 2 3 0 0 1 0 ## [2,] 1 2 3 1 0 0 ## [3,] 0 1 -2 0 0 1 ## ## multiply row 1 by 1/2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 3/2 0 0 1/2 0 ## [2,] 1 2 3 1 0 0 ## [3,] 0 1 -2 0 0 1 ## ## subtract row 1 from row 2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 3/2 0 0 1/2 0 ## [2,] 0 1/2 3 1 -1/2 0 ## [3,] 0 1 -2 0 0 1 ## ## row: 2 ## ## exchange rows 2 and 3 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 3/2 0 0 1/2 0 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 1/2 3 1 -1/2 0 ## ## multiply row 2 by 3/2 and subtract from row 1 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 3 0 1/2 -3/2 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 1/2 3 1 -1/2 0 ## ## multiply row 2 by 1/2 and subtract from row 3 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 3 0 1/2 -3/2 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 0 4 1 -1/2 -1/2 ## ## row: 3 ## ## multiply row 3 by 1/4 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 3 0 1/2 -3/2 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 0 1 1/4 -1/8 -1/8 ## ## multiply row 3 by 3 and subtract from row 1 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -3/4 7/8 -9/8 ## [2,] 0 1 -2 0 0 1 ## [3,] 0 0 1 1/4 -1/8 -1/8 ## ## multiply row 3 by 2 and add to row 2 ## [,1] [,2] [,3] [,4] [,5] [,6] ## [1,] 1 0 0 -3/4 7/8 -9/8 ## [2,] 0 1 0 1/2 -1/4 3/4 ## [3,] 0 0 1 1/4 -1/8 -1/8"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"equations-in-two-unknowns","dir":"Articles","previous_headings":"","what":"Equations in two unknowns","title":"Solving Linear Equations","text":"equation two unknowns corresponds line 2D space. equations unique solution lines intersect point.","code":""},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"two-consistent-equations","dir":"Articles","previous_headings":"Equations in two unknowns","what":"Two consistent equations","title":"Solving Linear Equations","text":"Plot equations: Solve() convenience function shows solution comprehensible form:","code":"A <- matrix(c(1, 2, -1, 2), 2, 2) b <- c(2,1) showEqn(A, b) ## 1*x1 - 1*x2 = 2 ## 2*x1 + 2*x2 = 1 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 2 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] TRUE plotEqn(A,b) ## x[1] - 1*x[2] = 2 ## 2*x[1] + 2*x[2] = 1 Solve(A, b, fractions = TRUE) ## x1 = 5/4 ## x2 = -3/4"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-consistent-equations","dir":"Articles","previous_headings":"Equations in two unknowns","what":"Three consistent equations","title":"Solving Linear Equations","text":"three () equations two unknowns, \\(r(\\mathbf{}) \\le 2\\), \\(r(\\mathbf{}) \\le \\min(m,n)\\). equations consistent \\(r(\\mathbf{}) = r(\\mathbf{| b})\\). means whatever linear relations exist among rows \\(\\mathbf{}\\) among elements \\(\\mathbf{b}\\). Geometrically, means three lines intersect point. Plot equations:","code":"A <- matrix(c(1,2,3, -1, 2, 1), 3, 2) b <- c(2,1,3) showEqn(A, b) ## 1*x1 - 1*x2 = 2 ## 2*x1 + 2*x2 = 1 ## 3*x1 + 1*x2 = 3 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 2 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] TRUE Solve(A, b, fractions=TRUE) # show solution ## x1 = 5/4 ## x2 = -3/4 ## 0 = 0 plotEqn(A,b) ## x[1] - 1*x[2] = 2 ## 2*x[1] + 2*x[2] = 1 ## 3*x[1] + x[2] = 3"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-inconsistent-equations","dir":"Articles","previous_headings":"Equations in two unknowns","what":"Three inconsistent equations","title":"Solving Linear Equations","text":"Three equations two unknowns inconsistent \\(r(\\mathbf{}) < r(\\mathbf{| b})\\). can see result reducing \\(\\mathbf{} | \\mathbf{b}\\) echelon form, last row indicates inconsistency. Solve() shows explicitly: approximate solution sometimes available using generalized inverse. Plot equations. can see pair equations solution, three common, consistent solution.","code":"A <- matrix(c(1,2,3, -1, 2, 1), 3, 2) b <- c(2,1,6) showEqn(A, b) ## 1*x1 - 1*x2 = 2 ## 2*x1 + 2*x2 = 1 ## 3*x1 + 1*x2 = 6 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 3 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] \"Mean relative difference: 0.5\" echelon(A, b) ## [,1] [,2] [,3] ## [1,] 1 0 2.75 ## [2,] 0 1 -2.25 ## [3,] 0 0 -3.00 Solve(A, b, fractions=TRUE) ## x1 = 11/4 ## x2 = -9/4 ## 0 = -3 x <- MASS::ginv(A) %*% b x ## [,1] ## [1,] 2 ## [2,] -1 par(mar=c(4,4,0,0)+.1) plotEqn(A,b, xlim=c(-2, 4)) ## x[1] - 1*x[2] = 2 ## 2*x[1] + 2*x[2] = 1 ## 3*x[1] + x[2] = 6 points(x[1], x[2], pch=15)"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"equations-in-three-unknowns","dir":"Articles","previous_headings":"","what":"Equations in three unknowns","title":"Solving Linear Equations","text":"equation three unknowns corresponds plane 3D space. equations unique solution planes intersect point.","code":""},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-consistent-equations-1","dir":"Articles","previous_headings":"Equations in three unknowns","what":"Three consistent equations","title":"Solving Linear Equations","text":"equations consistent? Solve \\(\\mathbf{x}\\). Another way see solution reduce \\(\\mathbf{| b}\\) echelon form. result \\(\\mathbf{| ^{-1}b}\\), solution last column. Plot . plotEqn3d uses rgl 3D graphics. rotate figure, ’ll see orientation three planes intersect solution point, \\(\\mathbf{x} = (2, 3, -1)\\)","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) colnames(A) <- paste0('x', 1:3) b <- c(8, -11, -3) showEqn(A, b) ## 2*x1 + 1*x2 - 1*x3 = 8 ## -3*x1 - 1*x2 + 2*x3 = -11 ## -2*x1 + 1*x2 + 2*x3 = -3 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 3 3 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] TRUE solve(A, b) ## x1 x2 x3 ## 2 3 -1 solve(A) %*% b ## [,1] ## x1 2 ## x2 3 ## x3 -1 inv(A) %*% b ## [,1] ## [1,] 2 ## [2,] 3 ## [3,] -1 echelon(A, b) ## x1 x2 x3 ## [1,] 1 0 0 2 ## [2,] 0 1 0 3 ## [3,] 0 0 1 -1 echelon(A, b, verbose=TRUE, fractions=TRUE) ## ## Initial matrix: ## x1 x2 x3 ## [1,] 2 1 -1 8 ## [2,] -3 -1 2 -11 ## [3,] -2 1 2 -3 ## ## row: 1 ## ## exchange rows 1 and 2 ## x1 x2 x3 ## [1,] -3 -1 2 -11 ## [2,] 2 1 -1 8 ## [3,] -2 1 2 -3 ## ## multiply row 1 by -1/3 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 2 1 -1 8 ## [3,] -2 1 2 -3 ## ## multiply row 1 by 2 and subtract from row 2 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 1/3 1/3 2/3 ## [3,] -2 1 2 -3 ## ## multiply row 1 by 2 and add to row 3 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 1/3 1/3 2/3 ## [3,] 0 5/3 2/3 13/3 ## ## row: 2 ## ## exchange rows 2 and 3 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 5/3 2/3 13/3 ## [3,] 0 1/3 1/3 2/3 ## ## multiply row 2 by 3/5 ## x1 x2 x3 ## [1,] 1 1/3 -2/3 11/3 ## [2,] 0 1 2/5 13/5 ## [3,] 0 1/3 1/3 2/3 ## ## multiply row 2 by 1/3 and subtract from row 1 ## x1 x2 x3 ## [1,] 1 0 -4/5 14/5 ## [2,] 0 1 2/5 13/5 ## [3,] 0 1/3 1/3 2/3 ## ## multiply row 2 by 1/3 and subtract from row 3 ## x1 x2 x3 ## [1,] 1 0 -4/5 14/5 ## [2,] 0 1 2/5 13/5 ## [3,] 0 0 1/5 -1/5 ## ## row: 3 ## ## multiply row 3 by 5 ## x1 x2 x3 ## [1,] 1 0 -4/5 14/5 ## [2,] 0 1 2/5 13/5 ## [3,] 0 0 1 -1 ## ## multiply row 3 by 4/5 and add to row 1 ## x1 x2 x3 ## [1,] 1 0 0 2 ## [2,] 0 1 2/5 13/5 ## [3,] 0 0 1 -1 ## ## multiply row 3 by 2/5 and subtract from row 2 ## x1 x2 x3 ## [1,] 1 0 0 2 ## [2,] 0 1 0 3 ## [3,] 0 0 1 -1 plotEqn3d(A,b, xlim=c(0,4), ylim=c(0,4))"},{"path":"http://friendly.github.io/matlib/articles/linear-equations.html","id":"three-inconsistent-equations-1","dir":"Articles","previous_headings":"Equations in three unknowns","what":"Three inconsistent equations","title":"Solving Linear Equations","text":"equations consistent? .","code":"A <- matrix(c(1, 3, 1, 1, -2, -2, 2, 1, -1), 3, 3, byrow=TRUE) colnames(A) <- paste0('x', 1:3) b <- c(2, 3, 6) showEqn(A, b) ## 1*x1 + 3*x2 + 1*x3 = 2 ## 1*x1 - 2*x2 - 2*x3 = 3 ## 2*x1 + 1*x2 - 1*x3 = 6 c( R(A), R(cbind(A,b)) ) # show ranks ## [1] 2 3 all.equal( R(A), R(cbind(A,b)) ) # consistent? ## [1] \"Mean relative difference: 0.5\""},{"path":"http://friendly.github.io/matlib/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Michael Friendly. Author, maintainer. John Fox. Author. Phil Chalmers. Author. Georges Monette. Contributor. Gaston Sanchez. Contributor.","code":""},{"path":"http://friendly.github.io/matlib/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Friendly M, Fox J, Chalmers P (2024). matlib: Matrix Functions Teaching Learning Linear Algebra Multivariate Statistics. https://github.com/friendly/matlib, http://friendly.github.io/matlib/.","code":"@Manual{, title = {matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics}, author = {Michael Friendly and John Fox and Phil Chalmers}, year = {2024}, note = {https://github.com/friendly/matlib, http://friendly.github.io/matlib/}, }"},{"path":"http://friendly.github.io/matlib/index.html","id":"matlib-","dir":"","previous_headings":"","what":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"Matrix Functions Teaching Learning Linear Algebra Multivariate Statistics, http://friendly.github.io/matlib/ Version 0.9.9 functions originally designed tutorial purposes teaching & learning matrix algebra ideas using R. cases, functions provided concepts computations available elsewhere R, name obvious, e.g., R() rank matrix, tr() matrix trace. cases, provide cover functions show demonstrate algorithm detail, sometimes providing verbose = argument print details computations, e.g., Det() matrix determinant, Inverse() matrix inverse, using gaussianElimination() show steps. addition, collection functions provided drawing vector diagrams 2D 3D, illustrating various concepts linear algebra concretely available . example, showEqn(, b) shows matrix equations Ax = b text LaTeX form, plotEqn(, b) plotEqn3d(, b) plots equations 2D 3D space. matrix2latex() symbolicMatrix() facilitate writing matrix equations LaTeX vectors(), vectors3d() plot geometric vector diagrams 2D 3D, functions draw angles arcs. regvec3d() calculates plot vectors representing bivariate regression model, lm(y ~ x1 + x2)","code":""},{"path":"http://friendly.github.io/matlib/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"Get released version CRAN: development version R-universe: development version can also installed R library directly repo via: functions draw 3D graphs use rgl package. macOS, rgl requires XQuartz installed. installing XQuartz, ’s necessary either log back macOS account reboot Mac.","code":"install.packages(\"matlib\") install.packages('matlib', repos = c('https://friendly.r-universe.dev', 'https://cloud.r-project.org')) if (!require(remotes)) install.packages(\"remotes\") remotes::install_github(\"friendly/matlib\", build_vignettes = TRUE)"},{"path":"http://friendly.github.io/matlib/index.html","id":"topics","dir":"","previous_headings":"","what":"Topics","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"functions package grouped following topics Convenience functions: tr() - trace matrix R() - rank matrix J() - constant vector, matrix array len() - Euclidean length vector columns matrix vec() - vectorize matrix Proj(y, X) - projection vector y columns matrix X mpower(, p) - matrix powers square symmetric matrix xprod(...) - vector cross-product Determinants: functions calculating determinants cofactor expansion minor() - Minor [,j] cofactor() - Cofactor [,j] rowMinors() - Row minors [,] rowCofactors() - Row cofactors [,] Det() - Determinants elimination eigenvalues Elementary row operations: functions solving linear equations “manually” steps used row echelon form Gaussian elimination rowadd() - Add multiples rows rows rowmult() - Multiply rows constants rowswap() - Interchange two rows matrix Linear equations: functions illustrate linear equations form Ax = b showEqn(, b) - show matrices (, b) linear equations plotEqn(, b), plotEqn3d(, b) - plot matrices (, b) linear equations Gaussian elimination: functions illustrating Gaussian elimination solving systems linear equations form Ax = b. functions provide verbose=TRUE argument show intermediate steps fractions=TRUE argument show results using MASS::fractions(). gaussianElimination(, B) - reduces (,B) (,−1B) Inverse(X), inv() - uses gaussianElimination find inverse X, X−1 echelon(X) - uses gaussianElimination find reduced echelon form X Ginv(X) - uses gaussianElimination find generalized inverse X LU(X) - LU decomposition matrix X cholesky(X) - calculates Cholesky square root matrix swp() - matrix sweep operator Eigenvalues: functions illustrate algorithms calculating eigenvalues eigenvectors related matrix decompositions generalizations. Eigen() - eigenvalues eigenvectors SVD() - singular value decomposition, $mathbf{X = U D V}$ powerMethod() - find dominant eigenvector using power method showEig() - draw eigenvectors 2D scatterplot dataEllipse MoorePenrose() - illustrates Moore-Penrose inverse can calculated using SVD() Vector diagrams: functions drawing vector diagrams 2D 3D arrows3d() - draw nice 3D arrows corner(), arc() - draw corner arc showing angle two vectors 2D/3D pointOnLine() - position point along line vectors(), vectors3d() - plot geometric vector diagrams 2D/3D regvec3d() - calculate plot vectors representing bivariate regression model, lm(y ~ x1 + x2) mean-deviation form. Matrix equations matrix2latex(): Convert matrix LaTeX equation symbolicMatrix(): Create symbolic matrix LaTeX","code":""},{"path":"http://friendly.github.io/matlib/index.html","id":"vignettes-and-presentations","dir":"","previous_headings":"Topics","what":"Vignettes and presentations","title":"Matrix Functions for Teaching and Learning Linear Algebra and\n Multivariate Statistics","text":"small collection vignettes now available. Use browseVignettes(\"matlib\") explore . See also: Fox & Friendly, Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R, June 2016, useR! Conference, Stanford. Ivan Savov, Linear algebra explained four pages","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the Adjoint of a matrix — adjoint","title":"Calculate the Adjoint of a matrix — adjoint","text":"function calculates adjoint square matrix, defined transposed matrix cofactors elements.","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the Adjoint of a matrix — adjoint","text":"","code":"adjoint(A)"},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the Adjoint of a matrix — adjoint","text":"square matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the Adjoint of a matrix — adjoint","text":"matrix size ","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the Adjoint of a matrix — adjoint","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/adjoint.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the Adjoint of a matrix — adjoint","text":"","code":"A <- J(3, 3) + 2*diag(3) adjoint(A) #> [,1] [,2] [,3] #> [1,] 8 -2 -2 #> [2,] -2 8 -2 #> [3,] -2 -2 8"},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":null,"dir":"Reference","previous_headings":"","what":"Angle between two vectors — angle","title":"Angle between two vectors — angle","text":"angle calculates angle two vectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Angle between two vectors — angle","text":"","code":"angle(x, y, degree = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Angle between two vectors — angle","text":"x numeric vector y numeric vector degree logical; angle computed degrees? FALSE result returned radians","code":""},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Angle between two vectors — angle","text":"scalar containing angle vectors","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/angle.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Angle between two vectors — angle","text":"","code":"x <- c(2,1) y <- c(1,1) angle(x, y) # degrees #> [,1] #> [1,] 18.43495 angle(x, y, degree = FALSE) # radians #> [,1] #> [1,] 0.3217506 # visually xlim <- c(0,2.5) ylim <- c(0,2) # proper geometry requires asp=1 plot( xlim, ylim, type=\"n\", xlab=\"X\", ylab=\"Y\", asp=1, main = expression(theta == 18.4)) abline(v=0, h=0, col=\"gray\") vectors(rbind(x,y), col=c(\"red\", \"blue\"), cex.lab=c(2, 2)) text(.5, .37, expression(theta)) #### x <- c(-2,1) y <- c(1,1) angle(x, y) # degrees #> [,1] #> [1,] 108.4349 angle(x, y, degree = FALSE) # radians #> [,1] #> [1,] 1.892547 # visually xlim <- c(-2,1.5) ylim <- c(0,2) # proper geometry requires asp=1 plot( xlim, ylim, type=\"n\", xlab=\"X\", ylab=\"Y\", asp=1, main = expression(theta == 108.4)) abline(v=0, h=0, col=\"gray\") vectors(rbind(x,y), col=c(\"red\", \"blue\"), cex.lab=c(2, 2)) text(0, .4, expression(theta), cex=1.5)"},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw an arc showing the angle between vectors — arc","title":"Draw an arc showing the angle between vectors — arc","text":"utility function drawing vector diagrams. Draws circular arc show angle two vectors 2D 3D.","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw an arc showing the angle between vectors — arc","text":"","code":"arc(p1, p2, p3, d = 0.1, absolute = TRUE, ...)"},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw an arc showing the angle between vectors — arc","text":"p1 Starting point first vector p2 End point first vector, also start second vector p3 End point second vector d distance p2 along vector drawing corner absolute logical; TRUE, d taken absolute distance along vectors; otherwise calculated relative distance, .e., fraction length vectors. ... Arguments passed link[graphics]{lines} link[rgl]{lines3d}","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw an arc showing the angle between vectors — arc","text":"none","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw an arc showing the angle between vectors — arc","text":"implementation, two vectors specified three points, p1, p2, p3, meaning line p1 p2, another line p2 p3.","code":""},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Draw an arc showing the angle between vectors — arc","text":"https://math.stackexchange.com/questions/1507248/find-arc--two-tips--vectors--3d","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/arc.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw an arc showing the angle between vectors — arc","text":"3D plot","code":"library(rgl) #> Warning: package 'rgl' was built under R version 4.3.3 #> #> Attaching package: 'rgl' #> The following object is masked from 'package:matlib': #> #> GramSchmidt vec <- rbind(diag(3), c(1,1,1)) rownames(vec) <- c(\"X\", \"Y\", \"Z\", \"J\") open3d() aspect3d(\"iso\") vectors3d(vec, col=c(rep(\"black\",3), \"red\"), lwd=2) # draw the XZ plane, whose equation is Y=0 planes3d(0, 0, 1, 0, col=\"gray\", alpha=0.2) # show projections of the unit vector J segments3d(rbind( c(1,1,1), c(1, 1, 0))) segments3d(rbind( c(0,0,0), c(1, 1, 0))) segments3d(rbind( c(1,0,0), c(1, 1, 0))) segments3d(rbind( c(0,1,0), c(1, 1, 0))) segments3d(rbind( c(1,1,1), c(1, 0, 0))) # show some orthogonal vectors p1 <- c(0,0,0) p2 <- c(1,1,0) p3 <- c(1,1,1) p4 <- c(1,0,0) # show some angles arc(p1, p2, p3, d=.2) arc(p4, p1, p2, d=.2) arc(p3, p1, p2, d=.2) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":1,\"objects\":{\"7\":{\"id\":7,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"0\",\"colors\":\"1\",\"centers\":\"2\",\"ignoreExtent\":false,\"flags\":41024},\"8\":{\"id\":8,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"3\",\"colors\":\"5\",\"centers\":\"6\",\"normals\":\"4\",\"ignoreExtent\":false,\"flags\":32771},\"9\":{\"id\":9,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"10\":{\"id\":10,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"11\":{\"id\":11,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"12\":{\"id\":12,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"19\",\"colors\":\"20\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"X\"],[\"Y\"],[\"Z\"],[\"J\"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"21\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"13\":{\"id\":13,\"type\":\"planes\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"22\",\"colors\":\"24\",\"offsets\":[[0]],\"centers\":\"25\",\"normals\":\"23\",\"ignoreExtent\":true,\"flags\":32803},\"14\":{\"id\":14,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"26\",\"colors\":\"27\",\"centers\":\"28\",\"ignoreExtent\":false,\"flags\":32832},\"15\":{\"id\":15,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"29\",\"colors\":\"30\",\"centers\":\"31\",\"ignoreExtent\":false,\"flags\":32832},\"16\":{\"id\":16,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"32\",\"colors\":\"33\",\"centers\":\"34\",\"ignoreExtent\":false,\"flags\":32832},\"17\":{\"id\":17,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"35\",\"colors\":\"36\",\"centers\":\"37\",\"ignoreExtent\":false,\"flags\":32832},\"18\":{\"id\":18,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"38\",\"colors\":\"39\",\"centers\":\"40\",\"ignoreExtent\":false,\"flags\":32832},\"19\":{\"id\":19,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"41\",\"colors\":\"42\",\"centers\":\"43\",\"ignoreExtent\":false,\"flags\":32832},\"20\":{\"id\":20,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"44\",\"colors\":\"45\",\"centers\":\"46\",\"ignoreExtent\":false,\"flags\":32832},\"21\":{\"id\":21,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"47\",\"colors\":\"48\",\"centers\":\"49\",\"ignoreExtent\":false,\"flags\":32832},\"5\":{\"id\":5,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"4\":{\"id\":4,\"type\":\"background\",\"material\":{},\"colors\":\"50\",\"centers\":\"51\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"6\":{\"id\":6,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"52\",\"centers\":\"53\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"1\":{\"id\":1,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":1,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.735036373138428],\"modelMatrix\":[[1,0,0,-0.5417932868003845],[0,0.3420201539993286,0.9396926164627075,-0.6947333812713623],[0,-0.9396926164627075,0.3420201539993286,-3.411468982696533],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.863703727722168,-13.46437454223633],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-0.01641346327960491,1.100000023841858,-0.01666666753590107,1.100000023841858,-0.01566154323518276,1.100000023841858],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,5],\"subscenes\":[],\"flags\":42355}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5121,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":8,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":6,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5121,\"count\":4,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":21,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":22,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":25,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":28,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":30,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":31,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":32,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":33,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":34,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":35,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":36,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":37,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":38,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":40,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":41,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":43,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":44,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":46,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":47,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":49,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":50,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":51,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":53,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":24,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":32,\"byteOffset\":24},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":752},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1400},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1616},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2480},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3128},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3344},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3560},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4208},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4856},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":5072},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5288},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5936},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6584},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6800},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7016},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7112},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7128},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":7224},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":7260},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7264},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":7280},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7328},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7334},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7340},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7352},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7358},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7364},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7376},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7382},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7388},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7400},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7406},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7412},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7424},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7430},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7436},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7448},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7568},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7572},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7692},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7812},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7816},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7936},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8056},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":8060},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":8180},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":8196},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8199},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":8203}],\"buffers\":[{\"byteLength\":8206,\"bytes\":\"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\\nF3twPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAF3twPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAF3twPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAF3twPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAF3twPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAF3twPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAF3twPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\nAACAPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAAACAPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAAACAPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAAACAPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAAACAPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAAACAPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAAACAPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA\\n//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAACA//9/PwAAAAAAAACA//9/PwAA\\nAAAAAACA//9/PwAAAAAAAACA//9/PwAAAAAAAACA//9/PwAAAAAAAACA//9/PwAAAAAwjKk+\\nyRGAPv/paD8wjKk+yRGAPv/paD8wjKk+yRGAPv/paD+ep1Y/yRGAPqvc9z6ep1Y/yRGAPqvc\\n9z6ep1Y/yRGAPqvc9z6sGHQ/yhGAPscpLL6sGHQ/yhGAPscpLL6sGHQ/yhGAPscpLL6WUh8/\\nyhGAPpDfPb+WUh8/yhGAPpDfPb+WUh8/yhGAPpDfPb8AAAAAyRGAPqrcd78AAAAAyRGAPqrc\\nd78AAAAAyRGAPqrcd7+WUh+/yhGAPpDfPb+WUh+/yhGAPpDfPb+WUh+/yhGAPpDfPb+tGHS/\\nyhGAPsgpLL6tGHS/yhGAPsgpLL6tGHS/yhGAPsgpLL6ep1a/yRGAPqvc9z6ep1a/yRGAPqvc\\n9z6ep1a/yRGAPqvc9z4wjKm+yRGAPv/paD8wjKm+yRGAPv/paD8wjKm+yRGAPv/paD8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\nF3twP9K/IDy5JRQ8F3twP9oQqzuKdyg8F3twP2ak7boA69s7F3twP0YLA7wAAAAAF3twP9oQ\\nK7wA69u7F3twP0YLA7yKdyi8F3twP2ak7bq5JRS8F3twP9oQqzsmCGq7F3twP9K/IDwmCGo7\\nZqd1P9K/IDy5JRQ8Zqd1P9oQqzuKdyg8Zqd1P2ak7boA69s7Zqd1P0YLA7wAAAAAZqd1P9oQ\\nK7wA69u7Zqd1P0YLA7yKdyi8Zqd1P2ak7bq5JRS8Zqd1P9oQqzsmCGq7Zqd1P9K/IDwAAAAA\\nAAAAABd7cD8AAAAAiYiIvBd7cD8chi88Yy5RvBd7cD8AAAAAAAAAABd7cD8chi88Yy5RvBd7\\ncD+HdYY8jas9uxd7cD8AAAAAAAAAABd7cD+HdYY8jas9uxd7cD+Qe2w8iYgIPBd7cD8AAAAA\\nAAAAABd7cD+Qe2w8iYgIPBd7cD/iybo7o0yAPBd7cD8AAAAAAAAAABd7cD/iybo7o0yAPBd7\\ncD/iybq7o0yAPBd7cD8AAAAAAAAAABd7cD/iybq7o0yAPBd7cD+Qe2y8iYgIPBd7cD8AAAAA\\nAAAAABd7cD+Qe2y8iYgIPBd7cD+HdYa8jas9uxd7cD8AAAAAAAAAABd7cD+HdYa8jas9uxd7\\ncD8chi+8Yy5RvBd7cD8AAAAAAAAAABd7cD8chi+8Yy5RvBd7cD+amZaiiYiIvBd7cD8AAAAA\\n0fGIIgAAgD8AAAAAiYiIvBd7cD8chi88Yy5RvBd7cD8AAAAA0fGIIgAAgD8chi88Yy5RvBd7\\ncD+HdYY8jas9uxd7cD8AAAAA0fGIIgAAgD+HdYY8jas9uxd7cD+Qe2w8iYgIPBd7cD8AAAAA\\n0fGIIgAAgD+Qe2w8iYgIPBd7cD/iybo7o0yAPBd7cD8AAAAA0fGIIgAAgD/iybo7o0yAPBd7\\ncD/iybq7o0yAPBd7cD8AAAAA0fGIIgAAgD/iybq7o0yAPBd7cD+Qe2y8iYgIPBd7cD8AAAAA\\n0fGIIgAAgD+Qe2y8iYgIPBd7cD+HdYa8jas9uxd7cD8AAAAA0fGIIgAAgD+HdYa8jas9uxd7\\ncD8chi+8Yy5RvBd7cD8AAAAA0fGIIgAAgD8chi+8Yy5RvBd7cD+amZaiiYiIvBd7cD8AAAAA\\nAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAgP//fz8AAAAAAAAAgP//\\nfz8AAAAAAAAAgP//fz8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//\\nfz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAA\\nAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//\\nfz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8wjKk+\\n/+lov8kRgD4wjKk+/+lov8kRgD4wjKk+/+lov8kRgD6ep1Y/q9z3vskRgD6ep1Y/q9z3vskR\\ngD6ep1Y/q9z3vskRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6WUh8/\\nkN89P8oRgD6WUh8/kN89P8oRgD6WUh8/kN89P8oRgD4AAAAAqtx3P8kRgD4AAAAAqtx3P8kR\\ngD4AAAAAqtx3P8kRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6tGHS/\\nyCksPsoRgD6tGHS/yCksPsoRgD6tGHS/yCksPsoRgD6ep1a/q9z3vskRgD6ep1a/q9z3vskR\\ngD6ep1a/q9z3vskRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\n0r8gvBd7cD+5JRQ82hCruxd7cD+Kdyg8ZqTtOhd7cD8A69s7RgsDPBd7cD8AAAAA2hArPBd7\\ncD8A69u7RgsDPBd7cD+Kdyi8ZqTtOhd7cD+5JRS82hCruxd7cD8mCGq70r8gvBd7cD8mCGo7\\n0r8gvGandT+5JRQ82hCru2andT+Kdyg8ZqTtOmandT8A69s7RgsDPGandT8AAAAA2hArPGan\\ndT8A69u7RgsDPGandT+Kdyi8ZqTtOmandT+5JRS82hCru2andT8mCGq70r8gvGandT89Cnc/\\nPQp3Pz0Kdz9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT89Cnc/PQp3Pz0Kdz8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj89Cnc/PQp3Pz0Kdz+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD89Cnc/\\nPQp3Pz0Kdz+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz89Cnc/PQp3Pz0Kdz/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD89Cnc/PQp3Pz0Kdz+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj89Cnc/\\nPQp3Pz0Kdz+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD89Cnc/PQp3Pz0Kdz/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej89Cnc/PQp3Pz0Kdz+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej8AAIA/\\nAACAPwAAgD9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT8AAIA/AACAPwAAgD8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj8AAIA/AACAPwAAgD+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD8AAIA/\\nAACAPwAAgD+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz8AAIA/AACAPwAAgD/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD8AAIA/AACAPwAAgD+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj8AAIA/\\nAACAPwAAgD+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD8AAIA/AACAPwAAgD/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej8AAIA/AACAPwAAgD+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej9fzRM/\\nUc0TP/3MEz9fzRM/Uc0TP/3MEz9fzRM/Uc0TP/3MEz/+zBM/XM0TP1fNEz/+zBM/XM0TP1fN\\nEz/+zBM/XM0TP1fNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/9zBM/\\nX80TP1HNEz/9zBM/X80TP1HNEz/9zBM/X80TP1HNEz9XzRM//swTP1zNEz9XzRM//swTP1zN\\nEz9XzRM//swTP1zNEz9VzRM//swTP17NEz9VzRM//swTP17NEz9VzRM//swTP17NEz9RzRM/\\n/cwTP1/NEz9RzRM//cwTP1/NEz9RzRM//cwTP1/NEz9czRM/V80TP/7MEz9czRM/V80TP/7M\\nEz9czRM/V80TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9Lb1o+\\nU3ISv9S/Sj9Lb1o+U3ISv9S/Sj9Lb1o+U3ISv9S/Sj/gEjQ/FYMevxmzsj7gEjQ/FYMevxmz\\nsj7gEjQ/FYMevxmzsj4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr7Uv0o/\\nS29aPlNyEr/Uv0o/S29aPlNyEr/Uv0o/S29aPlNyEr8Zs7I+4BI0PxWDHr8Zs7I+4BI0PxWD\\nHr8Zs7I+4BI0PxWDHr8dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr5TchK/\\n1L9KP0tvWj5TchK/1L9KP0tvWj5TchK/1L9KP0tvWj4Vgx6/GbOyPuASND8Vgx6/GbOyPuAS\\nND8Vgx6/GbOyPuASND+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP/vOnc/\\n4w91P+bTeD9OlXg/lO50P9iadz/QNnk/ysl1PyAedj/m03g/7zp3P+MPdT/Ymnc/TpV4P5Tu\\ndD8gHnY/0DZ5P8rJdT/jD3U/5tN4P+86dz+U7nQ/2Jp3P06VeD/KyXU/IB52P9A2eT+GN3o/\\negx4P37Qez/jkXs/K+t3P26Xej9nM3w/X8Z4P7caeT9+0Hs/hjd6P3oMeD9ul3o/45F7Pyvr\\ndz+3Gnk/ZzN8P1/GeD96DHg/ftB7P4Y3ej8r63c/bpd6P+ORez9fxng/txp5P2czfD8AAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNzIw/AAAAAAAA\\nAAAAAAAAzcyMPwAAAAAAAAAAAAAAAM3MjD/NzIw/zcyMP83MjD8AAAD/AAAA/wAAAP//AAD/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzcyMPwAA\\nAAAAAAAAAAAAAM3MjD8AAAAAAAAAAAAAAADNzIw/zcyMP83MjD/NzIw/h3WGvImIiLwAAACA\\nzcyMP83MjD8AAACAh3WGvM3MjD8AAACAAAABAL++Pj+/vj4/v74+P83MTD6CIbY+pk86PwAA\\nAAAuVTo/Ygu2PgAAAAAAAMB/AADAfwAAwH8AAMB/AADAfwAAwH8BAQEBAQAAAAABAAAAAIA/\\nAACAPwAAAD8AAAABAQAAAAABAAAAAAA/AAAAPwAAAAABAAABAQAAAAABAAAAAIA/AAAAPwAA\\nAAAAAQABAQAAAAABAAAAAAA/AACAPwAAAAABAQEBAAAAAAABAAAAAIA/AAAAPwAAAD/Py1s/\\nz8tbPwAAAACdWFw/nVhcP6pADj3A+l0/wPpdP2kXjD2DpWA/g6VgP83MzD0oRGQ/KERkP5Wk\\nAz6Gumg/hrpoP8riHD7o5W0/6OVtP6xcMT4YnnM/GJ5zP/VyQD6Ytnk/mLZ5P0qwST4AAIA/\\nAACAP83MTD4AAAABz8tbP8/LWz8AAAAAnVhcP51YXD+qQA49wPpdP8D6XT9pF4w9g6VgP4Ol\\nYD/NzMw9KERkPyhEZD+VpAM+hrpoP4a6aD/K4hw+6OVtP+jlbT+sXDE+GJ5zPxiecz/1ckA+\\nmLZ5P5i2eT9KsEk+AACAPwAAgD/NzEw+zcxMPgAAAAAAAAAA/4RhPuaqxTwAAAAAd6FvPoDF\\nQj0AAAAAWrh2Pj2Ajj0AAAAAeJR2PsNwtz0AAAAA4TZvPjYB2z0AAAAA09ZgPs0m+D0AAAAA\\nJeBLPnEDBz4AAAAAGvAwPrD+DT4AAAAAw9AQPsPQED4AAAAAAAAAAc3MTD4AAAAAAAAAAP+E\\nYT7mqsU8AAAAAHehbz6AxUI9AAAAAFq4dj49gI49AAAAAHiUdj7DcLc9AAAAAOE2bz42Ads9\\nAAAAANPWYD7NJvg9AAAAACXgSz5xAwc+AAAAABrwMD6w/g0+AAAAAMPQED7D0BA+AAAAAJB7\\n7D2Qe+w9kHvsPQCBDD4AgQw+JbnnPTGsHj4xrB4+SjbcPdY3LD7WNyw+3EjKPeW+ND7lvjQ+\\nk3ayPcMBOD7DATg+H3GVPRzoNT4c6DU+9CFoPZqBLj6agS4+K54ePXIFIj5yBSI+e/agPMPQ\\nED7D0BA+AAAAAAAAAAGQe+w9kHvsPZB77D0AgQw+AIEMPiW55z0xrB4+MawePko23D3WNyw+\\n1jcsPtxIyj3lvjQ+5b40PpN2sj3DATg+wwE4Ph9xlT0c6DU+HOg1PvQhaD2agS4+moEuPiue\\nHj1yBSI+cgUiPnv2oDzD0BA+w9AQPgAAAACZmJg+mZiYPpmYmD4AAIA/AAAAAQEBAQAAAA==\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]}"},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw 3D arrows — arrows3d","title":"Draw 3D arrows — arrows3d","text":"Draws nice 3D arrows cone3ds tips.","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw 3D arrows — arrows3d","text":"","code":"arrows3d( coords, headlength = 0.035, head = \"end\", scale = NULL, radius = NULL, ref.length = NULL, draw = TRUE, ... )"},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw 3D arrows — arrows3d","text":"coords 2n x 3 matrix giving start end (x,y,z) coordinates n arrows, pairs. first vector pair taken starting coordinates arrow, second end coordinates. headlength Length arrow heads, device units head Position arrow head. head=\"end\" presently implemented. scale Scale factor base tip arrow head, vector length 3, giving relative scale factors X, Y, Z radius radius base arrow head ref.length length vector used scale arrow heads (permits drawing arrow heads size previous call); NULL, arrows scaled relative longest vector draw TRUE (default) draw arrow(s) ... rgl arguments passed segments3d cone3d, example, col lwd","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw 3D arrows — arrows3d","text":"invisibly returns length vector used scale arrow heads","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw 3D arrows — arrows3d","text":"function meant analogous arrows, 3D plots using rgl. headlength, scale radius set length, scale factor base radius arrow head, 3D cone. units terms ranges current rgl 3D scene.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw 3D arrows — arrows3d","text":"January Weiner, borrowed pca3d package, slightly modified John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/arrows3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw 3D arrows — arrows3d","text":"","code":"#none yet"},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":null,"dir":"Reference","previous_headings":"","what":"Build/Get transformation matrices — buildTmat","title":"Build/Get transformation matrices — buildTmat","text":"Recover history row operations performed. function combines transformation matrices single transformation matrix representing row operations may optionally print individual operations performed.","code":""},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Build/Get transformation matrices — buildTmat","text":"","code":"buildTmat(x, all = FALSE) # S3 method for trace as.matrix(x, ...) # S3 method for trace print(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Build/Get transformation matrices — buildTmat","text":"x matrix , joined vector constants, b, passed gaussianElimination row operator matrix functions logical; print individual transformation ies? ... additional arguments","code":""},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Build/Get transformation matrices — buildTmat","text":"transformation matrix list individual transformation matrices","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Build/Get transformation matrices — buildTmat","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/buildTmat.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Build/Get transformation matrices — buildTmat","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) # using row operations to reduce below diagonal to 0 Abt <- Ab <- cbind(A, b) Abt <- rowadd(Abt, 1, 2, 3/2) Abt <- rowadd(Abt, 1, 3, 1) Abt <- rowadd(Abt, 2, 3, -4) Abt #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # build T matrix and multiply by original form (T <- buildTmat(Abt)) #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] 1.5 1 0 #> [3,] -5.0 -4 1 T %*% Ab # same as Abt #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # print all transformation matrices buildTmat(Abt, TRUE) #> $T1 #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] 1.5 1 0 #> [3,] 0.0 0 1 #> #> $T2 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 1 0 1 #> #> $T3 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 -4 1 #> # invert transformation matrix to reverse operations inv(T) %*% Abt #> b #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 # gaussian elimination (soln <- gaussianElimination(A, b)) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 T <- buildTmat(soln) inv(T) %*% soln #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3"},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":null,"dir":"Reference","previous_headings":"","what":"Cholesky Square Root of a Matrix — cholesky","title":"Cholesky Square Root of a Matrix — cholesky","text":"Returns Cholesky square root non-singular, symmetric matrix X. purpose mainly demonstrate algorithm used Kennedy & Gentle (1980).","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cholesky Square Root of a Matrix — cholesky","text":"","code":"cholesky(X, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cholesky Square Root of a Matrix — cholesky","text":"X square symmetric matrix tol tolerance checking 0 pivot","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cholesky Square Root of a Matrix — cholesky","text":"Cholesky square root X","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Cholesky Square Root of a Matrix — cholesky","text":"Kennedy W.J. Jr, Gentle J.E. (1980). Statistical Computing. Marcel Dekker.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cholesky Square Root of a Matrix — cholesky","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/cholesky.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Cholesky Square Root of a Matrix — cholesky","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 cholesky(C) #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 2 1 0 #> [3,] 3 0 1 cholesky(C) %*% t(cholesky(C)) # check #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10"},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw circles on an existing plot. — circle","title":"Draw circles on an existing plot. — circle","text":"Draw circles existing plot.","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw circles on an existing plot. — circle","text":"","code":"circle( x, y, radius, nv = 60, border = NULL, col = NA, lty = 1, density = NULL, angle = 45, lwd = 1 )"},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw circles on an existing plot. — circle","text":"x, y Coordinates center circle. x vector length 2, y ignored center taken x[1], x[2]. radius Radius (radii) circle(s) user units. nv Number vertices draw circle. border Color use drawing circumference. polygon col Color use filling circle. lty Line type circumference. density Density patterned fill. See polygon. angle Angle patterned fill. See polygon. lwd Line width circumference.","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw circles on an existing plot. — circle","text":"Invisibly returns list x y coordinates points circumference last circle displayed.","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw circles on an existing plot. — circle","text":"Rather depending aspect ratio par(\"asp\") set globally call plot, circle uses dimensions current plot x y coordinates draw circle rather ellipse. course, resize plot aspect ratio can change. function copied draw.circle","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw circles on an existing plot. — circle","text":"Jim Lemon, thanks David Winsemius density angle args","code":""},{"path":"http://friendly.github.io/matlib/reference/circle.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw circles on an existing plot. — circle","text":"","code":"plot(1:5,seq(1,10,length=5), type=\"n\",xlab=\"\",ylab=\"\", main=\"Test draw.circle\") # draw three concentric circles circle(2, 4, c(1, 0.66, 0.33),border=\"purple\", col=c(\"#ff00ff\",\"#ff77ff\",\"#ffccff\"),lty=1,lwd=1) # draw some others circle(2.5, 8, 0.6,border=\"red\",lty=3,lwd=3) circle(4, 3, 0.7,border=\"green\",col=\"yellow\",lty=1, density=5,angle=30,lwd=10) circle(3.5, 8, 0.8,border=\"blue\",lty=2,lwd=2)"},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a horizontal circle — circle3d","title":"Draw a horizontal circle — circle3d","text":"utility function drawing horizontal circle (x,y) plane 3D graph","code":""},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a horizontal circle — circle3d","text":"","code":"circle3d(center, radius, segments = 100, fill = FALSE, ...)"},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a horizontal circle — circle3d","text":"center vector length 3. radius positive number. segments integer specifying number line segments use draw circle (default, 100). fill logical; TRUE, circle filled (default FALSE). ... rgl material properties circle.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/circle3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a horizontal circle — circle3d","text":"3D plot","code":"ctr=c(0,0,0) circle3d(ctr, 3, fill = TRUE) circle3d(ctr - c(-1,-1,0), 3, col=\"blue\") circle3d(ctr + c(1,1,0), 3, col=\"red\") 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":1,\"objects\":{\"7\":{\"id\":7,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"0\",\"colors\":\"1\",\"centers\":\"2\",\"ignoreExtent\":false,\"flags\":41024},\"8\":{\"id\":8,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"3\",\"colors\":\"5\",\"centers\":\"6\",\"normals\":\"4\",\"ignoreExtent\":false,\"flags\":32771},\"9\":{\"id\":9,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"10\":{\"id\":10,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"11\":{\"id\":11,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"12\":{\"id\":12,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"19\",\"colors\":\"20\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"X\"],[\"Y\"],[\"Z\"],[\"J\"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"21\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"13\":{\"id\":13,\"type\":\"planes\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"22\",\"colors\":\"24\",\"offsets\":[[0]],\"centers\":\"25\",\"normals\":\"23\",\"ignoreExtent\":true,\"flags\":32803},\"14\":{\"id\":14,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"26\",\"colors\":\"27\",\"centers\":\"28\",\"ignoreExtent\":false,\"flags\":32832},\"15\":{\"id\":15,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"29\",\"colors\":\"30\",\"centers\":\"31\",\"ignoreExtent\":false,\"flags\":32832},\"16\":{\"id\":16,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"32\",\"colors\":\"33\",\"centers\":\"34\",\"ignoreExtent\":false,\"flags\":32832},\"17\":{\"id\":17,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"35\",\"colors\":\"36\",\"centers\":\"37\",\"ignoreExtent\":false,\"flags\":32832},\"18\":{\"id\":18,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"38\",\"colors\":\"39\",\"centers\":\"40\",\"ignoreExtent\":false,\"flags\":32832},\"19\":{\"id\":19,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"41\",\"colors\":\"42\",\"centers\":\"43\",\"ignoreExtent\":false,\"flags\":32832},\"20\":{\"id\":20,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"44\",\"colors\":\"45\",\"centers\":\"46\",\"ignoreExtent\":false,\"flags\":32832},\"21\":{\"id\":21,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"47\",\"colors\":\"48\",\"centers\":\"49\",\"ignoreExtent\":false,\"flags\":32832},\"22\":{\"id\":22,\"type\":\"triangles\",\"material\":{},\"vertices\":\"50\",\"colors\":\"52\",\"centers\":\"53\",\"normals\":\"51\",\"ignoreExtent\":false,\"flags\":32771},\"23\":{\"id\":23,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"54\",\"colors\":\"55\",\"centers\":\"56\",\"ignoreExtent\":false,\"flags\":32832},\"24\":{\"id\":24,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"57\",\"colors\":\"58\",\"centers\":\"59\",\"ignoreExtent\":false,\"flags\":32832},\"5\":{\"id\":5,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"4\":{\"id\":4,\"type\":\"background\",\"material\":{},\"colors\":\"60\",\"centers\":\"61\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"6\":{\"id\":6,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"62\",\"centers\":\"63\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"1\":{\"id\":1,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":1,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,19.24234580993652],\"modelMatrix\":[[1,0,0,-0.5],[0,0.3420201539993286,0.9396926164627075,-0.6807408332824707],[0,-0.9396926164627075,0.3420201539993286,-18.95722198486328],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-69.36643218994141],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-2.999622344970703,3.999622344970703,-2.998489618301392,4,-0.01566154323518276,1.100000023841858],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,5],\"subscenes\":[],\"flags\":42355}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5121,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":8,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":6,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5121,\"count\":4,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":21,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":22,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":25,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":28,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":30,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":31,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":32,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":33,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":34,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":35,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":36,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":37,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":38,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":40,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":41,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":43,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":44,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":46,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":47,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":49,\"componentType\":5126,\"count\":10,\"type\":\"VEC3\"},{\"bufferView\":50,\"componentType\":5126,\"count\":294,\"type\":\"VEC3\"},{\"bufferView\":51,\"componentType\":5126,\"count\":294,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":53,\"componentType\":5126,\"count\":98,\"type\":\"VEC3\"},{\"bufferView\":54,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":55,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":56,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":57,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":58,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":59,\"componentType\":5126,\"count\":101,\"type\":\"VEC3\"},{\"bufferView\":60,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":61,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":62,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":63,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":24,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":32,\"byteOffset\":24},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":752},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1400},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1616},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2480},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3128},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3344},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3560},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4208},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4856},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":5072},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5288},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5936},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6584},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6800},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7016},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7112},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7128},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":7224},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":7260},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7264},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":7280},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7328},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7334},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7340},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7352},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7358},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7364},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7376},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7382},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7388},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7400},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7406},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7412},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7424},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7430},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7436},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7448},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7568},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7572},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7692},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7812},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7816},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":7936},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8056},{\"buffer\":0,\"byteLength\":120,\"byteOffset\":8060},{\"buffer\":0,\"byteLength\":3528,\"byteOffset\":8180},{\"buffer\":0,\"byteLength\":3528,\"byteOffset\":11708},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":15236},{\"buffer\":0,\"byteLength\":1176,\"byteOffset\":15240},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":16416},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":17628},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":17632},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":18844},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":20056},{\"buffer\":0,\"byteLength\":1212,\"byteOffset\":20060},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":21272},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":21288},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":21291},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":21295}],\"buffers\":[{\"byteLength\":21298,\"bytes\":\"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\\nF3twPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAF3twPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAF3twPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAF3twPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAF3twPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAF3twPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAF3twPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\nAACAPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAAACAPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAAACAPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAAACAPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAAACAPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAAACAPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAAACAPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA\\n//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAACA//9/PwAAAAAAAACA//9/PwAA\\n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\\ngD6ep1Y/q9z3vskRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6WUh8/\\nkN89P8oRgD6WUh8/kN89P8oRgD6WUh8/kN89P8oRgD4AAAAAqtx3P8kRgD4AAAAAqtx3P8kR\\ngD4AAAAAqtx3P8kRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6tGHS/\\nyCksPsoRgD6tGHS/yCksPsoRgD6tGHS/yCksPsoRgD6ep1a/q9z3vskRgD6ep1a/q9z3vskR\\ngD6ep1a/q9z3vskRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\n0r8gvBd7cD+5JRQ82hCruxd7cD+Kdyg8ZqTtOhd7cD8A69s7RgsDPBd7cD8AAAAA2hArPBd7\\ncD8A69u7RgsDPBd7cD+Kdyi8ZqTtOhd7cD+5JRS82hCruxd7cD8mCGq70r8gvBd7cD8mCGo7\\n0r8gvGandT+5JRQ82hCru2andT+Kdyg8ZqTtOmandT8A69s7RgsDPGandT8AAAAA2hArPGan\\ndT8A69u7RgsDPGandT+Kdyi8ZqTtOmandT+5JRS82hCru2andT8mCGq70r8gvGandT89Cnc/\\nPQp3Pz0Kdz9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT89Cnc/PQp3Pz0Kdz8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj89Cnc/PQp3Pz0Kdz+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD89Cnc/\\nPQp3Pz0Kdz+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz89Cnc/PQp3Pz0Kdz/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD89Cnc/PQp3Pz0Kdz+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj89Cnc/\\nPQp3Pz0Kdz+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD89Cnc/PQp3Pz0Kdz/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej89Cnc/PQp3Pz0Kdz+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej8AAIA/\\nAACAPwAAgD9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT8AAIA/AACAPwAAgD8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj8AAIA/AACAPwAAgD+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD8AAIA/\\nAACAPwAAgD+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz8AAIA/AACAPwAAgD/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD8AAIA/AACAPwAAgD+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj8AAIA/\\nAACAPwAAgD+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD8AAIA/AACAPwAAgD/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej8AAIA/AACAPwAAgD+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej9fzRM/\\nUc0TP/3MEz9fzRM/Uc0TP/3MEz9fzRM/Uc0TP/3MEz/+zBM/XM0TP1fNEz/+zBM/XM0TP1fN\\nEz/+zBM/XM0TP1fNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/9zBM/\\nX80TP1HNEz/9zBM/X80TP1HNEz/9zBM/X80TP1HNEz9XzRM//swTP1zNEz9XzRM//swTP1zN\\nEz9XzRM//swTP1zNEz9VzRM//swTP17NEz9VzRM//swTP17NEz9VzRM//swTP17NEz9RzRM/\\n/cwTP1/NEz9RzRM//cwTP1/NEz9RzRM//cwTP1/NEz9czRM/V80TP/7MEz9czRM/V80TP/7M\\nEz9czRM/V80TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9Lb1o+\\nU3ISv9S/Sj9Lb1o+U3ISv9S/Sj9Lb1o+U3ISv9S/Sj/gEjQ/FYMevxmzsj7gEjQ/FYMevxmz\\nsj7gEjQ/FYMevxmzsj4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr7Uv0o/\\nS29aPlNyEr/Uv0o/S29aPlNyEr/Uv0o/S29aPlNyEr8Zs7I+4BI0PxWDHr8Zs7I+4BI0PxWD\\nHr8Zs7I+4BI0PxWDHr8dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr5TchK/\\n1L9KP0tvWj5TchK/1L9KP0tvWj5TchK/1L9KP0tvWj4Vgx6/GbOyPuASND8Vgx6/GbOyPuAS\\nND8Vgx6/GbOyPuASND+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP/vOnc/\\n4w91P+bTeD9OlXg/lO50P9iadz/QNnk/ysl1PyAedj/m03g/7zp3P+MPdT/Ymnc/TpV4P5Tu\\ndD8gHnY/0DZ5P8rJdT/jD3U/5tN4P+86dz+U7nQ/2Jp3P06VeD/KyXU/IB52P9A2eT+GN3o/\\negx4P37Qez/jkXs/K+t3P26Xej9nM3w/X8Z4P7caeT9+0Hs/hjd6P3oMeD9ul3o/45F7Pyvr\\ndz+3Gnk/ZzN8P1/GeD96DHg/ftB7P4Y3ej8r63c/bpd6P+ORez9fxng/txp5P2czfD8AAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNzIw/AAAAAAAA\\nAAAAAAAAzcyMPwAAAAAAAAAAAAAAAM3MjD/NzIw/zcyMP83MjD8AAAD/AAAA/wAAAP//AAD/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzcyMPwAA\\nAAAAAAAAAAAAAM3MjD8AAAAAAAAAAAAAAADNzIw/zcyMP83MjD/NzIw/0Pk/wEHnP8AAAACA\\n0Pl/QAAAgEAAAACA0Pk/wAAAgEAAAACAAAABAL++Pj+/vj4/v74+P83MTD5roiq/1mXVPwAA\\nAAA2UdU/rmgqvwAAAAAAAMB/AADAfwAAwH8AAMB/AADAfwAAwH8BAQEBAQAAAAABAAAAAIA/\\n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\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAP//\\nfz8AAAAAAAAAAP//fz8AAAAAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAAP//\\nfz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAgP//\\nfz8AAACAAAAAgP//fz8AAACAAAAAgP//fz8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgP//\\nfz8AAAAAAAAAgP//fz8AAAAAAAAAgP//fz8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACA\\nAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACA\\nAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAAP//fz8AAACAAAAAgAAA\\ngD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\n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\\nmZiYPpmYmD4AAIA/AAAAAQEBAQAAAA==\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]}"},{"path":"http://friendly.github.io/matlib/reference/class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class Data Set — class","title":"Class Data Set — class","text":"small artificial data set used illustrate statistical concepts.","code":""},{"path":"http://friendly.github.io/matlib/reference/class.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Class Data Set — class","text":"","code":"data(\"class\")"},{"path":"http://friendly.github.io/matlib/reference/class.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Class Data Set — class","text":"data frame 15 observations following 4 variables. sex factor levels F M age numeric vector height numeric vector weight numeric vector","code":""},{"path":"http://friendly.github.io/matlib/reference/class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Class Data Set — class","text":"","code":"data(class) plot(class)"},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":null,"dir":"Reference","previous_headings":"","what":"Cofactor of A[i,j] — cofactor","title":"Cofactor of A[i,j] — cofactor","text":"Returns cofactor element (,j) square matrix , .e., signed minor sub-matrix results row column j deleted.","code":""},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cofactor of A[i,j] — cofactor","text":"","code":"cofactor(A, i, j)"},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cofactor of A[i,j] — cofactor","text":"square matrix row index j column index","code":""},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cofactor of A[i,j] — cofactor","text":"cofactor [,j]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cofactor of A[i,j] — cofactor","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/cofactor.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Cofactor of A[i,j] — cofactor","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) cofactor(M, 1, 1) #> [1] 11 cofactor(M, 1, 2) #> [1] -7 cofactor(M, 1, 3) #> [1] -5"},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a 3D cone — cone3d","title":"Draw a 3D cone — cone3d","text":"Draws cone 3D base point tip point, given radius base. used draw nice arrow heads arrows3d.","code":""},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a 3D cone — cone3d","text":"","code":"cone3d(base, tip, radius = 10, col = \"grey\", scale = NULL, ...)"},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a 3D cone — cone3d","text":"base coordinates base cone tip coordinates tip cone radius radius base col color scale scale factor base tip ... rgl arguments passed ; see rgl.material","code":""},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a 3D cone — cone3d","text":"returns integer object ID shape added scene","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw a 3D cone — cone3d","text":"January Weiner, borrowed pca3d package","code":""},{"path":"http://friendly.github.io/matlib/reference/cone3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a 3D cone — cone3d","text":"","code":"# none yet"},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a corner showing the angle between two vectors — corner","title":"Draw a corner showing the angle between two vectors — corner","text":"utility function drawing vector diagrams. Draws two line segments indicate angle two vectors, typically used indicating orthogonal vectors right angles 2D 3D diagrams.","code":""},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a corner showing the angle between two vectors — corner","text":"","code":"corner(p1, p2, p3, d = 0.1, absolute = TRUE, ...)"},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a corner showing the angle between two vectors — corner","text":"p1 Starting point first vector p2 End point first vector, also start second vector p3 End point second vector d distance p2 along vector drawing corner absolute logical; TRUE, d taken absolute distance along vectors; otherwise calculated relative distance, .e., fraction length vectors. See pointOnLine precise definition. ... Arguments passed link[graphics]{lines} link[rgl]{lines3d}","code":""},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a corner showing the angle between two vectors — corner","text":"none","code":""},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Draw a corner showing the angle between two vectors — corner","text":"implementation, two vectors specified three points, p1, p2, p3, meaning line p1 p2, another line p2 p3.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/corner.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a corner showing the angle between two vectors — corner","text":"","code":"# none yet"},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":null,"dir":"Reference","previous_headings":"","what":"Determinant of a Square Matrix — Det","title":"Determinant of a Square Matrix — Det","text":"Returns determinant square matrix X, computed either Gaussian elimination, expansion cofactors, product eigenvalues matrix. latter, X must symmetric.","code":""},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determinant of a Square Matrix — Det","text":"","code":"Det( X, method = c(\"elimination\", \"eigenvalues\", \"cofactors\"), verbose = FALSE, fractions = FALSE, ... )"},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determinant of a Square Matrix — Det","text":"X square matrix method one `\"elimination\"` (default), `\"eigenvalues\"`, `\"cofactors\"` (computation minors cofactors) verbose logical; TRUE, print intermediate steps fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). ... arguments passed gaussianElimination Eigen","code":""},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determinant of a Square Matrix — Det","text":"determinant X","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Determinant of a Square Matrix — Det","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Det.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Determinant of a Square Matrix — Det","text":"","code":"A <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric A #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 Det(A) #> [1] 1 Det(A, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 #> #> row: 1 #> #> exchange rows 1 and 3 #> [,1] [,2] [,3] #> [1,] 3 6 10 #> [2,] 2 5 6 #> [3,] 1 2 3 #> #> multiply row 1 by 1/3 #> [,1] [,2] [,3] #> [1,] 1 2 10/3 #> [2,] 2 5 6 #> [3,] 1 2 3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] #> [1,] 1 2 10/3 #> [2,] 0 1 -2/3 #> [3,] 1 2 3 #> #> subtract row 1 from row 3 #> [,1] [,2] [,3] #> [1,] 1 2 10/3 #> [2,] 0 1 -2/3 #> [3,] 0 0 -1/3 #> #> row: 2 #> #> multiply row 2 by 2 and subtract from row 1 #> [,1] [,2] [,3] #> [1,] 1 0 14/3 #> [2,] 0 1 -2/3 #> [3,] 0 0 -1/3 #> #> row: 3 #> #> multiply row 3 by -3 #> [,1] [,2] [,3] #> [1,] 1 0 14/3 #> [2,] 0 1 -2/3 #> [3,] 0 0 1 #> #> multiply row 3 by 14/3 and subtract from row 1 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 -2/3 #> [3,] 0 0 1 #> #> multiply row 3 by 2/3 and add to row 2 #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 #> #> det = (-1)^1 x 3 x 1 x -1/3 = 1 B <- matrix(1:9, 3, 3) # a singular matrix B #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 Det(B) #> [1] 0 C <- matrix(c(1, .5, .5, 1), 2, 2) # square, symmetric, nonsingular Det(C) #> [1] 0.75 Det(C, method=\"eigenvalues\") #> [1] 0.75 Det(C, method=\"cofactors\") #> [1] 0.75"},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":null,"dir":"Reference","previous_headings":"","what":"Echelon Form of a Matrix — echelon","title":"Echelon Form of a Matrix — echelon","text":"Returns (reduced) row-echelon form matrix , using gaussianElimination.","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Echelon Form of a Matrix — echelon","text":"","code":"echelon(A, B, reduced = TRUE, ...)"},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Echelon Form of a Matrix — echelon","text":"coefficient matrix B right-hand side vector matrix. B matrix, result gives solutions column right-hand side equations coefficients . reduced logical; reduced row echelon form returned? FALSE non-reduced row echelon form returned ... arguments passed gaussianElimination","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Echelon Form of a Matrix — echelon","text":"reduced echelon form X.","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Echelon Form of a Matrix — echelon","text":"matrix square non-singular, reduced row-echelon result identity matrix, row-echelon upper triangle matrix. Otherwise, result -zero rows, rank matrix number -zero rows.","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Echelon Form of a Matrix — echelon","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/echelon.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Echelon Form of a Matrix — echelon","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) echelon(A, b, verbose=TRUE, fractions=TRUE) # reduced row-echelon form #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 echelon(A, b, reduced=FALSE, verbose=TRUE, fractions=TRUE) # row-echelon form #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 A <- matrix(c(1,2,3,4,5,6,7,8,10), 3, 3) # a nonsingular matrix A #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 10 echelon(A, reduced=FALSE) # the row-echelon form of A #> [,1] [,2] [,3] #> [1,] 1 2 3.333333 #> [2,] 0 1 1.833333 #> [3,] 0 0 1.000000 echelon(A) # the reduced row-echelon form of A #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 b <- 1:3 echelon(A, b) # solving the matrix equation Ax = b #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 1 #> [2,] 0 1 0 0 #> [3,] 0 0 1 0 echelon(A, diag(3)) # inverting A #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 -0.6666667 -0.6666667 1 #> [2,] 0 1 0 -1.3333333 3.6666667 -2 #> [3,] 0 0 1 1.0000000 -2.0000000 1 B <- matrix(1:9, 3, 3) # a singular matrix B #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 echelon(B) #> [,1] [,2] [,3] #> [1,] 1 0 -1 #> [2,] 0 1 2 #> [3,] 0 0 0 echelon(B, reduced=FALSE) #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 0 1 2 #> [3,] 0 0 0 echelon(B, b) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -1 1 #> [2,] 0 1 2 0 #> [3,] 0 0 0 0 echelon(B, diag(3)) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -1 -1.0 0 0.6666667 #> [2,] 0 1 2 0.5 0 -0.1666667 #> [3,] 0 0 0 -0.5 1 -0.5000000"},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":null,"dir":"Reference","previous_headings":"","what":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"Eigen calculates eigenvalues eigenvectors square, symmetric matrix using iterated QR decomposition","code":""},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"","code":"Eigen(X, tol = sqrt(.Machine$double.eps), max.iter = 100, retain.zeroes = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"X square symmetric matrix tol tolerance passed QR max.iter maximum number QR iterations retain.zeroes logical; retain 0 eigenvalues?","code":""},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"list two elements: values-- eigenvalues, vectors-- eigenvectors","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"John Fox Georges Monette","code":""},{"path":"http://friendly.github.io/matlib/reference/Eigen.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Eigen Decomposition of a Square Symmetric Matrix — Eigen","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 EC <- Eigen(C) # eigenanalysis of C EC$vectors %*% diag(EC$values) %*% t(EC$vectors) # check #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10"},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":null,"dir":"Reference","previous_headings":"","what":"Gaussian Elimination — gaussianElimination","title":"Gaussian Elimination — gaussianElimination","text":"gaussianElimination demonstrates algorithm row reduction used solving systems linear equations form \\(x = B\\). Optional arguments verbose fractions may used see algorithm works.","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gaussian Elimination — gaussianElimination","text":"","code":"gaussianElimination( A, B, tol = sqrt(.Machine$double.eps), verbose = FALSE, latex = FALSE, fractions = FALSE ) # S3 method for enhancedMatrix print(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gaussian Elimination — gaussianElimination","text":"coefficient matrix B right-hand side vector matrix. B matrix, result gives solutions column right-hand side equations coefficients . tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps latex logical; TRUE, verbose TRUE, print intermediate steps using LaTeX equation outputs rather R output fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). x matrix print ... arguments pass ","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gaussian Elimination — gaussianElimination","text":"B absent, returns reduced row-echelon form . B present, returns reduced row-echelon form , operations applied B.","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gaussian Elimination — gaussianElimination","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/gaussianElimination.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gaussian Elimination — gaussianElimination","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) gaussianElimination(A, b) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 gaussianElimination(A, b, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1 gaussianElimination(A, b, verbose=TRUE, fractions=TRUE, latex=TRUE) #> #> Initial matrix: #> \\left[ #> \\begin{array}{llll} #> 2 & 1 & -1 & 8 \\\\ #> -3 & -1 & 2 & -11 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> row: 1 #> #> exchange rows 1 and 2 #> \\left[ #> \\begin{array}{llll} #> -3 & -1 & 2 & -11 \\\\ #> 2 & 1 & -1 & 8 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 1 by -1/3 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 2 & 1 & -1 & 8 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 1 by 2 and subtract from row 2 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 1 by 2 and add to row 3 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> 0 & 5/3 & 2/3 & 13/3 \\\\ #> \\end{array} #> \\right] #> #> #> row: 2 #> #> exchange rows 2 and 3 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 5/3 & 2/3 & 13/3 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 2 by 3/5 #> \\left[ #> \\begin{array}{llll} #> 1 & 1/3 & -2/3 & 11/3 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 2 by 1/3 and subtract from row 1 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & -4/5 & 14/5 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 1/3 & 1/3 & 2/3 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 2 by 1/3 and subtract from row 3 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & -4/5 & 14/5 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 0 & 1/5 & -1/5 \\\\ #> \\end{array} #> \\right] #> #> #> row: 3 #> #> multiply row 3 by 5 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & -4/5 & 14/5 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 0 & 1 & -1 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 3 by 4/5 and add to row 1 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & 0 & 2 \\\\ #> 0 & 1 & 2/5 & 13/5 \\\\ #> 0 & 0 & 1 & -1 \\\\ #> \\end{array} #> \\right] #> #> #> multiply row 3 by 2/5 and subtract from row 2 #> \\left[ #> \\begin{array}{llll} #> 1 & 0 & 0 & 2 \\\\ #> 0 & 1 & 0 & 3 \\\\ #> 0 & 0 & 1 & -1 \\\\ #> \\end{array} #> \\right] #> # determine whether matrix is solvable gaussianElimination(A, numeric(3)) #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 0 #> [2,] 0 1 0 0 #> [3,] 0 0 1 0 # find inverse matrix by elimination: A = I -> A^-1 A = A^-1 I -> I = A^-1 gaussianElimination(A, diag(3)) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 4 3 -1 #> [2,] 0 1 0 -2 -2 1 #> [3,] 0 0 1 5 4 -1 inv(A) #> [,1] [,2] [,3] #> [1,] 4 3 -1 #> [2,] -2 -2 1 #> [3,] 5 4 -1 # works for 1-row systems (issue # 30) A2 <- matrix(c(1, 1), nrow=1) b2 = 2 gaussianElimination(A2, b2) #> [,1] [,2] [,3] #> [1,] 1 1 2 showEqn(A2, b2) #> 1*x1 + 1*x2 = 2 # plotEqn works for this case plotEqn(A2, b2) #> x[1] + x[2] = 2"},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":null,"dir":"Reference","previous_headings":"","what":"Correct for aspect and coordinate ratio — getYmult","title":"Correct for aspect and coordinate ratio — getYmult","text":"Calculate multiplication factor Y dimension correct unequal plot aspect coordinate ratios current graphics device.","code":""},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Correct for aspect and coordinate ratio — getYmult","text":"","code":"getYmult()"},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Correct for aspect and coordinate ratio — getYmult","text":"correction factor Y dimension.","code":""},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Correct for aspect and coordinate ratio — getYmult","text":"getYmult retrieves plot aspect ratio coordinate ratio current graphics device, calculates multiplicative factor equalize X Y dimensions plotted graphic object.","code":""},{"path":"http://friendly.github.io/matlib/reference/getYmult.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Correct for aspect and coordinate ratio — getYmult","text":"Jim Lemon","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":null,"dir":"Reference","previous_headings":"","what":"Generalized Inverse of a Matrix — Ginv","title":"Generalized Inverse of a Matrix — Ginv","text":"Ginv returns arbitrary generalized inverse matrix , using gaussianElimination.","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generalized Inverse of a Matrix — Ginv","text":"","code":"Ginv(A, tol = sqrt(.Machine$double.eps), verbose = FALSE, fractions = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generalized Inverse of a Matrix — Ginv","text":"numerical matrix tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)).","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generalized Inverse of a Matrix — Ginv","text":"generalized inverse , expressed fractions fractions=TRUE, rounded","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generalized Inverse of a Matrix — Ginv","text":"generalized inverse matrix \\(\\mathbf{}^-\\) satisfying \\(\\mathbf{^- } = \\mathbf{}\\). purpose function mainly show generalized inverse can computed using Gaussian elimination.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generalized Inverse of a Matrix — Ginv","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Ginv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generalized Inverse of a Matrix — Ginv","text":"","code":"A <- matrix(c(1,2,3,4,5,6,7,8,10), 3, 3) # a nonsingular matrix A #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 10 Ginv(A, fractions=TRUE) # a generalized inverse of A = inverse of A #> [,1] [,2] [,3] #> [1,] -2/3 -2/3 1 #> [2,] -4/3 11/3 -2 #> [3,] 1 -2 1 round(Ginv(A) %*% A, 6) # check #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 B <- matrix(1:9, 3, 3) # a singular matrix B #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 Ginv(B, fractions=TRUE) # a generalized inverse of B #> [,1] [,2] [,3] #> [1,] -3/4 0 7/12 #> [2,] 0 0 0 #> [3,] 1/4 0 -1/12 B %*% Ginv(B) %*% B # check #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9"},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":null,"dir":"Reference","previous_headings":"","what":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"Carries simple Gram-Schmidt orthogonalization matrix. Treating columns matrix X given order, successive column first made orthogonal previous columns subtracting projections current column.","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"","code":"GramSchmidt( X, normalize = TRUE, verbose = FALSE, tol = sqrt(.Machine$double.eps), omit_zero_columns = TRUE )"},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"X matrix normalize logical; resulting columns normalized unit length? default TRUE verbose logical; TRUE, print intermediate steps. default FALSE tol tolerance detecting linear dependencies columns . default sqrt(.Machine$double.eps) omit_zero_columns TRUE (default), remove linearly dependent columns result","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"matrix size X, orthogonal columns (0 columns removed default)","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"Phil Chalmers, John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/GramSchmidt.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gram-Schmidt Orthogonalization of a Matrix — GramSchmidt","text":"","code":"(xx <- matrix(c( 1:3, 3:1, 1, 0, -2), 3, 3)) #> [,1] [,2] [,3] #> [1,] 1 3 1 #> [2,] 2 2 0 #> [3,] 3 1 -2 crossprod(xx) #> [,1] [,2] [,3] #> [1,] 14 10 -5 #> [2,] 10 14 1 #> [3,] -5 1 5 (zz <- GramSchmidt(xx, normalize=FALSE)) #> Error in GramSchmidt(xx, normalize = FALSE): unused argument (normalize = FALSE) zapsmall(crossprod(zz)) #> Error in eval(expr, envir, enclos): object 'zz' not found # normalized (zz <- GramSchmidt(xx)) #> Error in GramSchmidt(xx): argument \"v2\" is missing, with no default zapsmall(crossprod(zz)) #> Error in eval(expr, envir, enclos): object 'zz' not found # print steps GramSchmidt(xx, verbose=TRUE) #> Error in GramSchmidt(xx, verbose = TRUE): unused argument (verbose = TRUE) # A non-invertible matrix; hence, it is of deficient rank (xx <- matrix(c( 1:3, 3:1, 1, 0, -1), 3, 3)) #> [,1] [,2] [,3] #> [1,] 1 3 1 #> [2,] 2 2 0 #> [3,] 3 1 -1 R(xx) #> [1] 2 crossprod(xx) #> [,1] [,2] [,3] #> [1,] 14 10 -2 #> [2,] 10 14 2 #> [3,] -2 2 2 # GramSchmidt finds an orthonormal basis (zz <- GramSchmidt(xx)) #> Error in GramSchmidt(xx): argument \"v2\" is missing, with no default zapsmall(crossprod(zz)) #> Error in eval(expr, envir, enclos): object 'zz' not found"},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":null,"dir":"Reference","previous_headings":"","what":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"Calculates matrix uncorrelated columns using Gram-Schmidt process","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"","code":"gsorth(y, order, recenter = TRUE, rescale = TRUE, adjnames = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"y numeric matrix data frame order specified, permutation column indices y recenter logical; TRUE, result means original y, else means = 0 cols 2:p rescale logical; TRUE, result sd original, else, sd = residual sd adjnames logical; TRUE, colnames adjusted Y1, Y2.1, Y3.12, ...","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"matrix/data frame uncorrelated columns","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"function, originally heplots package now deprecated matlib. Use GramSchmidt instead.","code":""},{"path":"http://friendly.github.io/matlib/reference/gsorth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Gram-Schmidt Orthogonalization of a Matrix — gsorth","text":"","code":"if (FALSE) { set.seed(1234) A <- matrix(c(1:60 + rnorm(60)), 20, 3) cor(A) G <- gsorth(A) zapsmall(cor(G)) }"},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":null,"dir":"Reference","previous_headings":"","what":"Inverse of a Matrix — Inverse","title":"Inverse of a Matrix — Inverse","text":"Uses gaussianElimination find inverse square, non-singular matrix, \\(X\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Inverse of a Matrix — Inverse","text":"","code":"Inverse(X, tol = sqrt(.Machine$double.eps), verbose = FALSE, ...)"},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Inverse of a Matrix — Inverse","text":"X square numeric matrix tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps ... arguments passed ","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Inverse of a Matrix — Inverse","text":"inverse X","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Inverse of a Matrix — Inverse","text":"method purely didactic: identity matrix, \\(\\), appended \\(X\\), giving \\(X | \\). Applying Gaussian elimination gives \\(| X^{-1}\\), portion corresponding \\(X^{-1}\\) returned.","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Inverse of a Matrix — Inverse","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Inverse.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Inverse of a Matrix — Inverse","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) Inverse(A) #> [,1] [,2] [,3] #> [1,] 4 3 -1 #> [2,] -2 -2 1 #> [3,] 5 4 -1 Inverse(A, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 2 1 -1 1 0 0 #> [2,] -3 -1 2 0 1 0 #> [3,] -2 1 2 0 0 1 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] -3 -1 2 0 1 0 #> [2,] 2 1 -1 1 0 0 #> [3,] -2 1 2 0 0 1 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 2 1 -1 1 0 0 #> [3,] -2 1 2 0 0 1 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 1/3 1/3 1 2/3 0 #> [3,] -2 1 2 0 0 1 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 1/3 1/3 1 2/3 0 #> [3,] 0 5/3 2/3 0 -2/3 1 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 5/3 2/3 0 -2/3 1 #> [3,] 0 1/3 1/3 1 2/3 0 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 1/3 -2/3 0 -1/3 0 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 1/3 1/3 1 2/3 0 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -4/5 0 -1/5 -1/5 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 1/3 1/3 1 2/3 0 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -4/5 0 -1/5 -1/5 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 0 1/5 1 4/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 -4/5 0 -1/5 -1/5 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 0 1 5 4 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 4 3 -1 #> [2,] 0 1 2/5 0 -2/5 3/5 #> [3,] 0 0 1 5 4 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 1 0 0 4 3 -1 #> [2,] 0 1 0 -2 -2 1 #> [3,] 0 0 1 5 4 -1"},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":null,"dir":"Reference","previous_headings":"","what":"Test for square matrix — is_square_matrix","title":"Test for square matrix — is_square_matrix","text":"Test square matrix Test square, symmetric matrix Test orthogonal matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Test for square matrix — is_square_matrix","text":"","code":"is_square_matrix(x) is_symmetric_matrix(x) is_orthogonal_matrix(x)"},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Test for square matrix — is_square_matrix","text":"x numeric matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/is_square.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Test for square matrix — is_square_matrix","text":"TRUE x square matrix, else FALSE TRUE x square, symmetric matrix, else FALSE TRUE x orthogonal matrix, else FALSE","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a vector, matrix or array of constants — J","title":"Create a vector, matrix or array of constants — J","text":"function creates vector, matrix array constants, typically used unit vector unit matrix matrix expressions.","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a vector, matrix or array of constants — J","text":"","code":"J(..., constant = 1, dimnames = NULL)"},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a vector, matrix or array of constants — J","text":"... One arguments supplying dimensions array, non-negative integers constant value constant used array dimnames Either NULL names dimensions.","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a vector, matrix or array of constants — J","text":"\"dimnames\" attribute optional: present list one component dimension, either NULL character vector length given element \"dim\" attribute dimension. list can named, list names used names dimensions.","code":""},{"path":"http://friendly.github.io/matlib/reference/J.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a vector, matrix or array of constants — J","text":"","code":"J(3) #> [1] 1 1 1 J(2,3) #> [,1] [,2] [,3] #> [1,] 1 1 1 #> [2,] 1 1 1 J(2,3,2) #> , , 1 #> #> [,1] [,2] [,3] #> [1,] 1 1 1 #> [2,] 1 1 1 #> #> , , 2 #> #> [,1] [,2] [,3] #> [1,] 1 1 1 #> [2,] 1 1 1 #> J(2,3, constant=2, dimnames=list(letters[1:2], LETTERS[1:3])) #> A B C #> a 2 2 2 #> b 2 2 2 X <- matrix(1:6, nrow=2, ncol=3) dimnames(X) <- list(sex=c(\"M\", \"F\"), day=c(\"Mon\", \"Wed\", \"Fri\")) J(2) %*% X # column sums #> day #> Mon Wed Fri #> [1,] 3 7 11 X %*% J(3) # row sums #> #> sex [,1] #> M 9 #> F 12"},{"path":"http://friendly.github.io/matlib/reference/len.html","id":null,"dir":"Reference","previous_headings":"","what":"Length of a Vector or Column Lengths of a Matrix — len","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"len calculates Euclidean length (also called Euclidean norm) vector length column numeric matrix.","code":""},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"","code":"len(X)"},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"X numeric vector matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"scalar vector containing length(s)","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/len.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Length of a Vector or Column Lengths of a Matrix — len","text":"","code":"len(1:3) #> [1] 3.741657 len(matrix(1:9, 3, 3)) #> [1] 3.741657 8.774964 13.928388 # distance between two vectors len(1:3 - c(1,1,1)) #> [1] 2.236068"},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":null,"dir":"Reference","previous_headings":"","what":"LU Decomposition — LU","title":"LU Decomposition — LU","text":"LU computes LU decomposition matrix, \\(\\), \\(P = L U\\), \\(L\\) lower triangle matrix, \\(U\\) upper triangle, \\(P\\) permutation matrix.","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"LU Decomposition — LU","text":"","code":"LU(A, b, tol = sqrt(.Machine$double.eps), verbose = FALSE, ...)"},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"LU Decomposition — LU","text":"coefficient matrix b right-hand side vector. supplied returned object also contain solved \\(d\\) x elements tol tolerance checking 0 pivot verbose logical; TRUE, print intermediate steps ... additional arguments passed showEqn","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"LU Decomposition — LU","text":"list matrix components solution, P, L U. b supplied, vectors \\(d\\) x also returned.","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"LU Decomposition — LU","text":"LU decomposition used solve equation \\(x = b\\) calculating \\(L(Ux - d) = 0\\), \\(Ld = b\\). row exchanges necessary \\(\\) permutation matrix \\(P\\) required exchange rows \\(\\); otherwise, \\(P\\) identity matrix LU equation simplified \\(= L U\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"LU Decomposition — LU","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/LU.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"LU Decomposition — LU","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) (ret <- LU(A)) # P is an identity; no row swapping #> $P #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 #> #> $L #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] -1.5 1 0 #> [3,] -1.0 4 1 #> #> $U #> [,1] [,2] [,3] #> [1,] 2 1.0 -1.0 #> [2,] 0 0.5 0.5 #> [3,] 0 0.0 -1.0 #> with(ret, L %*% U) # check that A = L * U #> [,1] [,2] [,3] #> [1,] 2 1 -1 #> [2,] -3 -1 2 #> [3,] -2 1 2 LU(A, b) #> $P #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 #> #> $L #> [,1] [,2] [,3] #> [1,] 1.0 0 0 #> [2,] -1.5 1 0 #> [3,] -1.0 4 1 #> #> $U #> [,1] [,2] [,3] #> [1,] 2 1.0 -1.0 #> [2,] 0 0.5 0.5 #> [3,] 0 0.0 -1.0 #> #> $d #> [,1] #> [1,] 8 #> [2,] 1 #> [3,] 1 #> #> $x #> [,1] #> [1,] 2 #> [2,] 3 #> [3,] -1 #> LU(A, b, verbose=TRUE) #> #> Initial equation: #> 2*x1 + x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + x2 + 2*x3 = -3 #> #> Lower triangle equation: #> x1 = 8 #> -1.5*x1 + x2 = -11 #> -x1 + 4*x2 + x3 = -3 #> #> Forward-solving operations: #> #> Equation: x1 = 8 #> Solution: x1 = 8 #> #> Equation: -1.5*x1 + x2 = -11 #> Substitution: -1.5*8 + x2 = -11 #> Solution: x2 = (-11 - -12) = 1 #> #> Equation: -x1 + 4*x2 + x3 = -3 #> Substitution: -8 + 4*1 + x3 = -3 #> Solution: x3 = (-3 - -4) = 1 #> #> Intermediate solution: d = (8, 1, 1) #> #> Upper triangle equation: #> 2*x1 + x2 - 1*x3 = 8 #> 0.5*x2 + 0.5*x3 = 1 #> - 1*x3 = 1 #> #> Back-solving operations: #> #> Equation: - 1*x3 = 1 #> Solution: x3 = 1/-1 = -1 #> #> Equation: 0.5*x2 + 0.5*x3 = 1 #> Substitution: 0.5*x2 + 0.5*-1 = 1 #> Solution: x2 = (1 - -0.5)/0.5 = 3 #> #> Equation: 2*x1 + x2 - 1*x3 = 8 #> Substitution: 2*x1 + -1 - 1*3 = 8 #> Solution: x1 = (8 - 4)/2 = 2 #> #> Final solution: x = (2, 3, -1) LU(A, b, verbose=TRUE, fractions=TRUE) #> #> Initial equation: #> 2*x1 + x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + x2 + 2*x3 = -3 #> #> Lower triangle equation: #> x1 = 8 #> -3/2*x1 + x2 = -11 #> -x1 + 4*x2 + x3 = -3 #> #> Forward-solving operations: #> #> Equation: x1 = 8 #> Solution: x1 = 8 #> #> Equation: -3/2*x1 + x2 = -11 #> Substitution: -3/2*8 + x2 = -11 #> Solution: x2 = (-11 - -12) = 1 #> #> Equation: -x1 + 4*x2 + x3 = -3 #> Substitution: -8 + 4*1 + x3 = -3 #> Solution: x3 = (-3 - -4) = 1 #> #> Intermediate solution: d = (8, 1, 1) #> #> Upper triangle equation: #> 2*x1 + x2 - 1*x3 = 8 #> 1/2*x2 + 1/2*x3 = 1 #> - 1*x3 = 1 #> #> Back-solving operations: #> #> Equation: - 1*x3 = 1 #> Solution: x3 = 1/-1 = -1 #> #> Equation: 1/2*x2 + 1/2*x3 = 1 #> Substitution: 1/2*x2 + 1/2*-1 = 1 #> Solution: x2 = (1 - -1/2)/1/2 = 3 #> #> Equation: 2*x1 + x2 - 1*x3 = 8 #> Substitution: 2*x1 + -1 - 1*3 = 8 #> Solution: x1 = (8 - 4)/2 = 2 #> #> Final solution: x = (2, 3, -1) # permutations required in this example A <- matrix(c(1, 1, -1, 2, 2, 4, 1, -1, 1), 3, 3, byrow=TRUE) b <- c(1, 2, 9) (ret <- LU(A, b)) #> $P #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 0 1 #> [3,] 0 1 0 #> #> $L #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 1 1 0 #> [3,] 2 0 1 #> #> $U #> [,1] [,2] [,3] #> [1,] 1 1 -1 #> [2,] 0 -2 2 #> [3,] 0 0 6 #> #> $d #> [,1] #> [1,] 1 #> [2,] 8 #> [3,] 0 #> #> $x #> [,1] #> [1,] 5 #> [2,] -4 #> [3,] 0 #> with(ret, P %*% A) #> [,1] [,2] [,3] #> [1,] 1 1 -1 #> [2,] 1 -1 1 #> [3,] 2 2 4 with(ret, L %*% U) #> [,1] [,2] [,3] #> [1,] 1 1 -1 #> [2,] 1 -1 1 #> [3,] 2 2 4"},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":null,"dir":"Reference","previous_headings":"","what":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"functions designed mainly tutorial purposes teaching & learning matrix algebra ideas applications statistical methods using R.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"cases, functions provided concepts available elsewhere R, function call name obvious. cases, functions provided show demonstrate algorithm, sometimes providing verbose argument print details computations. addition, collection functions provided drawing vector diagrams 2D 3D. meant production uses. methods efficient larger problems.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"topics","dir":"Reference","previous_headings":"","what":"Topics","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"functions package grouped following topics Convenience functions: tr, R, J, len, vec, Proj, mpower, vandermode Determinants: functions calculating determinants cofactor expansion minor, cofactor, rowMinors, rowCofactors Elementary row operations: functions solving linear equations \"manually\" steps used row echelon form Gaussian elimination rowadd, rowmult, rowswap Linear equations: functions illustrate linear equations form $x = b$ showEqn, plotEqn Gaussian elimination: functions illustrating Gaussian elimination solving systems linear equations form $x = b$. gaussianElimination, Inverse, inv, echelon, Ginv, LU, cholesky, swp Eigenvalues: functions illustrate algorithms calculating eigenvalues eigenvectors eigen, SVD, powerMethod, showEig Vector diagrams: functions drawing vector diagrams 2D 3D arrows3d, corner, arc, pointOnLine, vectors, vectors3d, regvec3d ideas implementations arose courses books authors. [Psychology 6140](http://friendly.apps01.yorku.ca/psy6140/) starting point. Fox (1984) introduced illustrations vector geometry.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"macos-installation-note","dir":"Reference","previous_headings":"","what":"macOS Installation Note","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"functions draw 3D graphs use rgl package. macOS, rgl package requires XQuartz installed. installing XQuartz, necessary either log back macOS account reboot Mac.","code":""},{"path":"http://friendly.github.io/matlib/reference/matlib-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics. — matlib-package","text":"Fox, J. Linear Statistical Models Related Methods. John Wiley Sons, 1984 Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert matrix to LaTeX equation — matrix2latex","title":"Convert matrix to LaTeX equation — matrix2latex","text":"function provides soft-wrapper xtable::xtableMatharray() additional support fractions output brackets.","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert matrix to LaTeX equation — matrix2latex","text":"","code":"matrix2latex( x, fractions = FALSE, brackets = TRUE, show.size = FALSE, digits = NULL, ... )"},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert matrix to LaTeX equation — matrix2latex","text":"x matrix fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). brackets logical character \"p\", \"b\", \"B\", \"V\". TRUE, uses square brackets around matrix, FALSE produces brackets. Otherwise \"p\") uses parentheses, ( ); \"b\") uses square brackets [ ], \"B\") uses braces { }, \"V\") uses vertical bars | |. show.size logical; TRUE shows size matrix appended subscript. digits Number digits display. digits == NULL (default), function sets digits = 0 elements x integers ... additional arguments passed xtable::xtableMatharray()","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Convert matrix to LaTeX equation — matrix2latex","text":"code brackets matches options AMS matrix LaTeX package: \\pmatrix{}, \\bmatrix{}, \\Bmatrix{}, ... .","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Convert matrix to LaTeX equation — matrix2latex","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/matrix2latex.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert matrix to LaTeX equation — matrix2latex","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) matrix2latex(cbind(A,b)) #> \\left[ #> \\begin{array}{rrrr} #> 2 & 1 & -1 & 8 \\\\ #> -3 & -1 & 2 & -11 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> matrix2latex(cbind(A,b), digits = 0) #> \\left[ #> \\begin{array}{rrrr} #> 2 & 1 & -1 & 8 \\\\ #> -3 & -1 & 2 & -11 \\\\ #> -2 & 1 & 2 & -3 \\\\ #> \\end{array} #> \\right] #> matrix2latex(cbind(A/2,b), fractions = TRUE) #> \\left[ #> \\begin{array}{llll} #> 1 & 1/2 & -1/2 & 8 \\\\ #> -3/2 & -1/2 & 1 & -11 \\\\ #> -1 & 1/2 & 1 & -3 \\\\ #> \\end{array} #> \\right] #> matrix2latex(A, digits=0, brackets=\"p\", show.size = TRUE) #> \\left( #> \\begin{array}{rrr} #> 2 & 1 & -1 \\\\ #> -3 & -1 & 2 \\\\ #> -2 & 1 & 2 \\\\ #> \\end{array} #> \\right) #> _{3 \\times 3}"},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":null,"dir":"Reference","previous_headings":"","what":"Minor of A[i,j] — minor","title":"Minor of A[i,j] — minor","text":"Returns minor element (,j) square matrix , .e., determinant sub-matrix results row column j deleted.","code":""},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Minor of A[i,j] — minor","text":"","code":"minor(A, i, j)"},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Minor of A[i,j] — minor","text":"square matrix row index j column index","code":""},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Minor of A[i,j] — minor","text":"minor [,j]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Minor of A[i,j] — minor","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/minor.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Minor of A[i,j] — minor","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) minor(M, 1, 1) #> [1] 11 minor(M, 1, 2) #> [1] 7 minor(M, 1, 3) #> [1] -5"},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":null,"dir":"Reference","previous_headings":"","what":"Moore-Penrose inverse of a matrix — MoorePenrose","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"Moore-Penrose inverse generalization regular inverse square, non-singular, symmetric matrix cases (rectangular, singular), yet retain similar properties regular inverse.","code":""},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"","code":"MoorePenrose(X, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"X numeric matrix tol Tolerance singular (rank-deficient) matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"Moore-Penrose inverse X","code":""},{"path":"http://friendly.github.io/matlib/reference/MoorePenrose.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Moore-Penrose inverse of a matrix — MoorePenrose","text":"","code":"X <- matrix(rnorm(20), ncol=2) # introduce a linear dependency in X[,3] X <- cbind(X, 1.5*X[, 1] - pi*X[, 2]) Y <- MoorePenrose(X) # demonstrate some properties of the M-P inverse # X Y X = X round(X %*% Y %*% X - X, 8) #> [,1] [,2] [,3] #> [1,] 0 0 0 #> [2,] 0 0 0 #> [3,] 0 0 0 #> [4,] 0 0 0 #> [5,] 0 0 0 #> [6,] 0 0 0 #> [7,] 0 0 0 #> [8,] 0 0 0 #> [9,] 0 0 0 #> [10,] 0 0 0 # Y X Y = Y round(Y %*% X %*% Y - Y, 8) #> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] #> [1,] 0 0 0 0 0 0 0 0 0 0 #> [2,] 0 0 0 0 0 0 0 0 0 0 #> [3,] 0 0 0 0 0 0 0 0 0 0 # X Y = t(X Y) round(X %*% Y - t(X %*% Y), 8) #> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] #> [1,] 0 0 0 0 0 0 0 0 0 0 #> [2,] 0 0 0 0 0 0 0 0 0 0 #> [3,] 0 0 0 0 0 0 0 0 0 0 #> [4,] 0 0 0 0 0 0 0 0 0 0 #> [5,] 0 0 0 0 0 0 0 0 0 0 #> [6,] 0 0 0 0 0 0 0 0 0 0 #> [7,] 0 0 0 0 0 0 0 0 0 0 #> [8,] 0 0 0 0 0 0 0 0 0 0 #> [9,] 0 0 0 0 0 0 0 0 0 0 #> [10,] 0 0 0 0 0 0 0 0 0 0 # Y X = t(Y X) round(Y %*% X - t(Y %*% X), 8) #> [,1] [,2] [,3] #> [1,] 0 0 0 #> [2,] 0 0 0 #> [3,] 0 0 0"},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":null,"dir":"Reference","previous_headings":"","what":"Matrix Power — mpower","title":"Matrix Power — mpower","text":"simple function demonstrate calculating power square symmetric matrix terms eigenvalues eigenvectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Matrix Power — mpower","text":"","code":"mpower(A, p, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Matrix Power — mpower","text":"square symmetric matrix p matrix power, necessarily positive integer tol tolerance determining matrix symmetric","code":""},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Matrix Power — mpower","text":"raised power p: ^p","code":""},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Matrix Power — mpower","text":"matrix power p can fraction non-integer. example, p=1/2 p=1/3 give square-root cube-root matrix. Negative powers also allowed. example, p=-1 gives inverse p=-1/2 gives inverse square-root.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/mpower.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Matrix Power — mpower","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 mpower(C, 2) #> [,1] [,2] [,3] #> [1,] 14 30 45 #> [2,] 30 65 96 #> [3,] 45 96 145 zapsmall(mpower(C, -1)) #> [,1] [,2] [,3] #> [1,] 14 -2 -3 #> [2,] -2 1 0 #> [3,] -3 0 1 solve(C) # check #> [,1] [,2] [,3] #> [1,] 14 -2 -3 #> [2,] -2 1 0 #> [3,] -3 0 1"},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot method for regvec3d objects — plot.regvec3d","title":"Plot method for regvec3d objects — plot.regvec3d","text":"plot method regvec3d objects uses low-level graphics tools package draw 3D 3D vector diagrams reflecting partial marginal relations y x1 x2 bivariate multiple linear regression model, lm(y ~ x1 + x2). summary method prints vectors vector lengths, followed summary model.","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot method for regvec3d objects — plot.regvec3d","text":"","code":"# S3 method for regvec3d plot( x, y, dimension = 3, col = c(\"black\", \"red\", \"blue\", \"brown\", \"lightgray\"), col.plane = \"gray\", cex.lab = 1.2, show.base = 2, show.marginal = FALSE, show.hplane = TRUE, show.angles = TRUE, error.sphere = c(\"none\", \"e\", \"y.hat\"), scale.error.sphere = x$scale, level.error.sphere = 0.95, grid = FALSE, add = FALSE, ... ) # S3 method for regvec3d summary(object, ...) # S3 method for regvec3d print(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot method for regvec3d objects — plot.regvec3d","text":"x “regvec3d” object y Ignored; included compatibility S3 generic dimension Number dimensions plot: 3 (default) 2 col vector 5 colors. col[1] used y residual (e) vectors, x1 x2; col[2] used vectors y -> yhat y -> e; col[3] used vectors yhat -> b1 yhat -> b2; col.plane Color base plane 3D plot axes 2D plot cex.lab character expansion applied vector labels. May number numeric vector corresponding rows X, recycled necessary. show.base show.base > 0, draws base plane 3D plot; show.base > 1, plane drawn thicker show.marginal TRUE also draws lines showing marginal relations y x1 x2 show.hplane TRUE, draws plane defined y, yhat origin 3D show.angles TRUE, draw label angle x1 x2 y yhat, corresponding respectively correlation xs multiple correlation error.sphere Plot sphere (2D, circle) radius proportional length residual vector, centered either origin (\"e\") fitted-values vector (\"y.hat\"; default \"none\".) scale.error.sphere Whether scale error sphere error.sphere=\"y.hat\"; defaults TRUE vectors representing variables scaled, case oblique projections error spheres can represent confidence intervals coefficients; otherwise defaults FALSE. level.error.sphere confidence level error sphere, applied scale.error.sphere=TRUE. grid TRUE, draws light grid base plane add TRUE, add current plot; otherwise start new rgl plot window ... Parameters passed functions [unused now] object regvec3d object summary method","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot method for regvec3d objects — plot.regvec3d","text":"None","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot method for regvec3d objects — plot.regvec3d","text":"3D diagram shows vector y plane formed predictors, x1 x2, variables represented deviation form, intercept need included. 2D diagram, using first two columns result, can used show projection space x1, x2 plane. drawing functions vectors link{vectors3d} used plot.regvec3d method work reasonably well variables shown commensurate scales, .e., either scale=TRUE normalize=TRUE.","code":""},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot method for regvec3d objects — plot.regvec3d","text":"Fox, J. (2016). Applied Regression Analysis Generalized Linear Models, 3rd ed., Sage, Chapter 10.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/plot.regvec3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot method for regvec3d objects — plot.regvec3d","text":"","code":"if (require(carData)) { data(\"Duncan\", package=\"carData\") dunc.reg <- regvec3d(prestige ~ income + education, data=Duncan) plot(dunc.reg) plot(dunc.reg, dimension=2) plot(dunc.reg, error.sphere=\"e\") summary(dunc.reg) # Example showing Simpson's paradox data(\"States\", package=\"carData\") states.vec <- regvec3d(SATM ~ pay + percent, data=States, scale=TRUE) plot(states.vec, show.marginal=TRUE) plot(states.vec, show.marginal=TRUE, dimension=2) summary(states.vec) } #> Loading required package: carData #> x y z length #> income 0.7754622 0.0000000 0.0000000 0.7754622 #> education 0.6842863 0.6509930 0.0000000 0.9444785 #> prestige 0.8378014 0.3553340 0.4145197 1.0000000 #> residuals 0.0000000 0.0000000 0.4145197 0.4145197 #> prestige hat 0.8378014 0.3553340 0.0000000 0.9100403 #> b1 income 0.4642947 0.0000000 0.0000000 0.4642947 #> b2 education 0.3735067 0.3553340 0.0000000 0.5155284 #> prestige hat 1 0.8378014 0.0000000 0.0000000 0.8378014 #> prestige hat 2 0.6172234 0.5871929 0.0000000 0.8519156 #> #> Call: #> lm(formula = formula, data = Data) #> #> Residuals: #> Min 1Q Median 3Q Max #> -29.538 -6.417 0.655 6.605 34.641 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) -6.06466 4.27194 -1.420 0.163 #> income. 0.59873 0.11967 5.003 1.05e-05 *** #> education. 0.54583 0.09825 5.555 1.73e-06 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 13.37 on 42 degrees of freedom #> Multiple R-squared: 0.8282,\tAdjusted R-squared: 0.82 #> F-statistic: 101.2 on 2 and 42 DF, p-value: < 2.2e-16 #> #> x y z length #> pay 1.0000000 0.0000000 0.000000 1.0000000 #> percent 0.6630098 0.7486108 0.000000 1.0000000 #> SATM -0.4853306 -0.7164880 0.501098 1.0000000 #> residuals 0.0000000 0.0000000 0.501098 0.5010980 #> SATM hat -0.4853306 -0.7164880 0.000000 0.8653905 #> b1 pay 0.1492295 0.0000000 0.000000 0.1492295 #> b2 percent -0.6345601 -0.7164880 0.000000 0.9570901 #> SATM hat 1 -0.4853306 0.0000000 0.000000 0.4853306 #> SATM hat 2 -0.5689615 -0.6424199 0.000000 0.8581495 #> #> Call: #> lm(formula = formula, data = Data) #> #> Residuals: #> Min 1Q Median 3Q Max #> -29.697 -13.788 0.701 9.988 42.961 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 513.6990 16.9174 30.365 < 2e-16 *** #> pay. 0.9718 0.6292 1.545 0.129 #> percent. -1.3743 0.1387 -9.906 3.45e-13 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 17.68 on 48 degrees of freedom #> Multiple R-squared: 0.7489,\tAdjusted R-squared: 0.7384 #> F-statistic: 71.58 on 2 and 48 DF, p-value: 3.947e-15 #>"},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Linear Equations — plotEqn","title":"Plot Linear Equations — plotEqn","text":"Shows matrices \\(, b\\) look like system linear equations, \\(x = b\\) two unknowns, x1, x2, plotting line equation.","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Linear Equations — plotEqn","text":"","code":"plotEqn( A, b, vars, xlim, ylim, col = 1:nrow(A), lwd = 2, lty = 1, axes = TRUE, labels = TRUE, solution = TRUE )"},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Linear Equations — plotEqn","text":"either matrix coefficients system linear equations, matrix cbind(,b). matrix must two columns. b supplied, vector constants right hand side equations, length matching number rows . vars numeric character vector names variables. supplied, length must equal number unknowns equations, .e., 2. default c(expression(x[1]), expression(x[2])). xlim horizontal axis limits first variable ylim vertical axis limits second variable; missing, ylim calculated range set equations xlim. col scalar vector colors lines, recycled necessary lwd scalar vector line widths lines, recycled necessary lty scalar vector line types lines, recycled necessary axes logical; draw horizontal vertical axes (0,0)? labels logical, vector character labels equations; TRUE, equation labeled using character string resulting showEqn, modified xs properly subscripted. solution logical; solution points pairs equations marked?","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Linear Equations — plotEqn","text":"nothing; used side effect making plot","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot Linear Equations — plotEqn","text":"Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot Linear Equations — plotEqn","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Linear Equations — plotEqn","text":"","code":"# consistent equations A<- matrix(c(1,2,3, -1, 2, 1),3,2) b <- c(2,1,3) showEqn(A, b) #> 1*x1 - 1*x2 = 2 #> 2*x1 + 2*x2 = 1 #> 3*x1 + 1*x2 = 3 plotEqn(A,b) #> x[1] - 1*x[2] = 2 #> 2*x[1] + 2*x[2] = 1 #> 3*x[1] + x[2] = 3 # inconsistent equations b <- c(2,1,6) showEqn(A, b) #> 1*x1 - 1*x2 = 2 #> 2*x1 + 2*x2 = 1 #> 3*x1 + 1*x2 = 6 plotEqn(A,b) #> x[1] - 1*x[2] = 2 #> 2*x[1] + 2*x[2] = 1 #> 3*x[1] + x[2] = 6"},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Linear Equations in 3D — plotEqn3d","title":"Plot Linear Equations in 3D — plotEqn3d","text":"Shows matrices \\(, b\\) look like system linear equations, \\(x = b\\) three unknowns, x1, x2, x3, plotting plane equation.","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Linear Equations in 3D — plotEqn3d","text":"","code":"plotEqn3d( A, b, vars, xlim = c(-2, 2), ylim = c(-2, 2), zlim, col = 2:(nrow(A) + 1), alpha = 0.9, labels = FALSE, solution = TRUE, axes = TRUE, lit = FALSE )"},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Linear Equations in 3D — plotEqn3d","text":"either matrix coefficients system linear equations, matrix cbind(,b) matrix must three columns. b supplied, vector constants right hand side equations, length matching number rows . vars numeric character vector names variables. supplied, length must equal number unknowns equations. default paste0(\"x\", 1:ncol(). xlim axis limits first variable ylim axis limits second variable zlim horizontal axis limits second variable; missing, zlim calculated range set equations xlim ylim col scalar vector colors lines, recycled necessary alpha transparency applied plane labels logical, vector character labels equations; yet implemented. solution logical; solution point equations marked (possible) axes logical; whether frame plot coordinate axes lit logical, specifying lighting calculation take place geometry; see rgl.material","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Linear Equations in 3D — plotEqn3d","text":"nothing; used side effect making plot","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot Linear Equations in 3D — plotEqn3d","text":"Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot Linear Equations in 3D — plotEqn3d","text":"Michael Friendly, John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/plotEqn3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Linear Equations in 3D — plotEqn3d","text":"3D plot","code":"# three consistent equations in three unknowns A <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3,3) b <- c(1,2,4) plotEqn3d(A,b) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":90,\"objects\":{\"135\":{\"id\":135,\"type\":\"clipplanes\",\"offsets\":[[2],[2],[2],[2],[3],[3]],\"normals\":\"0\",\"flags\":512},\"136\":{\"id\":136,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"1\",\"colors\":\"2\",\"centers\":\"3\",\"ignoreExtent\":false,\"flags\":32832},\"137\":{\"id\":137,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"4\",\"colors\":\"5\",\"centers\":\"6\",\"ignoreExtent\":false,\"flags\":32832},\"139\":{\"id\":139,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":0,\"floating\":true,\"edge\":[0,1,1]},\"vertices\":\"7\",\"colors\":\"8\",\"texts\":[[\"x1\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"9\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"140\":{\"id\":140,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":1,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"10\",\"colors\":\"11\",\"texts\":[[\"x2\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"12\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"141\":{\"id\":141,\"type\":\"text\",\"material\":{\"lit\":false,\"margin\":2,\"floating\":true,\"edge\":[1,1,1]},\"vertices\":\"13\",\"colors\":\"14\",\"texts\":[[\"x3\"]],\"cex\":[[1]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"15\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":true,\"flags\":33808},\"142\":{\"id\":142,\"type\":\"planes\",\"material\":{\"alpha\":[0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108,0.8980392217636108],\"lit\":false,\"isTransparent\":true},\"vertices\":\"16\",\"colors\":\"18\",\"offsets\":[[-1],[-2],[-4]],\"centers\":\"19\",\"normals\":\"17\",\"ignoreExtent\":true,\"flags\":32802},\"143\":{\"id\":143,\"type\":\"spheres\",\"material\":{},\"vertices\":\"20\",\"colors\":\"21\",\"radii\":[[0.2000000029802322]],\"centers\":\"22\",\"ignoreExtent\":false,\"fastTransparency\":true,\"flags\":32771},\"94\":{\"id\":94,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"95\":{\"id\":95,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"23\",\"centers\":\"24\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"138\":{\"id\":138,\"type\":\"bboxdeco\",\"material\":{\"front\":\"lines\",\"back\":\"lines\"},\"vertices\":\"25\",\"colors\":\"26\",\"axes\":{\"mode\":[\"pretty\",\"pretty\",\"pretty\"],\"step\":[1,1,1],\"nticks\":[5,5,5],\"marklen\":[15,15,15],\"expand\":[1.029999971389771,1.029999971389771,1.029999971389771]},\"draw_front\":true,\"flags\":32769},\"134\":{\"id\":134,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":90,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,20.17857933044434],\"modelMatrix\":[[1.190238118171692,0,0,0],[0,0.4070854187011719,0.7456386089324951,0],[0,-1.118457913398743,0.2713902592658997,-20.17857933044434],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703012466431,-72.74143981933594],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1.190238118171692,1.190238118171692,0.7934920191764832],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[1,2,1,2,1,3],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"inherit\",\"projection\":\"inherit\",\"model\":\"inherit\",\"mouse\":\"inherit\"},\"objects\":[135,136,94],\"parent\":90,\"subscenes\":[],\"flags\":33600},\"90\":{\"id\":90,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":90,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,20.17857933044434],\"modelMatrix\":[[1.190238118171692,0,0,0],[0,0.4070854187011719,0.7456386089324951,0],[0,-1.118457913398743,0.2713902592658997,-20.17857933044434],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703012466431,-72.74143981933594],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1.190238118171692,1.190238118171692,0.7934920191764832],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-2,2,-2,2,-3,3],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[95,138,137,139,140,141,142,143,94,134],\"subscenes\":134,\"flags\":34675}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5120,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":2,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":3,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5120,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":6,\"componentType\":5120,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":9,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":10,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":12,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":14,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":15,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5120,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":18,\"componentType\":5121,\"count\":36,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":19,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":21,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":22,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":24,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":25,\"componentType\":5126,\"count\":17,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":18,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":18},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":30},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":34},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":40},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":52},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":64},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":76},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":80},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":92},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":108},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":120},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":132},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":136},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":148},{\"buffer\":0,\"byteLength\":9,\"byteOffset\":184},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":193},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":340},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":484},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":496},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":500},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":512},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":516},{\"buffer\":0,\"byteLength\":204,\"byteOffset\":520},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":724}],\"buffers\":[{\"byteLength\":728,\"bytes\":\"AQAA/wAAAAEAAP8AAAABAAD/AQEBAQEBAwMDAwMDAAAAAQEBAQMDA/7+/f7+/QICAwICAwAA\\nAAH+/v0CAgMAAAAAwH8AAIBAAACAPwAAAAEAAMB/AACAQAAAgD8AAMB/AACAQAAAgD8AAAAB\\nAADAfwAAgEAAAIA/AADAfwAAgEAAAIA/AAAAAQAAwH8AAIBAAACAP9mJnb0AAADAAABAwMVO\\nbD4AAABAAABAQAAAgL8AAADAAABAQA38AvwL/gL+CN9Ta+XfU2vl31Nr5d9Ta+XfU2vl31Nr\\n5d9Ta+XfU2vl31Nr5d9Ta+XfU2vl31Nr5WHQT+Vh0E/lYdBP5WHQT+Vh0E/lYdBP5WHQT+Vh\\n0E/lYdBP5WHQT+Vh0E/lYdBP5SKX5uUil+blIpfm5SKX5uUil+blIpfm5SKX5uUil+blIpfm\\n5SKX5uUil+blIpfm5QAAAAdpkL6rqiq/AACAP/Mt3z6rqio/AACAvwAAwH8AAMB/AADAfwAA\\nwH8AAMB/AADAf6uqKr8QPvg9AACAP6uqKj8QPng+AACAvwAAwH8AAMB/AADAfwAAwH8AAMB/\\nAADAf6uqKr+rqio/VlVVP6uqKj+rqiq/q6oqPgAAwH8AAMB/AADAfwAAwH8AAMB/AADAf7W0\\ntD00WKE+YYUOPwAAAAG1tLQ9NFihPmGFDj8BAQEBAAAAAAAAAMAAAMB/AADAfwAAgL8AAMB/\\nAADAfwAAAAAAAMB/AADAfwAAgD8AAMB/AADAfwAAAEAAAMB/AADAfwAAwH8AAADAAADAfwAA\\nwH8AAIC/AADAfwAAwH8AAAAAAADAfwAAwH8AAIA/AADAfwAAwH8AAABAAADAfwAAwH8AAMB/\\nAABAwAAAwH8AAMB/AAAAwAAAwH8AAMB/AACAvwAAwH8AAMB/AAAAAAAAwH8AAMB/AACAPwAA\\nwH8AAMB/AAAAQAAAwH8AAMB/AABAQAAAAAE=\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]}"},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":null,"dir":"Reference","previous_headings":"","what":"Position of a point along a line — pointOnLine","title":"Position of a point along a line — pointOnLine","text":"utility function drawing vector diagrams. Find position interpolated point along line x1 x2.","code":""},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Position of a point along a line — pointOnLine","text":"","code":"pointOnLine(x1, x2, d, absolute = TRUE)"},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Position of a point along a line — pointOnLine","text":"x1 vector length 2 3, representing starting point line 2D 3D space x2 vector length 2 3, representing ending point line 2D 3D space d distance along line x1 x2 point found. absolute logical; TRUE, d taken absolute distance along line; otherwise calculated relative distance, .e., fraction length line.","code":""},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Position of a point along a line — pointOnLine","text":"interpolated point, vector length x1","code":""},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Position of a point along a line — pointOnLine","text":"function takes step length d along line defined difference two points, x2 - x1. absolute=FALSE, step proportional difference, absolute=TRUE, difference first scaled unit length step always length d. Note physical length line different directions graph depends aspect ratio plot axes, lines length appear equal aspect ratio one (asp=1 2D, aspect3d(\"iso\") 3D).","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/pointOnLine.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Position of a point along a line — pointOnLine","text":"","code":"x1 <- c(0, 0) x2 <- c(1, 4) pointOnLine(x1, x2, 0.5) #> [1] 0.1212678 0.4850713 pointOnLine(x1, x2, 0.5, absolute=FALSE) #> [1] 0.5 2.0 pointOnLine(x1, x2, 1.1) #> [1] 0.2667892 1.0671568 y1 <- c(1, 2, 3) y2 <- c(3, 2, 1) pointOnLine(y1, y2, 0.5) #> [1] 1.353553 2.000000 2.646447 pointOnLine(y1, y2, 0.5, absolute=FALSE) #> [1] 2 2 2"},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":null,"dir":"Reference","previous_headings":"","what":"Power Method for Eigenvectors — powerMethod","title":"Power Method for Eigenvectors — powerMethod","text":"Finds dominant eigenvalue, \\(\\lambda_1\\), corresponding eigenvector, \\(v_1\\), square matrix applying Hotelling's (1933) Power Method scaling.","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Power Method for Eigenvectors — powerMethod","text":"","code":"powerMethod(A, v = NULL, eps = 1e-06, maxiter = 100, plot = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Power Method for Eigenvectors — powerMethod","text":"square numeric matrix v optional starting vector; supplied, uses unit vector length equal number rows / columns x. eps convergence threshold terminating iterations maxiter maximum number iterations plot logical; TRUE, plot series iterated eigenvectors?","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Power Method for Eigenvectors — powerMethod","text":"list containing eigenvector (vector), eigenvalue (value), iterations (iter), iteration history (vector_iterations)","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Power Method for Eigenvectors — powerMethod","text":"method based upon fact repeated multiplication matrix \\(\\) trial vector \\(v_1^{(k)}\\) converges value eigenvector, $$v_1^{(k+1)} = v_1^{(k)} / \\vert\\vert v_1^{(k)} \\vert\\vert $$ corresponding eigenvalue found $$\\lambda_1 = \\frac{v_1^T v_1}{v_1^T v_1}$$ pre-computer days, method extended find subsequent eigenvalue - eigenvector pairs \"deflation\", .e., applying method new matrix. \\(- \\lambda_1 v_1 v_1^{T} \\). method still used computer-intensive applications huge matrices dominant eigenvector required, e.g., Google Page Rank algorithm.","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Power Method for Eigenvectors — powerMethod","text":"Hotelling, H. (1933). Analysis complex statistical variables principal components. Journal Educational Psychology, 24, 417-441, 498-520.","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Power Method for Eigenvectors — powerMethod","text":"Gaston Sanchez (matrixkit)","code":""},{"path":"http://friendly.github.io/matlib/reference/powerMethod.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Power Method for Eigenvectors — powerMethod","text":"","code":"A <- cbind(c(7, 3), c(3, 6)) powerMethod(A) #> $vector_iterations #> v1 v2 v3 v4 v5 v6 v7 v8 #> [1,] 1 0.7432941 0.7559462 0.7604661 0.7620956 0.7626851 0.7628986 0.7629760 #> [2,] 1 0.6689647 0.6546338 0.6493776 0.6474645 0.6467700 0.6465181 0.6464268 #> v9 v10 v11 v12 #> [1,] 0.7630040 0.7630142 0.7630179 0.7630192 #> [2,] 0.6463937 0.6463817 0.6463774 0.6463758 #> #> $iter #> [1] 12 #> #> $vector #> [,1] #> [1,] 0.7630197 #> [2,] 0.6463752 #> #> $value #> [1] 9.541381 #> eigen(A)$values[1] # check #> [1] 9.541381 eigen(A)$vectors[,1] #> [1] -0.7630200 -0.6463749 # demonstrate how the power method converges to a solution powerMethod(A, v = c(-.5, 1), plot = TRUE) B <- cbind(c(1, 2, 0), c(2, 1, 3), c(0, 3, 1)) (rv <- powerMethod(B)) #> $vector_iterations #> v1 v2 v3 v4 v5 v6 v7 v8 #> [1,] 1 0.3841106 0.4184463 0.3819585 0.3989921 0.3885977 0.3943249 0.3910547 #> [2,] 1 0.7682213 0.6695140 0.7275400 0.6952733 0.7137158 0.7033401 0.7092289 #> [3,] 1 0.5121475 0.6137212 0.5699063 0.5978297 0.5827535 0.5914563 0.5865753 #> v9 v10 v11 v12 v13 v14 v15 #> [1,] 0.3928994 0.3918549 0.3924457 0.3921115 0.3923006 0.3921936 0.3922541 #> [2,] 0.7059033 0.7077867 0.7067218 0.7073245 0.7069836 0.7071765 0.7070674 #> [3,] 0.5893476 0.5877820 0.5886685 0.5881672 0.5884509 0.5882904 0.5883812 #> v16 v17 v18 v19 v20 v21 v22 #> [1,] 0.3922199 0.3922393 0.3922283 0.3922345 0.3922310 0.3922330 0.3922319 #> [2,] 0.7071291 0.7070942 0.7071139 0.7071027 0.7071091 0.7071055 0.7071075 #> [3,] 0.5883298 0.5883589 0.5883425 0.5883518 0.5883465 0.5883495 0.5883478 #> v23 #> [1,] 0.3922325 #> [2,] 0.7071064 #> [3,] 0.5883487 #> #> $iter #> [1] 23 #> #> $vector #> [,1] #> [1,] 0.3922321 #> [2,] 0.7071070 #> [3,] 0.5883482 #> #> $value #> [1] 4.605551 #> # deflate to find 2nd latent vector l <- rv$value v <- c(rv$vector) B1 <- B - l * outer(v, v) powerMethod(B1) #> $vector_iterations #> v1 v2 v3 v4 v5 v6 v7 #> [1,] 1 -0.06371093 0.5108612 -0.3439621 0.4104417 -0.3851914 0.3949269 #> [2,] 1 0.65894964 -0.6993467 0.7059478 -0.7069361 0.7070820 -0.7071035 #> [3,] 1 -0.74948402 0.4999350 -0.6191347 0.5760026 -0.5930115 0.5865470 #> v8 v9 v10 v11 v12 v13 #> [1,] -0.3911967 0.3926292 -0.3920796 0.3922906 -0.3922096 0.3922407 #> [2,] 0.7071066 -0.7071071 0.7071072 -0.7071072 0.7071072 -0.7071072 #> [3,] -0.5890376 0.5880832 -0.5884497 0.5883090 -0.5883630 0.5883423 #> v14 v15 v16 #> [1,] -0.3922287 0.3922333 -0.3922316 #> [2,] 0.7071072 -0.7071072 0.7071072 #> [3,] -0.5883503 0.5883472 -0.5883484 #> #> $iter #> [1] 16 #> #> $vector #> [,1] #> [1,] 0.3922322 #> [2,] -0.7071072 #> [3,] 0.5883479 #> #> $value #> [1] -2.605551 #> eigen(B)$vectors # check #> [,1] [,2] [,3] #> [1,] 0.3922323 8.320503e-01 -0.3922323 #> [2,] 0.7071068 6.568970e-16 0.7071068 #> [3,] 0.5883484 -5.547002e-01 -0.5883484 # a positive, semi-definite matrix, with eigenvalues 12, 6, 0 C <- matrix(c(7, 4, 1, 4, 4, 4, 1, 4, 7), 3, 3) eigen(C)$vectors #> [,1] [,2] [,3] #> [1,] -0.5773503 7.071068e-01 0.4082483 #> [2,] -0.5773503 6.938894e-16 -0.8164966 #> [3,] -0.5773503 -7.071068e-01 0.4082483 powerMethod(C) #> $vector_iterations #> v1 v2 #> [1,] 1 0.5773503 #> [2,] 1 0.5773503 #> [3,] 1 0.5773503 #> #> $iter #> [1] 2 #> #> $vector #> [,1] #> [1,] 0.5773503 #> [2,] 0.5773503 #> [3,] 0.5773503 #> #> $value #> [1] 12 #>"},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":null,"dir":"Reference","previous_headings":"","what":"Print Matrices or Matrix Operations Side by Side — printMatEqn","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"function designed print collection matrices, vectors, character strings matrix expressions side side. typical use illustrate matrix equations compact comprehensible way.","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"","code":"printMatEqn(..., space = 1, tol = sqrt(.Machine$double.eps), fractions = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"... matrices character operations passed printed console. can include named arguments, character string operation symbols (e.g., \"+\") space amount blank spaces place around operations \"+\", \"-\", \"=\", etc tol tolerance rounding fractions logical; TRUE, try express non-integers rational numbers, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)).","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"NULL; formatted sequence matrices matrix operations printed console","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatEqn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print Matrices or Matrix Operations Side by Side — printMatEqn","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) x <- c(2, 3, -1) # provide implicit or explicit labels printMatEqn(AA = A, \"*\", xx = x, '=', b = A %*% x) #> AA xx b #> 2 1 -1 * 2 = 8 #> -3 -1 2 3 -11 #> -2 1 2 -1 -3 printMatEqn(A, \"*\", x, '=', b = A %*% x) #> A x b #> 2 1 -1 * 2 = 8 #> -3 -1 2 3 -11 #> -2 1 2 -1 -3 printMatEqn(A, \"*\", x, '=', A %*% x) #> A x A %*% x #> 2 1 -1 * 2 = 8 #> -3 -1 2 3 -11 #> -2 1 2 -1 -3 # compare with showEqn b <- c(4, 2, 1) printMatEqn(A, x=paste0(\"x\", 1:3),\"=\", b) #> A x b #> 2 1 -1 x1 = 4 #> -3 -1 2 x2 2 #> -2 1 2 x3 1 showEqn(A, b) #> 2*x1 + 1*x2 - 1*x3 = 4 #> -3*x1 - 1*x2 + 2*x3 = 2 #> -2*x1 + 1*x2 + 2*x3 = 1 # decimal example A <- matrix(c(0.5, 1, 3, 0.75, 2.8, 4), nrow = 2) x <- c(0.5, 3.7, 2.3) y <- c(0.7, -1.2) b <- A %*% x - y printMatEqn(A, \"*\", x, \"-\", y, \"=\", b) #> A x y b #> 0.50 3.00 2.80 * 0.5 - 0.7 = 17.090 #> 1.00 0.75 4.00 3.7 -1.2 13.675 #> 2.3 printMatEqn(A, \"*\", x, \"-\", y, \"=\", b, fractions=TRUE) #> A x y b #> 1/2 3 14/5 * 1/2 - 7/10 = 1709/100 #> 1 3/4 4 37/10 -6/5 547/40 #> 23/10"},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":null,"dir":"Reference","previous_headings":"","what":"Print a matrix, allowing fractions or LaTeX output — printMatrix","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"Print matrix, allowing fractions LaTeX output","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"","code":"printMatrix( A, parent = TRUE, fractions = FALSE, latex = FALSE, tol = sqrt(.Machine$double.eps) )"},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"numeric matrix parent flag used search parent envir suitable definitions arguments. Set TRUE (default) want use inputs provided. fractions TRUE, print numbers rational fractions, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). latex TRUE, print matrix LaTeX format tol Tolerance rounding small numbers 0","code":""},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"formatted matrix","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/printMatrix.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print a matrix, allowing fractions or LaTeX output — printMatrix","text":"","code":"A <- matrix(1:12, 3, 4) / 6 printMatrix(A, fractions=TRUE) #> [,1] [,2] [,3] [,4] #> [1,] 1/6 2/3 7/6 5/3 #> [2,] 1/3 5/6 4/3 11/6 #> [3,] 1/2 1 3/2 2 printMatrix(A, latex=TRUE) #> \\left[ #> \\begin{array}{rrrr} #> 0.16666667 & 0.66666667 & 1.16666667 & 1.66666667 \\\\ #> 0.33333333 & 0.83333333 & 1.33333333 & 1.83333333 \\\\ #> 0.50000000 & 1.00000000 & 1.50000000 & 2.00000000 \\\\ #> \\end{array} #> \\right] #>"},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":null,"dir":"Reference","previous_headings":"","what":"Projection of Vector y on columns of X — Proj","title":"Projection of Vector y on columns of X — Proj","text":"Fitting linear model, lm(y ~ X), least squares can thought geometrically orthogonal projection y column space X. function designed allow exploration projections orthogonality.","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Projection of Vector y on columns of X — Proj","text":"","code":"Proj(y, X, list = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Projection of Vector y on columns of X — Proj","text":"y vector, treated one-column matrix X vector matrix. Number rows y X must match list logical; FALSE, return just projected vector; otherwise returns list","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Projection of Vector y on columns of X — Proj","text":"projection y X (list=FALSE) list elements y P","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Projection of Vector y on columns of X — Proj","text":"projection defined \\(P y\\) \\(P = X (X'X)^- X'\\) \\(X^-\\) generalized inverse.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Projection of Vector y on columns of X — Proj","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/Proj.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Projection of Vector y on columns of X — Proj","text":"","code":"X <- matrix( c(1, 1, 1, 1, 1, -1, 1, -1), 4,2, byrow=TRUE) y <- 1:4 Proj(y, X[,1]) # project y on unit vector #> [1] 2.5 2.5 2.5 2.5 Proj(y, X[,2]) #> [1] -1 -1 1 1 Proj(y, X) #> [1] 1.5 1.5 3.5 3.5 # project unit vector on line between two points y <- c(1,1) p1 <- c(0,0) p2 <- c(1,0) Proj(y, cbind(p1, p2)) #> [1] 1 0 # orthogonal complements y <- 1:4 yp <-Proj(y, X, list=TRUE) yp$y #> [1] 1.5 1.5 3.5 3.5 P <- yp$P IP <- diag(4) - P yc <- c(IP %*% y) crossprod(yp$y, yc) #> [,1] #> [1,] 0 # P is idempotent: P P = P P %*% P #> [,1] [,2] [,3] [,4] #> [1,] 0.5 0.5 0.0 0.0 #> [2,] 0.5 0.5 0.0 0.0 #> [3,] 0.0 0.0 0.5 0.5 #> [4,] 0.0 0.0 0.5 0.5 all.equal(P, P %*% P) #> [1] TRUE"},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":null,"dir":"Reference","previous_headings":"","what":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"QR computes QR decomposition matrix, \\(X\\), orthonormal matrix, \\(Q\\) upper triangular matrix, \\(R\\), \\(X = Q R\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"","code":"QR(X, tol = sqrt(.Machine$double.eps))"},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"X numeric matrix tol tolerance detecting linear dependencies columns X","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"list three elements, consisting orthonormal matrix Q, upper triangular matrix R, rank matrix X","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"QR decomposition plays important role many statistical techniques. particular can used solve equation \\(Ax = b\\) given matrix \\(\\) vector \\(b\\). function included simply show algorithm Gram-Schmidt orthogonalization. standard qr function faster accurate.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"John Fox Georges Monette","code":""},{"path":"http://friendly.github.io/matlib/reference/QR.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"QR Decomposition by Graham-Schmidt Orthonormalization — QR","text":"","code":"A <- matrix(c(1,2,3,4,5,6,7,8,10), 3, 3) # a square nonsingular matrix res <- QR(A) res #> $Q #> [,1] [,2] [,3] #> [1,] -0.2672612 -0.8728716 -0.4082483 #> [2,] -0.5345225 -0.2182179 0.8164966 #> [3,] -0.8017837 0.4364358 -0.4082483 #> #> $R #> [,1] [,2] [,3] #> [1,] -3.741657 -8.552360 -14.1648458 #> [2,] 0.000000 -1.963961 -3.4914862 #> [3,] 0.000000 0.000000 -0.4082483 #> #> $rank #> [1] 3 #> q <- res$Q zapsmall( t(q) %*% q) # check that q' q = I #> [,1] [,2] [,3] #> [1,] 1 0 0 #> [2,] 0 1 0 #> [3,] 0 0 1 r <- res$R q %*% r # check that q r = A #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 10 # relation to determinant: det(A) = prod(diag(R)) det(A) #> [1] -3 prod(diag(r)) #> [1] -3 B <- matrix(1:9, 3, 3) # a singular matrix QR(B) #> $Q #> [,1] [,2] [,3] #> [1,] -0.2672612 -0.8728716 0 #> [2,] -0.5345225 -0.2182179 0 #> [3,] -0.8017837 0.4364358 0 #> #> $R #> [,1] [,2] [,3] #> [1,] -3.741657 -8.552360 -13.363062 #> [2,] 0.000000 -1.963961 -3.927922 #> [3,] 0.000000 0.000000 0.000000 #> #> $rank #> [1] 2 #>"},{"path":"http://friendly.github.io/matlib/reference/R.html","id":null,"dir":"Reference","previous_headings":"","what":"Rank of a Matrix — R","title":"Rank of a Matrix — R","text":"Returns rank matrix X, using QR decomposition, QR. Included simple function, rank something different obvious use matrix rank.","code":""},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rank of a Matrix — R","text":"","code":"R(X)"},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rank of a Matrix — R","text":"X matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Rank of a Matrix — R","text":"rank X","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/R.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rank of a Matrix — R","text":"","code":"M <- outer(1:3, 3:1) M #> [,1] [,2] [,3] #> [1,] 3 2 1 #> [2,] 6 4 2 #> [3,] 9 6 3 R(M) #> [1] 1 M <- matrix(1:9, 3, 3) M #> [,1] [,2] [,3] #> [1,] 1 4 7 #> [2,] 2 5 8 #> [3,] 3 6 9 R(M) #> [1] 2 # why rank=2? echelon(M) #> [,1] [,2] [,3] #> [1,] 1 0 -1 #> [2,] 0 1 2 #> [3,] 0 0 0 set.seed(1234) M <- matrix(sample(1:9), 3, 3) M #> [,1] [,2] [,3] #> [1,] 6 1 7 #> [2,] 5 8 9 #> [3,] 4 2 3 R(M) #> [1] 3"},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Vector space representation of a two-variable regression model — regvec3d","title":"Vector space representation of a two-variable regression model — regvec3d","text":"regvec3d calculates 3D vectors represent projection two-variable multiple regression model n-D observation space 3D mean-deviation variable space span, thus showing regression y x1 x2 model lm(y ~ x1 + x2). result can used draw 2D 3D vector diagrams accurately reflecting partial marginal relations y x1 x2 vectors representation.","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Vector space representation of a two-variable regression model — regvec3d","text":"","code":"regvec3d(x1, ...) # S3 method for formula regvec3d( formula, data = NULL, which = 1:2, name.x1, name.x2, name.y, name.e, name.y.hat, name.b1.x1, name.b2.x2, abbreviate = 0, ... ) # S3 method for default regvec3d( x1, x2, y, scale = FALSE, normalize = TRUE, name.x1 = deparse(substitute(x1)), name.x2 = deparse(substitute(x2)), name.y = deparse(substitute(y)), name.e = \"residuals\", name.y.hat = paste0(name.y, \"hat\"), name.b1.x1 = paste0(\"b1\", name.x1), name.b2.x2 = paste0(\"b2\", name.x2), name.y1.hat = paste0(name.y, \"hat 1\"), name.y2.hat = paste0(name.y, \"hat 2\"), ... )"},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Vector space representation of a two-variable regression model — regvec3d","text":"x1 generic argument first predictor passed default method ... Arguments passed methods formula two-sided formula linear regression model. must contain two quantitative predictors (x1 x2) right-hand-side. predictors included, y, x1 x2 taken residuals linear fits variables. data data frame variables model found Indices predictors variables model taken x1 x2 name.x1 Name x1 used result plots. default, taken name x1 variable formula, possibly abbreviated according abbreviate. name.x2 Ditto name x2 name.y Ditto name y name.e Name residual vector. Default: \"residuals\" name.y.hat Name fitted vector name.b1.x1 Name vector corresponding partial coefficient x1 name.b2.x2 Name vector corresponding partial coefficient x2 abbreviate integer. abbreviate >0, names x1, x2 y abbreviated length combined name.* arguments x2 second predictor variable model y response variable model scale logical; TRUE, standardize y, x1, x2 standard scores normalize logical; TRUE, normalize vector relative maximum length name.y1.hat Name vector corresponding marginal coefficient x1 name.y2.hat Name vector corresponding marginal coefficient x2","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Vector space representation of a two-variable regression model — regvec3d","text":"object class “regvec3d”, containing following components model “lm” object corresponding lm(y ~ x1 + x2). vectors 9 x 3 matrix, whose rows correspond variables model, residual vector, fitted vector, partial fits x1, x2, marginal fits y x1 x2. columns effectively represent x1, x2, y, named \"x\", \"y\" \"z\".","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Vector space representation of a two-variable regression model — regvec3d","text":"additional variables included model, e.g., lm(y ~ x1 + x2 + x3 + ...), y, x1 x2 taken residuals separate linear fits x3 + ..., thus showing partial relations net (adjusting ) additional predictors. 3D diagram shows vector y plane formed predictors, x1 x2, variables represented deviation form, intercept need included. 2D diagram, using first two columns result, can used show projection space x1, x2 plane. views, ANOVA representation various sums squares regression predictors appears lengths various vectors. example, error sum squares squared length e vector, regression sum squares squared length yhat vector. drawing functions vectors link{vectors3d} used plot.regvec3d method work reasonably well variables shown commensurate scales, .e., either scale=TRUE normalize=TRUE.","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"methods-by-class-","dir":"Reference","previous_headings":"","what":"Methods (by class)","title":"Vector space representation of a two-variable regression model — regvec3d","text":"regvec3d(formula): Formula method regvec3d regvec3d(default): Default method regvec3d","code":""},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Vector space representation of a two-variable regression model — regvec3d","text":"Fox, J. (2016). Applied Regression Analysis Generalized Linear Models, 3rd ed., Sage, Chapter 10. Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/regvec3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vector space representation of a two-variable regression model — regvec3d","text":"","code":"library(rgl) therapy.vec <- regvec3d(therapy ~ perstest + IE, data=therapy) therapy.vec #> x y z #> perstest 0.50000000 0.0000000 0.0000000 #> IE 0.02000000 0.3893584 0.0000000 #> therapy 0.60000000 0.7499516 0.2785185 #> residuals 0.00000000 0.0000000 0.2785185 #> therapy hat 0.60000000 0.7499516 0.0000000 #> b1 perstest 0.56147757 0.0000000 0.0000000 #> b2 IE 0.03852243 0.7499516 0.0000000 #> therapy hat 1 0.60000000 0.0000000 0.0000000 #> therapy hat 2 0.04000000 0.7787169 0.0000000 plot(therapy.vec, col.plane=\"darkgreen\") plot(therapy.vec, dimension=2)"},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":null,"dir":"Reference","previous_headings":"","what":"Add multiples of rows to other rows — rowadd","title":"Add multiples of rows to other rows — rowadd","text":"elementary row operation rowadd adds multiples one rows rows matrix. usually used means solve systems linear equations, form \\(x = b\\), rowadd corresponds adding equals equals.","code":""},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add multiples of rows to other rows — rowadd","text":"","code":"rowadd(x, from, to, mult)"},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add multiples of rows to other rows — rowadd","text":"x numeric matrix, possibly consisting coefficient matrix, , joined vector constants, b. index one source rows. vector, must length . index one destination rows mult multiplier(s)","code":""},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add multiples of rows to other rows — rowadd","text":"matrix x, modified","code":""},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add multiples of rows to other rows — rowadd","text":"functions rowmult rowswap complete basic operations used reduction row echelon form Gaussian elimination. functions used demonstration purposes.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowadd.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add multiples of rows to other rows — rowadd","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) # using row operations to reduce below diagonal to 0 Ab <- cbind(A, b) (Ab <- rowadd(Ab, 1, 2, 3/2)) # row 2 <- row 2 + 3/2 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] -2 1.0 2.0 -3 (Ab <- rowadd(Ab, 1, 3, 1)) # row 3 <- row 3 + 1 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 2.0 1.0 5 (Ab <- rowadd(Ab, 2, 3, -4)) # row 3 <- row 3 - 4 row 2 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # multiply to make diagonals = 1 (Ab <- rowmult(Ab, 1:3, c(1/2, 2, -1))) #> b #> [1,] 1 0.5 -0.5 4 #> [2,] 0 1.0 1.0 2 #> [3,] 0 0.0 1.0 -1 # The matrix is now in triangular form # Could continue to reduce above diagonal to zero echelon(A, b, verbose=TRUE, fractions=TRUE) #> #> Initial matrix: #> [,1] [,2] [,3] [,4] #> [1,] 2 1 -1 8 #> [2,] -3 -1 2 -11 #> [3,] -2 1 2 -3 #> #> row: 1 #> #> exchange rows 1 and 2 #> [,1] [,2] [,3] [,4] #> [1,] -3 -1 2 -11 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by -1/3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 2 1 -1 8 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] -2 1 2 -3 #> #> multiply row 1 by 2 and add to row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1/3 1/3 2/3 #> [3,] 0 5/3 2/3 13/3 #> #> row: 2 #> #> exchange rows 2 and 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 5/3 2/3 13/3 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 3/5 #> [,1] [,2] [,3] [,4] #> [1,] 1 1/3 -2/3 11/3 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 1/3 1/3 2/3 #> #> multiply row 2 by 1/3 and subtract from row 3 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1/5 -1/5 #> #> row: 3 #> #> multiply row 3 by 5 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 -4/5 14/5 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 4/5 and add to row 1 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 2/5 13/5 #> [3,] 0 0 1 -1 #> #> multiply row 3 by 2/5 and subtract from row 2 #> [,1] [,2] [,3] [,4] #> [1,] 1 0 0 2 #> [2,] 0 1 0 3 #> [3,] 0 0 1 -1"},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":null,"dir":"Reference","previous_headings":"","what":"Row Cofactors of A[i,] — rowCofactors","title":"Row Cofactors of A[i,] — rowCofactors","text":"Returns vector cofactors row square matrix . determinant, Det(), can found M[,] %*% rowCofactors(M,) row, .","code":""},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Row Cofactors of A[i,] — rowCofactors","text":"","code":"rowCofactors(A, i)"},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Row Cofactors of A[i,] — rowCofactors","text":"square matrix row index","code":""},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Row Cofactors of A[i,] — rowCofactors","text":"vector cofactors [,]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Row Cofactors of A[i,] — rowCofactors","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/rowCofactors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Row Cofactors of A[i,] — rowCofactors","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) minor(M, 1, 1) #> [1] 11 minor(M, 1, 2) #> [1] 7 minor(M, 1, 3) #> [1] -5 rowCofactors(M, 1) #> [1] 11 -7 -5 Det(M) #> [1] 148 # expansion by cofactors of row 1 M[1,] %*% rowCofactors(M,1) #> [,1] #> [1,] 148"},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":null,"dir":"Reference","previous_headings":"","what":"Row Minors of A[i,] — rowMinors","title":"Row Minors of A[i,] — rowMinors","text":"Returns vector minors row square matrix ","code":""},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Row Minors of A[i,] — rowMinors","text":"","code":"rowMinors(A, i)"},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Row Minors of A[i,] — rowMinors","text":"square matrix row index","code":""},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Row Minors of A[i,] — rowMinors","text":"vector minors [,]","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Row Minors of A[i,] — rowMinors","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/rowMinors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Row Minors of A[i,] — rowMinors","text":"","code":"M <- matrix(c(4, -12, -4, 2, 1, 3, -1, -3, 2), 3, 3, byrow=TRUE) minor(M, 1, 1) #> [1] 11 minor(M, 1, 2) #> [1] 7 minor(M, 1, 3) #> [1] -5 rowMinors(M, 1) #> [1] 11 7 -5"},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":null,"dir":"Reference","previous_headings":"","what":"Multiply Rows by Constants — rowmult","title":"Multiply Rows by Constants — rowmult","text":"Multiplies one rows matrix constants. corresponds multiplying dividing equations constants.","code":""},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Multiply Rows by Constants — rowmult","text":"","code":"rowmult(x, row, mult)"},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Multiply Rows by Constants — rowmult","text":"x matrix, possibly consisting coefficient matrix, , joined vector constants, b. row index one rows. mult row multiplier(s)","code":""},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Multiply Rows by Constants — rowmult","text":"matrix x, modified","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/rowmult.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Multiply Rows by Constants — rowmult","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) # using row operations to reduce below diagonal to 0 Ab <- cbind(A, b) (Ab <- rowadd(Ab, 1, 2, 3/2)) # row 2 <- row 2 + 3/2 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] -2 1.0 2.0 -3 (Ab <- rowadd(Ab, 1, 3, 1)) # row 3 <- row 3 + 1 row 1 #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 2.0 1.0 5 (Ab <- rowadd(Ab, 2, 3, -4)) #> b #> [1,] 2 1.0 -1.0 8 #> [2,] 0 0.5 0.5 1 #> [3,] 0 0.0 -1.0 1 # multiply to make diagonals = 1 (Ab <- rowmult(Ab, 1:3, c(1/2, 2, -1))) #> b #> [1,] 1 0.5 -0.5 4 #> [2,] 0 1.0 1.0 2 #> [3,] 0 0.0 1.0 -1 # The matrix is now in triangular form"},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":null,"dir":"Reference","previous_headings":"","what":"Interchange two rows of a matrix — rowswap","title":"Interchange two rows of a matrix — rowswap","text":"elementary row operation corresponds interchanging two equations.","code":""},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Interchange two rows of a matrix — rowswap","text":"","code":"rowswap(x, from, to)"},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Interchange two rows of a matrix — rowswap","text":"x matrix, possibly consisting coefficient matrix, , joined vector constants, b. source row. destination row","code":""},{"path":"http://friendly.github.io/matlib/reference/rowswap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Interchange two rows of a matrix — rowswap","text":"matrix x, rows interchanged","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":null,"dir":"Reference","previous_headings":"","what":"Show the eigenvectors associated with a covariance matrix — showEig","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"function designed illustrating eigenvectors associated covariance matrix given bivariate data set. draws data ellipse data adds vectors showing eigenvectors covariance matrix.","code":""},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"","code":"showEig( X, col.vec = \"blue\", lwd.vec = 3, mult = sqrt(qchisq(levels, 2)), asp = 1, levels = c(0.5, 0.95), plot.points = TRUE, add = !plot.points, ... )"},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"X two-column matrix data frame col.vec color eigenvectors lwd.vec line width eigenvectors mult length multiplier(s) eigenvectors asp aspect ratio plot, set asp=1 default, passed dataEllipse levels passed dataEllipse determining coverage data ellipse(s) plot.points logical; points plotted? add logical; call add existing plot? ... arguments passed link[car]{dataEllipse}","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/showEig.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Show the eigenvectors associated with a covariance matrix — showEig","text":"","code":"x <- rnorm(200) y <- .5 * x + .5 * rnorm(200) X <- cbind(x,y) showEig(X) # Duncan data data(Duncan, package=\"carData\") showEig(Duncan[, 2:3], levels=0.68) showEig(Duncan[,2:3], levels=0.68, robust=TRUE, add=TRUE, fill=TRUE)"},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":null,"dir":"Reference","previous_headings":"","what":"Show Matrices (A, b) as Linear Equations — showEqn","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"Shows matrices \\(, b\\) look like system linear equations, \\(x = b\\), written set equations.","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"","code":"showEqn( A, b, vars, simplify = FALSE, reduce = FALSE, fractions = FALSE, latex = FALSE )"},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"either matrix coefficients system linear equations, matrix cbind(,b). Alternatively, can class 'lm' print equations design matrix linear regression model b supplied, vector constants right hand side equations. omitted values b1, b2, ..., bn used placeholders vars numeric character vector names variables. supplied, length must equal number unknowns equations. default paste0(\"x\", 1:ncol(). simplify logical; try simplify equations? reduce logical; show unique linear equations fractions logical; express numbers rational fractions, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). latex logical; print equations form suitable LaTeX output?","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"one-column character matrix, one row equation","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"Fox, J. Friendly, M. (2016). \"Visualizing Simultaneous Linear Equations, Geometric Vectors, Least-Squares Regression matlib Package R\". useR Conference, Stanford, CA, June 27 - June 30, 2016.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"Michael Friendly, John Fox, Phil Chalmers","code":""},{"path":"http://friendly.github.io/matlib/reference/showEqn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Show Matrices (A, b) as Linear Equations — showEqn","text":"","code":"A <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b <- c(8, -11, -3) showEqn(A, b) #> 2*x1 + 1*x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + 1*x2 + 2*x3 = -3 # show numerically x <- solve(A, b) showEqn(A, b, vars=x) #> 2*2 + 1*3 - 1*-1 = 8 #> -3*2 - 1*3 + 2*-1 = -11 #> -2*2 + 1*3 + 2*-1 = -3 showEqn(A, b, simplify=TRUE) #> 2*x1 + x2 - 1*x3 = 8 #> -3*x1 - 1*x2 + 2*x3 = -11 #> -2*x1 + x2 + 2*x3 = -3 showEqn(A, b, latex=TRUE) #> \\begin{array}{lllllll} #> 2 \\cdot x_1 &+& 1 \\cdot x_2 &-& 1 \\cdot x_3 &=& 8 \\\\ #> -3 \\cdot x_1 &-& 1 \\cdot x_2 &+& 2 \\cdot x_3 &=& -11 \\\\ #> -2 \\cdot x_1 &+& 1 \\cdot x_2 &+& 2 \\cdot x_3 &=& -3 \\\\ #> \\end{array} # lower triangle of equation with zeros omitted (for back solving) A <- matrix(c(2, 1, 2, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) U <- LU(A)$U showEqn(U, simplify=TRUE, fractions=TRUE) #> 2*x1 + x2 + 2*x3 = b1 #> 1/2*x2 + 5*x3 = b2 #> - 16*x3 = b3 showEqn(U, b, simplify=TRUE, fractions=TRUE) #> 2*x1 + x2 + 2*x3 = 8 #> 1/2*x2 + 5*x3 = -11 #> - 16*x3 = -3 #################### # Linear models Design Matricies data(mtcars) ancova <- lm(mpg ~ wt + vs, mtcars) summary(ancova) #> #> Call: #> lm(formula = mpg ~ wt + vs, data = mtcars) #> #> Residuals: #> Min 1Q Median 3Q Max #> -3.7071 -2.4415 -0.3129 1.4319 6.0156 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 33.0042 2.3554 14.012 1.92e-14 *** #> wt -4.4428 0.6134 -7.243 5.63e-08 *** #> vs 3.1544 1.1907 2.649 0.0129 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 2.78 on 29 degrees of freedom #> Multiple R-squared: 0.801,\tAdjusted R-squared: 0.7873 #> F-statistic: 58.36 on 2 and 29 DF, p-value: 6.818e-11 #> showEqn(ancova) #> 1*x1 + 2.62*x2 + 0*x3 = b1 #> 1*x1 + 2.875*x2 + 0*x3 = b2 #> 1*x1 + 2.32*x2 + 1*x3 = b3 #> 1*x1 + 3.215*x2 + 1*x3 = b4 #> 1*x1 + 3.44*x2 + 0*x3 = b5 #> 1*x1 + 3.46*x2 + 1*x3 = b6 #> 1*x1 + 3.57*x2 + 0*x3 = b7 #> 1*x1 + 3.19*x2 + 1*x3 = b8 #> 1*x1 + 3.15*x2 + 1*x3 = b9 #> 1*x1 + 3.44*x2 + 1*x3 = b10 #> 1*x1 + 3.44*x2 + 1*x3 = b11 #> 1*x1 + 4.07*x2 + 0*x3 = b12 #> 1*x1 + 3.73*x2 + 0*x3 = b13 #> 1*x1 + 3.78*x2 + 0*x3 = b14 #> 1*x1 + 5.25*x2 + 0*x3 = b15 #> 1*x1 + 5.424*x2 + 0*x3 = b16 #> 1*x1 + 5.345*x2 + 0*x3 = b17 #> 1*x1 + 2.2*x2 + 1*x3 = b18 #> 1*x1 + 1.615*x2 + 1*x3 = b19 #> 1*x1 + 1.835*x2 + 1*x3 = b20 #> 1*x1 + 2.465*x2 + 1*x3 = b21 #> 1*x1 + 3.52*x2 + 0*x3 = b22 #> 1*x1 + 3.435*x2 + 0*x3 = b23 #> 1*x1 + 3.84*x2 + 0*x3 = b24 #> 1*x1 + 3.845*x2 + 0*x3 = b25 #> 1*x1 + 1.935*x2 + 1*x3 = b26 #> 1*x1 + 2.14*x2 + 0*x3 = b27 #> 1*x1 + 1.513*x2 + 1*x3 = b28 #> 1*x1 + 3.17*x2 + 0*x3 = b29 #> 1*x1 + 2.77*x2 + 0*x3 = b30 #> 1*x1 + 3.57*x2 + 0*x3 = b31 #> 1*x1 + 2.78*x2 + 1*x3 = b32 showEqn(ancova, simplify=TRUE) #> x1 + 2.62*x2 = b1 #> x1 + 2.875*x2 = b2 #> x1 + 2.32*x2 + x3 = b3 #> x1 + 3.215*x2 + x3 = b4 #> x1 + 3.44*x2 = b5 #> x1 + 3.46*x2 + x3 = b6 #> x1 + 3.57*x2 = b7 #> x1 + 3.19*x2 + x3 = b8 #> x1 + 3.15*x2 + x3 = b9 #> x1 + 3.44*x2 + x3 = b10 #> x1 + 3.44*x2 + x3 = b11 #> x1 + 4.07*x2 = b12 #> x1 + 3.73*x2 = b13 #> x1 + 3.78*x2 = b14 #> x1 + 5.25*x2 = b15 #> x1 + 5.424*x2 = b16 #> x1 + 5.345*x2 = b17 #> x1 + 2.2*x2 + x3 = b18 #> x1 + 1.615*x2 + x3 = b19 #> x1 + 1.835*x2 + x3 = b20 #> x1 + 2.465*x2 + x3 = b21 #> x1 + 3.52*x2 = b22 #> x1 + 3.435*x2 = b23 #> x1 + 3.84*x2 = b24 #> x1 + 3.845*x2 = b25 #> x1 + 1.935*x2 + x3 = b26 #> x1 + 2.14*x2 = b27 #> x1 + 1.513*x2 + x3 = b28 #> x1 + 3.17*x2 = b29 #> x1 + 2.77*x2 = b30 #> x1 + 3.57*x2 = b31 #> x1 + 2.78*x2 + x3 = b32 showEqn(ancova, vars=round(coef(ancova),2)) #> 1*33 + 2.62*-4.44 + 0*3.15 = b1 #> 1*33 + 2.875*-4.44 + 0*3.15 = b2 #> 1*33 + 2.32*-4.44 + 1*3.15 = b3 #> 1*33 + 3.215*-4.44 + 1*3.15 = b4 #> 1*33 + 3.44*-4.44 + 0*3.15 = b5 #> 1*33 + 3.46*-4.44 + 1*3.15 = b6 #> 1*33 + 3.57*-4.44 + 0*3.15 = b7 #> 1*33 + 3.19*-4.44 + 1*3.15 = b8 #> 1*33 + 3.15*-4.44 + 1*3.15 = b9 #> 1*33 + 3.44*-4.44 + 1*3.15 = b10 #> 1*33 + 3.44*-4.44 + 1*3.15 = b11 #> 1*33 + 4.07*-4.44 + 0*3.15 = b12 #> 1*33 + 3.73*-4.44 + 0*3.15 = b13 #> 1*33 + 3.78*-4.44 + 0*3.15 = b14 #> 1*33 + 5.25*-4.44 + 0*3.15 = b15 #> 1*33 + 5.424*-4.44 + 0*3.15 = b16 #> 1*33 + 5.345*-4.44 + 0*3.15 = b17 #> 1*33 + 2.2*-4.44 + 1*3.15 = b18 #> 1*33 + 1.615*-4.44 + 1*3.15 = b19 #> 1*33 + 1.835*-4.44 + 1*3.15 = b20 #> 1*33 + 2.465*-4.44 + 1*3.15 = b21 #> 1*33 + 3.52*-4.44 + 0*3.15 = b22 #> 1*33 + 3.435*-4.44 + 0*3.15 = b23 #> 1*33 + 3.84*-4.44 + 0*3.15 = b24 #> 1*33 + 3.845*-4.44 + 0*3.15 = b25 #> 1*33 + 1.935*-4.44 + 1*3.15 = b26 #> 1*33 + 2.14*-4.44 + 0*3.15 = b27 #> 1*33 + 1.513*-4.44 + 1*3.15 = b28 #> 1*33 + 3.17*-4.44 + 0*3.15 = b29 #> 1*33 + 2.77*-4.44 + 0*3.15 = b30 #> 1*33 + 3.57*-4.44 + 0*3.15 = b31 #> 1*33 + 2.78*-4.44 + 1*3.15 = b32 showEqn(ancova, vars=round(coef(ancova),2), simplify=TRUE) #> 33 + 2.62*-4.44 = b1 #> 33 + 2.875*-4.44 = b2 #> 33 + 2.32*-4.44 + 3.15 = b3 #> 33 + 3.215*-4.44 + 3.15 = b4 #> 33 + 3.44*-4.44 = b5 #> 33 + 3.46*-4.44 + 3.15 = b6 #> 33 + 3.57*-4.44 = b7 #> 33 + 3.19*-4.44 + 3.15 = b8 #> 33 + 3.15*-4.44 + 3.15 = b9 #> 33 + 3.44*-4.44 + 3.15 = b10 #> 33 + 3.44*-4.44 + 3.15 = b11 #> 33 + 4.07*-4.44 = b12 #> 33 + 3.73*-4.44 = b13 #> 33 + 3.78*-4.44 = b14 #> 33 + 5.25*-4.44 = b15 #> 33 + 5.424*-4.44 = b16 #> 33 + 5.345*-4.44 = b17 #> 33 + 2.2*-4.44 + 3.15 = b18 #> 33 + 1.615*-4.44 + 3.15 = b19 #> 33 + 1.835*-4.44 + 3.15 = b20 #> 33 + 2.465*-4.44 + 3.15 = b21 #> 33 + 3.52*-4.44 = b22 #> 33 + 3.435*-4.44 = b23 #> 33 + 3.84*-4.44 = b24 #> 33 + 3.845*-4.44 = b25 #> 33 + 1.935*-4.44 + 3.15 = b26 #> 33 + 2.14*-4.44 = b27 #> 33 + 1.513*-4.44 + 3.15 = b28 #> 33 + 3.17*-4.44 = b29 #> 33 + 2.77*-4.44 = b30 #> 33 + 3.57*-4.44 = b31 #> 33 + 2.78*-4.44 + 3.15 = b32 twoway_int <- lm(mpg ~ vs * am, mtcars) summary(twoway_int) #> #> Call: #> lm(formula = mpg ~ vs * am, data = mtcars) #> #> Residuals: #> Min 1Q Median 3Q Max #> -6.971 -1.973 0.300 2.036 6.250 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 15.050 1.002 15.017 6.34e-15 *** #> vs 5.693 1.651 3.448 0.0018 ** #> am 4.700 1.736 2.708 0.0114 * #> vs:am 2.929 2.541 1.153 0.2589 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 3.472 on 28 degrees of freedom #> Multiple R-squared: 0.7003,\tAdjusted R-squared: 0.6682 #> F-statistic: 21.81 on 3 and 28 DF, p-value: 1.735e-07 #> car::Anova(twoway_int) #> Anova Table (Type II tests) #> #> Response: mpg #> Sum Sq Df F value Pr(>F) #> vs 367.41 1 30.4836 6.687e-06 *** #> am 276.03 1 22.9021 4.984e-05 *** #> vs:am 16.01 1 1.3283 0.2589 #> Residuals 337.48 28 #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 showEqn(twoway_int) #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b1 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b2 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b3 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b4 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b5 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b6 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b7 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b8 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b9 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b10 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b11 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b12 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b13 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b14 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b15 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b16 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b17 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b18 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b19 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b20 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b21 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b22 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b23 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b24 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b25 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b26 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b27 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b28 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b29 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b30 #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b31 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b32 showEqn(twoway_int, reduce=TRUE) #> 1*x1 + 0*x2 + 1*x3 + 0*x4 = b1 #> 1*x1 + 1*x2 + 1*x3 + 1*x4 = b2 #> 1*x1 + 1*x2 + 0*x3 + 0*x4 = b3 #> 1*x1 + 0*x2 + 0*x3 + 0*x4 = b4 showEqn(twoway_int, reduce=TRUE, simplify=TRUE) #> x1 + x3 = b1 #> x1 + x2 + x3 + x4 = b2 #> x1 + x2 = b3 #> x1 = b4 # Piece-wise linear regression x <- c(1:10, 13:22) y <- numeric(20) y[1:10] <- 20:11 + rnorm(10, 0, 1.5) y[11:20] <- seq(11, 15, len=10) + rnorm(10, 0, 1.5) plot(x, y, pch = 16) x2 <- as.numeric(x > 10) mod <- lm(y ~ x + I((x - 10) * x2)) summary(mod) #> #> Call: #> lm(formula = y ~ x + I((x - 10) * x2)) #> #> Residuals: #> Min 1Q Median 3Q Max #> -2.4470 -0.6140 -0.4304 1.0993 2.4990 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 20.9943 0.9522 22.048 6.05e-14 *** #> x -0.9731 0.1412 -6.891 2.61e-06 *** #> I((x - 10) * x2) 1.3166 0.2203 5.977 1.50e-05 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> #> Residual standard error: 1.45 on 17 degrees of freedom #> Multiple R-squared: 0.7444,\tAdjusted R-squared: 0.7143 #> F-statistic: 24.75 on 2 and 17 DF, p-value: 9.223e-06 #> lines(x, fitted(mod)) showEqn(mod) #> 1*x1 + 1*x2 + 0*x3 = b1 #> 1*x1 + 2*x2 + 0*x3 = b2 #> 1*x1 + 3*x2 + 0*x3 = b3 #> 1*x1 + 4*x2 + 0*x3 = b4 #> 1*x1 + 5*x2 + 0*x3 = b5 #> 1*x1 + 6*x2 + 0*x3 = b6 #> 1*x1 + 7*x2 + 0*x3 = b7 #> 1*x1 + 8*x2 + 0*x3 = b8 #> 1*x1 + 9*x2 + 0*x3 = b9 #> 1*x1 + 10*x2 + 0*x3 = b10 #> 1*x1 + 13*x2 + 3*x3 = b11 #> 1*x1 + 14*x2 + 4*x3 = b12 #> 1*x1 + 15*x2 + 5*x3 = b13 #> 1*x1 + 16*x2 + 6*x3 = b14 #> 1*x1 + 17*x2 + 7*x3 = b15 #> 1*x1 + 18*x2 + 8*x3 = b16 #> 1*x1 + 19*x2 + 9*x3 = b17 #> 1*x1 + 20*x2 + 10*x3 = b18 #> 1*x1 + 21*x2 + 11*x3 = b19 #> 1*x1 + 22*x2 + 12*x3 = b20 showEqn(mod, vars=round(coef(mod),2)) #> 1*20.99 + 1*-0.97 + 0*1.32 = b1 #> 1*20.99 + 2*-0.97 + 0*1.32 = b2 #> 1*20.99 + 3*-0.97 + 0*1.32 = b3 #> 1*20.99 + 4*-0.97 + 0*1.32 = b4 #> 1*20.99 + 5*-0.97 + 0*1.32 = b5 #> 1*20.99 + 6*-0.97 + 0*1.32 = b6 #> 1*20.99 + 7*-0.97 + 0*1.32 = b7 #> 1*20.99 + 8*-0.97 + 0*1.32 = b8 #> 1*20.99 + 9*-0.97 + 0*1.32 = b9 #> 1*20.99 + 10*-0.97 + 0*1.32 = b10 #> 1*20.99 + 13*-0.97 + 3*1.32 = b11 #> 1*20.99 + 14*-0.97 + 4*1.32 = b12 #> 1*20.99 + 15*-0.97 + 5*1.32 = b13 #> 1*20.99 + 16*-0.97 + 6*1.32 = b14 #> 1*20.99 + 17*-0.97 + 7*1.32 = b15 #> 1*20.99 + 18*-0.97 + 8*1.32 = b16 #> 1*20.99 + 19*-0.97 + 9*1.32 = b17 #> 1*20.99 + 20*-0.97 + 10*1.32 = b18 #> 1*20.99 + 21*-0.97 + 11*1.32 = b19 #> 1*20.99 + 22*-0.97 + 12*1.32 = b20 showEqn(mod, simplify=TRUE) #> x1 + x2 = b1 #> x1 + 2*x2 = b2 #> x1 + 3*x2 = b3 #> x1 + 4*x2 = b4 #> x1 + 5*x2 = b5 #> x1 + 6*x2 = b6 #> x1 + 7*x2 = b7 #> x1 + 8*x2 = b8 #> x1 + 9*x2 = b9 #> x1 + 10*x2 = b10 #> x1 + 13*x2 + 3*x3 = b11 #> x1 + 14*x2 + 4*x3 = b12 #> x1 + 15*x2 + 5*x3 = b13 #> x1 + 16*x2 + 6*x3 = b14 #> x1 + 17*x2 + 7*x3 = b15 #> x1 + 18*x2 + 8*x3 = b16 #> x1 + 19*x2 + 9*x3 = b17 #> x1 + 20*x2 + 10*x3 = b18 #> x1 + 21*x2 + 11*x3 = b19 #> x1 + 22*x2 + 12*x3 = b20"},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":null,"dir":"Reference","previous_headings":"","what":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"Solve equation system \\(Ax = b\\), given coefficient matrix \\(\\) right-hand side vector \\(b\\), using link{gaussianElimination}. Display solutions using showEqn.","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"","code":"Solve( A, b = rep(0, nrow(A)), vars, verbose = FALSE, simplify = TRUE, fractions = FALSE, ... )"},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":", matrix coefficients system linear equations b, vector constants right hand side equations. default vector zeros, giving homogeneous equations \\(Ax = 0\\). vars numeric character vector names variables. supplied, length must equal number unknowns equations. default paste0(\"x\", 1:ncol(). verbose, logical; show steps Gaussian elimination algorithm? simplify logical; try simplify equations? fractions logical; express numbers rational fractions, using fractions function; require greater accuracy, can set cycles (default 10) /max.denominator (default 2000) arguments fractions global option, e.g., options(fractions=list(cycles=100, max.denominator=10^4)). ..., arguments passed link{gaussianElimination} showEqn","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"function used primarily side effect printing solution readable form, invisibly returns solution character vector","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"function mimics base function solve supplied two arguments, (, b), gives prettier result, set equations solution. call solve() single argument overloads , returning inverse matrix . sense, use function inv instead.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/Solve.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Solve and Display Solutions for Systems of Linear Simultaneous Equations — Solve","text":"","code":"A1 <- matrix(c(2, 1, -1, -3, -1, 2, -2, 1, 2), 3, 3, byrow=TRUE) b1 <- c(8, -11, -3) Solve(A1, b1) # unique solution #> x1 = 2 #> x2 = 3 #> x3 = -1 A2 <- matrix(1:9, 3, 3) b2 <- 1:3 Solve(A2, b2, fractions=TRUE) # underdetermined #> x1 - 1*x3 = 1 #> x2 + 2*x3 = 0 #> 0 = 0 b3 <- c(1, 2, 4) Solve(A2, b3, fractions=TRUE) # overdetermined #> x1 - 1*x3 = 5/3 #> x2 + 2*x3 = -1/6 #> 0 = -1/2"},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":null,"dir":"Reference","previous_headings":"","what":"Singular Value Decomposition of a Matrix — SVD","title":"Singular Value Decomposition of a Matrix — SVD","text":"Compute singular-value decomposition matrix \\(X\\) either Jacobi rotations (default) eigenstructure \\(X'X\\) using Eigen. methods iterative. result consists two orthonormal matrices, \\(U\\), \\(V\\) vector \\(d\\) singular values, \\(X = U diag(d) V'\\).","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Singular Value Decomposition of a Matrix — SVD","text":"","code":"SVD( X, method = c(\"Jacobi\", \"eigen\"), tol = sqrt(.Machine$double.eps), max.iter = 100 )"},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Singular Value Decomposition of a Matrix — SVD","text":"X square symmetric matrix method either \"Jacobi\" (default) \"eigen\" tol zero convergence tolerance max.iter maximum number iterations","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Singular Value Decomposition of a Matrix — SVD","text":"list three elements: d-- singular values, U-- left singular vectors, V-- right singular vectors","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Singular Value Decomposition of a Matrix — SVD","text":"default method numerically stable, eigenstructure method much simpler. Singular values zero retained solution.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Singular Value Decomposition of a Matrix — SVD","text":"John Fox Georges Monette","code":""},{"path":"http://friendly.github.io/matlib/reference/SVD.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Singular Value Decomposition of a Matrix — SVD","text":"","code":"C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric C #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 5 6 #> [3,] 3 6 10 SVD(C) #> $d #> [1] 14.93303437 1.00000000 0.06696563 #> #> $U #> [,1] [,2] [,3] #> [1,] 0.2505248 4.308756e-14 0.9681102 #> [2,] 0.5370109 8.320503e-01 -0.1389662 #> [3,] 0.8055164 -5.547002e-01 -0.2084492 #> #> $V #> [,1] [,2] [,3] #> [1,] 0.2505248 2.960306e-15 0.9681102 #> [2,] 0.5370109 8.320503e-01 -0.1389662 #> [3,] 0.8055164 -5.547002e-01 -0.2084492 #> # least squares by the SVD data(\"workers\") X <- cbind(1, as.matrix(workers[, c(\"Experience\", \"Skill\")])) head(X) #> Experience Skill #> Abby 1 0 2 #> Betty 1 5 5 #> Charles 1 5 8 #> Doreen 1 10 6 #> Ethan 1 10 10 #> Francie 1 15 7 y <- workers$Income head(y) #> [1] 20 35 40 30 50 50 (svd <- SVD(X)) #> $d #> [1] 66.864276 8.885751 1.100924 #> #> $U #> Experience Skill #> Abby 0.01366778 0.21621629 0.62512040 #> Betty 0.10046906 0.26924846 0.34867115 #> Charles 0.12007689 0.56866664 -0.06013463 #> Doreen 0.17419846 0.12266851 0.34475908 #> Ethan 0.20034223 0.52189275 -0.20031530 #> Francie 0.24792785 -0.02391144 0.34084702 #> Georges 0.34780102 0.22873284 -0.20813943 #> Harry 0.40192259 -0.21726529 0.19675429 #> Isaac 0.50179576 0.03537900 -0.35223216 #> Juan 0.55591732 -0.41061914 0.05266156 #> #> $V #> [,1] [,2] [,3] #> [1,] 0.03984368 0.1475406 0.98825314 #> [2,] 0.89856830 -0.4378649 0.02914291 #> [3,] 0.43702116 0.8868518 -0.15002142 #> VdU <- svd$V %*% diag(1/svd$d) %*%t(svd$U) (b <- VdU %*% y) #> [,1] #> [1,] 14.7808811 #> [2,] 0.1130069 #> [3,] 3.4053991 coef(lm(Income ~ Experience + Skill, data=workers)) #> (Intercept) Experience Skill #> 14.7808811 0.1130069 3.4053991"},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":null,"dir":"Reference","previous_headings":"","what":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"function draws rgl scene consisting representation identity matrix 3 x 3 matrix , together corresponding representation matrices U, D, V SVD decomposition, = U D V'.","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"","code":"svdDemo(A, shape = c(\"cube\", \"sphere\"), alpha = 0.7, col = rainbow(6))"},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"3 x 3 numeric matrix shape Basic shape used represent identity matrix: \"cube\" \"sphere\" alpha transparency value used draw shape col Vector 6 colors faces basic cube","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"Nothing","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"Original idea Duncan Murdoch","code":""},{"path":"http://friendly.github.io/matlib/reference/svdDemo.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Demonstrate the SVD for a 3 x 3 matrix — svdDemo","text":"3D plot","code":"A <- matrix(c(1,2,0.1, 0.1,1,0.1, 0.1,0.1,0.5), 3,3) svdDemo(A) 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":182,\"objects\":{\"200\":{\"id\":200,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"0\",\"colors\":\"2\",\"centers\":\"3\",\"normals\":\"1\",\"ignoreExtent\":false,\"flags\":32811},\"201\":{\"id\":201,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"4\",\"colors\":\"5\",\"centers\":\"6\",\"ignoreExtent\":false,\"flags\":41024},\"202\":{\"id\":202,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"203\":{\"id\":203,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"204\":{\"id\":204,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"205\":{\"id\":205,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"19\",\"colors\":\"21\",\"centers\":\"22\",\"normals\":\"20\",\"ignoreExtent\":false,\"flags\":32771},\"206\":{\"id\":206,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"23\",\"colors\":\"25\",\"centers\":\"26\",\"normals\":\"24\",\"ignoreExtent\":false,\"flags\":32771},\"207\":{\"id\":207,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"27\",\"colors\":\"29\",\"centers\":\"30\",\"normals\":\"28\",\"ignoreExtent\":false,\"flags\":32771},\"208\":{\"id\":208,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"31\",\"colors\":\"32\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"33\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"209\":{\"id\":209,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"34\",\"colors\":\"35\",\"texts\":[[\"Identity\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"36\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"210\":{\"id\":210,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"37\",\"colors\":\"39\",\"centers\":\"40\",\"normals\":\"38\",\"ignoreExtent\":false,\"flags\":32811},\"211\":{\"id\":211,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"41\",\"colors\":\"42\",\"centers\":\"43\",\"ignoreExtent\":false,\"flags\":41024},\"212\":{\"id\":212,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"44\",\"colors\":\"46\",\"centers\":\"47\",\"normals\":\"45\",\"ignoreExtent\":false,\"flags\":32771},\"213\":{\"id\":213,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"48\",\"colors\":\"50\",\"centers\":\"51\",\"normals\":\"49\",\"ignoreExtent\":false,\"flags\":32771},\"214\":{\"id\":214,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"52\",\"colors\":\"54\",\"centers\":\"55\",\"normals\":\"53\",\"ignoreExtent\":false,\"flags\":32771},\"215\":{\"id\":215,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"56\",\"colors\":\"58\",\"centers\":\"59\",\"normals\":\"57\",\"ignoreExtent\":false,\"flags\":32771},\"216\":{\"id\":216,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"60\",\"colors\":\"62\",\"centers\":\"63\",\"normals\":\"61\",\"ignoreExtent\":false,\"flags\":32771},\"217\":{\"id\":217,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"64\",\"colors\":\"66\",\"centers\":\"67\",\"normals\":\"65\",\"ignoreExtent\":false,\"flags\":32771},\"218\":{\"id\":218,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"68\",\"colors\":\"69\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"70\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"219\":{\"id\":219,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"71\",\"colors\":\"72\",\"texts\":[[\"A\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"73\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"220\":{\"id\":220,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"74\",\"colors\":\"76\",\"centers\":\"77\",\"normals\":\"75\",\"ignoreExtent\":false,\"flags\":32811},\"221\":{\"id\":221,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"78\",\"colors\":\"79\",\"centers\":\"80\",\"ignoreExtent\":false,\"flags\":41024},\"222\":{\"id\":222,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"81\",\"colors\":\"83\",\"centers\":\"84\",\"normals\":\"82\",\"ignoreExtent\":false,\"flags\":32771},\"223\":{\"id\":223,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"85\",\"colors\":\"87\",\"centers\":\"88\",\"normals\":\"86\",\"ignoreExtent\":false,\"flags\":32771},\"224\":{\"id\":224,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"89\",\"colors\":\"91\",\"centers\":\"92\",\"normals\":\"90\",\"ignoreExtent\":false,\"flags\":32771},\"225\":{\"id\":225,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"93\",\"colors\":\"95\",\"centers\":\"96\",\"normals\":\"94\",\"ignoreExtent\":false,\"flags\":32771},\"226\":{\"id\":226,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"97\",\"colors\":\"99\",\"centers\":\"100\",\"normals\":\"98\",\"ignoreExtent\":false,\"flags\":32771},\"227\":{\"id\":227,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"101\",\"colors\":\"103\",\"centers\":\"104\",\"normals\":\"102\",\"ignoreExtent\":false,\"flags\":32771},\"228\":{\"id\":228,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"105\",\"colors\":\"106\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"107\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"229\":{\"id\":229,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"108\",\"colors\":\"109\",\"texts\":[[\"U\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"110\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"230\":{\"id\":230,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"111\",\"colors\":\"113\",\"centers\":\"114\",\"normals\":\"112\",\"ignoreExtent\":false,\"flags\":32811},\"231\":{\"id\":231,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"115\",\"colors\":\"116\",\"centers\":\"117\",\"ignoreExtent\":false,\"flags\":41024},\"232\":{\"id\":232,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"118\",\"colors\":\"120\",\"centers\":\"121\",\"normals\":\"119\",\"ignoreExtent\":false,\"flags\":32771},\"233\":{\"id\":233,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"122\",\"colors\":\"124\",\"centers\":\"125\",\"normals\":\"123\",\"ignoreExtent\":false,\"flags\":32771},\"234\":{\"id\":234,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"126\",\"colors\":\"128\",\"centers\":\"129\",\"normals\":\"127\",\"ignoreExtent\":false,\"flags\":32771},\"235\":{\"id\":235,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"130\",\"colors\":\"132\",\"centers\":\"133\",\"normals\":\"131\",\"ignoreExtent\":false,\"flags\":32771},\"236\":{\"id\":236,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"134\",\"colors\":\"136\",\"centers\":\"137\",\"normals\":\"135\",\"ignoreExtent\":false,\"flags\":32771},\"237\":{\"id\":237,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"138\",\"colors\":\"140\",\"centers\":\"141\",\"normals\":\"139\",\"ignoreExtent\":false,\"flags\":32771},\"238\":{\"id\":238,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"142\",\"colors\":\"143\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"144\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"239\":{\"id\":239,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"145\",\"colors\":\"146\",\"texts\":[[\"D\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"147\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"240\":{\"id\":240,\"type\":\"quads\",\"material\":{\"alpha\":[0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398,0.6980392336845398],\"isTransparent\":true},\"vertices\":\"148\",\"colors\":\"150\",\"centers\":\"151\",\"normals\":\"149\",\"ignoreExtent\":false,\"flags\":32811},\"241\":{\"id\":241,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"152\",\"colors\":\"153\",\"centers\":\"154\",\"ignoreExtent\":false,\"flags\":41024},\"242\":{\"id\":242,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"155\",\"colors\":\"157\",\"centers\":\"158\",\"normals\":\"156\",\"ignoreExtent\":false,\"flags\":32771},\"243\":{\"id\":243,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"159\",\"colors\":\"161\",\"centers\":\"162\",\"normals\":\"160\",\"ignoreExtent\":false,\"flags\":32771},\"244\":{\"id\":244,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"163\",\"colors\":\"165\",\"centers\":\"166\",\"normals\":\"164\",\"ignoreExtent\":false,\"flags\":32771},\"245\":{\"id\":245,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"167\",\"colors\":\"169\",\"centers\":\"170\",\"normals\":\"168\",\"ignoreExtent\":false,\"flags\":32771},\"246\":{\"id\":246,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"171\",\"colors\":\"173\",\"centers\":\"174\",\"normals\":\"172\",\"ignoreExtent\":false,\"flags\":32771},\"247\":{\"id\":247,\"type\":\"triangles\",\"material\":{\"lwd\":3},\"vertices\":\"175\",\"colors\":\"177\",\"centers\":\"178\",\"normals\":\"176\",\"ignoreExtent\":false,\"flags\":32771},\"248\":{\"id\":248,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":3},\"vertices\":\"179\",\"colors\":\"180\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"\"],[\"x\"],[\"y\"],[\"z\"],[\" \"],[\" \"],[\" \"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"181\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"249\":{\"id\":249,\"type\":\"text\",\"material\":{\"lit\":false},\"vertices\":\"182\",\"colors\":\"183\",\"texts\":[[\"V\"]],\"cex\":[[1.5]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"184\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"186\":{\"id\":186,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"185\":{\"id\":185,\"type\":\"background\",\"material\":{},\"colors\":\"185\",\"centers\":\"186\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"187\":{\"id\":187,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"187\",\"centers\":\"188\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"188\":{\"id\":188,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,8.030556678771973],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-8.030556678771973],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419755935669,0,0],[0,0,-3.863703489303589,-28.94922828674316],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0.625,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.200000047683716,1.200000047683716,-1.200000047683716,1.200000047683716,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[200,201,202,203,204,205,206,207,208,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"189\":{\"id\":189,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0.5,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[209,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"190\":{\"id\":190,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,823.132080078125],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-823.132080078125],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419994354248,0,0],[0,0,-3.863703727722168,-2967.29638671875],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0.625,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[123,-123,123,-123,123,-123],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":186,\"parent\":182,\"subscenes\":[],\"flags\":256},\"191\":{\"id\":191,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,823.132080078125],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-823.132080078125],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703727722168,-2967.29638671875],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0.5,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[123,-123,123,-123,123,-123],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":186,\"parent\":182,\"subscenes\":[],\"flags\":256},\"192\":{\"id\":192,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,13.65478897094727],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-13.65478897094727],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.304420232772827,0,0],[0,0,-3.863703727722168,-49.22393798828125],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0.625,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.200000047683716,1.200000047683716,-3.099999904632568,3.099999904632568,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[210,211,212,213,214,215,216,217,218,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"193\":{\"id\":193,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0.5,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[219,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"194\":{\"id\":194,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,8.803891181945801],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-8.803891181945801],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419994354248,0,0],[0,0,-3.863702774047852,-31.73700332641602],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0.125,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.344589829444885,1.344589829444885,-1.394332528114319,1.394332528114319,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[220,221,222,223,224,225,226,227,228,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"195\":{\"id\":195,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[229,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"196\":{\"id\":196,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,11.47779846191406],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-11.47779846191406],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419755935669,0,0],[0,0,-3.863703489303589,-41.37614059448242],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0.125,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-2.438215970993042,2.438215970993042,-1.200000047683716,1.200000047683716,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[230,231,232,233,234,235,236,237,238,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"197\":{\"id\":197,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.33203125,\"y\":0,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[239,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"198\":{\"id\":198,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,8.803891181945801],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-8.803891181945801],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.304419994354248,0,0],[0,0,-3.863702774047852,-31.73700332641602],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0.125,\"width\":0.33203125,\"height\":0.375},\"zoom\":1,\"bbox\":[-1.394332528114319,1.394332528114319,-1.344589829444885,1.344589829444885,-1.200000047683716,1.200000047683716],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[240,241,242,243,244,245,246,247,248,186],\"parent\":182,\"subscenes\":[],\"flags\":42363},\"199\":{\"id\":199,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":[188,189,190,191,192,193,194,195,196,197,198,199],\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.86370325088501],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-3.86370325088501],[0,0,0,1]],\"projMatrix\":[[1.405007362365723,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.86370325088501,-13.92820262908936],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0.6640625,\"y\":0,\"width\":0.33203125,\"height\":0.125},\"zoom\":1,\"bbox\":[0,0,0,0,0,0],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"inherit\"},\"objects\":[249,186],\"parent\":182,\"subscenes\":[],\"flags\":34064},\"182\":{\"id\":182,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":182,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,823.132080078125],\"modelMatrix\":[[1,0,0,0],[0,0.3420201539993286,0.9396926164627075,0],[0,-0.9396926164627075,0.3420201539993286,-823.132080078125],[0,0,0,1]],\"projMatrix\":[[3.732050657272339,0,0,0],[0,3.732050657272339,0,0],[0,0,-3.863703727722168,-2967.29638671875],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[123,-123,123,-123,123,-123],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[187,186,188,189,190,191,192,193,194,195,196,197,198,199],\"subscenes\":[188,189,190,191,192,193,194,195,196,197,198,199],\"flags\":42363}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5120,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5120,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":2,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":3,\"componentType\":5120,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":6,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":21,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":22,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":25,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":26,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":28,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":30,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":31,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":32,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":33,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":34,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":35,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":36,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":37,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":38,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":40,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":41,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":43,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":44,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":46,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":47,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":49,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":50,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":51,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":53,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":54,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":55,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":56,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":57,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":58,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":59,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":60,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":61,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":62,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":63,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":64,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":65,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":66,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":67,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":68,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":69,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":70,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":71,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":72,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":73,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":74,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":75,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":76,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":77,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":78,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":79,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":80,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":81,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":82,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":83,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":84,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":85,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":86,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":87,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":88,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":89,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":90,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":91,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":92,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":93,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":94,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":95,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":96,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":97,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":98,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":99,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":100,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":101,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":102,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":103,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":104,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":105,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":106,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":107,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":108,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":109,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":110,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":111,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":112,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":113,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":114,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":115,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":116,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":117,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":118,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":119,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":120,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":121,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":122,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":123,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":124,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":125,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":126,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":127,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":128,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":129,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":130,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":131,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":132,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":133,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":134,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":135,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":136,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":137,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":138,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":139,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":140,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":141,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":142,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":143,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":144,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":145,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":146,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":147,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":148,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":149,\"componentType\":5126,\"count\":24,\"type\":\"VEC3\"},{\"bufferView\":150,\"componentType\":5121,\"count\":24,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":151,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":152,\"componentType\":5120,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":153,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":154,\"componentType\":5126,\"count\":6,\"type\":\"VEC3\"},{\"bufferView\":155,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":156,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":157,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":158,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":159,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":160,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":161,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":162,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":163,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":164,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":165,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":166,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":167,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":168,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":169,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":170,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":171,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":172,\"componentType\":5121,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":173,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":174,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":175,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":176,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":177,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":178,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":179,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":180,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":181,\"componentType\":5126,\"count\":12,\"type\":\"VEC3\"},{\"bufferView\":182,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":183,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":184,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":185,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":186,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":187,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":188,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":72,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":72},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":144},{\"buffer\":0,\"byteLength\":18,\"byteOffset\":240},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":258},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":294},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":300},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":372},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1020},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":1668},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1684},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1900},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2548},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":3196},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3212},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3428},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4076},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":4724},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4740},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4956},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5604},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":6252},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6268},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":6484},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":7132},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7296},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":7312},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":7528},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":8176},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":8824},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":8840},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":9056},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9200},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":9204},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9348},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9351},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9355},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":9360},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":9648},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":9936},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":10032},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":10104},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":10140},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":10144},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":10216},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":10864},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":11512},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":11528},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":11744},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":12392},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":13040},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":13056},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":13272},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":13920},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":14568},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":14584},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":14800},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":15448},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":16096},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":16112},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":16328},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":16976},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":17140},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":17156},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":17372},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":18020},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":18668},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":18684},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":18900},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":19044},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":19048},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":19192},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":19195},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":19199},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":19204},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":19492},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":19780},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":19876},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":19948},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":19984},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":19988},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":20060},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":20708},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":21356},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":21372},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":21588},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":22236},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":22884},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":22900},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":23116},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":23764},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":24412},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":24428},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":24644},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":25292},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":25940},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":25956},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":26172},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":26820},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":26984},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":27000},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":27216},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":27864},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":28512},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":28528},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":28744},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":28888},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":28892},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":29036},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":29039},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":29043},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":29048},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":29336},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":29624},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":29720},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":29792},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":29828},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":29832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":29904},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":30552},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":31200},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":31216},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":31432},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":32080},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":32728},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":32744},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":32960},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":33608},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":34256},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":34272},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":34488},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":35136},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":35784},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":35800},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":36016},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":36664},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":36828},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":36844},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":37060},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":37708},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":38356},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":38372},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":38588},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":38732},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":38736},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":38880},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":38883},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":38887},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":38892},{\"buffer\":0,\"byteLength\":288,\"byteOffset\":39180},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":39468},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":39564},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":39636},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":39672},{\"buffer\":0,\"byteLength\":72,\"byteOffset\":39676},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":39748},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":40396},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":41044},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":41060},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":41276},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":41924},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":42572},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":42588},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":42804},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":43452},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":44100},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":44116},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":44332},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":44980},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":45628},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":45644},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":45860},{\"buffer\":0,\"byteLength\":162,\"byteOffset\":46508},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":46672},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":46688},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":46904},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":47552},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":48200},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":48216},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":48432},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":48576},{\"buffer\":0,\"byteLength\":144,\"byteOffset\":48580},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48724},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":48727},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48731},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":48736},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48752},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":48755},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":48759}],\"buffers\":[{\"byteLength\":48762,\"bytes\":\"/////wH/AQH/Af///wH//wEBAQEBAQH/Af//AQH/AQEBAf8B//////8B/wEB/wH/////Af//\\nAf8B//8B//8BAf8BAQEB/wEBAAD/AAD/AAD/AAD/AAEAAAEAAAEAAAEAAQAAAQAAAQAAAQAA\\n/wAA/wAA/wAA/wAAAP8AAP8AAP8AAP8AAAABAAABAAABAAAB/wAAsv8AALL/AACy/wAAsv8A\\nALL//wCy//8Asv8AALL/AACy/wAAsv//ALL//wCy/wAAsv//ALL//wCy/wAAsv8AALL/AACy\\n//8Asv//ALL//wCy//8Asv//ALL//wCyAAD/AAEAAQAA/wAAAP8AAAABAAAAAQAAAAAAAAEA\\nAAAAAAABAAAA/wAAAAAAAP8AAAAAAAD/AAAAAQAAAAAAPwAAAAAAAAAAAAAAAAAAAD8AAAAA\\nAAAAAAAAAAAAAAA/AAAAvwAAAAAAAAAAAAAAAAAAAL8AAAAAAAAAAAAAAAAAAAC/zcxMPwAA\\nAAAAAAAAzcxMPwAAAADNzEw9zcxMP5WkA73K4hw9zcxMPwAAAAAAAAAAzcxMP5WkA73K4hw9\\nzcxMP0qwSb2qQA48zcxMPwAAAAAAAAAAzcxMP0qwSb2qQA48zcxMP6xcMb3NzMy8zcxMPwAA\\nAAAAAAAAzcxMP6xcMb3NzMy8zcxMP2kXjLz1ckC9zcxMPwAAAAAAAAAAzcxMP2kXjLz1ckC9\\nzcxMP2kXjDz1ckC9zcxMPwAAAAAAAAAAzcxMP2kXjDz1ckC9zcxMP6xcMT3NzMy8zcxMPwAA\\nAAAAAAAAzcxMP6xcMT3NzMy8zcxMP0qwST2qQA48zcxMPwAAAAAAAAAAzcxMP0qwST2qQA48\\nzcxMP5WkAz3K4hw9zcxMPwAAAAAAAAAAzcxMP5WkAz3K4hw9zcxMP2bmYSPNzEw9AACAP2bm\\nYSMAAAAAzcxMPwAAAADNzEw9zcxMP5WkA73K4hw9AACAP2bmYSMAAAAAzcxMP5WkA73K4hw9\\nzcxMP0qwSb2qQA48AACAP2bmYSMAAAAAzcxMP0qwSb2qQA48zcxMP6xcMb3NzMy8AACAP2bm\\nYSMAAAAAzcxMP6xcMb3NzMy8zcxMP2kXjLz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjLz1ckC9\\nzcxMP2kXjDz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjDz1ckC9zcxMP6xcMT3NzMy8AACAP2bm\\nYSMAAAAAzcxMP6xcMT3NzMy8zcxMP0qwST2qQA48AACAP2bmYSMAAAAAzcxMP0qwST2qQA48\\nzcxMP5WkAz3K4hw9AACAP2bmYSMAAAAAzcxMP5WkAz3K4hw9zcxMP2bmYSPNzEw9AACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAA\\nAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAli9qPjF5\\nqr6VL2o/li9qPjF5qr6VL2o/li9qPjF5qr6VL2o/lS9qPqzTV78mN/k+lS9qPqzTV78mN/k+\\nlS9qPqzTV78mN/k+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+lS9qPk0x\\nIL/76D6/lS9qPk0xIL/76D6/lS9qPk0xIL/76D6/lS9qPgAAAAAkN3m/lS9qPgAAAAAkN3m/\\nlS9qPgAAAAAkN3m/lC9qPksxID/56D6/lC9qPksxID/56D6/lC9qPksxID/56D6/li9qPuRt\\ndT9tGi2+li9qPuRtdT9tGi2+li9qPuRtdT9tGi2+lS9qPqzTVz8mN/k+lS9qPqzTVz8mN/k+\\nlS9qPqzTVz8mN/k+li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/v74+P7++\\nPj+/vj4/AACAP87MTD8chi+8ux/xPM7MTD+WON68o0yAPM7MTD9Ps/y8Szuyu87MTD9A8KS8\\n6JDEvM7MTD8AAAAApEwAvc7MTD9A8KQ86JDEvM7MTD9Ps/w8Szuyu87MTD+WON48o0yAPM7M\\nTD8chi88ux/xPN7dXT8chi+8ux/xPN7dXT+WON68o0yAPN7dXT9Ps/y8Szuyu97dXT9A8KS8\\n6JDEvN7dXT8AAAAApEwAvd7dXT9A8KQ86JDEvN7dXT9Ps/w8Szuyu97dXT+WON48o0yAPN7d\\nXT8chi88ux/xPAAAAADNzEw/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAADNzEw/\\nAAAAAJWkAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAADNzEw/AAAAAEqwST3NzEw/qkAOPKxc\\nMT3NzEw/zczMvAAAAADNzEw/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAADNzEw/\\nAAAAAGkXjDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAADNzEw/AAAAAGkXjLzNzEw/9XJAvaxc\\nMb3NzEw/zczMvAAAAADNzEw/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAADNzEw/\\nAAAAAEqwSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAADNzEw/AAAAAJWkA73NzEw/yuIcPWbm\\nYaPNzEw/zcxMPQAAAAAAAIA/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAAAAAIA/\\nAAAAAJWkAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAAAAAIA/AAAAAEqwST3NzEw/qkAOPKxc\\nMT3NzEw/zczMvAAAAAAAAIA/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAAAAAIA/\\nAAAAAGkXjDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAAAAAIA/AAAAAGkXjLzNzEw/9XJAvaxc\\nMb3NzEw/zczMvAAAAAAAAIA/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAAAAAIA/\\nAAAAAEqwSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAAAAAIA/AAAAAJWkA73NzEw/yuIcPWbm\\nYaPNzEw/zcxMPQAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAA\\nAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAIAAAIA/\\nAAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAA\\nAIAAAIA/AAAAADF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qP6zTVz+VL2o+\\nJjf5PqzTVz+VL2o+Jjf5PqzTVz+VL2o+Jjf5PuRtdT+WL2o+bRotvuRtdT+WL2o+bRotvuRt\\ndT+WL2o+bRotvk0xID+VL2o+++g+v00xID+VL2o+++g+v00xID+VL2o+++g+vwAAAACVL2o+\\nJDd5vwAAAACVL2o+JDd5vwAAAACVL2o+JDd5v0sxIL+UL2o++eg+v0sxIL+UL2o++eg+v0sx\\nIL+UL2o++eg+v+Rtdb+WL2o+bRotvuRtdb+WL2o+bRotvuRtdb+WL2o+bRotvqzTV7+VL2o+\\nJjf5PqzTV7+VL2o+Jjf5PqzTV7+VL2o+Jjf5PjF5qr6WL2o+lS9qPzF5qr6WL2o+lS9qPzF5\\nqr6WL2o+lS9qP7++Pj+/vj4/v74+PwAAgD8chi88zsxMP7sf8TyWON48zsxMP6NMgDxPs/w8\\nzsxMP0s7srtA8KQ8zsxMP+iQxLwAAAAAzsxMP6RMAL1A8KS8zsxMP+iQxLxPs/y8zsxMP0s7\\nsruWON68zsxMP6NMgDwchi+8zsxMP7sf8Twchi883t1dP7sf8TyWON483t1dP6NMgDxPs/w8\\n3t1dP0s7srtA8KQ83t1dP+iQxLwAAAAA3t1dP6RMAL1A8KS83t1dP+iQxLxPs/y83t1dP0s7\\nsruWON683t1dP6NMgDwchi+83t1dP7sf8TwAAAAAAAAAAM3MTD8AAAAAzcxMvc3MTD+VpAM9\\nyuIcvc3MTD8AAAAAAAAAAM3MTD+VpAM9yuIcvc3MTD9KsEk9qkAOvM3MTD8AAAAAAAAAAM3M\\nTD9KsEk9qkAOvM3MTD+sXDE9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDE9zczMPM3MTD9pF4w8\\n9XJAPc3MTD8AAAAAAAAAAM3MTD9pF4w89XJAPc3MTD9pF4y89XJAPc3MTD8AAAAAAAAAAM3M\\nTD9pF4y89XJAPc3MTD+sXDG9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDG9zczMPM3MTD9KsEm9\\nqkAOvM3MTD8AAAAAAAAAAM3MTD9KsEm9qkAOvM3MTD+VpAO9yuIcvc3MTD8AAAAAAAAAAM3M\\nTD+VpAO9yuIcvc3MTD9m5mGjzcxMvc3MTD8AAAAAZuZhIwAAgD8AAAAAzcxMvc3MTD+VpAM9\\nyuIcvc3MTD8AAAAAZuZhIwAAgD+VpAM9yuIcvc3MTD9KsEk9qkAOvM3MTD8AAAAAZuZhIwAA\\ngD9KsEk9qkAOvM3MTD+sXDE9zczMPM3MTD8AAAAAZuZhIwAAgD+sXDE9zczMPM3MTD9pF4w8\\n9XJAPc3MTD8AAAAAZuZhIwAAgD9pF4w89XJAPc3MTD9pF4y89XJAPc3MTD8AAAAAZuZhIwAA\\ngD9pF4y89XJAPc3MTD+sXDG9zczMPM3MTD8AAAAAZuZhIwAAgD+sXDG9zczMPM3MTD9KsEm9\\nqkAOvM3MTD8AAAAAZuZhIwAAgD9KsEm9qkAOvM3MTD+VpAO9yuIcvc3MTD8AAAAAZuZhIwAA\\ngD+VpAO9yuIcvc3MTD9m5mGjzcxMvc3MTD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8xeao+lS9qv5Yvaj4xeao+lS9qv5Yvaj4xeao+\\nlS9qv5Yvaj6s01c/Jjf5vpUvaj6s01c/Jjf5vpUvaj6s01c/Jjf5vpUvaj7kbXU/bRotPpYv\\naj7kbXU/bRotPpYvaj7kbXU/bRotPpYvaj5NMSA/++g+P5Uvaj5NMSA/++g+P5Uvaj5NMSA/\\n++g+P5Uvaj4AAAAAJDd5P5Uvaj4AAAAAJDd5P5Uvaj4AAAAAJDd5P5Uvaj5NMSC/++g+P5Yv\\naj5NMSC/++g+P5Yvaj5NMSC/++g+P5Yvaj7kbXW/bRotPpYvaj7kbXW/bRotPpYvaj7kbXW/\\nbRotPpYvaj6s01e/Jjf5vpUvaj6s01e/Jjf5vpUvaj6s01e/Jjf5vpUvaj4xeaq+lS9qv5Yv\\naj4xeaq+lS9qv5Yvaj4xeaq+lS9qv5Yvaj6/vj4/v74+P7++Pj8AAIA/HIYvPLsf8bzOzEw/\\nljjePKNMgLzOzEw/T7P8PEs7sjvOzEw/QPCkPOiQxDzOzEw/AAAAAKRMAD3OzEw/QPCkvOiQ\\nxDzOzEw/T7P8vEs7sjvOzEw/ljjevKNMgLzOzEw/HIYvvLsf8bzOzEw/HIYvPLsf8bze3V0/\\nljjePKNMgLze3V0/T7P8PEs7sjve3V0/QPCkPOiQxDze3V0/AAAAAKRMAD3e3V0/QPCkvOiQ\\nxDze3V0/T7P8vEs7sjve3V0/ljjevKNMgLze3V0/HIYvvLsf8bze3V0/zcxMvwAAAAAAAAAA\\nzcxMvwAAAADNzEw9zcxMv5WkAz3K4hw9zcxMvwAAAAAAAAAAzcxMv5WkAz3K4hw9zcxMv0qw\\nST2qQA48zcxMvwAAAAAAAAAAzcxMv0qwST2qQA48zcxMv6xcMT3NzMy8zcxMvwAAAAAAAAAA\\nzcxMv6xcMT3NzMy8zcxMv2kXjDz1ckC9zcxMvwAAAAAAAAAAzcxMv2kXjDz1ckC9zcxMv2kX\\njLz1ckC9zcxMvwAAAAAAAAAAzcxMv2kXjLz1ckC9zcxMv6xcMb3NzMy8zcxMvwAAAAAAAAAA\\nzcxMv6xcMb3NzMy8zcxMv0qwSb2qQA48zcxMvwAAAAAAAAAAzcxMv0qwSb2qQA48zcxMv5Wk\\nA73K4hw9zcxMvwAAAAAAAAAAzcxMv5WkA73K4hw9zcxMv2bmYaPNzEw9AACAv2bmYSMAAAAA\\nzcxMvwAAAADNzEw9zcxMv5WkAz3K4hw9AACAv2bmYSMAAAAAzcxMv5WkAz3K4hw9zcxMv0qw\\nST2qQA48AACAv2bmYSMAAAAAzcxMv0qwST2qQA48zcxMv6xcMT3NzMy8AACAv2bmYSMAAAAA\\nzcxMv6xcMT3NzMy8zcxMv2kXjDz1ckC9AACAv2bmYSMAAAAAzcxMv2kXjDz1ckC9zcxMv2kX\\njLz1ckC9AACAv2bmYSMAAAAAzcxMv2kXjLz1ckC9zcxMv6xcMb3NzMy8AACAv2bmYSMAAAAA\\nzcxMv6xcMb3NzMy8zcxMv0qwSb2qQA48AACAv2bmYSMAAAAAzcxMv0qwSb2qQA48zcxMv5Wk\\nA73K4hw9AACAv2bmYSMAAAAAzcxMv5WkA73K4hw9zcxMv2bmYaPNzEw9AACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAA\\nAAAAAACAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAAAA\\nAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAli9qvjF5qj6VL2o/\\nli9qvjF5qj6VL2o/li9qvjF5qj6VL2o/lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzT\\nVz8mN/k+li9qvuRtdT9tGi2+li9qvuRtdT9tGi2+li9qvuRtdT9tGi2+lS9qvk0xID/76D6/\\nlS9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAA\\nAIAkN3m/lC9qvksxIL/56D6/lC9qvksxIL/56D6/lC9qvksxIL/56D6/li9qvuRtdb9tGi2+\\nli9qvuRtdb9tGi2+li9qvuRtdb9tGi2+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvqzT\\nV78mN/k+li9qvjF5qr6VL2o/li9qvjF5qr6VL2o/li9qvjF5qr6VL2o/v74+P7++Pj+/vj4/\\nAACAP87MTL8chi88ux/xPM7MTL+WON48o0yAPM7MTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7M\\nTL8AAAAApEwAvc7MTL9A8KS86JDEvM7MTL9Ps/y8Szuyu87MTL+WON68o0yAPM7MTL8chi+8\\nux/xPN7dXb8chi88ux/xPN7dXb+WON48o0yAPN7dXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7d\\nXb8AAAAApEwAvd7dXb9A8KS86JDEvN7dXb9Ps/y8Szuyu97dXb+WON68o0yAPN7dXb8chi+8\\nux/xPAAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAv74+P7++Pj+/vj4/AACAPwAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAAAAAAAAAzcxMvwAAAADNzEw9zcxMv5WkAz3K4hw9\\nzcxMvwAAAAAAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAAAAAAAAzcxMv0qw\\nST2qQA48zcxMv6xcMT3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMT3NzMy8zcxMv2kXjDz1ckC9\\nzcxMvwAAAAAAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAAAAAAAAzcxMv2kX\\njLz1ckC9zcxMv6xcMb3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMb3NzMy8zcxMv0qwSb2qQA48\\nzcxMvwAAAAAAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAAAAAAAAzcxMv5Wk\\nA73K4hw9zcxMv2bmYaPNzEw9zcxMvwAAAABm5mEjAACAvwAAAADNzEw9zcxMv5WkAz3K4hw9\\nzcxMvwAAAABm5mEjAACAv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAABm5mEjAACAv0qw\\nST2qQA48zcxMv6xcMT3NzMy8zcxMvwAAAABm5mEjAACAv6xcMT3NzMy8zcxMv2kXjDz1ckC9\\nzcxMvwAAAABm5mEjAACAv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAABm5mEjAACAv2kX\\njLz1ckC9zcxMv6xcMb3NzMy8zcxMvwAAAABm5mEjAACAv6xcMb3NzMy8zcxMv0qwSb2qQA48\\nzcxMvwAAAABm5mEjAACAv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAABm5mEjAACAv5Wk\\nA73K4hw9zcxMv2bmYaPNzEw9zcxMvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvzF5qj6VL2o/li9qvjF5qj6VL2o/li9qvjF5qj6VL2o/\\nli9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvuRtdT9tGi2+li9qvuRt\\ndT9tGi2+li9qvuRtdT9tGi2+li9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvk0xID/76D6/\\nlS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvk0xIL/76D6/li9qvk0x\\nIL/76D6/li9qvk0xIL/76D6/li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+\\nli9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvjF5qr6VL2o/li9qvjF5\\nqr6VL2o/li9qvjF5qr6VL2o/li9qvr++Pj+/vj4/v74+PwAAgD8chi88ux/xPM7MTL+WON48\\no0yAPM7MTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7MTL8AAAAApEwAvc7MTL9A8KS86JDEvM7M\\nTL9Ps/y8Szuyu87MTL+WON68o0yAPM7MTL8chi+8ux/xPM7MTL8chi88ux/xPN7dXb+WON48\\no0yAPN7dXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7dXb8AAAAApEwAvd7dXb9A8KS86JDEvN7d\\nXb9Ps/y8Szuyu97dXb+WON68o0yAPN7dXb8chi+8ux/xPN7dXb8AAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAACamZk/AAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAAAAAAAJqZmT+amZm/AAAAAAAAAAAAAAAA\\nmpmZvwAAAAAAAAAAAAAAAJqZmb8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAA\\nAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/mpmZvwAAAAAAAAAAAAAAAJqZmb8AAAAAAAAAAAAA\\nAACamZm/AAAAAAAAAQAAAAAAmpmZv2ZmRsAzMzO/AACAv83MjL8AAAC/AACAP5qZOUCamZm+\\nzcxMP2ZmZj8AAAC/AACAv83MjL8AAAC/zcxMv2ZmZr8AAAA/mpmZP2ZmRkAzMzM/AACAP5qZ\\nOUCamZm+zcxMP2ZmZj8AAAC/AACAP5qZOUCamZm+mpmZP2ZmRkAzMzM/AACAP83MjD8AAAA/\\nmpmZv2ZmRsAzMzO/AACAv5qZOcCamZk+zcxMv2ZmZr8AAAA/AACAv83MjL8AAAC/mpmZv2Zm\\nRsAzMzO/zcxMP2ZmZj8AAAC/AACAP83MjD8AAAA/AACAv5qZOcCamZk+AACAv5qZOcCamZk+\\nAACAP83MjD8AAAA/mpmZP2ZmRkAzMzM/zcxMv2ZmZr8AAAA/f3T8vaM14z18dHy/f3T8vaM1\\n4z18dHy/f3T8vaM14z18dHy/f3T8vaM14z18dHy/JYBkv0cx4j6Ypbg9JYBkv0cx4j6Ypbg9\\nJYBkv0cx4j6Ypbg9JYBkv0cx4j6Ypbg9/Pp6P9Lno73SZDi+/Pp6P9Lno73SZDi+/Pp6P9Ln\\no73SZDi+/Pp6P9Lno73SZDi+/Pp6v9Lnoz3SZDg+/Pp6v9Lnoz3SZDg+/Pp6v9Lnoz3SZDg+\\n/Pp6v9Lnoz3SZDg+JYBkP0cx4r6Ypbi9JYBkP0cx4r6Ypbi9JYBkP0cx4r6Ypbi9JYBkP0cx\\n4r6Ypbi9f3T8PaM14718dHw/f3T8PaM14718dHw/f3T8PaM14718dHw/f3T8PaM14718dHw/\\n/wAAsv8AALL/AACy/wAAsv8AALL//wCy//8Asv8AALL/AACy/wAAsv//ALL//wCy/wAAsv//\\nALL//wCy/wAAsv8AALL/AACy//8Asv//ALL//wCy//8Asv//ALL//wCyzszMvcTMzL0AAAC/\\n0MzMPQAAgD/MzMw9AACAPwAAAEDMzMw9AACAvwAAAMDMzMy9zszMvQAAgL/OzMy9zszMPcjM\\nzD0AAAA/AAAAAQAAAAAAAAEAAAAAAAABAAAA/wAAAAAAAP8AAAAAAAD/AAAAAQAAAD8AAAAA\\nAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAPwAAAL8AAAAAAAAAAAAAAAAAAAC/AAAAAAAA\\nAAAAAAAAAAAAv83MTD8AAAAAAAAAAM3MTD8AAAAAzcxMPc3MTD+VpAO9yuIcPc3MTD8AAAAA\\nAAAAAM3MTD+VpAO9yuIcPc3MTD9KsEm9qkAOPM3MTD8AAAAAAAAAAM3MTD9KsEm9qkAOPM3M\\nTD+sXDG9zczMvM3MTD8AAAAAAAAAAM3MTD+sXDG9zczMvM3MTD9pF4y89XJAvc3MTD8AAAAA\\nAAAAAM3MTD9pF4y89XJAvc3MTD9pF4w89XJAvc3MTD8AAAAAAAAAAM3MTD9pF4w89XJAvc3M\\nTD+sXDE9zczMvM3MTD8AAAAAAAAAAM3MTD+sXDE9zczMvM3MTD9KsEk9qkAOPM3MTD8AAAAA\\nAAAAAM3MTD9KsEk9qkAOPM3MTD+VpAM9yuIcPc3MTD8AAAAAAAAAAM3MTD+VpAM9yuIcPc3M\\nTD9m5mEjzcxMPQAAgD9m5mEjAAAAAM3MTD8AAAAAzcxMPc3MTD+VpAO9yuIcPQAAgD9m5mEj\\nAAAAAM3MTD+VpAO9yuIcPc3MTD9KsEm9qkAOPAAAgD9m5mEjAAAAAM3MTD9KsEm9qkAOPM3M\\nTD+sXDG9zczMvAAAgD9m5mEjAAAAAM3MTD+sXDG9zczMvM3MTD9pF4y89XJAvQAAgD9m5mEj\\nAAAAAM3MTD9pF4y89XJAvc3MTD9pF4w89XJAvQAAgD9m5mEjAAAAAM3MTD9pF4w89XJAvc3M\\nTD+sXDE9zczMvAAAgD9m5mEjAAAAAM3MTD+sXDE9zczMvM3MTD9KsEk9qkAOPAAAgD9m5mEj\\nAAAAAM3MTD9KsEk9qkAOPM3MTD+VpAM9yuIcPQAAgD9m5mEjAAAAAM3MTD+VpAM9yuIcPc3M\\nTD9m5mEjzcxMPQAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAJYvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Uvaj6s01e/\\nJjf5PpUvaj6s01e/Jjf5PpUvaj6s01e/Jjf5PpYvaj7kbXW/bRotvpYvaj7kbXW/bRotvpYv\\naj7kbXW/bRotvpUvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj4AAAAA\\nJDd5v5Uvaj4AAAAAJDd5v5Uvaj4AAAAAJDd5v5Qvaj5LMSA/+eg+v5Qvaj5LMSA/+eg+v5Qv\\naj5LMSA/+eg+v5Yvaj7kbXU/bRotvpYvaj7kbXU/bRotvpYvaj7kbXU/bRotvpUvaj6s01c/\\nJjf5PpUvaj6s01c/Jjf5PpUvaj6s01c/Jjf5PpYvaj4xeao+lS9qP5Yvaj4xeao+lS9qP5Yv\\naj4xeao+lS9qP7++Pj+/vj4/v74+PwAAgD/OzEw/HIYvvLsf8TzOzEw/ljjevKNMgDzOzEw/\\nT7P8vEs7srvOzEw/QPCkvOiQxLzOzEw/AAAAAKRMAL3OzEw/QPCkPOiQxLzOzEw/T7P8PEs7\\nsrvOzEw/ljjePKNMgDzOzEw/HIYvPLsf8Tze3V0/HIYvvLsf8Tze3V0/ljjevKNMgDze3V0/\\nT7P8vEs7srve3V0/QPCkvOiQxLze3V0/AAAAAKRMAL3e3V0/QPCkPOiQxLze3V0/T7P8PEs7\\nsrve3V0/ljjePKNMgDze3V0/HIYvPLsf8TwAAAAAzcxMPwAAAAAAAAAAzcxMP83MTD2VpAM9\\nzcxMP8riHD0AAAAAzcxMPwAAAACVpAM9zcxMP8riHD1KsEk9zcxMP6pADjwAAAAAzcxMPwAA\\nAABKsEk9zcxMP6pADjysXDE9zcxMP83MzLwAAAAAzcxMPwAAAACsXDE9zcxMP83MzLxpF4w8\\nzcxMP/VyQL0AAAAAzcxMPwAAAABpF4w8zcxMP/VyQL1pF4y8zcxMP/VyQL0AAAAAzcxMPwAA\\n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\\nQD3NzEw/AAAAAGbmYSMAAIA/aReMvPVyQD3NzEw/rFwxvc3MzDzNzEw/AAAAAGbmYSMAAIA/\\nrFwxvc3MzDzNzEw/SrBJvapADrzNzEw/AAAAAGbmYSMAAIA/SrBJvapADrzNzEw/laQDvcri\\nHL3NzEw/AAAAAGbmYSMAAIA/laQDvcriHL3NzEw/ZuZho83MTL3NzEw/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAA\\nAIAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAA\\nAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/MXmqPpUvar+WL2o+\\nMXmqPpUvar+WL2o+MXmqPpUvar+WL2o+rNNXPyY3+b6VL2o+rNNXPyY3+b6VL2o+rNNXPyY3\\n+b6VL2o+5G11P20aLT6WL2o+5G11P20aLT6WL2o+5G11P20aLT6WL2o+TTEgP/voPj+VL2o+\\nTTEgP/voPj+VL2o+TTEgP/voPj+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3\\neT+VL2o+TTEgv/voPj+WL2o+TTEgv/voPj+WL2o+TTEgv/voPj+WL2o+5G11v20aLT6WL2o+\\n5G11v20aLT6WL2o+5G11v20aLT6WL2o+rNNXvyY3+b6VL2o+rNNXvyY3+b6VL2o+rNNXvyY3\\n+b6VL2o+MXmqvpUvar+WL2o+MXmqvpUvar+WL2o+MXmqvpUvar+WL2o+v74+P7++Pj+/vj4/\\nAACAPxyGLzy7H/G8zsxMP5Y43jyjTIC8zsxMP0+z/DxLO7I7zsxMP0DwpDzokMQ8zsxMPwAA\\nAACkTAA9zsxMP0DwpLzokMQ8zsxMP0+z/LxLO7I7zsxMP5Y43ryjTIC8zsxMPxyGL7y7H/G8\\nzsxMPxyGLzy7H/G83t1dP5Y43jyjTIC83t1dP0+z/DxLO7I73t1dP0DwpDzokMQ83t1dPwAA\\nAACkTAA93t1dP0DwpLzokMQ83t1dP0+z/LxLO7I73t1dP5Y43ryjTIC83t1dPxyGL7y7H/G8\\n3t1dP83MTL8AAAAAAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3M\\nTL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9\\nzczMvM3MTL8AAAAAAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3M\\nTL9pF4w89XJAvc3MTL9pF4y89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9\\nzczMvM3MTL8AAAAAAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3M\\nTL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGj\\nzcxMPQAAgL9m5mEjAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPQAAgL9m5mEjAAAAAM3M\\nTL+VpAM9yuIcPc3MTL9KsEk9qkAOPAAAgL9m5mEjAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9\\nzczMvAAAgL9m5mEjAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvQAAgL9m5mEjAAAAAM3M\\nTL9pF4w89XJAvc3MTL9pF4y89XJAvQAAgL9m5mEjAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9\\nzczMvAAAgL9m5mEjAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPAAAgL9m5mEjAAAAAM3M\\nTL9KsEm9qkAOPM3MTL+VpAO9yuIcPQAAgL9m5mEjAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGj\\nzcxMPQAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAA\\ngL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAJYvar4xeao+lS9qP5Yvar4xeao+lS9qP5Yvar4xeao+lS9qP5Uvar6s01c/Jjf5PpUv\\nar6s01c/Jjf5PpUvar6s01c/Jjf5PpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar7kbXU/\\nbRotvpUvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar4AAACAJDd5v5Uv\\nar4AAACAJDd5v5Uvar4AAACAJDd5v5Qvar5LMSC/+eg+v5Qvar5LMSC/+eg+v5Qvar5LMSC/\\n+eg+v5Yvar7kbXW/bRotvpYvar7kbXW/bRotvpYvar7kbXW/bRotvpUvar6s01e/Jjf5PpUv\\nar6s01e/Jjf5PpUvar6s01e/Jjf5PpYvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+\\nlS9qP7++Pj+/vj4/v74+PwAAgD/OzEy/HIYvPLsf8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7\\nsrvOzEy/QPCkPOiQxLzOzEy/AAAAAKRMAL3OzEy/QPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/\\nljjevKNMgDzOzEy/HIYvvLsf8Tze3V2/HIYvPLsf8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7\\nsrve3V2/QPCkPOiQxLze3V2/AAAAAKRMAL3e3V2/QPCkvOiQxLze3V2/T7P8vEs7srve3V2/\\nljjevKNMgDze3V2/HIYvvLsf8TwAAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL++Pj+/vj4/v74+PwAAgD8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAAAAAAAAAM3MTL8AAAAA\\nzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3M\\nTL8AAAAAAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDE9\\nzczMvM3MTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4w89XJAvc3MTL9pF4y89XJAvc3M\\nTL8AAAAAAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDG9\\nzczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3M\\nTL8AAAAAAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAZuZhIwAAgL8AAAAA\\nzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAZuZhIwAAgL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3M\\nTL8AAAAAZuZhIwAAgL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDE9\\nzczMvM3MTL9pF4w89XJAvc3MTL8AAAAAZuZhIwAAgL9pF4w89XJAvc3MTL9pF4y89XJAvc3M\\nTL8AAAAAZuZhIwAAgL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDG9\\nzczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAZuZhIwAAgL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3M\\nTL8AAAAAZuZhIwAAgL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACA\\nAAAAAAAAgL8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8xeao+lS9qP5Yvar4xeao+\\nlS9qP5Yvar4xeao+lS9qP5Yvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUv\\nar7kbXU/bRotvpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar5NMSA/++g+v5Uvar5NMSA/\\n++g+v5Uvar5NMSA/++g+v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uv\\nar5NMSC/++g+v5Yvar5NMSC/++g+v5Yvar5NMSC/++g+v5Yvar7kbXW/bRotvpYvar7kbXW/\\nbRotvpYvar7kbXW/bRotvpYvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUv\\nar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar6/vj4/v74+P7++Pj8AAIA/\\nHIYvPLsf8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7srvOzEy/QPCkPOiQxLzOzEy/AAAAAKRM\\nAL3OzEy/QPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/ljjevKNMgDzOzEy/HIYvvLsf8TzOzEy/\\nHIYvPLsf8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7srve3V2/QPCkPOiQxLze3V2/AAAAAKRM\\nAL3e3V2/QPCkvOiQxLze3V2/T7P8vEs7srve3V2/ljjevKNMgDze3V2/HIYvvLsf8Tze3V2/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAAAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/\\nmpmZvwAAAAAAAAAAAAAAAJqZmb8AAAAAAAAAAAAAAACamZm/AAAAAQAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/AAAAAAAAAAAAAAAAmpmZP5qZmb8AAAAAAAAAAAAA\\nAACamZm/AAAAAAAAAAAAAAAAmpmZvwAAAAAAAAEAAAAAAJ0FpD+lyhw/Y8t9v4UbrD9ZYeA+\\nWgCAPxAYDj99ebK/rl5dP33Y+z6CLJy/tDaQv4UbrD9ZYeA+WgCAP33Y+76CLJw/tDaQP50F\\n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\\nLb6WL2o+5G11v20aLb6WL2o+5G11v20aLb6VL2o+TTEgv/voPr+VL2o+TTEgv/voPr+VL2o+\\nTTEgv/voPr+VL2o+AAAAACQ3eb+VL2o+AAAAACQ3eb+VL2o+AAAAACQ3eb+UL2o+SzEgP/no\\nPr+UL2o+SzEgP/noPr+UL2o+SzEgP/noPr+WL2o+5G11P20aLb6WL2o+5G11P20aLb6WL2o+\\n5G11P20aLb6VL2o+rNNXPyY3+T6VL2o+rNNXPyY3+T6VL2o+rNNXPyY3+T6WL2o+MXmqPpUv\\naj+WL2o+MXmqPpUvaj+WL2o+MXmqPpUvaj+/vj4/v74+P7++Pj8AAIA/zsxMPxyGL7y7H/E8\\nzsxMP5Y43ryjTIA8zsxMP0+z/LxLO7K7zsxMP0DwpLzokMS8zsxMPwAAAACkTAC9zsxMP0Dw\\npDzokMS8zsxMP0+z/DxLO7K7zsxMP5Y43jyjTIA8zsxMPxyGLzy7H/E83t1dPxyGL7y7H/E8\\n3t1dP5Y43ryjTIA83t1dP0+z/LxLO7K73t1dP0DwpLzokMS83t1dPwAAAACkTAC93t1dP0Dw\\npDzokMS83t1dP0+z/DxLO7K73t1dP5Y43jyjTIA83t1dPxyGLzy7H/E8AAAAAM3MTD8AAAAA\\nAAAAAM3MTD/NzEw9laQDPc3MTD/K4hw9AAAAAM3MTD8AAAAAlaQDPc3MTD/K4hw9SrBJPc3M\\nTD+qQA48AAAAAM3MTD8AAAAASrBJPc3MTD+qQA48rFwxPc3MTD/NzMy8AAAAAM3MTD8AAAAA\\nrFwxPc3MTD/NzMy8aReMPM3MTD/1ckC9AAAAAM3MTD8AAAAAaReMPM3MTD/1ckC9aReMvM3M\\nTD/1ckC9AAAAAM3MTD8AAAAAaReMvM3MTD/1ckC9rFwxvc3MTD/NzMy8AAAAAM3MTD8AAAAA\\nrFwxvc3MTD/NzMy8SrBJvc3MTD+qQA48AAAAAM3MTD8AAAAASrBJvc3MTD+qQA48laQDvc3M\\nTD/K4hw9AAAAAM3MTD8AAAAAlaQDvc3MTD/K4hw9ZuZho83MTD/NzEw9AAAAAAAAgD8AAAAA\\nAAAAAM3MTD/NzEw9laQDPc3MTD/K4hw9AAAAAAAAgD8AAAAAlaQDPc3MTD/K4hw9SrBJPc3M\\nTD+qQA48AAAAAAAAgD8AAAAASrBJPc3MTD+qQA48rFwxPc3MTD/NzMy8AAAAAAAAgD8AAAAA\\nrFwxPc3MTD/NzMy8aReMPM3MTD/1ckC9AAAAAAAAgD8AAAAAaReMPM3MTD/1ckC9aReMvM3M\\nTD/1ckC9AAAAAAAAgD8AAAAAaReMvM3MTD/1ckC9rFwxvc3MTD/NzMy8AAAAAAAAgD8AAAAA\\nrFwxvc3MTD/NzMy8SrBJvc3MTD+qQA48AAAAAAAAgD8AAAAASrBJvc3MTD+qQA48laQDvc3M\\nTD/K4hw9AAAAAAAAgD8AAAAAlaQDvc3MTD/K4hw9ZuZho83MTD/NzEw9AAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAMXmqPpYvaj6VL2o/\\nMXmqPpYvaj6VL2o/MXmqPpYvaj6VL2o/rNNXP5Uvaj4mN/k+rNNXP5Uvaj4mN/k+rNNXP5Uv\\naj4mN/k+5G11P5Yvaj5tGi2+5G11P5Yvaj5tGi2+5G11P5Yvaj5tGi2+TTEgP5Uvaj776D6/\\nTTEgP5Uvaj776D6/TTEgP5Uvaj776D6/AAAAAJUvaj4kN3m/AAAAAJUvaj4kN3m/AAAAAJUv\\naj4kN3m/SzEgv5Qvaj756D6/SzEgv5Qvaj756D6/SzEgv5Qvaj756D6/5G11v5Yvaj5tGi2+\\n5G11v5Yvaj5tGi2+5G11v5Yvaj5tGi2+rNNXv5Uvaj4mN/k+rNNXv5Uvaj4mN/k+rNNXv5Uv\\naj4mN/k+MXmqvpYvaj6VL2o/MXmqvpYvaj6VL2o/MXmqvpYvaj6VL2o/v74+P7++Pj+/vj4/\\nAACAPxyGLzzOzEw/ux/xPJY43jzOzEw/o0yAPE+z/DzOzEw/Szuyu0DwpDzOzEw/6JDEvAAA\\nAADOzEw/pEwAvUDwpLzOzEw/6JDEvE+z/LzOzEw/Szuyu5Y43rzOzEw/o0yAPByGL7zOzEw/\\nux/xPByGLzze3V0/ux/xPJY43jze3V0/o0yAPE+z/Dze3V0/Szuyu0DwpDze3V0/6JDEvAAA\\nAADe3V0/pEwAvUDwpLze3V0/6JDEvE+z/Lze3V0/Szuyu5Y43rze3V0/o0yAPByGL7ze3V0/\\nux/xPAAAAAAAAAAAzcxMPwAAAADNzEy9zcxMP5WkAz3K4hy9zcxMPwAAAAAAAAAAzcxMP5Wk\\nAz3K4hy9zcxMP0qwST2qQA68zcxMPwAAAAAAAAAAzcxMP0qwST2qQA68zcxMP6xcMT3NzMw8\\nzcxMPwAAAAAAAAAAzcxMP6xcMT3NzMw8zcxMP2kXjDz1ckA9zcxMPwAAAAAAAAAAzcxMP2kX\\njDz1ckA9zcxMP2kXjLz1ckA9zcxMPwAAAAAAAAAAzcxMP2kXjLz1ckA9zcxMP6xcMb3NzMw8\\nzcxMPwAAAAAAAAAAzcxMP6xcMb3NzMw8zcxMP0qwSb2qQA68zcxMPwAAAAAAAAAAzcxMP0qw\\nSb2qQA68zcxMP5WkA73K4hy9zcxMPwAAAAAAAAAAzcxMP5WkA73K4hy9zcxMP2bmYaPNzEy9\\nzcxMPwAAAABm5mEjAACAPwAAAADNzEy9zcxMP5WkAz3K4hy9zcxMPwAAAABm5mEjAACAP5Wk\\nAz3K4hy9zcxMP0qwST2qQA68zcxMPwAAAABm5mEjAACAP0qwST2qQA68zcxMP6xcMT3NzMw8\\nzcxMPwAAAABm5mEjAACAP6xcMT3NzMw8zcxMP2kXjDz1ckA9zcxMPwAAAABm5mEjAACAP2kX\\njDz1ckA9zcxMP2kXjLz1ckA9zcxMPwAAAABm5mEjAACAP2kXjLz1ckA9zcxMP6xcMb3NzMw8\\nzcxMPwAAAABm5mEjAACAP6xcMb3NzMw8zcxMP0qwSb2qQA68zcxMPwAAAABm5mEjAACAP0qw\\nSb2qQA68zcxMP5WkA73K4hy9zcxMPwAAAABm5mEjAACAP5WkA73K4hy9zcxMP2bmYaPNzEy9\\nzcxMPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAACAAACAPwAA\\nAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAIAAAAAAAACAPwAA\\nAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAA\\nAACAPzF5qj6VL2q/li9qPjF5qj6VL2q/li9qPjF5qj6VL2q/li9qPqzTVz8mN/m+lS9qPqzT\\nVz8mN/m+lS9qPqzTVz8mN/m+lS9qPuRtdT9tGi0+li9qPuRtdT9tGi0+li9qPuRtdT9tGi0+\\nli9qPk0xID/76D4/lS9qPk0xID/76D4/lS9qPk0xID/76D4/lS9qPgAAAAAkN3k/lS9qPgAA\\nAAAkN3k/lS9qPgAAAAAkN3k/lS9qPk0xIL/76D4/li9qPk0xIL/76D4/li9qPk0xIL/76D4/\\nli9qPuRtdb9tGi0+li9qPuRtdb9tGi0+li9qPuRtdb9tGi0+li9qPqzTV78mN/m+lS9qPqzT\\nV78mN/m+lS9qPqzTV78mN/m+lS9qPjF5qr6VL2q/li9qPjF5qr6VL2q/li9qPjF5qr6VL2q/\\nli9qPr++Pj+/vj4/v74+PwAAgD8chi88ux/xvM7MTD+WON48o0yAvM7MTD9Ps/w8SzuyO87M\\nTD9A8KQ86JDEPM7MTD8AAAAApEwAPc7MTD9A8KS86JDEPM7MTD9Ps/y8SzuyO87MTD+WON68\\no0yAvM7MTD8chi+8ux/xvM7MTD8chi88ux/xvN7dXT+WON48o0yAvN7dXT9Ps/w8SzuyO97d\\nXT9A8KQ86JDEPN7dXT8AAAAApEwAPd7dXT9A8KS86JDEPN7dXT9Ps/y8SzuyO97dXT+WON68\\no0yAvN7dXT8chi+8ux/xvN7dXT/NzEy/AAAAAAAAAADNzEy/AAAAAM3MTD3NzEy/laQDPcri\\nHD3NzEy/AAAAAAAAAADNzEy/laQDPcriHD3NzEy/SrBJPapADjzNzEy/AAAAAAAAAADNzEy/\\nSrBJPapADjzNzEy/rFwxPc3MzLzNzEy/AAAAAAAAAADNzEy/rFwxPc3MzLzNzEy/aReMPPVy\\nQL3NzEy/AAAAAAAAAADNzEy/aReMPPVyQL3NzEy/aReMvPVyQL3NzEy/AAAAAAAAAADNzEy/\\naReMvPVyQL3NzEy/rFwxvc3MzLzNzEy/AAAAAAAAAADNzEy/rFwxvc3MzLzNzEy/SrBJvapA\\nDjzNzEy/AAAAAAAAAADNzEy/SrBJvapADjzNzEy/laQDvcriHD3NzEy/AAAAAAAAAADNzEy/\\nlaQDvcriHD3NzEy/ZuZho83MTD0AAIC/ZuZhIwAAAADNzEy/AAAAAM3MTD3NzEy/laQDPcri\\nHD0AAIC/ZuZhIwAAAADNzEy/laQDPcriHD3NzEy/SrBJPapADjwAAIC/ZuZhIwAAAADNzEy/\\nSrBJPapADjzNzEy/rFwxPc3MzLwAAIC/ZuZhIwAAAADNzEy/rFwxPc3MzLzNzEy/aReMPPVy\\nQL0AAIC/ZuZhIwAAAADNzEy/aReMPPVyQL3NzEy/aReMvPVyQL0AAIC/ZuZhIwAAAADNzEy/\\naReMvPVyQL3NzEy/rFwxvc3MzLwAAIC/ZuZhIwAAAADNzEy/rFwxvc3MzLzNzEy/SrBJvapA\\nDjwAAIC/ZuZhIwAAAADNzEy/SrBJvapADjzNzEy/laQDvcriHD0AAIC/ZuZhIwAAAADNzEy/\\nlaQDvcriHD3NzEy/ZuZho83MTD0AAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAACWL2q+MXmqPpUvaj+WL2q+MXmqPpUvaj+WL2q+MXmqPpUv\\naj+VL2q+rNNXPyY3+T6VL2q+rNNXPyY3+T6VL2q+rNNXPyY3+T6WL2q+5G11P20aLb6WL2q+\\n5G11P20aLb6WL2q+5G11P20aLb6VL2q+TTEgP/voPr+VL2q+TTEgP/voPr+VL2q+TTEgP/vo\\nPr+VL2q+AAAAgCQ3eb+VL2q+AAAAgCQ3eb+VL2q+AAAAgCQ3eb+UL2q+SzEgv/noPr+UL2q+\\nSzEgv/noPr+UL2q+SzEgv/noPr+WL2q+5G11v20aLb6WL2q+5G11v20aLb6WL2q+5G11v20a\\nLb6VL2q+rNNXvyY3+T6VL2q+rNNXvyY3+T6VL2q+rNNXvyY3+T6WL2q+MXmqvpUvaj+WL2q+\\nMXmqvpUvaj+WL2q+MXmqvpUvaj+/vj4/v74+P7++Pj8AAIA/zsxMvxyGLzy7H/E8zsxMv5Y4\\n3jyjTIA8zsxMv0+z/DxLO7K7zsxMv0DwpDzokMS8zsxMvwAAAACkTAC9zsxMv0DwpLzokMS8\\nzsxMv0+z/LxLO7K7zsxMv5Y43ryjTIA8zsxMvxyGL7y7H/E83t1dvxyGLzy7H/E83t1dv5Y4\\n3jyjTIA83t1dv0+z/DxLO7K73t1dv0DwpDzokMS83t1dvwAAAACkTAC93t1dv0DwpLzokMS8\\n3t1dv0+z/LxLO7K73t1dv5Y43ryjTIA83t1dvxyGL7y7H/E8AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/vj4/v74+P7++Pj8AAIA/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAAAAAAAAAADNzEy/AAAAAM3MTD3NzEy/laQDPcriHD3NzEy/AAAAAAAAAADNzEy/laQDPcri\\nHD3NzEy/SrBJPapADjzNzEy/AAAAAAAAAADNzEy/SrBJPapADjzNzEy/rFwxPc3MzLzNzEy/\\nAAAAAAAAAADNzEy/rFwxPc3MzLzNzEy/aReMPPVyQL3NzEy/AAAAAAAAAADNzEy/aReMPPVy\\nQL3NzEy/aReMvPVyQL3NzEy/AAAAAAAAAADNzEy/aReMvPVyQL3NzEy/rFwxvc3MzLzNzEy/\\nAAAAAAAAAADNzEy/rFwxvc3MzLzNzEy/SrBJvapADjzNzEy/AAAAAAAAAADNzEy/SrBJvapA\\nDjzNzEy/laQDvcriHD3NzEy/AAAAAAAAAADNzEy/laQDvcriHD3NzEy/ZuZho83MTD3NzEy/\\nAAAAAGbmYSMAAIC/AAAAAM3MTD3NzEy/laQDPcriHD3NzEy/AAAAAGbmYSMAAIC/laQDPcri\\nHD3NzEy/SrBJPapADjzNzEy/AAAAAGbmYSMAAIC/SrBJPapADjzNzEy/rFwxPc3MzLzNzEy/\\nAAAAAGbmYSMAAIC/rFwxPc3MzLzNzEy/aReMPPVyQL3NzEy/AAAAAGbmYSMAAIC/aReMPPVy\\nQL3NzEy/aReMvPVyQL3NzEy/AAAAAGbmYSMAAIC/aReMvPVyQL3NzEy/rFwxvc3MzLzNzEy/\\nAAAAAGbmYSMAAIC/rFwxvc3MzLzNzEy/SrBJvapADjzNzEy/AAAAAGbmYSMAAIC/SrBJvapA\\nDjzNzEy/laQDvcriHD3NzEy/AAAAAGbmYSMAAIC/laQDvcriHD3NzEy/ZuZho83MTD3NzEy/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAIAAAIC/AAAAAAAA\\nAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAA\\nAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/\\nMXmqPpUvaj+WL2q+MXmqPpUvaj+WL2q+MXmqPpUvaj+WL2q+rNNXPyY3+T6VL2q+rNNXPyY3\\n+T6VL2q+rNNXPyY3+T6VL2q+5G11P20aLb6WL2q+5G11P20aLb6WL2q+5G11P20aLb6WL2q+\\nTTEgP/voPr+VL2q+TTEgP/voPr+VL2q+TTEgP/voPr+VL2q+AAAAgCQ3eb+VL2q+AAAAgCQ3\\neb+VL2q+AAAAgCQ3eb+VL2q+TTEgv/voPr+WL2q+TTEgv/voPr+WL2q+TTEgv/voPr+WL2q+\\n5G11v20aLb6WL2q+5G11v20aLb6WL2q+5G11v20aLb6WL2q+rNNXvyY3+T6VL2q+rNNXvyY3\\n+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\\nSb2qQA48AACAP2bmYSMAAAAAzcxMP0qwSb2qQA48zcxMP6xcMb3NzMy8AACAP2bmYSMAAAAA\\nzcxMP6xcMb3NzMy8zcxMP2kXjLz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjLz1ckC9zcxMP2kX\\njDz1ckC9AACAP2bmYSMAAAAAzcxMP2kXjDz1ckC9zcxMP6xcMT3NzMy8AACAP2bmYSMAAAAA\\nzcxMP6xcMT3NzMy8zcxMP0qwST2qQA48AACAP2bmYSMAAAAAzcxMP0qwST2qQA48zcxMP5Wk\\nAz3K4hw9AACAP2bmYSMAAAAAzcxMP5WkAz3K4hw9zcxMP2bmYSPNzEw9AACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAIAAAAAA\\nAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACA\\nAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAli9qPjF5qr6VL2o/\\nli9qPjF5qr6VL2o/li9qPjF5qr6VL2o/lS9qPqzTV78mN/k+lS9qPqzTV78mN/k+lS9qPqzT\\nV78mN/k+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+li9qPuRtdb9tGi2+lS9qPk0xIL/76D6/\\nlS9qPk0xIL/76D6/lS9qPk0xIL/76D6/lS9qPgAAAAAkN3m/lS9qPgAAAAAkN3m/lS9qPgAA\\nAAAkN3m/lC9qPksxID/56D6/lC9qPksxID/56D6/lC9qPksxID/56D6/li9qPuRtdT9tGi2+\\nli9qPuRtdT9tGi2+li9qPuRtdT9tGi2+lS9qPqzTVz8mN/k+lS9qPqzTVz8mN/k+lS9qPqzT\\nVz8mN/k+li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/li9qPjF5qj6VL2o/v74+P7++Pj+/vj4/\\nAACAP87MTD8chi+8ux/xPM7MTD+WON68o0yAPM7MTD9Ps/y8Szuyu87MTD9A8KS86JDEvM7M\\nTD8AAAAApEwAvc7MTD9A8KQ86JDEvM7MTD9Ps/w8Szuyu87MTD+WON48o0yAPM7MTD8chi88\\nux/xPN7dXT8chi+8ux/xPN7dXT+WON68o0yAPN7dXT9Ps/y8Szuyu97dXT9A8KS86JDEvN7d\\nXT8AAAAApEwAvd7dXT9A8KQ86JDEvN7dXT9Ps/w8Szuyu97dXT+WON48o0yAPN7dXT8chi88\\nux/xPAAAAADNzEw/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAADNzEw/AAAAAJWk\\nAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAADNzEw/AAAAAEqwST3NzEw/qkAOPKxcMT3NzEw/\\nzczMvAAAAADNzEw/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAADNzEw/AAAAAGkX\\njDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAADNzEw/AAAAAGkXjLzNzEw/9XJAvaxcMb3NzEw/\\nzczMvAAAAADNzEw/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAADNzEw/AAAAAEqw\\nSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAADNzEw/AAAAAJWkA73NzEw/yuIcPWbmYaPNzEw/\\nzcxMPQAAAAAAAIA/AAAAAAAAAADNzEw/zcxMPZWkAz3NzEw/yuIcPQAAAAAAAIA/AAAAAJWk\\nAz3NzEw/yuIcPUqwST3NzEw/qkAOPAAAAAAAAIA/AAAAAEqwST3NzEw/qkAOPKxcMT3NzEw/\\nzczMvAAAAAAAAIA/AAAAAKxcMT3NzEw/zczMvGkXjDzNzEw/9XJAvQAAAAAAAIA/AAAAAGkX\\njDzNzEw/9XJAvWkXjLzNzEw/9XJAvQAAAAAAAIA/AAAAAGkXjLzNzEw/9XJAvaxcMb3NzEw/\\nzczMvAAAAAAAAIA/AAAAAKxcMb3NzEw/zczMvEqwSb3NzEw/qkAOPAAAAAAAAIA/AAAAAEqw\\nSb3NzEw/qkAOPJWkA73NzEw/yuIcPQAAAAAAAIA/AAAAAJWkA73NzEw/yuIcPWbmYaPNzEw/\\nzcxMPQAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/\\nAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAIAAAIA/AAAAAAAA\\nAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/\\nAAAAADF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qPzF5qj6WL2o+lS9qP6zTVz+VL2o+Jjf5PqzT\\nVz+VL2o+Jjf5PqzTVz+VL2o+Jjf5PuRtdT+WL2o+bRotvuRtdT+WL2o+bRotvuRtdT+WL2o+\\nbRotvk0xID+VL2o+++g+v00xID+VL2o+++g+v00xID+VL2o+++g+vwAAAACVL2o+JDd5vwAA\\nAACVL2o+JDd5vwAAAACVL2o+JDd5v0sxIL+UL2o++eg+v0sxIL+UL2o++eg+v0sxIL+UL2o+\\n+eg+v+Rtdb+WL2o+bRotvuRtdb+WL2o+bRotvuRtdb+WL2o+bRotvqzTV7+VL2o+Jjf5PqzT\\nV7+VL2o+Jjf5PqzTV7+VL2o+Jjf5PjF5qr6WL2o+lS9qPzF5qr6WL2o+lS9qPzF5qr6WL2o+\\nlS9qP7++Pj+/vj4/v74+PwAAgD8chi88zsxMP7sf8TyWON48zsxMP6NMgDxPs/w8zsxMP0s7\\nsrtA8KQ8zsxMP+iQxLwAAAAAzsxMP6RMAL1A8KS8zsxMP+iQxLxPs/y8zsxMP0s7sruWON68\\nzsxMP6NMgDwchi+8zsxMP7sf8Twchi883t1dP7sf8TyWON483t1dP6NMgDxPs/w83t1dP0s7\\nsrtA8KQ83t1dP+iQxLwAAAAA3t1dP6RMAL1A8KS83t1dP+iQxLxPs/y83t1dP0s7sruWON68\\n3t1dP6NMgDwchi+83t1dP7sf8TwAAAAAAAAAAM3MTD8AAAAAzcxMvc3MTD+VpAM9yuIcvc3M\\nTD8AAAAAAAAAAM3MTD+VpAM9yuIcvc3MTD9KsEk9qkAOvM3MTD8AAAAAAAAAAM3MTD9KsEk9\\nqkAOvM3MTD+sXDE9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDE9zczMPM3MTD9pF4w89XJAPc3M\\nTD8AAAAAAAAAAM3MTD9pF4w89XJAPc3MTD9pF4y89XJAPc3MTD8AAAAAAAAAAM3MTD9pF4y8\\n9XJAPc3MTD+sXDG9zczMPM3MTD8AAAAAAAAAAM3MTD+sXDG9zczMPM3MTD9KsEm9qkAOvM3M\\nTD8AAAAAAAAAAM3MTD9KsEm9qkAOvM3MTD+VpAO9yuIcvc3MTD8AAAAAAAAAAM3MTD+VpAO9\\nyuIcvc3MTD9m5mGjzcxMvc3MTD8AAAAAZuZhIwAAgD8AAAAAzcxMvc3MTD+VpAM9yuIcvc3M\\nTD8AAAAAZuZhIwAAgD+VpAM9yuIcvc3MTD9KsEk9qkAOvM3MTD8AAAAAZuZhIwAAgD9KsEk9\\nqkAOvM3MTD+sXDE9zczMPM3MTD8AAAAAZuZhIwAAgD+sXDE9zczMPM3MTD9pF4w89XJAPc3M\\nTD8AAAAAZuZhIwAAgD9pF4w89XJAPc3MTD9pF4y89XJAPc3MTD8AAAAAZuZhIwAAgD9pF4y8\\n9XJAPc3MTD+sXDG9zczMPM3MTD8AAAAAZuZhIwAAgD+sXDG9zczMPM3MTD9KsEm9qkAOvM3M\\nTD8AAAAAZuZhIwAAgD9KsEm9qkAOvM3MTD+VpAO9yuIcvc3MTD8AAAAAZuZhIwAAgD+VpAO9\\nyuIcvc3MTD9m5mGjzcxMvc3MTD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8xeao+lS9qv5Yvaj4xeao+lS9qv5Yvaj4xeao+lS9qv5Yv\\naj6s01c/Jjf5vpUvaj6s01c/Jjf5vpUvaj6s01c/Jjf5vpUvaj7kbXU/bRotPpYvaj7kbXU/\\nbRotPpYvaj7kbXU/bRotPpYvaj5NMSA/++g+P5Uvaj5NMSA/++g+P5Uvaj5NMSA/++g+P5Uv\\naj4AAAAAJDd5P5Uvaj4AAAAAJDd5P5Uvaj4AAAAAJDd5P5Uvaj5NMSC/++g+P5Yvaj5NMSC/\\n++g+P5Yvaj5NMSC/++g+P5Yvaj7kbXW/bRotPpYvaj7kbXW/bRotPpYvaj7kbXW/bRotPpYv\\naj6s01e/Jjf5vpUvaj6s01e/Jjf5vpUvaj6s01e/Jjf5vpUvaj4xeaq+lS9qv5Yvaj4xeaq+\\nlS9qv5Yvaj4xeaq+lS9qv5Yvaj6/vj4/v74+P7++Pj8AAIA/HIYvPLsf8bzOzEw/ljjePKNM\\ngLzOzEw/T7P8PEs7sjvOzEw/QPCkPOiQxDzOzEw/AAAAAKRMAD3OzEw/QPCkvOiQxDzOzEw/\\nT7P8vEs7sjvOzEw/ljjevKNMgLzOzEw/HIYvvLsf8bzOzEw/HIYvPLsf8bze3V0/ljjePKNM\\ngLze3V0/T7P8PEs7sjve3V0/QPCkPOiQxDze3V0/AAAAAKRMAD3e3V0/QPCkvOiQxDze3V0/\\nT7P8vEs7sjve3V0/ljjevKNMgLze3V0/HIYvvLsf8bze3V0/zcxMvwAAAAAAAAAAzcxMvwAA\\nAADNzEw9zcxMv5WkAz3K4hw9zcxMvwAAAAAAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48\\nzcxMvwAAAAAAAAAAzcxMv0qwST2qQA48zcxMv6xcMT3NzMy8zcxMvwAAAAAAAAAAzcxMv6xc\\nMT3NzMy8zcxMv2kXjDz1ckC9zcxMvwAAAAAAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9\\nzcxMvwAAAAAAAAAAzcxMv2kXjLz1ckC9zcxMv6xcMb3NzMy8zcxMvwAAAAAAAAAAzcxMv6xc\\nMb3NzMy8zcxMv0qwSb2qQA48zcxMvwAAAAAAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9\\nzcxMvwAAAAAAAAAAzcxMv5WkA73K4hw9zcxMv2bmYaPNzEw9AACAv2bmYSMAAAAAzcxMvwAA\\nAADNzEw9zcxMv5WkAz3K4hw9AACAv2bmYSMAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48\\nAACAv2bmYSMAAAAAzcxMv0qwST2qQA48zcxMv6xcMT3NzMy8AACAv2bmYSMAAAAAzcxMv6xc\\nMT3NzMy8zcxMv2kXjDz1ckC9AACAv2bmYSMAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9\\nAACAv2bmYSMAAAAAzcxMv2kXjLz1ckC9zcxMv6xcMb3NzMy8AACAv2bmYSMAAAAAzcxMv6xc\\nMb3NzMy8zcxMv0qwSb2qQA48AACAv2bmYSMAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9\\nAACAv2bmYSMAAAAAzcxMv5WkA73K4hw9zcxMv2bmYaPNzEw9AACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAAAAAACAvwAA\\nAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAli9qvjF5qj6VL2o/li9qvjF5\\nqj6VL2o/li9qvjF5qj6VL2o/lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+\\nli9qvuRtdT9tGi2+li9qvuRtdT9tGi2+li9qvuRtdT9tGi2+lS9qvk0xID/76D6/lS9qvk0x\\nID/76D6/lS9qvk0xID/76D6/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/\\nlC9qvksxIL/56D6/lC9qvksxIL/56D6/lC9qvksxIL/56D6/li9qvuRtdb9tGi2+li9qvuRt\\ndb9tGi2+li9qvuRtdb9tGi2+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+\\nli9qvjF5qr6VL2o/li9qvjF5qr6VL2o/li9qvjF5qr6VL2o/v74+P7++Pj+/vj4/AACAP87M\\nTL8chi88ux/xPM7MTL+WON48o0yAPM7MTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7MTL8AAAAA\\npEwAvc7MTL9A8KS86JDEvM7MTL9Ps/y8Szuyu87MTL+WON68o0yAPM7MTL8chi+8ux/xPN7d\\nXb8chi88ux/xPN7dXb+WON48o0yAPN7dXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7dXb8AAAAA\\npEwAvd7dXb9A8KS86JDEvN7dXb9Ps/y8Szuyu97dXb+WON68o0yAPN7dXb8chi+8ux/xPAAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nv74+P7++Pj+/vj4/AACAPwAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAAAAAAAAAzcxMvwAAAADNzEw9zcxMv5WkAz3K4hw9zcxMvwAA\\nAAAAAAAAzcxMv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAAAAAAAAzcxMv0qwST2qQA48\\nzcxMv6xcMT3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMT3NzMy8zcxMv2kXjDz1ckC9zcxMvwAA\\nAAAAAAAAzcxMv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAAAAAAAAzcxMv2kXjLz1ckC9\\nzcxMv6xcMb3NzMy8zcxMvwAAAAAAAAAAzcxMv6xcMb3NzMy8zcxMv0qwSb2qQA48zcxMvwAA\\nAAAAAAAAzcxMv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAAAAAAAAzcxMv5WkA73K4hw9\\nzcxMv2bmYaPNzEw9zcxMvwAAAABm5mEjAACAvwAAAADNzEw9zcxMv5WkAz3K4hw9zcxMvwAA\\nAABm5mEjAACAv5WkAz3K4hw9zcxMv0qwST2qQA48zcxMvwAAAABm5mEjAACAv0qwST2qQA48\\nzcxMv6xcMT3NzMy8zcxMvwAAAABm5mEjAACAv6xcMT3NzMy8zcxMv2kXjDz1ckC9zcxMvwAA\\nAABm5mEjAACAv2kXjDz1ckC9zcxMv2kXjLz1ckC9zcxMvwAAAABm5mEjAACAv2kXjLz1ckC9\\nzcxMv6xcMb3NzMy8zcxMvwAAAABm5mEjAACAv6xcMb3NzMy8zcxMv0qwSb2qQA48zcxMvwAA\\nAABm5mEjAACAv0qwSb2qQA48zcxMv5WkA73K4hw9zcxMvwAAAABm5mEjAACAv5WkA73K4hw9\\nzcxMv2bmYaPNzEw9zcxMvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAA\\nAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAA\\nAACAvwAAAAAAAAAAAACAvzF5qj6VL2o/li9qvjF5qj6VL2o/li9qvjF5qj6VL2o/li9qvqzT\\nVz8mN/k+lS9qvqzTVz8mN/k+lS9qvqzTVz8mN/k+lS9qvuRtdT9tGi2+li9qvuRtdT9tGi2+\\nli9qvuRtdT9tGi2+li9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvk0xID/76D6/lS9qvgAA\\nAIAkN3m/lS9qvgAAAIAkN3m/lS9qvgAAAIAkN3m/lS9qvk0xIL/76D6/li9qvk0xIL/76D6/\\nli9qvk0xIL/76D6/li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+li9qvuRtdb9tGi2+li9qvqzT\\nV78mN/k+lS9qvqzTV78mN/k+lS9qvqzTV78mN/k+lS9qvjF5qr6VL2o/li9qvjF5qr6VL2o/\\nli9qvjF5qr6VL2o/li9qvr++Pj+/vj4/v74+PwAAgD8chi88ux/xPM7MTL+WON48o0yAPM7M\\nTL9Ps/w8Szuyu87MTL9A8KQ86JDEvM7MTL8AAAAApEwAvc7MTL9A8KS86JDEvM7MTL9Ps/y8\\nSzuyu87MTL+WON68o0yAPM7MTL8chi+8ux/xPM7MTL8chi88ux/xPN7dXb+WON48o0yAPN7d\\nXb9Ps/w8Szuyu97dXb9A8KQ86JDEvN7dXb8AAAAApEwAvd7dXb9A8KS86JDEvN7dXb9Ps/y8\\n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\\nzcxMPQAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAA\\nAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAA\\ngD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAA\\nAAAAAJYvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Yvaj4xeaq+lS9qP5Uvaj6s01e/Jjf5PpUv\\naj6s01e/Jjf5PpUvaj6s01e/Jjf5PpYvaj7kbXW/bRotvpYvaj7kbXW/bRotvpYvaj7kbXW/\\nbRotvpUvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj5NMSC/++g+v5Uvaj4AAAAAJDd5v5Uv\\naj4AAAAAJDd5v5Uvaj4AAAAAJDd5v5Qvaj5LMSA/+eg+v5Qvaj5LMSA/+eg+v5Qvaj5LMSA/\\n+eg+v5Yvaj7kbXU/bRotvpYvaj7kbXU/bRotvpYvaj7kbXU/bRotvpUvaj6s01c/Jjf5PpUv\\naj6s01c/Jjf5PpUvaj6s01c/Jjf5PpYvaj4xeao+lS9qP5Yvaj4xeao+lS9qP5Yvaj4xeao+\\nlS9qP7++Pj+/vj4/v74+PwAAgD/OzEw/HIYvvLsf8TzOzEw/ljjevKNMgDzOzEw/T7P8vEs7\\nsrvOzEw/QPCkvOiQxLzOzEw/AAAAAKRMAL3OzEw/QPCkPOiQxLzOzEw/T7P8PEs7srvOzEw/\\nljjePKNMgDzOzEw/HIYvPLsf8Tze3V0/HIYvvLsf8Tze3V0/ljjevKNMgDze3V0/T7P8vEs7\\nsrve3V0/QPCkvOiQxLze3V0/AAAAAKRMAL3e3V0/QPCkPOiQxLze3V0/T7P8PEs7srve3V0/\\nljjePKNMgDze3V0/HIYvPLsf8TwAAAAAzcxMPwAAAAAAAAAAzcxMP83MTD2VpAM9zcxMP8ri\\nHD0AAAAAzcxMPwAAAACVpAM9zcxMP8riHD1KsEk9zcxMP6pADjwAAAAAzcxMPwAAAABKsEk9\\nzcxMP6pADjysXDE9zcxMP83MzLwAAAAAzcxMPwAAAACsXDE9zcxMP83MzLxpF4w8zcxMP/Vy\\nQL0AAAAAzcxMPwAAAABpF4w8zcxMP/VyQL1pF4y8zcxMP/VyQL0AAAAAzcxMPwAAAABpF4y8\\nzcxMP/VyQL2sXDG9zcxMP83MzLwAAAAAzcxMPwAAAACsXDG9zcxMP83MzLxKsEm9zcxMP6pA\\nDjwAAAAAzcxMPwAAAABKsEm9zcxMP6pADjyVpAO9zcxMP8riHD0AAAAAzcxMPwAAAACVpAO9\\nzcxMP8riHD1m5mGjzcxMP83MTD0AAAAAAACAPwAAAAAAAAAAzcxMP83MTD2VpAM9zcxMP8ri\\nHD0AAAAAAACAPwAAAACVpAM9zcxMP8riHD1KsEk9zcxMP6pADjwAAAAAAACAPwAAAABKsEk9\\nzcxMP6pADjysXDE9zcxMP83MzLwAAAAAAACAPwAAAACsXDE9zcxMP83MzLxpF4w8zcxMP/Vy\\nQL0AAAAAAACAPwAAAABpF4w8zcxMP/VyQL1pF4y8zcxMP/VyQL0AAAAAAACAPwAAAABpF4y8\\nzcxMP/VyQL2sXDG9zcxMP83MzLwAAAAAAACAPwAAAACsXDG9zcxMP83MzLxKsEm9zcxMP6pA\\nDjwAAAAAAACAPwAAAABKsEm9zcxMP6pADjyVpAO9zcxMP8riHD0AAAAAAACAPwAAAACVpAO9\\nzcxMP8riHD1m5mGjzcxMP83MTD0AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\nAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAA\\nAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAIAAAAAA\\nAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPwAA\\nAIAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACA\\nAACAPwAAAAAAAACAAACAPwAAAAAxeao+li9qPpUvaj8xeao+li9qPpUvaj8xeao+li9qPpUv\\naj+s01c/lS9qPiY3+T6s01c/lS9qPiY3+T6s01c/lS9qPiY3+T7kbXU/li9qPm0aLb7kbXU/\\nli9qPm0aLb7kbXU/li9qPm0aLb5NMSA/lS9qPvvoPr9NMSA/lS9qPvvoPr9NMSA/lS9qPvvo\\nPr8AAAAAlS9qPiQ3eb8AAAAAlS9qPiQ3eb8AAAAAlS9qPiQ3eb9LMSC/lC9qPvnoPr9LMSC/\\nlC9qPvnoPr9LMSC/lC9qPvnoPr/kbXW/li9qPm0aLb7kbXW/li9qPm0aLb7kbXW/li9qPm0a\\nLb6s01e/lS9qPiY3+T6s01e/lS9qPiY3+T6s01e/lS9qPiY3+T4xeaq+li9qPpUvaj8xeaq+\\nli9qPpUvaj8xeaq+li9qPpUvaj+/vj4/v74+P7++Pj8AAIA/HIYvPM7MTD+7H/E8ljjePM7M\\nTD+jTIA8T7P8PM7MTD9LO7K7QPCkPM7MTD/okMS8AAAAAM7MTD+kTAC9QPCkvM7MTD/okMS8\\nT7P8vM7MTD9LO7K7ljjevM7MTD+jTIA8HIYvvM7MTD+7H/E8HIYvPN7dXT+7H/E8ljjePN7d\\nXT+jTIA8T7P8PN7dXT9LO7K7QPCkPN7dXT/okMS8AAAAAN7dXT+kTAC9QPCkvN7dXT/okMS8\\nT7P8vN7dXT9LO7K7ljjevN7dXT+jTIA8HIYvvN7dXT+7H/E8AAAAAAAAAADNzEw/AAAAAM3M\\nTL3NzEw/laQDPcriHL3NzEw/AAAAAAAAAADNzEw/laQDPcriHL3NzEw/SrBJPapADrzNzEw/\\nAAAAAAAAAADNzEw/SrBJPapADrzNzEw/rFwxPc3MzDzNzEw/AAAAAAAAAADNzEw/rFwxPc3M\\nzDzNzEw/aReMPPVyQD3NzEw/AAAAAAAAAADNzEw/aReMPPVyQD3NzEw/aReMvPVyQD3NzEw/\\nAAAAAAAAAADNzEw/aReMvPVyQD3NzEw/rFwxvc3MzDzNzEw/AAAAAAAAAADNzEw/rFwxvc3M\\nzDzNzEw/SrBJvapADrzNzEw/AAAAAAAAAADNzEw/SrBJvapADrzNzEw/laQDvcriHL3NzEw/\\nAAAAAAAAAADNzEw/laQDvcriHL3NzEw/ZuZho83MTL3NzEw/AAAAAGbmYSMAAIA/AAAAAM3M\\nTL3NzEw/laQDPcriHL3NzEw/AAAAAGbmYSMAAIA/laQDPcriHL3NzEw/SrBJPapADrzNzEw/\\nAAAAAGbmYSMAAIA/SrBJPapADrzNzEw/rFwxPc3MzDzNzEw/AAAAAGbmYSMAAIA/rFwxPc3M\\nzDzNzEw/aReMPPVyQD3NzEw/AAAAAGbmYSMAAIA/aReMPPVyQD3NzEw/aReMvPVyQD3NzEw/\\nAAAAAGbmYSMAAIA/aReMvPVyQD3NzEw/rFwxvc3MzDzNzEw/AAAAAGbmYSMAAIA/rFwxvc3M\\nzDzNzEw/SrBJvapADrzNzEw/AAAAAGbmYSMAAIA/SrBJvapADrzNzEw/laQDvcriHL3NzEw/\\nAAAAAGbmYSMAAIA/laQDvcriHL3NzEw/ZuZho83MTL3NzEw/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/\\nAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAA\\nAAAAAIA/AAAAAAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/\\nAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/MXmqPpUvar+WL2o+MXmqPpUv\\nar+WL2o+MXmqPpUvar+WL2o+rNNXPyY3+b6VL2o+rNNXPyY3+b6VL2o+rNNXPyY3+b6VL2o+\\n5G11P20aLT6WL2o+5G11P20aLT6WL2o+5G11P20aLT6WL2o+TTEgP/voPj+VL2o+TTEgP/vo\\nPj+VL2o+TTEgP/voPj+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3eT+VL2o+AAAAACQ3eT+VL2o+\\nTTEgv/voPj+WL2o+TTEgv/voPj+WL2o+TTEgv/voPj+WL2o+5G11v20aLT6WL2o+5G11v20a\\nLT6WL2o+5G11v20aLT6WL2o+rNNXvyY3+b6VL2o+rNNXvyY3+b6VL2o+rNNXvyY3+b6VL2o+\\nMXmqvpUvar+WL2o+MXmqvpUvar+WL2o+MXmqvpUvar+WL2o+v74+P7++Pj+/vj4/AACAPxyG\\nLzy7H/G8zsxMP5Y43jyjTIC8zsxMP0+z/DxLO7I7zsxMP0DwpDzokMQ8zsxMPwAAAACkTAA9\\nzsxMP0DwpLzokMQ8zsxMP0+z/LxLO7I7zsxMP5Y43ryjTIC8zsxMPxyGL7y7H/G8zsxMPxyG\\nLzy7H/G83t1dP5Y43jyjTIC83t1dP0+z/DxLO7I73t1dP0DwpDzokMQ83t1dPwAAAACkTAA9\\n3t1dP0DwpLzokMQ83t1dP0+z/LxLO7I73t1dP5Y43ryjTIC83t1dPxyGL7y7H/G83t1dP83M\\nTL8AAAAAAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAM9\\nyuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvM3M\\nTL8AAAAAAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4w8\\n9XJAvc3MTL9pF4y89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvM3M\\nTL8AAAAAAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEm9\\nqkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPQAA\\ngL9m5mEjAAAAAM3MTL8AAAAAzcxMPc3MTL+VpAM9yuIcPQAAgL9m5mEjAAAAAM3MTL+VpAM9\\nyuIcPc3MTL9KsEk9qkAOPAAAgL9m5mEjAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvAAA\\ngL9m5mEjAAAAAM3MTL+sXDE9zczMvM3MTL9pF4w89XJAvQAAgL9m5mEjAAAAAM3MTL9pF4w8\\n9XJAvc3MTL9pF4y89XJAvQAAgL9m5mEjAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvAAA\\ngL9m5mEjAAAAAM3MTL+sXDG9zczMvM3MTL9KsEm9qkAOPAAAgL9m5mEjAAAAAM3MTL9KsEm9\\nqkAOPM3MTL+VpAO9yuIcPQAAgL9m5mEjAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPQAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAAgL8AAAAA\\nAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAJYv\\nar4xeao+lS9qP5Yvar4xeao+lS9qP5Yvar4xeao+lS9qP5Uvar6s01c/Jjf5PpUvar6s01c/\\nJjf5PpUvar6s01c/Jjf5PpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar7kbXU/bRotvpUv\\nar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uvar4AAACAJDd5v5Uvar4AAACA\\nJDd5v5Uvar4AAACAJDd5v5Qvar5LMSC/+eg+v5Qvar5LMSC/+eg+v5Qvar5LMSC/+eg+v5Yv\\nar7kbXW/bRotvpYvar7kbXW/bRotvpYvar7kbXW/bRotvpUvar6s01e/Jjf5PpUvar6s01e/\\nJjf5PpUvar6s01e/Jjf5PpYvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+lS9qP7++\\nPj+/vj4/v74+PwAAgD/OzEy/HIYvPLsf8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7srvOzEy/\\nQPCkPOiQxLzOzEy/AAAAAKRMAL3OzEy/QPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/ljjevKNM\\ngDzOzEy/HIYvvLsf8Tze3V2/HIYvPLsf8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7srve3V2/\\nQPCkPOiQxLze3V2/AAAAAKRMAL3e3V2/QPCkvOiQxLze3V2/T7P8vEs7srve3V2/ljjevKNM\\ngDze3V2/HIYvvLsf8TwAAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAL++Pj+/vj4/v74+PwAAgD8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAA\\nwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAMD/\\nAADA/wAAwP8AAMD/AADA/wAAwP8AAMD/AADA/wAAwP8AAAAAAAAAAM3MTL8AAAAAzcxMPc3M\\nTL+VpAM9yuIcPc3MTL8AAAAAAAAAAM3MTL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAA\\nAAAAAM3MTL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDE9zczMvM3M\\nTL9pF4w89XJAvc3MTL8AAAAAAAAAAM3MTL9pF4w89XJAvc3MTL9pF4y89XJAvc3MTL8AAAAA\\nAAAAAM3MTL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAAAAAAM3MTL+sXDG9zczMvM3M\\nTL9KsEm9qkAOPM3MTL8AAAAAAAAAAM3MTL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAA\\nAAAAAM3MTL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAZuZhIwAAgL8AAAAAzcxMPc3M\\nTL+VpAM9yuIcPc3MTL8AAAAAZuZhIwAAgL+VpAM9yuIcPc3MTL9KsEk9qkAOPM3MTL8AAAAA\\nZuZhIwAAgL9KsEk9qkAOPM3MTL+sXDE9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDE9zczMvM3M\\nTL9pF4w89XJAvc3MTL8AAAAAZuZhIwAAgL9pF4w89XJAvc3MTL9pF4y89XJAvc3MTL8AAAAA\\nZuZhIwAAgL9pF4y89XJAvc3MTL+sXDG9zczMvM3MTL8AAAAAZuZhIwAAgL+sXDG9zczMvM3M\\nTL9KsEm9qkAOPM3MTL8AAAAAZuZhIwAAgL9KsEm9qkAOPM3MTL+VpAO9yuIcPc3MTL8AAAAA\\nZuZhIwAAgL+VpAO9yuIcPc3MTL9m5mGjzcxMPc3MTL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAA\\ngL8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAA\\ngL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA\\nAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8xeao+lS9qP5Yvar4xeao+lS9qP5Yv\\nar4xeao+lS9qP5Yvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUvar6s01c/Jjf5PpUvar7kbXU/\\nbRotvpYvar7kbXU/bRotvpYvar7kbXU/bRotvpYvar5NMSA/++g+v5Uvar5NMSA/++g+v5Uv\\nar5NMSA/++g+v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uvar4AAACAJDd5v5Uvar5NMSC/\\n++g+v5Yvar5NMSC/++g+v5Yvar5NMSC/++g+v5Yvar7kbXW/bRotvpYvar7kbXW/bRotvpYv\\nar7kbXW/bRotvpYvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUvar6s01e/Jjf5PpUvar4xeaq+\\nlS9qP5Yvar4xeaq+lS9qP5Yvar4xeaq+lS9qP5Yvar6/vj4/v74+P7++Pj8AAIA/HIYvPLsf\\n8TzOzEy/ljjePKNMgDzOzEy/T7P8PEs7srvOzEy/QPCkPOiQxLzOzEy/AAAAAKRMAL3OzEy/\\nQPCkvOiQxLzOzEy/T7P8vEs7srvOzEy/ljjevKNMgDzOzEy/HIYvvLsf8TzOzEy/HIYvPLsf\\n8Tze3V2/ljjePKNMgDze3V2/T7P8PEs7srve3V2/QPCkPOiQxLze3V2/AAAAAKRMAL3e3V2/\\nQPCkvOiQxLze3V2/T7P8vEs7srve3V2/ljjevKNMgDze3V2/HIYvvLsf8Tze3V2/AAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAmpmZPwAAAAAAAAAAAAAAAJqZmT8AAAAAAAAAAAAAAACamZk/mpmZvwAA\\nAAAAAAAAAAAAAJqZmb8AAAAAAAAAAAAAAACamZm/AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqZ\\nmT8AAAAAAAAAAAAAAACamZk/AAAAAAAAAAAAAAAAmpmZP5qZmb8AAAAAAAAAAAAAAACamZm/\\nAAAAAAAAAAAAAAAAmpmZvwAAAAAAAAEAAAAAAJmYmD6ZmJg+mZiYPgAAgD8AAAABAQEBAAAA\\n\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]} if (FALSE) { B <- matrix(c( 1, 0, 1, 0, 2, 0, 1, 0, 2), 3, 3) svdDemo(B) # a positive, semi-definite matrix with eigenvalues 12, 6, 0 C <- matrix(c(7, 4, 1, 4, 4, 4, 1, 4, 7), 3, 3) svdDemo(C) }"},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":null,"dir":"Reference","previous_headings":"","what":"The Matrix Sweep Operator — swp","title":"The Matrix Sweep Operator — swp","text":"swp function “sweeps” matrix rows columns given index produce new matrix rows columns “partialled ” orthogonalization. defined fundamental statistical operation multivariate methods Beaton (1964) expanded Dempster (1969). closely related orthogonal projection, applied cross-products covariance matrix, rather data.","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The Matrix Sweep Operator — swp","text":"","code":"swp(M, index)"},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The Matrix Sweep Operator — swp","text":"M numeric matrix index numeric vector indicating rows/columns swept. entries must less equal number rows columns M. missing, function sweeps rows/columns 1:min(dim(M)).","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The Matrix Sweep Operator — swp","text":"matrix M rows columns indices swept.","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"The Matrix Sweep Operator — swp","text":"M partitioned matrix $$\\left[ \\begin{array}{cc} \\mathbf {R} & \\mathbf {S} \\\\ \\mathbf {T} & \\mathbf {U} \\end{array} \\right]$$ \\(R\\) \\(q \\times q\\) swp(M, 1:q) gives $$\\left[ \\begin{array}{cc} \\mathbf {R}^{-1} & \\mathbf {R}^{-1}\\mathbf {S} \\\\ -\\mathbf {TR}^{-1} & \\mathbf {U}-\\mathbf {TR}^{-1}\\mathbf {S} \\\\ \\end{array} \\right]$$","code":""},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"The Matrix Sweep Operator — swp","text":"Beaton, . E. (1964), Use Special Matrix Operations Statistical Calculus, Princeton, NJ: Educational Testing Service. Dempster, . P. (1969) Elements Continuous Multivariate Analysis. Addison-Wesley, Reading, Mass.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/swp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"The Matrix Sweep Operator — swp","text":"","code":"data(therapy) mod3 <- lm(therapy ~ perstest + IE + sex, data=therapy) X <- model.matrix(mod3) XY <- cbind(X, therapy=therapy$therapy) XY #> (Intercept) perstest IE sexM therapy #> John 1 26 3 1 32 #> Susan 1 24 4 0 40 #> Mary 1 22 8 0 44 #> Paul 1 33 4 1 44 #> Jenny 1 27 6 0 48 #> Rick 1 36 4 1 52 #> Cathy 1 30 10 0 56 #> Robert 1 38 4 1 56 #> Lisa 1 30 12 0 60 #> Tina 1 34 15 0 68 M <- crossprod(XY) swp(M, 1) #> (Intercept) perstest IE sexM therapy #> (Intercept) -0.1 30 7 0.4 50 #> perstest 30.0 250 10 13.0 300 #> IE 7.0 10 152 -13.0 304 #> sexM 0.4 13 -13 2.4 -16 #> therapy 50.0 300 304 -16.0 1000 swp(M, 1:2) #> (Intercept) perstest IE sexM therapy #> (Intercept) -3.70 0.120 5.80 -1.160 14.0 #> perstest 0.12 -0.004 0.04 0.052 1.2 #> IE 5.80 0.040 151.60 -13.520 292.0 #> sexM -1.16 0.052 -13.52 1.724 -31.6 #> therapy 14.00 1.200 292.00 -31.600 640.0"},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"Constructs LaTeX code symbolic matrix, like: rendered LaTeX, produces: $$ \\begin{pmatrix} x_{11} & x_{12} & \\cdots & x_{1m} \\\\ x_{21} & x_{22} & \\cdots & x_{2m} \\\\ \\vdots & \\vdots & & \\vdots \\\\ x_{n1} & x_{n2} & \\cdots & x_{nm} \\\\ \\end{pmatrix} $$ Alternatively, number rows /columns can integers, generating matrix given size. function prints resulting code console, , using write_clip, can copied console, can used used markdown chunk Rmd qmd document, e.g,","code":"\\begin{pmatrix} x_{11} & x_{12} & \\dots & x_{1m} \\ x_{21} & x_{22} & \\dots & x_{2m} \\ \\vdots & \\vdots & \\ddots & \\vdots \\ x_{n1} & x_{n2} & \\dots & x_{nm} \\end{pmatrix} ```{r results = \"asis\"} symbolicMatrix(\"\\lambda\", nrow=3, ncol=3, diag=TRUE, lhs = \"\\boldsymbol{\\Lambda}\") ```"},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"","code":"symbolicMatrix( symbol = \"x\", nrow = \"n\", ncol = \"m\", matrix = \"pmatrix\", diag = FALSE, comma = FALSE, exponent, transpose = FALSE, lhs, print = TRUE )"},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"symbol name matrix elements, character string. LaTeX symbols, backslash must escaped, e.g, \\beta. nrow Number rows, single character representing rows symbolically, integer, generating many rows. ncol Number columns, single character representing columns symbolically, integer, generating many columns. matrix Character string giving LaTeX matrix environment used \\begin{}, \\end{}. Typically one : \"pmatrix\" uses parentheses: \"(\", \")\" \"bmatrix\" uses square brackets: \"[\", \"]\" \"Bmatrix\" uses braces: \"{\", \"}\" \"vmatrix\" uses vertical bars: \"|\", \"|\" \"Vmatrix\" uses double vertical bars: \"||\", \"||\" \"matrix\" generates plain matrix without delimeters diag logical; TRUE, -diagonal elements 0 (nrow must == ncol) comma logical; TRUE, commas inserted row column subscripts exponent specified, e.g., \"-1\", \"1/2\", exponent applied matrix transpose TRUE, transpose symbol \"\\top\" appended matrix; may also character string, e.g., \"T\", \"\\prime\", \"\\textsf{T}\" lhs optional LaTeX expression, e.g, \"\\boldsymbol\\Lamda\", left-hand side equation matrix right-hand side. print logical; print LaTeX code matrix console?; default: TRUE","code":""},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"Returns invisibly LaTeX representation matrix character string. Use cat() display console, write_clip copy clipboard","code":""},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"implementation assumes LaTeX amsmath package available uses shorthands \\begin{pmatrix}, ... rather . function experimental. features may added. E.g., nice : Specify exponents matrix elements, e.g, diagonal matrix square roots eigenvalues, \\lambda_i^{1/2} giving \\(\\lambda_i^{1/2}\\) Specify \"accents\" symbols, e.g., want elements given bars hats, e.g., \\widehat{\\beta}_{ij}, giving \\(\\widehat{\\beta}_{ij}\\)","code":"\\left( \\begin{array} ... \\end{array} \\right)"},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"John Fox","code":""},{"path":"http://friendly.github.io/matlib/reference/symbolicMatrix.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a Symbolic Matrix for LaTeX — symbolicMatrix","text":"","code":"symbolicMatrix() #> Error in symbolicMatrix(): could not find function \"symbolicMatrix\" # return value mat <- symbolicMatrix(print = FALSE) #> Error in symbolicMatrix(print = FALSE): could not find function \"symbolicMatrix\" str(mat) #> Error in eval(expr, envir, enclos): object 'mat' not found cat(mat) #> Error in eval(expr, envir, enclos): object 'mat' not found # copy to clipboard #clipr::write_clip(mat) # can't be done in non-interactive mode # numeric rows/cols symbolicMatrix(ncol=3) #> Error in symbolicMatrix(ncol = 3): could not find function \"symbolicMatrix\" symbolicMatrix(nrow=4) #> Error in symbolicMatrix(nrow = 4): could not find function \"symbolicMatrix\" symbolicMatrix(nrow=4, ncol=4) #> Error in symbolicMatrix(nrow = 4, ncol = 4): could not find function \"symbolicMatrix\" # diagonal matrices symbolicMatrix(nrow=3, ncol=3, diag=TRUE) #> Error in symbolicMatrix(nrow = 3, ncol = 3, diag = TRUE): could not find function \"symbolicMatrix\" symbolicMatrix(nrow=\"n\", ncol=\"n\", diag=TRUE) #> Error in symbolicMatrix(nrow = \"n\", ncol = \"n\", diag = TRUE): could not find function \"symbolicMatrix\" # commas, exponents, transpose symbolicMatrix(\"\\\\beta\", comma=TRUE, exponent=\"-1\") #> Error in symbolicMatrix(\"\\\\beta\", comma = TRUE, exponent = \"-1\"): could not find function \"symbolicMatrix\" symbolicMatrix(\"\\\\beta\", comma=TRUE, transpose=TRUE) #> Error in symbolicMatrix(\"\\\\beta\", comma = TRUE, transpose = TRUE): could not find function \"symbolicMatrix\" symbolicMatrix(\"\\\\beta\", comma=TRUE, exponent=\"-1\", transpose=TRUE) #> Error in symbolicMatrix(\"\\\\beta\", comma = TRUE, exponent = \"-1\", transpose = TRUE): could not find function \"symbolicMatrix\" # represent the SVD, X = U D V' symbolically X <- symbolicMatrix(\"x\", \"n\", \"p\") #> Error in symbolicMatrix(\"x\", \"n\", \"p\"): could not find function \"symbolicMatrix\" U <- symbolicMatrix(\"u\", \"n\", \"k\") #> Error in symbolicMatrix(\"u\", \"n\", \"k\"): could not find function \"symbolicMatrix\" D <- symbolicMatrix(\"\\\\lambda\", \"k\", \"k\", diag=TRUE) #> Error in symbolicMatrix(\"\\\\lambda\", \"k\", \"k\", diag = TRUE): could not find function \"symbolicMatrix\" V <- symbolicMatrix(\"v\", \"k\", \"p\", transpose = TRUE) #> Error in symbolicMatrix(\"v\", \"k\", \"p\", transpose = TRUE): could not find function \"symbolicMatrix\" cat(\"\\\\mathrm{SVD:}\\n\", X, \"=\\n\", U, D, V) #> Error in eval(expr, envir, enclos): object 'X' not found"},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a Symmetric Matrix from a Vector — symMat","title":"Create a Symmetric Matrix from a Vector — symMat","text":"Creates square symmetric matrix vector.","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a Symmetric Matrix from a Vector — symMat","text":"","code":"symMat(x, diag = TRUE, byrow = FALSE, names = FALSE)"},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a Symmetric Matrix from a Vector — symMat","text":"x numeric vector used fill upper lower triangle matrix. diag Logical. TRUE (default), diagonals created matrix replaced elements x; otherwise, diagonals created matrix replaced \"1\". byrow Logical. FALSE (default), created matrix filled columns; otherwise, matrix filled rows. names Either logical character vector names rows columns matrix. FALSE, names assigned; TRUE, rows columns named X1, X2, ... .","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a Symmetric Matrix from a Vector — symMat","text":"symmetric square matrix based column major ordering elements x.","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a Symmetric Matrix from a Vector — symMat","text":"Originally metaSEM::vec2symMat, Mike W.-L. Cheung ; modified Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/symMat.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a Symmetric Matrix from a Vector — symMat","text":"","code":"symMat(1:6) #> [,1] [,2] [,3] #> [1,] 1 2 3 #> [2,] 2 4 5 #> [3,] 3 5 6 symMat(1:6, byrow=TRUE) #> [,1] [,2] [,3] #> [1,] 1 2 4 #> [2,] 2 3 5 #> [3,] 4 5 6 symMat(5:0, diag=FALSE) #> [,1] [,2] [,3] [,4] #> [1,] 1 5 4 3 #> [2,] 5 1 2 1 #> [3,] 4 2 1 0 #> [4,] 3 1 0 1"},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":null,"dir":"Reference","previous_headings":"","what":"Therapy Data — therapy","title":"Therapy Data — therapy","text":"toy data set outcome therapy relation personality test (perstest) scale internal-external locus control (IE) used illustrate linear multiple regression.","code":""},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Therapy Data — therapy","text":"","code":"data(\"therapy\")"},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Therapy Data — therapy","text":"data frame 10 observations following 4 variables. sex factor levels F M perstest score personality test, numeric vector therapy outcome psychotherapy, numeric vector IE score scale internal-external locus control, numeric vector","code":""},{"path":"http://friendly.github.io/matlib/reference/therapy.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Therapy Data — therapy","text":"","code":"data(therapy) plot(therapy ~ perstest, data=therapy, pch=16) abline(lm(therapy ~ perstest, data=therapy), col=\"red\") plot(therapy ~ perstest, data=therapy, cex=1.5, pch=16, col=ifelse(sex==\"M\", \"red\",\"blue\"))"},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":null,"dir":"Reference","previous_headings":"","what":"Trace of a Matrix — tr","title":"Trace of a Matrix — tr","text":"Calculates trace square numeric matrix, .e., sum diagonal elements","code":""},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trace of a Matrix — tr","text":"","code":"tr(X)"},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trace of a Matrix — tr","text":"X numeric matrix","code":""},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trace of a Matrix — tr","text":"numeric value, sum diag(X)","code":""},{"path":"http://friendly.github.io/matlib/reference/tr.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trace of a Matrix — tr","text":"","code":"X <- matrix(1:9, 3, 3) tr(X) #> [1] 15"},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":null,"dir":"Reference","previous_headings":"","what":"Vandermode Matrix — vandermode","title":"Vandermode Matrix — vandermode","text":"function returns Vandermode matrix numeric vector, x, whose columns vector raised powers 0:n.","code":""},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Vandermode Matrix — vandermode","text":"","code":"vandermode(x, n)"},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Vandermode Matrix — vandermode","text":"x numeric vector n numeric scalar","code":""},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Vandermode Matrix — vandermode","text":"matrix size length(x) x n","code":""},{"path":"http://friendly.github.io/matlib/reference/vandermode.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vandermode Matrix — vandermode","text":"","code":"vandermode(1:5, 4) #> [,1] [,2] [,3] [,4] #> [1,] 1 1 1 1 #> [2,] 1 2 4 8 #> [3,] 1 3 9 27 #> [4,] 1 4 16 64 #> [5,] 1 5 25 125"},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":null,"dir":"Reference","previous_headings":"","what":"Vectorize a Matrix — vec","title":"Vectorize a Matrix — vec","text":"Returns 1-column matrix, stacking columns x, matrix vector. Also supports comma-separated inputs similar concatenation function c.","code":""},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Vectorize a Matrix — vec","text":"","code":"vec(x, ...)"},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Vectorize a Matrix — vec","text":"x matrix vector ... (optional) additional objects stacked","code":""},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Vectorize a Matrix — vec","text":"one-column matrix containing elements x ... column order","code":""},{"path":"http://friendly.github.io/matlib/reference/vec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Vectorize a Matrix — vec","text":"","code":"vec(1:3) #> [,1] #> [1,] 1 #> [2,] 2 #> [3,] 3 vec(matrix(1:6, 2, 3)) #> [,1] #> [1,] 1 #> [2,] 2 #> [3,] 3 #> [4,] 4 #> [5,] 5 #> [6,] 6 vec(c(\"hello\", \"world\")) #> [,1] #> [1,] \"hello\" #> [2,] \"world\" vec(\"hello\", \"world\") #> [,1] #> [1,] \"hello\" #> [2,] \"world\" vec(1:3, \"hello\", \"world\") #> [,1] #> [1,] \"1\" #> [2,] \"2\" #> [3,] \"3\" #> [4,] \"hello\" #> [5,] \"world\""},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw geometric vectors in 2D — vectors","title":"Draw geometric vectors in 2D — vectors","text":"function draws vectors 2D plot, way facilitates constructing vector diagrams. allows vectors specified rows matrix, can draw labels vectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw geometric vectors in 2D — vectors","text":"","code":"vectors( X, origin = c(0, 0), lwd = 2, angle = 13, length = 0.15, labels = TRUE, cex.lab = 1.5, pos.lab = 4, frac.lab = 1, ... )"},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw geometric vectors in 2D — vectors","text":"X vector two-column matrix representing set geometric vectors; matrix, one vector drawn row origin origin drawn, vector length 2. lwd line width(s) vectors, constant vector length equal number rows X. angle angle argument passed arrows determining angle arrow heads. length length argument passed arrows determining length arrow heads. labels logical character vector labels vectors. TRUE X matrix, labels taken rownames(X). NULL, labels drawn. cex.lab character expansion applied vector labels. May number numeric vector corresponding rows X, recycled necessary. pos.lab label position relative label point text, recycled necessary. frac.lab location label point, fraction distance origin X, recycled necessary. Values frac.lab > 1 locate label beyond end vector. ... arguments passed graphics functions.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw geometric vectors in 2D — vectors","text":"none","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/vectors.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw geometric vectors in 2D — vectors","text":"","code":"# shows addition of vectors u <- c(3,1) v <- c(1,3) sum <- u+v xlim <- c(0,5) ylim <- c(0,5) # proper geometry requires asp=1 plot( xlim, ylim, type=\"n\", xlab=\"X\", ylab=\"Y\", asp=1) abline(v=0, h=0, col=\"gray\") vectors(rbind(u,v,`u+v`=sum), col=c(\"red\", \"blue\", \"purple\"), cex.lab=c(2, 2, 2.2)) # show the opposing sides of the parallelogram vectors(sum, origin=u, col=\"red\", lty=2) vectors(sum, origin=v, col=\"blue\", lty=2) # projection of vectors vectors(Proj(v,u), labels=\"P(v,u)\", lwd=3) vectors(v, origin=Proj(v,u)) corner(c(0,0), Proj(v,u), v, col=\"grey\")"},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw 3D vectors — vectors3d","title":"Draw 3D vectors — vectors3d","text":"function draws vectors 3D plot, way facilitates constructing vector diagrams. allows vectors specified rows matrix, can draw labels vectors.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw 3D vectors — vectors3d","text":"","code":"vectors3d( X, origin = c(0, 0, 0), headlength = 0.035, ref.length = NULL, radius = 1/60, labels = TRUE, cex.lab = 1.2, adj.lab = 0.5, frac.lab = 1.1, draw = TRUE, ... )"},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw 3D vectors — vectors3d","text":"X vector three-column matrix representing set geometric vectors; matrix, one vector drawn row origin origin drawn, vector length 3. headlength headlength argument passed arrows3d determining length arrow heads ref.length vector length used scaling arrow heads size; NULL longest vector used scale arrow heads radius radius base arrow heads labels logical character vector labels vectors. TRUE X matrix, labels taken rownames(X). FALSE NULL, labels drawn. cex.lab character expansion applied vector labels. May number numeric vector corresponding rows X, recycled necessary. adj.lab label position relative label point text3d, recycled necessary. frac.lab location label point, fraction distance origin X, recycled necessary. Values frac.lab > 1 locate label beyond end vector. draw TRUE (default), draw vector(s). ... arguments passed graphics functions.","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw 3D vectors — vectors3d","text":"invisibly returns vector ref.length used scale arrow heads","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"bugs","dir":"Reference","previous_headings":"","what":"Bugs","title":"Draw 3D vectors — vectors3d","text":"present, color (color=) argument handled expected one vector drawn.","code":""},{"path":[]},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw 3D vectors — vectors3d","text":"Michael Friendly","code":""},{"path":"http://friendly.github.io/matlib/reference/vectors3d.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw 3D vectors — vectors3d","text":"3D plot","code":"vec <- rbind(diag(3), c(1,1,1)) rownames(vec) <- c(\"X\", \"Y\", \"Z\", \"J\") library(rgl) open3d() vectors3d(vec, color=c(rep(\"black\",3), \"red\"), lwd=2) # draw the XZ plane, whose equation is Y=0 planes3d(0, 0, 1, 0, col=\"gray\", alpha=0.2) vectors3d(c(1,1,0), col=\"green\", lwd=2) # show projections of the unit vector J segments3d(rbind(c(1,1,1), c(1, 1, 0))) segments3d(rbind(c(0,0,0), c(1, 1, 0))) segments3d(rbind(c(1,0,0), c(1, 1, 0))) segments3d(rbind(c(0,1,0), c(1, 1, 0))) # show some orthogonal vectors p1 <- c(0,0,0) p2 <- c(1,1,0) p3 <- c(1,1,1) p4 <- c(1,0,0) corner(p1, p2, p3, col=\"red\") corner(p1, p4, p2, col=\"red\") corner(p1, p4, p3, col=\"blue\") 3D plot {\"x\":{\"material\":{\"color\":\"#000000\",\"alpha\":1,\"lit\":true,\"ambient\":\"#000000\",\"specular\":\"#FFFFFF\",\"emission\":\"#000000\",\"shininess\":50,\"smooth\":true,\"front\":\"filled\",\"back\":\"filled\",\"size\":3,\"lwd\":1,\"fog\":true,\"point_antialias\":false,\"line_antialias\":false,\"texture\":null,\"textype\":\"rgb\",\"texmode\":\"modulate\",\"texmipmap\":false,\"texminfilter\":\"linear\",\"texmagfilter\":\"linear\",\"texenvmap\":false,\"depth_mask\":true,\"depth_test\":\"less\",\"isTransparent\":false,\"polygon_offset\":[0,0],\"margin\":\"\",\"floating\":false,\"tag\":\"\",\"blend\":[\"src_alpha\",\"one_minus_src_alpha\"]},\"rootSubscene\":250,\"objects\":{\"256\":{\"id\":256,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"0\",\"colors\":\"1\",\"centers\":\"2\",\"ignoreExtent\":false,\"flags\":41024},\"257\":{\"id\":257,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"3\",\"colors\":\"5\",\"centers\":\"6\",\"normals\":\"4\",\"ignoreExtent\":false,\"flags\":32771},\"258\":{\"id\":258,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"7\",\"colors\":\"9\",\"centers\":\"10\",\"normals\":\"8\",\"ignoreExtent\":false,\"flags\":32771},\"259\":{\"id\":259,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"11\",\"colors\":\"13\",\"centers\":\"14\",\"normals\":\"12\",\"ignoreExtent\":false,\"flags\":32771},\"260\":{\"id\":260,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"15\",\"colors\":\"17\",\"centers\":\"18\",\"normals\":\"16\",\"ignoreExtent\":false,\"flags\":32771},\"261\":{\"id\":261,\"type\":\"text\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"19\",\"colors\":\"20\",\"texts\":[[\"\"],[\"\"],[\"\"],[\"\"],[\"X\"],[\"Y\"],[\"Z\"],[\"J\"]],\"cex\":[[1.2]],\"adj\":[[0.5,0.5,0.5]],\"centers\":\"21\",\"family\":[[\"sans\"]],\"font\":[[1]],\"ignoreExtent\":false,\"flags\":33808},\"262\":{\"id\":262,\"type\":\"planes\",\"material\":{\"alpha\":0.2000000029802322,\"isTransparent\":true},\"vertices\":\"22\",\"colors\":\"24\",\"offsets\":[[0]],\"centers\":\"25\",\"normals\":\"23\",\"ignoreExtent\":true,\"flags\":32803},\"263\":{\"id\":263,\"type\":\"lines\",\"material\":{\"lit\":false,\"lwd\":2},\"vertices\":\"26\",\"colors\":\"27\",\"centers\":\"28\",\"ignoreExtent\":false,\"flags\":41024},\"264\":{\"id\":264,\"type\":\"triangles\",\"material\":{\"lwd\":2},\"vertices\":\"29\",\"colors\":\"31\",\"centers\":\"32\",\"normals\":\"30\",\"ignoreExtent\":false,\"flags\":32771},\"265\":{\"id\":265,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"33\",\"colors\":\"34\",\"centers\":\"35\",\"ignoreExtent\":false,\"flags\":32832},\"266\":{\"id\":266,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"36\",\"colors\":\"37\",\"centers\":\"38\",\"ignoreExtent\":false,\"flags\":32832},\"267\":{\"id\":267,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"39\",\"colors\":\"40\",\"centers\":\"41\",\"ignoreExtent\":false,\"flags\":32832},\"268\":{\"id\":268,\"type\":\"lines\",\"material\":{\"lit\":false},\"vertices\":\"42\",\"colors\":\"43\",\"centers\":\"44\",\"ignoreExtent\":false,\"flags\":32832},\"269\":{\"id\":269,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"45\",\"colors\":\"46\",\"centers\":\"47\",\"ignoreExtent\":false,\"flags\":32832},\"270\":{\"id\":270,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"48\",\"colors\":\"49\",\"centers\":\"50\",\"ignoreExtent\":false,\"flags\":32832},\"271\":{\"id\":271,\"type\":\"linestrip\",\"material\":{\"lit\":false},\"vertices\":\"51\",\"colors\":\"52\",\"centers\":\"53\",\"ignoreExtent\":false,\"flags\":32832},\"254\":{\"id\":254,\"type\":\"light\",\"vertices\":[[0,0,1]],\"colors\":[[1,1,1,1],[1,1,1,1],[1,1,1,1]],\"viewpoint\":true,\"finite\":false},\"253\":{\"id\":253,\"type\":\"background\",\"material\":{},\"colors\":\"54\",\"centers\":\"55\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"255\":{\"id\":255,\"type\":\"background\",\"material\":{\"lit\":false,\"back\":\"lines\"},\"colors\":\"56\",\"centers\":\"57\",\"sphere\":false,\"fogtype\":\"none\",\"fogscale\":1,\"flags\":32768},\"250\":{\"id\":250,\"type\":\"subscene\",\"par3d\":{\"antialias\":8,\"FOV\":30,\"ignoreExtent\":false,\"listeners\":250,\"mouseMode\":{\"none\":\"none\",\"left\":\"trackball\",\"right\":\"zoom\",\"middle\":\"fov\",\"wheel\":\"pull\"},\"observer\":[0,0,3.735036373138428],\"modelMatrix\":[[1,0,0,-0.5417932868003845],[0,0.3420201539993286,0.9396926164627075,-0.6947333812713623],[0,-0.9396926164627075,0.3420201539993286,-3.411468982696533],[0,0,0,1]],\"projMatrix\":[[3.732050895690918,0,0,0],[0,3.732050895690918,0,0],[0,0,-3.863703727722168,-13.46437454223633],[0,0,-1,0]],\"skipRedraw\":false,\"userMatrix\":[[1,0,0,0],[0,0.3420201433256682,0.9396926207859085,0],[0,-0.9396926207859085,0.3420201433256682,0],[0,0,0,1]],\"userProjection\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"scale\":[1,1,1],\"viewport\":{\"x\":0,\"y\":0,\"width\":1,\"height\":1},\"zoom\":1,\"bbox\":[-0.01641346327960491,1.100000023841858,-0.01666666753590107,1.100000023841858,-0.01566154323518276,1.100000023841858],\"windowRect\":[0,0,256,256],\"family\":\"sans\",\"font\":1,\"cex\":1,\"useFreeType\":false,\"fontname\":\"NULL\",\"maxClipPlanes\":2147483647,\"glVersion\":\"NA\",\"activeSubscene\":0},\"embeddings\":{\"viewport\":\"replace\",\"projection\":\"replace\",\"model\":\"replace\",\"mouse\":\"replace\"},\"objects\":[255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,254],\"subscenes\":[],\"flags\":42355}},\"crosstalk\":{\"key\":[],\"group\":[],\"id\":[],\"options\":[]},\"width\":700,\"height\":432.6328800988875,\"buffer\":{\"accessors\":[{\"bufferView\":0,\"componentType\":5121,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":1,\"componentType\":5121,\"count\":8,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":2,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":3,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":4,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":5,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":6,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":7,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":8,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":9,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":10,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":11,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":12,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":13,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":14,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":15,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":16,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":17,\"componentType\":5121,\"count\":54,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":18,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":19,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":20,\"componentType\":5121,\"count\":4,\"type\":\"VEC4\",\"normalized\":true},{\"bufferView\":21,\"componentType\":5126,\"count\":8,\"type\":\"VEC3\"},{\"bufferView\":22,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":23,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":24,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":25,\"componentType\":5126,\"count\":4,\"type\":\"VEC3\"},{\"bufferView\":26,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":27,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":28,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":29,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":30,\"componentType\":5126,\"count\":54,\"type\":\"VEC3\"},{\"bufferView\":31,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":32,\"componentType\":5126,\"count\":18,\"type\":\"VEC3\"},{\"bufferView\":33,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":34,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":35,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":36,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":37,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":38,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":39,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":40,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":41,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":42,\"componentType\":5121,\"count\":2,\"type\":\"VEC3\"},{\"bufferView\":43,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":44,\"componentType\":5126,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":45,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":46,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":47,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":48,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":49,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":50,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":51,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":52,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":53,\"componentType\":5126,\"count\":3,\"type\":\"VEC3\"},{\"bufferView\":54,\"componentType\":5126,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":55,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"},{\"bufferView\":56,\"componentType\":5121,\"count\":1,\"type\":\"VEC4\"},{\"bufferView\":57,\"componentType\":5121,\"count\":1,\"type\":\"VEC3\"}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":24,\"byteOffset\":0},{\"buffer\":0,\"byteLength\":32,\"byteOffset\":24},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":56},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":104},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":752},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1400},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":1616},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":1832},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":2480},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3128},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":3344},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":3560},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":4208},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":4856},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":5072},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5288},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":5936},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6584},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":6800},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7016},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7112},{\"buffer\":0,\"byteLength\":96,\"byteOffset\":7128},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":7224},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":7260},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":7264},{\"buffer\":0,\"byteLength\":48,\"byteOffset\":7280},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":7328},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":7334},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":7340},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":7352},{\"buffer\":0,\"byteLength\":648,\"byteOffset\":8000},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8648},{\"buffer\":0,\"byteLength\":216,\"byteOffset\":8652},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8868},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8874},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8880},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8892},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8898},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8904},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8916},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8922},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8928},{\"buffer\":0,\"byteLength\":6,\"byteOffset\":8940},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":8946},{\"buffer\":0,\"byteLength\":12,\"byteOffset\":8952},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":8964},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9000},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9004},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9040},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9076},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9080},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9116},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9152},{\"buffer\":0,\"byteLength\":36,\"byteOffset\":9156},{\"buffer\":0,\"byteLength\":16,\"byteOffset\":9192},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9208},{\"buffer\":0,\"byteLength\":4,\"byteOffset\":9211},{\"buffer\":0,\"byteLength\":3,\"byteOffset\":9215}],\"buffers\":[{\"byteLength\":9218,\"bytes\":\"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\\nF3twPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAF3twPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAF3twPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAF3twPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAF3twPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nF3twPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAF3twPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAF3twPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\nAACAPwAAAAAAAAAAF3twP4mIiDwchi88F3twP2MuUTwAAAAAAACAPwAAAAAchi88F3twP2Mu\\nUTyHdYY8F3twP42rPTsAAAAAAACAPwAAAACHdYY8F3twP42rPTuQe2w8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2w8F3twP4mICLziybo7F3twP6NMgLwAAAAAAACAPwAAAADiybo7F3twP6NM\\ngLziybq7F3twP6NMgLwAAAAAAACAPwAAAADiybq7F3twP6NMgLyQe2y8F3twP4mICLwAAAAA\\nAACAPwAAAACQe2y8F3twP4mICLyHdYa8F3twP42rPTsAAAAAAACAPwAAAACHdYa8F3twP42r\\nPTschi+8F3twP2MuUTwAAAAAAACAPwAAAAAchi+8F3twP2MuUTyamZaiF3twP4mIiDwAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA\\n//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAAAAAAAA//9/PwAA\\nAAAAAAAA//9/PwAAAAAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA\\n//9/PwAAAIAAAAAA//9/PwAAAIAAAAAA//9/PwAAAIAAAACA//9/PwAAAAAAAACA//9/PwAA\\n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\\ngD6ep1Y/q9z3vskRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6tGHQ/yCksPsoRgD6WUh8/\\nkN89P8oRgD6WUh8/kN89P8oRgD6WUh8/kN89P8oRgD4AAAAAqtx3P8kRgD4AAAAAqtx3P8kR\\ngD4AAAAAqtx3P8kRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6WUh+/kN89P8oRgD6tGHS/\\nyCksPsoRgD6tGHS/yCksPsoRgD6tGHS/yCksPsoRgD6ep1a/q9z3vskRgD6ep1a/q9z3vskR\\ngD6ep1a/q9z3vskRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4wjKm+/+lov8kRgD4AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP8mCGo7\\n0r8gvBd7cD+5JRQ82hCruxd7cD+Kdyg8ZqTtOhd7cD8A69s7RgsDPBd7cD8AAAAA2hArPBd7\\ncD8A69u7RgsDPBd7cD+Kdyi8ZqTtOhd7cD+5JRS82hCruxd7cD8mCGq70r8gvBd7cD8mCGo7\\n0r8gvGandT+5JRQ82hCru2andT+Kdyg8ZqTtOmandT8A69s7RgsDPGandT8AAAAA2hArPGan\\ndT8A69u7RgsDPGandT+Kdyi8ZqTtOmandT+5JRS82hCru2andT8mCGq70r8gvGandT89Cnc/\\nPQp3Pz0Kdz9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT89Cnc/PQp3Pz0Kdz8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj89Cnc/PQp3Pz0Kdz+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD89Cnc/\\nPQp3Pz0Kdz+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz89Cnc/PQp3Pz0Kdz/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD89Cnc/PQp3Pz0Kdz+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj89Cnc/\\nPQp3Pz0Kdz+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD89Cnc/PQp3Pz0Kdz/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej89Cnc/PQp3Pz0Kdz+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej8AAIA/\\nAACAPwAAgD9rI3Y/n5N0P69nej8lg3g/zZFzP8YJeT8AAIA/AACAPwAAgD8lg3g/zZFzP8YJ\\neT+EMno/si90P4O8dj8AAIA/AACAPwAAgD+EMno/si90P4O8dj+vZ3o/ayN2P5+TdD8AAIA/\\nAACAPwAAgD+vZ3o/ayN2P5+TdD/GCXk/JYN4P82Rcz8AAIA/AACAPwAAgD/GCXk/JYN4P82R\\ncz+DvHY/hDJ6P7IvdD8AAIA/AACAPwAAgD+DvHY/hDJ6P7IvdD+fk3Q/r2d6P2sjdj8AAIA/\\nAACAPwAAgD+fk3Q/r2d6P2sjdj/NkXM/xgl5PyWDeD8AAIA/AACAPwAAgD/NkXM/xgl5PyWD\\neD+yL3Q/g7x2P4Qyej8AAIA/AACAPwAAgD+yL3Q/g7x2P4Qyej9rI3Y/n5N0P69nej9fzRM/\\nUc0TP/3MEz9fzRM/Uc0TP/3MEz9fzRM/Uc0TP/3MEz/+zBM/XM0TP1fNEz/+zBM/XM0TP1fN\\nEz/+zBM/XM0TP1fNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/+zBM/Xs0TP1XNEz/9zBM/\\nX80TP1HNEz/9zBM/X80TP1HNEz/9zBM/X80TP1HNEz9XzRM//swTP1zNEz9XzRM//swTP1zN\\nEz9XzRM//swTP1zNEz9VzRM//swTP17NEz9VzRM//swTP17NEz9VzRM//swTP17NEz9RzRM/\\n/cwTP1/NEz9RzRM//cwTP1/NEz9RzRM//cwTP1/NEz9czRM/V80TP/7MEz9czRM/V80TP/7M\\nEz9czRM/V80TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9ezRM/Vc0TP/7MEz9Lb1o+\\nU3ISv9S/Sj9Lb1o+U3ISv9S/Sj9Lb1o+U3ISv9S/Sj/gEjQ/FYMevxmzsj7gEjQ/FYMevxmz\\nsj7gEjQ/FYMevxmzsj4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr4xlG4/pjeevh08Qr7Uv0o/\\nS29aPlNyEr/Uv0o/S29aPlNyEr/Uv0o/S29aPlNyEr8Zs7I+4BI0PxWDHr8Zs7I+4BI0PxWD\\nHr8Zs7I+4BI0PxWDHr8dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr4dPEK+MZRuP6Y3nr5TchK/\\n1L9KP0tvWj5TchK/1L9KP0tvWj5TchK/1L9KP0tvWj4Vgx6/GbOyPuASND8Vgx6/GbOyPuAS\\nND8Vgx6/GbOyPuASND+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj+mN56+HTxCvjGUbj8AAAD/\\nAAAA/wAAAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAA\\nAP//AAD/AAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/\\nAAAA/wAAAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAA\\nAP8AAAD//wAA/wAAAP8AAAD/AAAA//8AAP8AAAD/AAAA/wAAAP//AAD/AAAA/wAAAP/vOnc/\\n4w91P+bTeD9OlXg/lO50P9iadz/QNnk/ysl1PyAedj/m03g/7zp3P+MPdT/Ymnc/TpV4P5Tu\\ndD8gHnY/0DZ5P8rJdT/jD3U/5tN4P+86dz+U7nQ/2Jp3P06VeD/KyXU/IB52P9A2eT+GN3o/\\negx4P37Qez/jkXs/K+t3P26Xej9nM3w/X8Z4P7caeT9+0Hs/hjd6P3oMeD9ul3o/45F7Pyvr\\ndz+3Gnk/ZzN8P1/GeD96DHg/ftB7P4Y3ej8r63c/bpd6P+ORez9fxng/txp5P2czfD8AAAAA\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNzIw/AAAAAAAA\\nAAAAAAAAzcyMPwAAAAAAAAAAAAAAAM3MjD/NzIw/zcyMP83MjD8AAAD/AAAA/wAAAP//AAD/\\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzcyMPwAA\\nAAAAAAAAAAAAAM3MjD8AAAAAAAAAAAAAAADNzIw/zcyMP83MjD/NzIw/h3WGvImIiLwAAACA\\nzcyMP83MjD8AAACAh3WGvM3MjD8AAACAAAABAL++Pj+/vj4/v74+P83MTD6CIbY+pk86PwAA\\nAAAuVTo/Ygu2PgAAAAAAAMB/AADAfwAAwH8AAMB/AADAfwAAwH8AAAABAQAAAQABAAAAAAA/\\nAAAAPwAAAAA9Cnc/PQp3PwAAAAA9Cnc/PQp3P4mIiDyy+ng/yRl1P2MuUTw9Cnc/PQp3PwAA\\nAACy+ng/yRl1P2MuUTzbAno/oBF0P42rPTs9Cnc/PQp3PwAAAADbAno/oBF0P42rPTsdp3k/\\nXm10P4mICLw9Cnc/PQp3PwAAAAAdp3k/Xm10P4mICLxmEng/FQJ2P6NMgLw9Cnc/PQp3PwAA\\nAABmEng/FQJ2P6NMgLwVAnY/ZhJ4P6NMgLw9Cnc/PQp3PwAAAAAVAnY/ZhJ4P6NMgLxebXQ/\\nHad5P4mICLw9Cnc/PQp3PwAAAABebXQ/Had5P4mICLygEXQ/2wJ6P42rPTs9Cnc/PQp3PwAA\\nAACgEXQ/2wJ6P42rPTvJGXU/svp4P2MuUTw9Cnc/PQp3PwAAAADJGXU/svp4P2MuUTw9Cnc/\\nPQp3P4mIiDwAAIA/AACAPwAAAAA9Cnc/PQp3P4mIiDyy+ng/yRl1P2MuUTwAAIA/AACAPwAA\\nAACy+ng/yRl1P2MuUTzbAno/oBF0P42rPTsAAIA/AACAPwAAAADbAno/oBF0P42rPTsdp3k/\\nXm10P4mICLwAAIA/AACAPwAAAAAdp3k/Xm10P4mICLxmEng/FQJ2P6NMgLwAAIA/AACAPwAA\\nAABmEng/FQJ2P6NMgLwVAnY/ZhJ4P6NMgLwAAIA/AACAPwAAAAAVAnY/ZhJ4P6NMgLxebXQ/\\nHad5P4mICLwAAIA/AACAPwAAAABebXQ/Had5P4mICLygEXQ/2wJ6P42rPTsAAIA/AACAPwAA\\nAACgEXQ/2wJ6P42rPTvJGXU/svp4P2MuUTwAAIA/AACAPwAAAADJGXU/svp4P2MuUTw9Cnc/\\nPQp3P4mIiDzFBDU/IgU1PwAAAADFBDU/IgU1PwAAAADFBDU/IgU1PwAAAADZBDU/EAU1P/98\\ntLXZBDU/EAU1P/98tLXZBDU/EAU1P/98tLXUBDU/EwU1PwGX+zTUBDU/EwU1PwGX+zTUBDU/\\nEwU1PwGX+zTeBDU/CAU1P+Z3CzbeBDU/CAU1P+Z3CzbeBDU/CAU1P+Z3Czb0BDU/9AQ1PyN9\\nNDb0BDU/9AQ1PyN9NDb0BDU/9AQ1PyN9NDYIBTU/3wQ1P+LICjYIBTU/3wQ1P+LICjYIBTU/\\n3wQ1P+LICjYTBTU/1AQ1P+3a+DQTBTU/1AQ1P+3a+DQTBTU/1AQ1P+3a+DQQBTU/2QQ1P/98\\ntLUQBTU/2QQ1P/98tLUQBTU/2QQ1P/98tLUiBTU/xQQ1PwAAAAAiBTU/xQQ1PwAAAAAiBTU/\\nxQQ1PwAAAACgReM++G6NvKpaZT+gReM++G6NvKpaZT+gReM++G6NvKpaZT9lEkw/G7a9vgwT\\n9D5lEkw/G7a9vgwT9D5lEkw/G7a9vgwT9D56kmA/QrbmvnaIKb56kmA/QrbmvnaIKb56kmA/\\nQrbmvnaIKb5YiyU//k9hvqD4Or9YiyU//k9hvqD4Or9YiyU//k9hvqD4Or+6blo+um5aPtYS\\ndL+6blo+um5aPtYSdL+6blo+um5aPtYSdL8AUGG+WIslP6D4Or8AUGG+WIslP6D4Or8AUGG+\\nWIslP6D4Or9Ctua+epJgP3aIKb5Ctua+epJgP3aIKb5Ctua+epJgP3aIKb4dtr2+ZRJMPw0T\\n9D4dtr2+ZRJMPw0T9D4dtr2+ZRJMPw0T9D74bo28oEXjPqpaZT/4bo28oEXjPqpaZT/4bo28\\noEXjPqpaZT8AAQABuq93P8Jkdj/SvyA8RK14PzhndT/aEKs7vOZ4P74tdT9mpO26QEF4PzvT\\ndT9GCwO8Pgp3Pz4Kdz/aECu8O9N1P0BBeD9GCwO8vy11P7zmeD9mpO26N2d1P0OteD/aEKs7\\nwmR2P7qvdz/SvyA8UKx6P1dheT/SvyA82ql7P85jeD/aEKs7U+N7P1YqeD9mpO261j17P9LP\\neD9GCwO81AZ6P9MGej/aECu80M94P9c9ez9GCwO8Vip4P1Pjez9mpO26zmN4P9upez/aEKs7\\nV2F5P1Csej/SvyA8AQEBAQEAAAAAAQAAAACAPwAAgD8AAAA/AAAAAQEAAAAAAQAAAAAAPwAA\\nAD8AAAAAAQAAAQEAAAAAAQAAAACAPwAAAD8AAAAAAAEAAQEAAAAAAQAAAAAAPwAAgD8AAAAA\\n6OVtP+jlbT8AAAAA6OVtP+jlbT/NzMw9AACAPwAAgD/NzMw9AQAAAejlbT/o5W0/AAAAAOjl\\nbT/o5W0/zczMPQAAgD8AAIA/zczMPWZmZj8AAAAAAAAAAGZmZj/NzMw9AAAAAAAAgD/NzMw9\\nAAAAAAEAAAFmZmY/AAAAAAAAAABmZmY/zczMPQAAAAAAAIA/zczMPQAAAABmZmY/AAAAAAAA\\nAABmZmY/w9CQPcPQkD0AAIA/w9CQPcPQkD0AAAEBZmZmPwAAAAAAAAAAZmZmP8PQkD3D0JA9\\nAACAP8PQkD3D0JA9mZiYPpmYmD6ZmJg+AACAPwAAAAEBAQEAAAA=\"}]},\"context\":{\"shiny\":false,\"rmarkdown\":null},\"vertexShader\":\"#line 2 1\\n// File 1 is the vertex shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\n\\nattribute vec3 aPos;\\nattribute vec4 aCol;\\nuniform mat4 mvMatrix;\\nuniform mat4 prMatrix;\\nvarying vec4 vCol;\\nvarying vec4 vPosition;\\n\\n#ifdef NEEDS_VNORMAL\\nattribute vec3 aNorm;\\nuniform mat4 normMatrix;\\nvarying vec4 vNormal;\\n#endif\\n\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nattribute vec2 aTexcoord;\\nvarying vec2 vTexcoord;\\n#endif\\n\\n#ifdef FIXED_SIZE\\nuniform vec3 textScale;\\n#endif\\n\\n#ifdef FIXED_QUADS\\nattribute vec3 aOfs;\\n#endif\\n\\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\nvarying float normz;\\nuniform mat4 invPrMatrix;\\n#else\\nattribute vec3 aPos1;\\nattribute vec3 aPos2;\\nvarying float normz;\\n#endif\\n#endif // IS_TWOSIDED\\n\\n#ifdef FAT_LINES\\nattribute vec3 aNext;\\nattribute vec2 aPoint;\\nvarying vec2 vPoint;\\nvarying float vLength;\\nuniform float uAspect;\\nuniform float uLwd;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n \\n#ifndef IS_BRUSH\\n#if defined(NCLIPPLANES) || !defined(FIXED_QUADS) || defined(HAS_FOG) || defined(USE_ENVMAP)\\n vPosition = mvMatrix * vec4(aPos, 1.);\\n#endif\\n \\n#ifndef FIXED_QUADS\\n gl_Position = prMatrix * vPosition;\\n#endif\\n#endif // !IS_BRUSH\\n \\n#ifdef IS_POINTS\\n gl_PointSize = POINTSIZE;\\n#endif\\n \\n vCol = aCol;\\n \\n// USE_ENVMAP implies NEEDS_VNORMAL\\n\\n#ifdef NEEDS_VNORMAL\\n vNormal = normMatrix * vec4(-aNorm, dot(aNorm, aPos));\\n#endif\\n\\n#ifdef USE_ENVMAP\\n vReflection = normalize(reflect(vPosition.xyz/vPosition.w, \\n normalize(vNormal.xyz/vNormal.w)));\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n#ifdef HAS_NORMALS\\n /* normz should be calculated *after* projection */\\n normz = (invPrMatrix*vNormal).z;\\n#else\\n vec4 pos1 = prMatrix*(mvMatrix*vec4(aPos1, 1.));\\n pos1 = pos1/pos1.w - gl_Position/gl_Position.w;\\n vec4 pos2 = prMatrix*(mvMatrix*vec4(aPos2, 1.));\\n pos2 = pos2/pos2.w - gl_Position/gl_Position.w;\\n normz = pos1.x*pos2.y - pos1.y*pos2.x;\\n#endif\\n#endif // IS_TWOSIDED\\n \\n#ifdef NEEDS_VNORMAL\\n vNormal = vec4(normalize(vNormal.xyz), 1);\\n#endif\\n \\n#if defined(HAS_TEXTURE) || defined(IS_TEXT)\\n vTexcoord = aTexcoord;\\n#endif\\n \\n#if defined(FIXED_SIZE) && !defined(ROTATING)\\n vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w;\\n gl_Position = pos + vec4(aOfs*textScale, 0.);\\n#endif\\n \\n#if defined(IS_SPRITES) && !defined(FIXED_SIZE)\\n vec4 pos = mvMatrix * vec4(aPos, 1.);\\n pos = pos/pos.w + vec4(aOfs, 0.);\\n gl_Position = prMatrix*pos;\\n#endif\\n \\n#ifdef FAT_LINES\\n /* This code was inspired by Matt Deslauriers' code in \\n https://mattdesl.svbtle.com/drawing-lines-is-hard */\\n vec2 aspectVec = vec2(uAspect, 1.0);\\n mat4 projViewModel = prMatrix * mvMatrix;\\n vec4 currentProjected = projViewModel * vec4(aPos, 1.0);\\n currentProjected = currentProjected/currentProjected.w;\\n vec4 nextProjected = projViewModel * vec4(aNext, 1.0);\\n vec2 currentScreen = currentProjected.xy * aspectVec;\\n vec2 nextScreen = (nextProjected.xy / nextProjected.w) * aspectVec;\\n float len = uLwd;\\n vec2 dir = vec2(1.0, 0.0);\\n vPoint = aPoint;\\n vLength = length(nextScreen - currentScreen)/2.0;\\n vLength = vLength/(vLength + len);\\n if (vLength > 0.0) {\\n dir = normalize(nextScreen - currentScreen);\\n }\\n vec2 normal = vec2(-dir.y, dir.x);\\n dir.x /= uAspect;\\n normal.x /= uAspect;\\n vec4 offset = vec4(len*(normal*aPoint.x*aPoint.y - dir), 0.0, 0.0);\\n gl_Position = currentProjected + offset;\\n#endif\\n \\n#ifdef IS_BRUSH\\n gl_Position = vec4(aPos, 1.);\\n#endif\\n}\",\"fragmentShader\":\"#line 2 2\\n// File 2 is the fragment shader\\n#ifdef GL_ES\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\nprecision highp float;\\n#else\\nprecision mediump float;\\n#endif\\n#endif\\nvarying vec4 vCol; // carries alpha\\nvarying vec4 vPosition;\\n#if defined(HAS_TEXTURE) || defined (IS_TEXT)\\nvarying vec2 vTexcoord;\\nuniform sampler2D uSampler;\\n#endif\\n\\n#ifdef HAS_FOG\\nuniform int uFogMode;\\nuniform vec3 uFogColor;\\nuniform vec4 uFogParms;\\n#endif\\n\\n#if defined(IS_LIT) && !defined(FIXED_QUADS)\\nvarying vec4 vNormal;\\n#endif\\n\\n#if NCLIPPLANES > 0\\nuniform vec4 vClipplane[NCLIPPLANES];\\n#endif\\n\\n#if NLIGHTS > 0\\nuniform mat4 mvMatrix;\\n#endif\\n\\n#ifdef IS_LIT\\nuniform vec3 emission;\\nuniform float shininess;\\n#if NLIGHTS > 0\\nuniform vec3 ambient[NLIGHTS];\\nuniform vec3 specular[NLIGHTS]; // light*material\\nuniform vec3 diffuse[NLIGHTS];\\nuniform vec3 lightDir[NLIGHTS];\\nuniform bool viewpoint[NLIGHTS];\\nuniform bool finite[NLIGHTS];\\n#endif\\n#endif // IS_LIT\\n\\n#ifdef IS_TWOSIDED\\nuniform bool front;\\nvarying float normz;\\n#endif\\n\\n#ifdef FAT_LINES\\nvarying vec2 vPoint;\\nvarying float vLength;\\n#endif\\n\\n#ifdef USE_ENVMAP\\nvarying vec3 vReflection;\\n#endif\\n\\nvoid main(void) {\\n vec4 fragColor;\\n#ifdef FAT_LINES\\n vec2 point = vPoint;\\n bool neg = point.y < 0.0;\\n point.y = neg ? (point.y + vLength)/(1.0 - vLength) :\\n -(point.y - vLength)/(1.0 - vLength);\\n#if defined(IS_TRANSPARENT) && defined(IS_LINESTRIP)\\n if (neg && length(point) <= 1.0) discard;\\n#endif\\n point.y = min(point.y, 0.0);\\n if (length(point) > 1.0) discard;\\n#endif // FAT_LINES\\n \\n#ifdef ROUND_POINTS\\n vec2 coord = gl_PointCoord - vec2(0.5);\\n if (length(coord) > 0.5) discard;\\n#endif\\n \\n#if NCLIPPLANES > 0\\n for (int i = 0; i < NCLIPPLANES; i++)\\n if (dot(vPosition, vClipplane[i]) < 0.0) discard;\\n#endif\\n \\n#ifdef FIXED_QUADS\\n vec3 n = vec3(0., 0., 1.);\\n#elif defined(IS_LIT)\\n vec3 n = normalize(vNormal.xyz);\\n#endif\\n \\n#ifdef IS_TWOSIDED\\n if ((normz <= 0.) != front) discard;\\n#endif\\n\\n#ifdef IS_LIT\\n vec3 eye = normalize(-vPosition.xyz/vPosition.w);\\n vec3 lightdir;\\n vec4 colDiff;\\n vec3 halfVec;\\n vec4 lighteffect = vec4(emission, 0.);\\n vec3 col;\\n float nDotL;\\n#ifdef FIXED_QUADS\\n n = -faceforward(n, n, eye);\\n#endif\\n \\n#if NLIGHTS > 0\\n // Simulate two-sided lighting\\n if (n.z < 0.0)\\n n = -n;\\n for (int i=0;i 0) {\\n fogF = (uFogParms.y - vPosition.z/vPosition.w)/(uFogParms.y - uFogParms.x);\\n if (uFogMode > 1)\\n fogF = mix(uFogParms.w, 1.0, fogF);\\n fogF = fogF*uFogParms.z;\\n if (uFogMode == 2)\\n fogF = 1.0 - exp(-fogF);\\n // Docs are wrong: use (density*c)^2, not density*c^2\\n // https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/swrast/s_fog.c#L58\\n else if (uFogMode == 3)\\n fogF = 1.0 - exp(-fogF*fogF);\\n fogF = clamp(fogF, 0.0, 1.0);\\n gl_FragColor = vec4(mix(fragColor.rgb, uFogColor, fogF), fragColor.a);\\n } else gl_FragColor = fragColor;\\n#else\\n gl_FragColor = fragColor;\\n#endif // HAS_FOG\\n \\n}\",\"players\":[],\"webGLoptions\":{\"preserveDrawingBuffer\":true}},\"evals\":[],\"jsHooks\":[]} rgl.bringtotop()"},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":null,"dir":"Reference","previous_headings":"","what":"Workers Data — workers","title":"Workers Data — workers","text":"toy data set comprised information workers Income relation variables, used illustrating linear multiple regression.","code":""},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Workers Data — workers","text":"","code":"data(\"workers\")"},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Workers Data — workers","text":"data frame 10 observations following 4 variables. Income income job, numeric vector Experience number years experience, numeric vector Skill skill level job, numeric vector Gender factor levels Female Male","code":""},{"path":"http://friendly.github.io/matlib/reference/workers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Workers Data — workers","text":"","code":"data(workers) plot(Income ~ Experience, data=workers, main=\"Income ~ Experience\", pch=20, cex=2) # simple linear regression reg1 <- lm(Income ~ Experience, data=workers) abline(reg1, col=\"red\", lwd=3) # quadratic fit? plot(Income ~ Experience, data=workers, main=\"Income ~ poly(Experience,2)\", pch=20, cex=2) reg2 <- lm(Income ~ poly(Experience,2), data=workers) fit2 <-predict(reg2) abline(reg1, col=\"red\", lwd=1, lty=1) lines(workers$Experience, fit2, col=\"blue\", lwd=3) # How does Income depend on a factor? plot(Income ~ Gender, data=workers, main=\"Income ~ Gender\") points(workers$Gender, jitter(workers$Income), cex=2, pch=20) means<-aggregate(workers$Income,list(workers$Gender),mean) points(means,col=\"red\", pch=\"+\", cex=2) lines(means,col=\"red\", lwd=2)"},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":null,"dir":"Reference","previous_headings":"","what":"Generalized Vector Cross Product — xprod","title":"Generalized Vector Cross Product — xprod","text":"Given two linearly independent length 3 vectors **** **b**, cross product, \\(\\mathbf{} \\times \\mathbf{b}\\) (read \"cross b\"), vector perpendicular **** **b** thus normal plane containing .","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generalized Vector Cross Product — xprod","text":"","code":"xprod(...)"},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generalized Vector Cross Product — xprod","text":"... N-1 linearly independent vectors length, N.","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generalized Vector Cross Product — xprod","text":"Returns generalized vector cross-product, vector length N.","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Generalized Vector Cross Product — xprod","text":"generalization idea applies two dimensional vectors. See: [https://en.wikipedia.org/wiki/Cross_product] geometric algebraic properties.","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generalized Vector Cross Product — xprod","text":"Matthew Lundberg, [Stack Overflow post][https://stackoverflow.com/questions/36798301/r-compute-cross-product--vectors-physics]","code":""},{"path":"http://friendly.github.io/matlib/reference/xprod.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generalized Vector Cross Product — xprod","text":"","code":"xprod(1:3, 4:6) #> [1] -3 6 -3 # This works for an dimension xprod(c(0,1)) # 2d #> [1] 1 0 xprod(c(1,0,0), c(0,1,0)) # 3d #> [1] 0 0 1 xprod(c(1,1,1), c(0,1,0)) # 3d #> [1] -1 0 1 xprod(c(1,0,0,0), c(0,1,0,0), c(0,0,1,0)) # 4d #> [1] 0 0 0 -1"},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-099","dir":"Changelog","previous_headings":"","what":"matlib 0.9.9","title":"matlib 0.9.9","text":"added symbolicMatrix() create symbolic matrix","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-098","dir":"Changelog","previous_headings":"","what":"matlib 0.9.8","title":"matlib 0.9.8","text":"CRAN release: 2024-07-25 added circle() drawing circles diagrams vectors() now handles 0-length vectors gracefully #50. matrix2latex() generalized allow different bracket types optionally show size matrix.","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-097","dir":"Changelog","previous_headings":"","what":"matlib 0.9.7","title":"matlib 0.9.7","text":"inv() aliases now return invisible matrix verbose = TRUE match behaviour related functions (e.g., gaussianElimination()) GramSchmidt() gains argument, omit_zero_columns control whether -zero columns retained output (issue #48) [Thx: @ggrothendieck] Merge pull request #49 JF retain column names GramSchmidt().","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-096","dir":"Changelog","previous_headings":"","what":"matlib 0.9.6","title":"matlib 0.9.6","text":"CRAN release: 2022-12-08 fix subtle problems related use MASS::fractions() various display functions, #42. (Thx: Phil Chalmers) Fix problem `showEqn(…, simplify=TRUE), #45. (Thx: John Fox) Remove Suggests: rglwidget now rgl package (Thx: Duncan Murdoch); Merge pull request #39 dmurdoch/norglwidget","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-095","dir":"Changelog","previous_headings":"","what":"matlib 0.9.5","title":"matlib 0.9.5","text":"CRAN release: 2021-08-21 fix ‘CRAN packages requiring webshot2 declaring ’ fix error Proj.Rd","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-094","dir":"Changelog","previous_headings":"","what":"matlib 0.9.4","title":"matlib 0.9.4","text":"CRAN release: 2020-10-29 added xprod() vector cross-product added data-beta vignette fix sprintf warning LU [Phil Chalmers] better plotting planes plotEqn3d, alpha=0.9","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-093","dir":"Changelog","previous_headings":"","what":"matlib 0.9.3","title":"matlib 0.9.3","text":"CRAN release: 2020-04-02 gaussianElimination() friends now handle one-row one-column matrices [suggestion Jana Jarecki] improvements plotEqn()","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-092","dir":"Changelog","previous_headings":"","what":"matlib 0.9.2","title":"matlib 0.9.2","text":"CRAN release: 2019-05-29 Bug fix arrows3d.r [Thx: Douglas Whitaker] Bump package version matlib gets hex sticker Incorporated numerical tolerance GramSchmidt() [John Fox] Improved computation SVD [John Fox] now export printMatrix() now export circle3d() [req: Marco Scazzocchio] now use_revdep()","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-091","dir":"Changelog","previous_headings":"","what":"matlib 0.9.1","title":"matlib 0.9.1","text":"CRAN release: 2018-04-04 fix references car datatsets -> carData","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-090","dir":"Changelog","previous_headings":"","what":"matlib 0.9.0","title":"matlib 0.9.0","text":"showEqn() gains reduced logical print unique regression equations lm()-type object passed. May combined simplify logical argument reductions echelon() gains reduced logical indicate whether reduced non-reduced form computed powerMethod() gains plot = TRUE logical draw iteration history added support 'lm' objects showEqn() show design matrix equations added verbose option GramSchmidt() another example added printMatEqn() print matrix expressions side--side prepare release cumulative major version Phil Chalmers now recognized officially package author [aut]","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-083","dir":"Changelog","previous_headings":"","what":"matlib 0.8.3","title":"matlib 0.8.3","text":"rename functions consistency: eig() -> Eigen(), point_on_line() -> pointOnLine(), power_method() -> powerMethod(), row_cofactors() -> rowCofactors(), row_minors() -> rowMinors(). add Det() compute determinants elimination, eigenvalues, minors cofactors, possibility verbose output. plotEqn3d() gets axes argument lit control lighting planes; lit solves problem planes becoming indistinguishable rotations. add svdDemo() function illustrate SVD 3 x 3 matrix [thx: Duncan Murdoch] add symMat() create square symmetric matrix vector. add angle() calculate angle vectors powerMethod() gets keep argument, possible use plotting convergence eigenvectors. add adjoint(), round methods determinants add GramSchmidt() Gram-Schmidt algorithm columns matrix. existing function gsorth() deprecated removed. gsorth() deprecated. fixed use MASS::fractions gaussianElimination added printMatEqn() print matrix expressions side--side","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-081","dir":"Changelog","previous_headings":"","what":"matlib 0.8.1","title":"matlib 0.8.1","text":"CRAN release: 2016-09-17 remove inst/doc satisfy CRAN","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-080","dir":"Changelog","previous_headings":"","what":"matlib 0.8.0","title":"matlib 0.8.0","text":"add vignette properties determinants (det-ex1) add vignette evaluation determinants (det-ex2) add vignette matrix inverse (inv-ex1) now use travis-ci check builds add vignette matrix inverse using EROs (inv-ex2) extended use geometric diagrams vignettes add vignette generalized inverse (ginv) added J() unit vectors, matrices added LU() LU decomposition","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-073","dir":"Changelog","previous_headings":"","what":"matlib 0.7.3","title":"matlib 0.7.3","text":"CRAN release: 2016-06-06 Changed gaussianElimination() defining local ERO functions make algorithm clearer; verbose mode, show ERO. Added draw argument vectors3d() arrows3d(), defaults TRUE. FALSE, just returns returns “reg.length” help scaling. Optionally scale error spheres (circles) produced regvec3d() project confidence intervals x1 x2 axes. Small cosmetic changes regvec3d(). showEqn() gaussianElimination() get latex arguments, print results LaTeX format [thx: Phil Chalmers]","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-072","dir":"Changelog","previous_headings":"","what":"matlib 0.7.2","title":"matlib 0.7.2","text":"CRAN release: 2016-02-08 added argument error.sphere plot.regvec3d() [JF] remove use lengths() corner() avoid R version dependency","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-070","dir":"Changelog","previous_headings":"","what":"matlib 0.7.0","title":"matlib 0.7.0","text":"CRAN release: 2016-01-06 use corner() vectors3d.Rd added arc() 2D, 3D vector diagrams show angles vectors added regvec3d() 2D, 3D vector diagrams representing bivariate multiple regression model, lm(y ~ x1 + x2) [thx: John Fox] added internal .arrows() produce nice arrows 2D vector() diagrams fixed numerous small problems vector diagrams fixed erroneous statements vignettes showEqn() now aligns terms vertically prints without quotes reversed sense absolute points_on_line() clarified documentation","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-060","dir":"Changelog","previous_headings":"","what":"matlib 0.6.0","title":"matlib 0.6.0","text":"CRAN release: 2015-12-15 added vandermode() function added vec() convenience function vectorize matrix added is_square_matrix() tests added power_method(), power method dominant eigenvector [thx: Gaston Sanchez] added arrows3d() 3D geometric diagrams added vectors3d() 3D geometric diagrams added corner() 2D, 3D geometric diagrams added documentation content man/matlib.Rd README.md","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-052","dir":"Changelog","previous_headings":"","what":"matlib 0.5.2","title":"matlib 0.5.2","text":"CRAN release: 2015-11-19 added swp() function added vignette(\"gramreg\") - Gram-Schmidt Orthogonalization Regression","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-051","dir":"Changelog","previous_headings":"","what":"matlib 0.5.1","title":"matlib 0.5.1","text":"CRAN release: 2015-11-10 added len() convenience function Euclidean lengths added plotEqn3d() function using rgl plot equations 3 unknowns reorganized matlib.R become package .Rd document renamed proj() -> Proj() avoid conflict stats::proj() added vectors() plotting geometric diagrams added vignette(“linear-equations”) - Solving Linear Equations","code":""},{"path":"http://friendly.github.io/matlib/news/index.html","id":"matlib-041","dir":"Changelog","previous_headings":"","what":"matlib 0.4.1","title":"matlib 0.4.1","text":"CRAN release: 2015-11-05 Initial CRAN release","code":""}]