{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Математик среди биологов: заметки с тегом матрицы",
    "_rss_description": "Я немного умею складывать, но от вычитания у меня всегда кружится голова",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/antonlyakh.ru\/blog\/tags\/matricy\/",
    "feed_url": "https:\/\/antonlyakh.ru\/blog\/tags\/matricy\/json\/",
    "icon": false,
    "author": {
        "name": "Антон Лях",
        "url": "https:\/\/antonlyakh.ru\/blog\/",
        "avatar": false
    },
    "items": [
        {
            "id": "522",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/singulyarnoe-razlozhenie-matricy-na-php\/",
            "title": "Сингулярное разложение матрицы на ПХП",
            "content_html": "<p>Это заметка-напоминалка о пхп-библиотеках, позволяющих найти <i>сингулярное разложение матрицы (SVD — singular value decomposition)<\/i>.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/svd-!.png\" width=\"800\" height=\"230\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Из <i>Bellegarda (2005) <a href=\"https:\/\/doi.org\/10.1109\/MSP.2005.1511825\">Latent semantic mapping<\/a><\/i><\/div>\n<\/div>\n<hr \/>\n<p class=\"foot\">Наилучший вариант ↓<\/p>\n<p><b><a href=\"https:\/\/github.com\/vladkolodka\/SVD\/tree\/master\">PHP — Singular value decomposition SVD<\/a> Влада Колодки<\/b>.<br \/>\nБез зависимостей. Один файл <kbd>svd.php<\/kbd>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">include &quot;svd.php&quot;;\r\n\r\n\/\/ Конструирую матрицу\r\n$matrix = [['0.00', '0.00', '0.56', '0.56'. '0.00', '0.00', '1.00'], \r\n           ['0.49', '0.71', '0.00', '0.00'. '0.00', '0.71', '0.00'],\r\n           ['0.49', '0.71', '0.00', '0.00'. '0.00', '0.71', '0.00'],\r\n           ['0.72', '0.00', '0.00', '0.00'. '1.00', '0.00', '0.00'],\r\n           ['0.00', '0.00', '0.83', '0.83'. '0.00', '0.00', '0.00']];\r\n\r\n\/\/ Создаю класс для работы с матрицами\r\n$matrixClass = new Matrix;\r\n\r\n\/\/ Вычисляю SVD\r\n$USV = $matrixClass-&gt;svd($matrix);\r\n\r\n\/*\r\n Получаю ассоциативный массив, в котором M = USV.\r\n ВНИМАНИЕ: матрица V уже транспонирована.\r\n\r\n $matrices['U'] = $U;\r\n $matrices['S'] = $S;\r\n $matrices['W'] = $W;\r\n $matrices['V'] = $this-&gt;matrixTranspose($V);\r\n $matrices['Rank'] = $rank;\r\n $matrices['K'] = $k;\r\n*\/\r\n\r\n\/\/ Восстанавливаю исходную матрицу\r\n$input = $matrixClass-&gt;matrixMultiplication($USV['U'] ,$matrixClass-&gt;matrixMultiplication($USV['S'], $USV['V']));\r\n$input = $matrixClass-&gt;matrixRound($input);<\/code><\/pre><hr \/>\n<p class=\"foot\">Тяжеловесная библиотека ↓<\/p>\n<p><b><a href=\"https:\/\/github.com\/markrogoyski\/math-php\">MathPHP<\/a> — Powerful modern math library for PHP<\/b><br \/>\nОгромное число разнообразных функций. Установка через композер.<\/p>\n<p><a href=\"https:\/\/github.com\/markrogoyski\/math-php?tab=readme-ov-file#linear-algebra---matrix\">Полный перечень функций для работы с матрицами<\/a>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"php\">use MathPHP\\LinearAlgebra\\Matrix;\r\nuse MathPHP\\LinearAlgebra\\MatrixFactory;\r\n\r\n\/\/ Create an m × n matrix from an array of arrays\r\n$matrix = [\r\n    [1, 2, 3],\r\n    [4, 5, 6],\r\n    [7, 8, 9],\r\n];\r\n$A = MatrixFactory::create($matrix);\r\n\r\n\/\/ Basic matrix data\r\n$array = $A-&gt;getMatrix();  \/\/ Original array of arrays\r\n$rows  = $A-&gt;getM();       \/\/ number of rows\r\n$cols  = $A-&gt;getN();       \/\/ number of columns\r\n\r\n\/\/ Matrix decompositions\r\n\/\/ LU decomposition\r\n$LU = $A-&gt;luDecomposition();\r\n$L  = $LU-&gt;L;  \/\/ lower triangular matrix\r\n$U  = $LU-&gt;U;  \/\/ upper triangular matrix\r\n$P  = $LU-P;   \/\/ permutation matrix\r\n\r\n\/\/ QR decomposition\r\n$QR = $A-&gt;qrDecomposition();\r\n$Q  = $QR-&gt;Q;  \/\/ orthogonal matrix\r\n$R  = $QR-&gt;R;  \/\/ upper triangular matrix\r\n\r\n\/\/ SVD (Singular Value Decomposition)\r\n$SVD = $A-&gt;svd();\r\n$U   = $A-&gt;U;  \/\/ m x m orthogonal matrix\r\n$V   = $A-&gt;V;  \/\/ n x n orthogonal matrix\r\n$S   = $A-&gt;S;  \/\/ m x n diagonal matrix of singular values\r\n$D   = $A-&gt;D;  \/\/ Vector of diagonal elements from S\r\n\r\n\/\/ Crout decomposition\r\n$LU = $A-&gt;croutDecomposition();\r\n$L  = $LU-&gt;L;  \/\/ lower triangular matrix\r\n$U  = $LU-&gt;U;  \/\/ normalized upper triangular matrix\r\n\r\n\/\/ Cholesky decomposition\r\n$LLᵀ = $A-&gt;choleskyDecomposition();\r\n$L   = $LLᵀ-&gt;L;   \/\/ lower triangular matrix\r\n$LT  = $LLᵀ-&gt;LT;  \/\/ transpose of lower triangular matrix\r\n\r\n\/\/ Eigenvalues and eigenvectors\r\n$eigenvalues   = $A-&gt;eigenvalues();   \/\/ array of eigenvalues\r\n$eigenvecetors = $A-&gt;eigenvectors();  \/\/ Matrix of eigenvectors\r\n\r\n\/\/ Solve a linear system of equations: Ax = b\r\n$b = new Vector(1, 2, 3);\r\n$x = $A-&gt;solve($b);<\/code><\/pre><hr \/>\n<p class=\"foot\">Библиотека для машинного обучения ↓<\/p>\n<p><b><a href=\"https:\/\/php-ml.readthedocs.io\/\">PHP-ML<\/a> — Machine learning library for PHP<\/b><br \/>\nНе по теме. Не понял, есть ли SVD.<\/p>\n",
            "date_published": "2025-06-10T16:04:46+03:00",
            "date_modified": "2025-06-10T16:12:51+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/svd-!.png",
            "_date_published_rfc2822": "Tue, 10 Jun 2025 16:04:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "522",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/svd-!.png"
                ]
            }
        },
        {
            "id": "496",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/nedostatok-vychisleniya-opredelitelya-celoischislennyh-matric-na\/",
            "title": "Недостаток вычисления определителя целоисчисленных матриц на Питоне",
            "content_html": "<p><i>Целоисчисленная матрица<\/i> — это матрица, все элементы которой являются целыми числами.<\/p>\n<p>Определитель целоисчисленной матрицы — тоже целое число. (Очевидно же.)<\/p>\n<p>Используем класс целоисчисленных матриц, элементы которых могут принимать только значения из заданного множества целых чисел. (Такие матрицы называют <i>богемными.<\/i>)<\/p>\n<p>Очевидно, что если множество возможных элементов матриц конечно, то и число возможных богемных матриц заданного размера тоже конечно.<\/p>\n<p>Пусть мы ищем среди всех богемных матриц только те, определитель которых равен нулю. Ищем при помощи кода на Питоне. Определитель матрицы вычисляем так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">dt = np.linalg.det( a )<\/code><\/pre><p>И вот тут возможна ошибка.<\/p>\n<p>Если мы будем выбирать матрицы по условию <kbd>dt==0<\/kbd>, то получим неверный результат.<\/p>\n<blockquote>\n<p>Using that test (dt==0) Python got the right number of [...] matrices when mdim=2 or mdim=3, but the test dt==0 failed a few times when mdim=4, and (after a long time computing) reported 15,015,617 singular matrices; the true number is 15,099,201. This is because <kbd>np.linalg.det<\/kbd> is <i>computing the determinant from a numerical factoring<\/i> (which introduces rational numbers and rounding error) and the roundoff error means that sometimes a zero determinant was not being reported as precisely zero.<\/p>\n<\/blockquote>\n<p>Правильный результат получится если мы используем условие <kbd>dt&lt;0.5<\/kbd>.<\/p>\n<p><a href=\"https:\/\/computational-discovery-on-jupyter.github.io\/Computational-Discovery-on-Jupyter\/Contents\/bohemian-matrices.html#table-of-results\">https:\/\/computational-discovery-on-jupyter.github.io\/Computational-Discovery-on-Jupyter\/Contents\/bohemian-matrices.html#table-of-results<\/a><\/p>\n",
            "date_published": "2024-06-28T22:13:50+03:00",
            "date_modified": "2024-06-28T22:13:11+03:00",
            "_date_published_rfc2822": "Fri, 28 Jun 2024 22:13:50 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "496",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3559,
    "_e2_ua_string": "E2 (v3559; Aegea)"
}