{"id":16479476,"url":"https://github.com/gramian/matrico","last_synced_at":"2026-03-05T00:31:24.157Z","repository":{"id":43820239,"uuid":"401677844","full_name":"gramian/matrico","owner":"gramian","description":"A flonum matrix module for CHICKEN Scheme.","archived":false,"fork":false,"pushed_at":"2024-11-11T18:18:57.000Z","size":186,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-04T22:34:32.185Z","etag":null,"topics":["chicken-egg","chicken-scheme","chicken-scheme-eggs","linear-algebra","lisp","matrix-calculations","matrix-computations","matrix-library","numerical-computation","numerical-computing","scheme","scheme-language","scheme-library","scientific-computing"],"latest_commit_sha":null,"homepage":"http://numerical-schemer.xyz","language":"Scheme","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gramian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-08-31T11:27:25.000Z","updated_at":"2024-12-26T21:29:16.000Z","dependencies_parsed_at":"2025-02-28T14:53:52.961Z","dependency_job_id":"e42d7eef-197e-4e40-8d5e-6ee64105189c","html_url":"https://github.com/gramian/matrico","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/gramian/matrico","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gramian%2Fmatrico","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gramian%2Fmatrico/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gramian%2Fmatrico/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gramian%2Fmatrico/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gramian","download_url":"https://codeload.github.com/gramian/matrico/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gramian%2Fmatrico/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30102384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T23:59:36.199Z","status":"ssl_error","status_checked_at":"2026-03-04T23:56:48.556Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chicken-egg","chicken-scheme","chicken-scheme-eggs","linear-algebra","lisp","matrix-calculations","matrix-computations","matrix-library","numerical-computation","numerical-computing","scheme","scheme-language","scheme-library","scientific-computing"],"created_at":"2024-10-11T12:51:59.686Z","updated_at":"2026-03-05T00:31:24.133Z","avatar_url":"https://github.com/gramian.png","language":"Scheme","funding_links":[],"categories":[],"sub_categories":[],"readme":"![matrico 0.7](res/matrico-logo.svg) matrico\n============================================\n\n* **Project**: matrico ([Esperanto for \"matrix\"](https://translate.google.com/?sl=eo\u0026tl=en\u0026text=matrico\u0026op=translate))\n\n* **Summary**: A flonum matrix module for CHICKEN Scheme.\n\n* **Authors**: Christian Himpe (0000-0003-2194-6754)\n\n* **License**: [zlib-acknowledgement](https://spdx.org/licenses/zlib-acknowledgement.html)\n\n* **Version**: 0.7 (2024-11-??)\n\n* **Depends**: [CHICKEN Scheme](http://call-cc.org) (\u003e= 5.1)\n\n* **Website**: http://numerical-schemer.xyz (Development Blog)\n\n* **Reference**: http://wiki.call-cc.org/eggref/5/matrico (User Reference)\n\n* **Repository**: https://github.com/gramian/matrico (Developer Documentation)\n\n* **Category**: math (numerical mathematics)\n\n* **Audience**: MATLAB, Octave, Scilab, Julia, NumPy (Python) users\n\n* **Wikidata**: https://www.wikidata.org/wiki/Q113997718\n\n* **Container**: https://hub.docker.com/r/gramian/matrico\n\n## Table of Contents\n\n* [Getting Started](#getting-started)\n* [Background](#background)\n* [Reference](#function-reference)\n* [Performance](#performance)\n* [Development](#development)\n\n## Getting Started\n\n`matrico` is a _Scheme_ module for numerical matrix computations encapsulated in a _CHICKEN Scheme_ egg.\n\n### Try `matrico` Container\n\n```shell\ndocker run -it gramian/matrico\n```\n\n### Clone and Try `matrico` Code\n\n```shell\n./matrico.sh\n```\n\n### Install and Test `matrico` Egg\n\n```shell\nCHICKEN_INSTALL_REPOSITORY=\"/my/egg/directory/\" chicken-install -test matrico\n```\n\n### Locate and Provide `matrico` Egg\n\n```shell\nCHICKEN_REPOSITORY_PATH=\"`chicken-install -repository`:/my/egg/directory/\" csi\n```\n\n### Run Demo Codes\n\n```shell\n./RUNME.sh\n```\n\n```shell\ncsi demos/heat.scm\n```\n\n```shell\ncsi demos/flame.scm\n```\n\n### Minimal Explanation\n\n`matrico` is a ...\n\n* ... matrix-based numerical computing environment for, and fully written in, _Scheme_.\n\n* ... self-contained implementation with minimal dependencies.\n\n* ... numerical linear algebra code with functional back-end design.\n\n## Background\n\n### Why `matrico`\n\n* Provide more numerical capabilities to _CHICKEN Scheme_ community.\n\n* Contribute scientific computing knowledge as _Scheme_ code.\n\n* Educational project for author and readers.\n\n### Design Concepts\n\n* Provide dense two-dimensional arrays (matrix) of floating-point numbers (flonum) for _CHICKEN Scheme_.\n\n* Provide linear algebra and typical calculator functions for matrices.\n\n* Use only [included modules](http://wiki.call-cc.org/man/5/Included%20modules) of _CHICKEN Scheme_.\n\n* A matrix is a list of (homogeneous) vectors.\n\n* A matrix uses column-major ordering of entries.\n\n* A matrix uses one-based indexing.\n\n* A matrix can only have real-valued flonum entries.\n\n* Everything is a matrix, particularly, matrixes are incompatible with _Scheme_'s (homogeneous) vectors.\n\n* Matrix transformations are based on functional map-reduce approach.\n\n### Similar Projects\n\n* Common Lisp [MatLisp](http://matlisp.sourceforge.net/)\n\n* Common Lisp [Lisplab](https://common-lisp.net/project/lisplab/)\n\n* Common Lisp [CLEM](https://github.com/slyrus/clem)\n\n* Chez Scheme [chez-matrices](https://github.com/LiamPack/chez-matrices)\n\n* Racket [math/matrix](https://docs.racket-lang.org/math/matrices.html)\n\n* Racket [flomat](https://docs.racket-lang.org/manual-flomat/)\n\n* Clojure [core.matrix](https://mikera.github.io/core.matrix/doc/clojure.core.matrix.html)\n\n## Function Reference\n\n* `matrico` Module\n    * `mx` Library (User-Facing Matrix Frontend)\n    * `dense` Module (Column Interface Specialization)\n    * `matrix` Functor (Functional Matrix Backend)\n    * `f64vector` Module (Homogeneous Flonum Vector Functions)\n    * `fpmath` Module (User-Facing Additional Flonum Functions)\n    * `utils` Module (Additional Foundational Functions)\n* Extra Tools\n    * `check` Library (Testing Helper Functions)\n\n### The `matrico` Module\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003eUser-Facing Function Reference (click to expand)\u003c/summary\u003e\n\n#### Meta Function\n\n* `(matrico)` returns **void**, prints help message for `matrico` function.\n\n* `(matrico sym)` returns **any**, depending on argument symbol `sym`:\n  * `'list` - returns **void**, prints list of \"`mx`\" functions;\n  * `'about` - returns **void**, prints summary about `matrico`;\n  * `'banner` - returns **void**, prints the `matrico` banner;\n  * `'version` - returns **pair** holding major and minor version numbers of `matrico`;\n  * `'citation` - returns **void**, prints citation information for `matrico`;\n  * `'benchmark` - returns **fixnum**, prints approximated million-instructions-per-second for current machine;\n  * otherwise - returns **boolean** answering if argument is a symbol matching an existing function, starting with \"`mx`\", and prints its docstring.\n\n#### Matrix Generators\n\n* `(mx rows cols val)` returns `rows`-by-`cols` **matrix** with all entries set to **flonum** `val` for positive **fixnum**s `rows` and `cols`.\n\n* `(mx% lst)` returns **matrix** from row-major **list**-of-**lists**-of-**flonum**s `lst`.\n\n* `(mx-identity dims)` returns `dims`-by-`dims` identity **matrix** for a positive **fixnum** `dims`.\n\n* `(mx-exchange dims)` returns `dims`-by-`dims` exchange **matrix** for a positive **fixnum** `dims`.\n\n* `(mx-hilbert dims)` returns `dims`-by-`dims` Hilbert **matrix** for a positive **fixnum** `dims`.\n\n* `(mx-pascal dims)` returns `dims`-by-`dims` (lower triangular) Pascal **matrix** for a positive **fixnum** `dims`.\n\n* `(mx-lehmer rows cols)` returns `rows`-by-`cols` Lehmer **matrix** for the positive **fixnum**s `rows` and `cols`.\n\n* `(mx-random rows cols low upp)` returns `rows`-by-`cols` uniformly distributed random **matrix** in the interval **flonum** `low` to **flonum** `upp` for the positive **fixnum**s `rows` and `cols`.\n\n* `(mx-tridiag dims low mid upp)` returns `dims`-by-`dims` **matrix** with lower, main, upper band entries given by the **flonum**s `low`, `mid`, `upp` for a positive **fixnum** `dims`.\n\n* `(mx-unit dims num)` returns `dims`-by-one column-**matrix** of zeros except the positive **fixnum** `num`-th entry set to one, for a positive **fixnum** `dims`, aka canonical base vector.\n\n* `(mx-iota dims)` returns `dims`-by-one column-**matrix** with entries set to corresponding row index for a positive **fixnum** `dims`.\n\n* `(mx-linspace x y num)` returns **matrix** of positive **fixnum** `num` row-wise linearly spaced entries with endpoints given by **flonum**s or column-`matrix`es `x` and `y`.\n\n* `(mx-logspace x y num)` returns **matrix** of positive **fixnum** `num` row-wise (base-10) logarithmic spaced entries with endpoints given by **flonum**s or column-**matrix**es `x` and `y`.\n\n#### Matrix Dimensions\n\n* `(mx-cols mat)` returns **fixnum** number of columns of **matrix** `mat`.\n\n* `(mx-rows mat)` returns **fixnum** number of rows of **matrix** `mat`.\n\n* `(mx-numel mat)` returns **fixnum** number of entries of **matrix** `mat`.\n\n* `(mx-dims mat)` returns **fixnum** number of dimensions of **matrix** `mat`.\n\n#### Matrix Predicates\n\n* `(mx? any)` returns **boolean** answering if `any` is a **matrix**.\n\n* `(mx-col? mat)` returns **boolean** answering if **matrix** `mat` has only a single column.\n\n* `(mx-row? mat)` returns **boolean** answering if **matrix** `mat` has only a single row.\n\n* `(mx-scalar? mat)` returns **boolean** answering if **matrix** `mat` has only a single row and single column.\n\n* `(mx-vector? mat)` returns **boolean** answering if **matrix** `mat` has only a single row or single column.\n\n* `(mx-square? mat)` returns **boolean** answering if **matrix** `mat` has the same number of rows and columns.\n\n* `(mx-samecols? x y)` returns **boolean** answering if **matrix**es `x` and `y` have same number of columns.\n\n* `(mx-samerows? x y)` returns **boolean** answering if **matrix**es `x` and `y` have same number of rows.\n\n* `(mx-samedim? x y)` returns **boolean** answering if **matrix**es `x` and `y` have same number of columns and rows.\n\n* `(mx-any? pred mat)` returns **boolean** answering if any entry of **matrix** `mat` fulfills predicate **procedure** `pred`.\n\n* `(mx-all? pred mat)` returns **boolean** answering if all entries of **matrix** `mat` fulfill predicate **procedure** `pred`.\n\n* `(mx=? x y tol)` returns **boolean** answering if all entry-wise distances between **matrix**es `x` and `y` are below tolerance **flonum** `tol`.\n\n#### Matrix Accessors\n\n* `(mx-ref11 mat)` returns **flonum** being the top, left entry of **matrix** `mat`.\n\n* `(mx-ref mat row col)` **flonum** being **matrix** `mat` entry in row and column specified by positive **fixnum**s `row`, `col`.\n\n* `(mx-set mat row col val)` returns **matrix** copy of **matrix** `mat` but with entry in row **fixnum** `row` and column **fixnum** `col` set to **flonum** or one-by-one **matrix** `val`.\n\n* `(mx-set! mat row col val)` returns **void**, sets entry of **matrix** `mat` in row and column specified by positive **fixnum**s `row` and `col` to **flonum** or one-by-one **matrix** `val`.\n\n* `(mx-col mat col)` returns **matrix** being **matrix** `mat`'s column specified by positive **fixnum** `col`.\n\n* `(mx-row mat row)` returns **matrix** being **matrix** `mat`'s row specified by positive **fixnum** `row`.\n\n* `(mx-diag mat)` returns column-**matrix** holding **matrix** `mat`'s diagonal entries.\n\n* `(mx-submatrix mat row1 row2 col1 col2)` returns **matrix** holding entries of **matrix** `mat` in rows specified by positive **fixnum**s `row1` to `row2` and columns specified by positive **fixnum**s `col1` to `col2`.\n\n#### Matrix Expanders\n\n* `(mx+ x y)` returns **matrix** of entry-wise addition of **matrix**es `x` and `y`.\n\n* `(mx* x y)` returns **matrix** of entry-wise multiplication of **matrix**es `x` and `y`.\n\n* `(mx- x y)` returns **matrix** of entry-wise subtraction of **matrix**es `x` and `y`.\n\n* `(mx/ x y)` returns **matrix** of entry-wise division of **matrix**es `x` by `y`.\n\n* `(mx^ x y)` returns **matrix** of entry-wise exponentiation of **matrix**es `x` to the `y`.\n\n* `(mx-where pred x y)` returns **matrix** of entries of **matrix**es `x` or `y` based on predicate **procedure** `pred`.\n\n#### Matrix Mappers\n\n##### Elementary Functions\n\n* `(mx- x)` returns **matrix** of entry-wise negation of **matrix** `x`.\n\n* `(mx/ x)` returns **matrix** of entry-wise reciprocal of **matrix** `x`.\n\n* `(mx*2 x)` returns **matrix** of entry-wise doubling of **matrix** `x`.\n\n* `(mx^2 x)` returns **matrix** of entry-wise squaring of **matrix** `x`.\n\n##### Entry-Wise Rounding Functions\n\n* `(mx-round mat)` returns **matrix** with entries of **matrix** `mat` rounded to nearest integer.\n\n* `(mx-floor mat)` returns **matrix** with entries of **matrix** `mat` rounded to nearest upper integer.\n\n* `(mx-ceil mat)` returns **matrix** with entries of **matrix** `mat` rounded to nearest lower integer.\n\n##### Entry-Wise Generalized Functions\n\n* `(mx-abs mat)` returns **matrix** with entry-wise absolute value of **matrix** `mat`.\n\n* `(mx-sign mat)` returns **matrix** with entry-wise sign of **matrix** `mat`.\n\n* `(mx-delta mat)` returns **matrix** with entry-wise Kronecker delta of **matrix** `mat`.\n\n* `(mx-heaviside mat)` returns **matrix** with entry-wise Heaviside step of **matrix** `mat`.\n\n##### Entry-Wise Trigonometric Functions\n\n* `(mx-sin mat)` returns **matrix** with entry-wise sine of **matrix** `mat`.\n\n* `(mx-cos mat)` returns **matrix** with entry-wise cosine of **matrix** `mat`.\n\n* `(mx-tan mat)` returns **matrix** with entry-wise tangent of **matrix** `mat`.\n\n##### Entry-Wise Inverse Trigonometric Functions\n\n* `(mx-asin mat)` returns **matrix** with entry-wise inverse sine of **matrix** `mat`, aka arcsine.\n\n* `(mx-acos mat)` returns **matrix** with entry-wise inverse cosine of **matrix** `mat`, aka arccosine.\n\n* `(mx-atan mat)` returns **matrix** with entry-wise inverse tangent of **matrix** `mat`, aka arctangent.\n\n##### Entry-Wise Hyperbolic Functions\n\n* `(mx-sinh mat)` returns **matrix** with entry-wise hyperbolic sine of **matrix** `mat`.\n\n* `(mx-cosh mat)` returns **matrix** with entry-wise hyperbolic cosine of **matrix** `mat`.\n\n* `(mx-tanh mat)` returns **matrix** with entry-wise hyperbolic tangent of **matrix** `mat`.\n\n##### Entry-Wise Inverse Hyperbolic Functions\n\n* `(mx-asinh mat)` returns **matrix** with entry-wise inverse hyperbolic sine of **matrix** `mat`, aka area hyperbolic sine.\n\n* `(mx-acosh mat)` returns **matrix** with entry-wise inverse hyperbolic cosine of **matrix** `mat`, aka area hyperbolic cosine.\n\n* `(mx-atanh mat)` returns **matrix** with entry-wise inverse hyperbolic tangent of **matrix** `mat`, aka area hyperbolic tangent.\n\n##### Entry-Wise Haversed Trigonometric Functions\n\n* `(mx-hsin mat)` returns **matrix** with entry-wise haversed sine of **matrix** `mat`.\n\n* `(mx-hcos mat)` returns **matrix** with entry-wise haversed cosine of **matrix** `mat`.\n\n##### Entry-Wise Haversed Trigonometric Functions\n\n* `(mx-lnsinh mat)` returns **matrix** with entry-wise log-sinh of **matrix** `mat`.\n\n* `(mx-lncosh mat)` returns **matrix** with entry-wise log-cosh of **matrix** `mat`.\n\n##### Entry-Wise Roots\n\n* `(mx-sqrt mat)` returns **matrix** with entry-wise square root of **matrix** `mat`.\n\n* `(mx-signsqrt mat)` returns **matrix** with entry-wise sign times square-root of absolute value of **matrix** `mat`.\n\n##### Entry-Wise Logarithms\n\n* `(mx-ln mat)` returns **matrix** with entry-wise natural logarithm of **matrix** `mat`.\n\n* `(mx-lb mat)` returns **matrix** with entry-wise base-2 logarithm of **matrix** `mat`.\n\n* `(mx-lg mat)` returns **matrix** with entry-wise base-10 logarithm of **matrix** `mat`.\n\n##### Entry-Wise Exponential\n\n* `(mx-exp mat)` returns **matrix** with entry-wise exponential of **matrix** `mat`.\n\n* `(mx-gauss mat)` returns **matrix** with entry-wise Gaussian of **matrix** `mat`.\n\n##### Entry-Wise Special Functions\n\n* `(mx-sinc mat)` returns **matrix** with entry-wise cardinal sine of **matrix** `mat`.\n\n* `(mx-sigm mat)` returns **matrix** with entry-wise sigmoid of **matrix** `mat`.\n\n* `(mx-stirling mat)` returns **matrix** with entry-wise Stirling approximation of **matrix** `mat`.\n\n#### Matrix Reducers\n\n##### Sums\n\n* `(mx-rowsum mat)` returns column-**matrix** of summing row entries of **matrix** `mat`.\n\n* `(mx-colsum mat)` returns row-**matrix** of summing column entries of **matrix** `mat`.\n\n* `(mx-sum mat)` returns **flonum** of summing all entries of **matrix** `mat`.\n\n##### Products\n\n* `(mx-rowprod mat)` returns column-**matrix** of multiplying row entries of **matrix** `mat`.\n\n* `(mx-colprod mat)` returns row-**matrix** of multiplying column entries of **matrix** `mat`.\n\n* `(mx-prod mat)` returns **flonum** of multiplying all entries of **matrix** `mat`.\n\n##### Minima\n\n* `(mx-rowmin mat)` returns column-**matrix** of row-wise minima of **matrix** `mat`.\n\n* `(mx-colmin mat)` returns row-**matrix** of column-wise minima of **matrix** `mat`.\n\n* `(mx-min mat)` returns **flonum** minimum of all **matrix** `mat` entries.\n\n##### Maxima\n\n* `(mx-rowmax mat)` returns column-**matrix** of row-wise maxima of **matrix** `mat`.\n\n* `(mx-colmax mat)` returns row-**matrix** of column-wise maxima of **matrix** `mat`.\n\n* `(mx-max mat)` returns **flonum** maximum of all **matrix** `mat` entries.\n\n##### Midrange\n\n* `(mx-rowmidr mat)` returns column-**matrix** of row-wise midrange of **matrix** `mat`.\n\n* `(mx-colmidr mat)` returns row-**matrix** of column-wise midrange of **matrix** `mat`.\n\n* `(mx-midr mat)` returns **flonum** midrange of all **matrix** `mat` entries.\n\n##### Means\n\n* `(mx-rowmean mat typ)` returns column-**matrix** of row-wise power means of **matrix** `mat` of type **symbol** `typ`, which can be `-1`, `0`, `1`, `2`, or `'inf`.\n\n* `(mx-colmean mat typ)` returns row-**matrix** of column-wise power means of **matrix** `mat` of type **symbol** `typ`, which can be `-1`, `0`, `1`, `2`, or `'inf`.\n\n* `(mx-mean mat typ)` returns **flonum** power mean of all **matrix** `mat` entries of type **symbol** `typ`, which can be `-1`, `0`, `1`, `2`, or `'inf`.\n\n##### Norms\n\n* `(mx-rownorm mat typ)` returns column-**matrix** of row-wise matrix norms of **matrix** `mat` of type **symbol** `typ`, which can be `1`, `2`, or `'inf`.\n\n* `(mx-colnorm mat typ)` returns row-**matrix** of column-wise matrix norms of **matrix** `mat` of type **symbol** `typ`, which can be `1`, `2`, or `'inf`.\n\n* `(mx-norm mat typ)` returns **flonum** matrix norms of **matrix** `mat` of type **symbol** `typ`, which can be `1`, `'inf`, `'fro`, or `'max`.\n\n#### Linear Algebra\n\n* `(mx-horcat x y)` returns **matrix** of horizontally concatenated **matrix**es `x` and `y`.\n\n* `(mx-vercat x y)` returns **matrix** of vertically concatenated **matrix**es `x` and `y`.\n\n* `(mx-vec mat)` returns **matrix** of vertically concatenated columns of **matrix** `mat`, aka vectorization.\n\n* `(mx-transpose mat)` returns **matrix** of entries of **matrix** `mat` with swapped row and column indices.\n\n* `(mx-axpy a x y)` returns **matrix** of entry-wise generalized addition of **flonum** `a` times **matrix** `x` plus **matrix** `y`, aka \"a times x plus y\".\n\n* `(mx-sympart mat)` returns **matrix** being symmetric part of square **matrix** `mat`.\n\n* `(mx-skewpart mat)` returns **matrix** being skey-symmetric part of square **matrix** `mat`, aka anti-symmetric part.\n\n* `(mx-diagonal mat)` returns diagonal **matrix** from column **matrix** `mat`.\n\n##### Linear Problems\n\n* `(mx-qr mat)` returns **pair** of orthogonal **matrix** Q and upper right triangular **matrix** R factoring full column rank **matrix** `mat`, via QR.\n\n* `(mx-solver mat)` returns **function** returning column-**matrix** solving the linear (least-squares) problem of **matrix** `mat`, given a column-**matrix** `vec`.\n\n* `(mx-solve mat vec)` returns column-**matrix** solving the linear (least-squares) problem of **matrix** `mat` and column-**matrix** `vec`.\n\n* `(mx-orth mat)` returns **matrix** orthogonalizing **matrix** `mat`.\n\n* `(mx-absdet mat)` returns **flonum** being absolute value of the determinant of **matrix** `mat`.\n\n* `(mx-logdet mat)` returns **flonum** being the (natural) logarithm of the determinant of **matrix** `mat`.\n\n##### Traces\n\n* `(mx-trace mat)` returns **flonum** being sum of square **matrix** `mat` diagonal entries.\n\n* `(mx-multrace mat)` returns **flonum** being product of square **matrix** `mat` diagonal entries.\n\n* `(mx-prodtrace* x yt)` returns **flonum** being the trace of the matrix product of **matrix** `x` and transposed **matrix** `yt`.\n\n* `(mx-prodtrace x y)` returns **flonum** being the trace of the matrix product of **matrix**es `x` and `y`.\n\n##### Matrix Multiplication\n\n* `(mx-scalar xt y)` returns **flonum** resulting from scalar product of column-**matrix**es `xt` and `y`.\n\n* `(mx-dyadic x y)` returns **flonum** resulting from dyadic product of column-**matrix** `x` and row-**matrix** `y`.\n\n* `(mx-dot* xt y)` returns **matrix** resulting from matrix multiplication of transposed **matrix** `xt` and **matrix** `y`.\n\n* `(mx-dot x y)` returns **matrix** resulting from matrix multiplication of **matrix**es `x` and `y`.\n\n* `(mx-gram mat)` returns **matrix** resulting from matrix multiplication of (transposed) **matrix** `mat` with itself, aka Gram matrix.\n\n* `(mx-gram* mat)` returns **matrix** resulting from matrix multiplication of **matrix** `mat` with itself transposed.\n\n* `(mx-square mat)` returns **matrix** resulting from matrix multiplication of **matrix** `mat` with itself.\n\n##### Multivariate Statistics\n\n* `(mx-xcov x y)` returns **matrix** of cross-covariances of **matrix**es `x` and `y`, representing columns of observations.\n\n* `(mx-cov mat)` returns **matrix** of covariances of **matrix** `mat`, representing columns of observations.\n\n* `(mx-var mat)` returns column **matrix** of variances of **matrix** `mat`, representing columns of observations.\n\n* `(mx-std mat)` returns column **matrix** of standard deviations of **matrix** `mat`, representing columns of observations.\n\n* `(mx-xcor x y)` returns **matrix** of cross-correlations of **matrix**es `x` and `y`, representing columns of observations.\n\n* `(mx-cor mat)` returns **matrix** of correlations of **matrix** `mat`, representing columns of observations.\n\n* `(mx-angle x y)` returns **matrix** of angles between **matrix**es `x` and `y`, representing columns of observations.\n\n* `(mx-coher x y)` returns **flonum** of distance coherence between **matrix**es `x` and `y`.\n\n#### Analysis\n\n* `(mx-diff mat)` returns **matrix** of differences of consecutives columns of **matrix** `mat`.\n\n* `(mx-trapz mat)` returns column-**matrix** trapezoid approximate integral of **matrix** `mat` being columns data-points of rows-dimensional function.\n\n* `(mx-ode2-hyp num sys tim x0)` states-times-steps **matrix** trajectory solving an ordinary differential equation, by a 2nd order hyperbolic Runge-Kutta method of **fixnum** `num` stages, with vector field **procedure** or **pair** of vector field and output **procedure**s `sys`, time step **flonum** and time horizon **flonum** in **pair** `tim`, initial state column-**matrix** `x0`.\n\n* `(mx-ode2-ssp num sys tim x0)` states-times-steps **matrix** trajectory solving an ordinary differential equation, by a 2nd order strong stability preserving Runge-Kutta method of **fixnum** `num` stages, with vector field **procedure** or **pair** of vector field and output **procedure**s `sys`, time step **flonum** and time horizon **flonum** in **pair** `tim`, initial state column-**matrix** `x0`.\n\n#### Matrix Utilities\n\n* `(mx-\u003elist mat)` returns **list** of entries of one-dimensional **matrix** `mat`.\n\n* `(mx-print mat)` returns **void**, prints **matrix** `mat` to terminal.\n\n* `(mx-export str mat . sep)` **void**, writes **matrix** `mat` to new **character** `sep`-separated-value file in relative path **string** `str`, by default `sep` is `,` resulting in CSV.\n\n* `(mx-save str mat)` returns **void**, writes **matrix** `mat` to new Scheme (SCM) file in relative path **string** `str`.\n\n* `(mx-load str)` returns **matrix** loaded from SCM file in relative path **string** `str`.\n\n#### Extra Flonum Functions\n\nThe **matrico** module implicitly exports the [(chicken flonum)](http://wiki.call-cc.org/man/5/Module%20(chicken%20flonum)) module, as well as the following additional `flonum` operations:\n\n* `fp` is **alias** for `exact-\u003einexact`.\n\n* `(fp% n d)` returns **flonum** fraction with numerator **fixnum** `n` and denominator **fixnum** `d`.\n\n* `(fpzero?? x)` returns **boolean** answering if **flonum** `x` is exactly zero.\n\n* `(fpzero? x tol)` returns **boolean** answering if absolute value of **flonum** `x` is less than **flonum** `tol`.\n\n* `(fp*2 x)` returns **flonum** double of **flonum** `x`.\n\n* `(fp^2 x)` returns **flonum** square of **flonum** `x`.\n\n* `(fprec x)` returns **flonum** reciprocal of **flonum** `x`.\n\n* `(fptau)` returns **flonum** circle constant Tau via fraction.\n\n* `(fpeul)` returns **flonum** Euler's number via fraction.\n\n* `(fpphi)` returns **flonum** golden ratio via fraction of consecutive Fibonacci numbers.\n\n* `(fpdelta x)` returns **flonum** Kronecker delta of **flonum** `x`.\n\n* `(fpheaviside x)` returns **flonum** Heaviside step function of **flonum** `x`.\n\n* `(fpsign x)` returns **flonum** sign of **flonum** `x`.\n\n* `(fpln x)` returns **flonum** natural logarithm of **flonum** `x`.\n\n* `(fplb x)` returns **flonum** base-2 logarithm of **flonum** `x`.\n\n* `(fplg x)` returns **flonum** base-10 logarithm of **flonum** `x`.\n\n* `(fphsin x)` returns **flonum** haversed sine of **flonum** `x`.\n\n* `(fphcos x)` returns **flonum** haversed cosine of **flonum** `x`.\n\n* `(fplnsinh x)` returns **flonum** log-sinh of **flonum** `x`.\n\n* `(fplncosh x)` returns **flonum** log-cosh of **flonum** `x`.\n\n* `(fpsignsqrt x)` returns **flonum** sign times square root of absolute value of **flonum** `x`.\n\n* `(fpsinc x)` returns **flonum** cardinal sine function with removed singularity of **flonum** `x`.\n\n* `(fpsigm x)` returns **flonum** standard logistic function of **flonum** `x`, aka sigmoid.\n\n* `(fpgauss x)` returns **flonum** Gauss bell curve function evaluation of **flonum** `x`.\n\n* `(fpstirling x)` returns **flonum** Stirling approximation of factorial of **flonum** `x`.\n\n\u003c/details\u003e\n\n### Internal Libraries and Modules\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003eDeveloper Function Reference (click to expand)\u003c/summary\u003e\n\n#### Matrix Frontend Library\n\n##### Internal\n\n* `(matrix-or-flonum? val)` returns **boolean** answering if argument `val` is a **flonum** or **matrix**.\n\n* `(scalar-or-flonum? val)` returns **boolean** answering if argument `val` is a **flonum** or scalar **matrix**.\n\n* `(column-or-flonum? val)` returns **boolean** answering if argument `val` is a **flonum** or column **matrix**.\n\n* `(ensure-mx val)` returns one-by-one **matrix** if `val` is **flonum**, or `val` if `val` is **matrix**.\n\n* `(ensure-fp val)` returns **flonum** if `val` is **flonum**, or element if `val` is one-by-one **matrix**.\n\n* `(translate-cols idx)` returns **fixnum** for **matrix** `mat` translated column index **fixnum** `idx` (from 1-based to 0-based and from end).\n\n* `(translate-rows idx)` returns **fixnum** for **matrix** `mat` translated row index **fixnum** `idx` (from 1-based to 0-based and from end).\n\n* `(time-stepper typ sys tim x0)` states-times-steps **matrix** trajectory solving an ordinary differential equation, by method **procedure** `typ`, with vector field **procedure** or vector field and output function **pair**-of-**procedure**s `sys`, time step and time horizon **pair**-of-**flonum**s `tim`, initial state column-**matrix** `x0`.\n\n#### Matrix Backend Library\nDefines the matrix type (record) as column-major list-of-columns and provides generic basic and functional methods wrapped in a functor\n\n* `(matrix-data mat)` returns **list**-of-columns, generated by `define-record`.\n\n* `(matrix? any)` returns **boolean** answering if `any` is a **matrix**, generated by `define-record`.\n\n* `(make-matrix cols lst)` returns **matrix** from list `lst` of columns and **fixnum** number `cols` of columns, generated by `define-record`.\n\n* `(make-matrix* rows cols val)` returns `rows`-by-`cols` **matrix** with all entries set to `val` for **fixnum**s `rows`, `cols`.\n\n* `(make-matrix** lst)` returns **matrix** from row-major **list**-of-**list**s `lst`.\n\n* `(matrix-generate fun rows cols)` returns `rows`-by-`cols` **matrix** generated procedurally from applying **procedure** `fun` (one-based), **fixnum**s `rows`, `cols`.\n\n* `(matrix-horcat . mat)` returns **matrix** of horizontally concatenating **matrix**es from **list**-of**matrix**es `mat`.\n\n* `(matrix-vercat . mat)` returns **matrix** of vertically concatenating **matrix**es from **list**-of-**matrix**es `mat`.\n\n* `(matrix-cols mat)` returns **fixnum** number of columns of **matrix** `mat`, generated by `define-record`.\n\n* `(matrix-rows mat)` returns **fixnum** number of rows of **matrix** `mat`.\n\n* `(matrix-numel mat)` returns **fixnum** number of entries of **matrix** `mat`.\n\n* `(matrix-dims mat)` returns **fixnum** number of dimensions of **matrix** `mat`.\n\n* `(matrix-ref00 mat)` returns: **any** being the entry of **matrix** `mat` in the first row and first column.\n\n* `(matrix-ref*0 mat row)` returns **any** being **matrix** `mat` entry in **fixnum** `row` and the first column.\n\n* `(matrix-ref mat row col)` returns **any** being **matrix** `mat` entry in **fixnum** `row` and **fixnum** `col`umns.\n\n* `(matrix-set mat row col val)` returns **matrix** copy of **matrix** `mat` but with entry in row **fixnum** `row` and column **fixnum** `col` set to `val`.\n\n* `(matrix-set! mat row col val)` returns **any**, sets entry of **matrix** `mat` in row **fixnum** `row` and column **fixnum** `col` to `val`.\n\n* `(matrix-col mat col)` returns **matrix** being **matrix** `mat` column specified by **fixnum** `col`.\n\n* `(matrix-row mat row)` returns **matrix** being **matrix** `mat` row specified by **fixnum** `row`.\n\n* `(matrix-diag mat)` returns **matrix** holding **matrix** `mat` diagonal entries as column-**matrix**.\n\n* `(matrix-submatrix mat row1 row2 col1 col2)` returns **matrix** holding entries of **matrix** `mat` from rows **fixnum**s `row1` to `row2` in columns **fixnum**s `col1` to `col2`.\n\n* `(matrix-col? mat)` returns **boolean** answering if **matrix** `mat` has only a single column.\n\n* `(matrix-row? mat)` returns **boolean** answering if **matrix** `mat` has only a single row.\n\n* `(matrix-scalar? mat)` returns **boolean** answering if **matrix** `mat` has only a single row and single column, aka scalar.\n\n* `(matrix-vector? mat)` returns: **boolean** answering if **matrix** `mat` has only a single row or single column, aka vector.\n\n* `(matrix-square? mat)` returns **boolean** answering if **matrix** `mat` has the same number of rows and columns.\n\n* `(matrix-samecols? mat)` returns **boolean** answering if **matrix**es `x` and `y` have same number of columns.\n\n* `(matrix-samerows? mat)` returns **boolean** answering if **matrix**es `x` and `y` have same number of rows.\n\n* `(matrix-samedims? mat)` returns **boolean** answering if **matrix**es `x` and `y` have same number of columns and rows.\n\n* `(matrix-any? pred mat)` returns **boolean** answering if any entry of **matrix** `mat` fulfills predicate **procedure** `pred`.\n\n* `(matrix-all? pred mat)` returns **boolean** answering if all entries of **matrix** `mat` fulfill predicate **procedure** `pred`.\n\n* `(matrix-colfold fun ini mat)` returns row **matrix** resulting from folding by two-argument **procedure** `fun` each column of **matrix** `mat`.\n\n* `(matrix-rowfold fun ini mat)` returns column **matrix** resulting from folding by two-argument **procedure** `fun` each row of **matrix** `mat`.\n\n* `(matrix-allfold fun ini mat)` returns **any** resulting from folding by two-argument **procedure** `fun` all **matrix** `mat` entries.\n\n* `(matrix-map fun mat)` returns **matrix** resulting from applying **procedure** `fun` to each entry of **matrix** `mat`.\n\n* `(matrix-broadcast fun x y)` returns **matrix** resulting from applying **procedure** `fun` to each element of matrix `x`, `y`, expanded if necessary.\n\n* `(matrix-vec mat)` returns column **matrix** of vertically concatenated columns of **matrix** `mat`, aka vectorization.\n\n* `(matrix-transpose mat)` returns **matrix** of entries of **matrix** `mat` with swapped row and column indices.\n\n* `(matrix-axpy a x y)` returns **matrix** resulting from scaling **matrix** `x` by **any** `a` and add **matrix** `y`.\n\n* `(matrix-scalar xt y)` returns **any** resulting from the scalar product of column-**matrix**es `xt` and `y`.\n\n* `(matrix-dot* xt y)` returns **matrix** resulting from matrix multiplication of transposed of **matrix** `xt` and **matrix** `y`.\n\n* `(matrix-explode mat)` returns **list**-of-column-**matrix** from **matrix** `mat`.\n\n* `(matrix-implode lst)` returns **matrix** of horizontally concatenated **list**-of-column-**matrix**es `lst`.\n\n* `(matrix-\u003elist mat)` returns: **list** of entries of one-dimensional **matrix** `mat`.\n\n* `(matrix-print mat)` returns **void**, prints **matrix** `mat` to terminal.\n\n* `(matrix-export str mat sep)` returns **void**, writes **matrix** `mat` to new **character** `sep`-separated-value file in relative path (**string**) `str`.\n\n* `(matrix-save str mat)` returns **void**, writes **matrix** `mat` to new Scheme (SCM) file in relative path (**string**) `str`.\n\n* `(matrix-load str)` returns **matrix** loaded from file in relative path (**string**) `str`.\n\n##### Internal\n\n* `(matrix-map* fun x)` returns **matrix** resulting from applying **procedure** `fun` to each column of **matrix** `x`.\n\n* `(matrix-map** fun x y)` returns **matrix** resulting from applying **procedure** `fun` to each column of **matrix**es `x` and `y`.\n\n#### Dense Column Library\nSpecifies generic column functions for matrix library with f64vector (flonum vector).\n\n#### Homogeneous Flonum Vector Module\nProvides homogeneous vector transformations analogous to vectors.\n\n* `(f64vector-unfold dim fun)` returns **f64vector** of dimension **fixnum** `dim` with procedurally generated elements by **procedure** `fun`.\n\n* `(f64vector-concat . vecs)` returns **f64vector** of concatenated **list**-of-**f64vector**(s) `vecs`.\n\n* `(f64vector-any? pred vec)` returns **boolean** answering if any element of **f64vector** `vec` fulfills predicate **procedure** `pred` from left to right.\n\n* `(f64vector-all? pred vec)` returns **boolean** answering if all elements of **f64vector** `vec` fulfill predicate **procedure** `pred` from left to right.\n\n* `(f64vector-map fun . vecs)` returns **f64vector** resulting from applying **procedure** `fun` to all corresponding **f64vector**(s) `vecs` elements.\n\n* `(f64vector-map-index fun . vecs)` returns **f64vector** resulting from applying **procedure** `fun` to index and all corresponding **f64vector**(s) `vecs` elements.\n\n* `(f64vector-foreach fun . vecs)` returns **void**, applies **procedure** `fun` to all corresponding **f64vector**(s) `vecs` elements.\n\n* `(f64vector-foreach-index fun . vecs)` returns **void**, applies **procedure** `fun` to index and all corresponding **f64vector**(s) `vecs` elements.\n\n* `(f64vector-axpy a x y)` returns **f64vector** resulting from applying fused-multiply-add to the **flonum** `a` and to all **f64vector**s `x`, `y` elements. \n\n* `(f64vector-fold fun ini . vecs)` returns **any** resulting from applying **procedure** `fun` to `ini` initialized accumulator and sequentially to all **f64vector**(s) `vecs` elements from left to right.\n\n* `(f64vector-fold* fun ini . vecs)` returns **any** resulting from applying **procedure** `fun` to `ini` initialized accumulator and sequentially to all **f64vector**(s) `vecs` elements from right to left.\n\n* `(f64vector-dot x y)` returns **flonum** resulting from applying fused-multiply-add to zero initialized accumulator and sequentially to all **f64vector**s `x`, `y` elements from left to right.\n\n#### Flonum Module\nProvides extra flonum procedures.\n\n* `(fp*+ x y z)` returns **flonum** sum with product: `x * y + z` of **flonum**s `x`, `y`, `z`. (Fallback)\n\n* `(fptaper x)` returns **string** representation of **flonum** `x` formatted to 8 character fixed width.\n\n#### Utilities Module\nProvides a few base functions, macros and aliases for convenience.\n\n* `(define-syntax-rule (name args) (body ...))` returns **macro** generating single-rule macro.\n\n* `(must-be . args)` **macro** wrapping `assert` of `and` with variable number of arguments.\n\n* `(comment . any)` returns **void**.\n\n* `nil` is **alias** for `'()`.\n\n* `head` is **alias** for `car`.\n\n* `tail` is **alias** for `cdr`.\n\n* `empty?` is **alias** for `null?`.\n\n* `(fx+1 x)` returns **fixnum** incremented **fixnum** `x`.\n\n* `(fx-1 x)` returns **fixnum** decremented **fixnum** `x`.\n\n* `(fx=0? x)` returns **boolean** answering if **fixnum** `x` is zero.\n\n* `(fx\u003c0? x)` returns **boolean** answering if **fixnum** `x` is smaller than zero.\n\n* `(fx\u003e0? x)` returns **boolean** answering if **fixnum** `x` is greater than zero.\n\n* `(fx\u003c=0? x)` returns **boolean** answering if **fixnum** `x` is smaller or equal to zero.\n\n* `(fx\u003e=0? x)` returns **boolean** answering if **fixnum** `x` is greater or equal to zero.\n\n* `(append* lst any)` returns **list** of **list** argument `lst` with appended argument `any`.\n\n* `(sublist lst start end)` returns **list** containing elements of **list** `lst` from indices **fixnum**s `start` to `end`.\n\n* `(any? pred lst)` returns **boolean** answering if any element of **list** `lst` fulfills predicate **procedure** `pred`.\n\n* `(all? pred lst)` returns **boolean** answering if all elements of **list** `lst` fulfill predicate **procedure** `pred`.\n\n* `(factorial n)` returns **fixnum** multiplying consecutive integers up to **fixnum** `n`.\n\n* `(binomial n k)` returns **fixnum** binomial coefficient for **fixnums**s `n` and `k` based on Pascal's rule.\n\n* `(define* (name args ...) (returns str) (body ...))` returns **macro** generating function binding with docstring.\n\n* `(define* name (returns str) (body ...))` returns **macro** generating function binding with docstring.\n\n* `(load* str)` returns **any** result of the last expressions in loaded and evaluated file with path **string** `str`.\n\n\u003c/details\u003e\n\n### External Tools\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003eTools Reference (click to expand)\u003c/summary\u003e\n\n* `(ok?)` returns **boolean** answering if all test passed.\n\n* `(check exe arg-ret-lst)` returns **boolean** answering if **procedure** `exe` evaluated for _car_ of each element of **list**-of-**pairs** `arg-ret-lst` corresponds to its _cdr_.\n\n\u003c/details\u003e\n\n## Performance\n\nPlease note:\nThe author is fully aware that the performance of `matrico` cannot compete with\ncurrent numerical environments, which predominantly utilize the highly tuned\n[BLAS](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms)\nand [LAPACK](https://en.wikipedia.org/wiki/LAPACK) libraries.\nThe following `matrico` benchmarks in turn are meant as an indicator to track\nversion-by-version performance evolution of this **pure** _Scheme_ implementation.\n\n### Benchmarks\n\n#### MATMUL\n\n* Matrix dimension: 1000x1000\n* Optimization level: `-O5`\n\nRun by:\n```\nmake matmul\n```\n\n#### LINPACK\n\n* Matrix dimension: 1000x1000\n* Optimization level: `-O5`\n\nRun by:\n```\nmake linpack\n```\n\n#### MIPS\n\n* Based on [BogoMips](https://de.wikipedia.org/wiki/BogoMips)\n* Optimization level: `-O5`\n\nRun by:\n```\nmake mips\n```\n\n### Systems\n\n#### ARM-64 Laptop-Notebook\n\n* `CPU:` M2 (4+4 Cores @ 3.5Ghz)\n* `RAM:` 16GB (LPDDR5 @ 6400MT/s)\n* `SYS:` MacOS Monterey (12.7)\n* `SCM:` CHICKEN Scheme (5.4)\n\n* MATMUL: `267` Megaflops\n* LINPACK: `313` Megaflops\n* BOGOMIPS: `273` Mips\n\n## Development\n\n### Roadmap\n\n* [`check`]   Add more `matrico` tests\n\n* [`matrico`] Add examples, equation images and links to documentation\n\n* [`mx`]      Add rank-revealing QR and pseudo-inverse via QR\n\n* [`mx`]      Add Eigenvalue decomposition and singular value decomposition via QR\n\n* [`mx`]      Add [`UnicodePlot`](https://github.com/JuliaPlots/UnicodePlots.jl)-like lineplot functionality\n\n### Changelog\n\n\u003cb\u003e0.7\u003c/b\u003e (2024-11-??)\n\n * **FIXED** readded integrated `fpXXX` functions for pre 5.4 compatibility\n * ... and many minor updates and fixes.\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003e\u003cb\u003e0.6\u003c/b\u003e (2024-07-18)\u003c/summary\u003e\n\n * **ADDED** `mx-\u003elist`\n * **IMPROVED** `mx-export`\n * **CHANGED** `mx-diag`\n * **CHANGED** `mx-qr`\n * **CHANGED** `mx-orth`\n * ... and many minor updates and fixes.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003e\u003cb\u003e0.5\u003c/b\u003e (2023-06-06)\u003c/summary\u003e\n\n * **ADDED** `f64vector-axpy`\n * **ADDED** `matrix-axpy`\n * **CHANGED** `mx*+` to `mx-axpy`\n * **IMPROVED** `mx-qr`\n * **IMPROVED** `mx-solver`\n * ... and many minor updates and fixes.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003e\u003cb\u003e0.4\u003c/b\u003e (2023-06-01)\u003c/summary\u003e\n\n  * **ADDED** `mx-angle`\n  * **ADDED** `mx-var`\n  * **ADDED** `mx-orth`\n  * **IMPROVED** `mx-std`\n  * **IMPROVED** `mx-solver`\n  * **IMPROVED** `f64vector-dot`\n  * **REMOVED** `mx-logb`\n  * ... and many minor updates and fixes.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003e\u003cb\u003e0.3\u003c/b\u003e (2022-09-16)\u003c/summary\u003e\n\n  * **ADDED** `matrico` function\n  * **ADDED** `mx-set`\n  * **ADDED** `mx-lnsinh`, `mx-lncosh`\n  * **ADDED** `mx-dyadic`\n  * **ADDED** `mx-heaviside`\n  * **CHANGED** default optimization level to `-O3`\n  * **CHANGED** inlining of local functions\n  * **CHANGED** testing framework\n  * **IMPROVED** argument checking\n  * **IMPROVED** performance\n  * **REMOVED** `matrico-ver`, `matrico-cite`, `matrico-about`, `matrico?`\n  * ... and many minor updates and fixes.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003e\u003cb\u003e0.2\u003c/b\u003e (2022-07-07)\u003c/summary\u003e\n\n  * **ADDED** `matrico-cite`\n  * **ADDED** `mx-scalar`\n  * **ADDED** (re)export of `fpmath` by `matrico`\n  * **ADDED** instrumentation and statistical profiling targets\n  * **CHANGED** rename `matrico-help` to `matrico-about`\n  * **CHANGED** rename and adapt `fp+*` and `mx+*` to `fp*+` and `mx*+`\n  * **CHANGED** rename `fpdirac` and `mx-dirac` to `fpdelta` and `mx-delta`\n  * **IMPROVED** argument checking\n  * **IMPROVED** performance\n  * **REMOVED** `mx-dist`\n  * **REMOVED** `mx-repeat`\n  * ... and many minor updates and fixes.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary markdown=\"span\"\u003e\u003cb\u003e0.1\u003c/b\u003e (2022-05-01)\u003c/summary\u003e\n\n  * Initial Release\n\n\u003c/details\u003e\n\n### Coding Guidelines\n\n* Every source file states: project, author, license, version, summary!\n\n* Every function has a one-line summary!\n\n* Import only included modules!\n\n* Avoid `do`, prefer named `let`-recursion!\n\n* Avoid `set-car!` and `set-cdr!`!\n\n* Avoid \"multiple values\"!\n\n* Avoid `mx-ref` for non-column matrices if possible!\n\n### Notes\n\n* `matrico` should be build with `-O3` if used as a shared object (default).\n\n* `matrico` can be build with `-O5` if `matrico.scm` is included into the source.\n\n## [`matrico`](https://git.io/matrico) - a (:chicken: λ) :egg: for numerical schemers!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgramian%2Fmatrico","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgramian%2Fmatrico","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgramian%2Fmatrico/lists"}