{
    "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\/matematika\/",
    "feed_url": "https:\/\/antonlyakh.ru\/blog\/tags\/matematika\/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": "499",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/klassifikaciya-razdelov-matematiki-amerikanskogo-matematicheskog\/",
            "title": "Классификация разделов математики Американского математического общества",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/msc-2020.png\" width=\"760\" height=\"698\" alt=\"\" \/>\n<\/div>\n<p>Американское математическое общество (AMS) выработало стандарт для классификации разделов математики. Он регулярно обновляется.<\/p>\n<p><a href=\"https:\/\/mathscinet.ams.org\/mathscinet\/msc\">https:\/\/mathscinet.ams.org\/mathscinet\/msc<\/a><\/p>\n<p>Текущая версия стандарта MSC 2020 включает 97 разделов, подразделы которых перечислены на более, чем 200 страницах.<\/p>\n<p>Приятного изучения.<\/p>\n<hr \/>\n<p>Если вам понравилась заметка, то вы можете купить мне пироженку, задонатив в телетайп-канале «<a href=\"https:\/\/teletype.in\/@mathrocknroll\/math-subject-classification\">Математический рок-н-ролл<\/a>».<\/p>\n",
            "date_published": "2024-08-18T11:51:23+03:00",
            "date_modified": "2024-08-18T13:02:50+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/msc-2020.png",
            "_date_published_rfc2822": "Sun, 18 Aug 2024 11:51:23 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "499",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/msc-2020.png"
                ]
            }
        },
        {
            "id": "497",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/matpop-rok-n-roll-neobychnaya-matematika-dostupnym-yazykom\/",
            "title": "Математический рок-н-ролл — регулярные заметки о необычной математике доступным языком",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/slon.png\" width=\"1000\" height=\"1000\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Фотограф Лукас Холас. Серия «Портреты животных».<\/div>\n<\/div>\n<p class=\"lead\"><b><a href=\"https:\/\/teletype.in\/@mathrocknroll\">Математический рок-н-ролл<\/a><\/b><\/p>\n<p>За последние несколько месяцев я опубликовал более 30 классных популярных математических заметок для ВК канала «<a href=\"https:\/\/vk.com\/mathhedgehog\">Ежик в матане<\/a>». Но ленточное устройство ВК оставляет их активным сутки, иногда чуть больше, после чего они канут в Лету, то есть становятся практически недоступными. Это неудобно.<\/p>\n<p>Чтобы избежать потери заметок, начинаю переносить их в Телетайп, в блог <i>«Матеатический рок-н-ролл».<\/i><\/p>\n<p><br\/><\/p>\n<ol start=\"1\">\n<li>Теперь посты будут всегда доступными, пока существует Телетайп)<\/li>\n<li>Блог в Телетайпе содержит уникальные заметки, посвященные необычной математике, описанной доступным языком.<\/li>\n<li>За заметки вы можете меня <b>поблагодарить донатом.<\/b> Это поможет написать новые посты.<\/li>\n<\/ol>\n<p><br\/><\/p>\n<p>Первый пост называется <i>«<a href=\"https:\/\/teletype.in\/@mathrocknroll\/vika-i-raznye-srednie\">Оценка средних и карьера Вики<\/a>»<\/i>. Он содержит краткий обзор различных средних значений.<\/p>\n<p><a href=\"https:\/\/teletype.in\/@mathrocknroll\/vika-i-raznye-srednie\"><img src=\"https:\/\/img4.teletype.in\/files\/34\/fa\/34fabe1a-9085-4527-8457-ced45b750659.jpeg\"><\/a><\/p>\n<p>Это была моя самая первая заметка для «Ежика», благодаря которой стал одни из его пишущих редакторов.<\/p>\n<p><br\/><\/p>\n<p>Заходите. Будет интересно.<\/p>\n<p><b><a href=\"https:\/\/teletype.in\/@mathrocknroll\">Математический рок-н-ролл<\/a><\/b><\/p>\n<p><br\/><\/p>\n",
            "date_published": "2024-08-03T16:50:05+03:00",
            "date_modified": "2024-08-18T13:04:36+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/slon.png",
            "_date_published_rfc2822": "Sat, 03 Aug 2024 16:50:05 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "497",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/slon.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)"
}