<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Математик среди биологов: заметки с тегом математика</title>
<link>https://antonlyakh.ru/blog/tags/matematika/</link>
<description>Я немного умею складывать, но от вычитания у меня всегда кружится голова</description>
<author>Антон Лях</author>
<language>ru</language>
<generator>E2 (v3559; Aegea)</generator>

<itunes:owner>
<itunes:name>Антон Лях</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Я немного умею складывать, но от вычитания у меня всегда кружится голова</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Сингулярное разложение матрицы на ПХП</title>
<guid isPermaLink="false">522</guid>
<link>https://antonlyakh.ru/blog/all/singulyarnoe-razlozhenie-matricy-na-php/</link>
<pubDate>Tue, 10 Jun 2025 16:04:46 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/singulyarnoe-razlozhenie-matricy-na-php/</comments>
<description>
&lt;p&gt;Это заметка-напоминалка о пхп-библиотеках, позволяющих найти &lt;i&gt;сингулярное разложение матрицы (SVD — singular value decomposition)&lt;/i&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/svd-!.png" width="800" height="230" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Из &lt;i&gt;Bellegarda (2005) &lt;a href="https://doi.org/10.1109/MSP.2005.1511825"&gt;Latent semantic mapping&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;p class="foot"&gt;Наилучший вариант ↓&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href="https://github.com/vladkolodka/SVD/tree/master"&gt;PHP — Singular value decomposition SVD&lt;/a&gt; Влада Колодки&lt;/b&gt;.&lt;br /&gt;
Без зависимостей. Один файл &lt;kbd&gt;svd.php&lt;/kbd&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;include &amp;quot;svd.php&amp;quot;;

// Конструирую матрицу
$matrix = [['0.00', '0.00', '0.56', '0.56'. '0.00', '0.00', '1.00'], 
           ['0.49', '0.71', '0.00', '0.00'. '0.00', '0.71', '0.00'],
           ['0.49', '0.71', '0.00', '0.00'. '0.00', '0.71', '0.00'],
           ['0.72', '0.00', '0.00', '0.00'. '1.00', '0.00', '0.00'],
           ['0.00', '0.00', '0.83', '0.83'. '0.00', '0.00', '0.00']];

// Создаю класс для работы с матрицами
$matrixClass = new Matrix;

// Вычисляю SVD
$USV = $matrixClass-&amp;gt;svd($matrix);

/*
 Получаю ассоциативный массив, в котором M = USV.
 ВНИМАНИЕ: матрица V уже транспонирована.

 $matrices['U'] = $U;
 $matrices['S'] = $S;
 $matrices['W'] = $W;
 $matrices['V'] = $this-&amp;gt;matrixTranspose($V);
 $matrices['Rank'] = $rank;
 $matrices['K'] = $k;
*/

// Восстанавливаю исходную матрицу
$input = $matrixClass-&amp;gt;matrixMultiplication($USV['U'] ,$matrixClass-&amp;gt;matrixMultiplication($USV['S'], $USV['V']));
$input = $matrixClass-&amp;gt;matrixRound($input);&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;
&lt;p class="foot"&gt;Тяжеловесная библиотека ↓&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href="https://github.com/markrogoyski/math-php"&gt;MathPHP&lt;/a&gt; — Powerful modern math library for PHP&lt;/b&gt;&lt;br /&gt;
Огромное число разнообразных функций. Установка через композер.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/markrogoyski/math-php?tab=readme-ov-file#linear-algebra---matrix"&gt;Полный перечень функций для работы с матрицами&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="php"&gt;use MathPHP\LinearAlgebra\Matrix;
use MathPHP\LinearAlgebra\MatrixFactory;

// Create an m × n matrix from an array of arrays
$matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];
$A = MatrixFactory::create($matrix);

// Basic matrix data
$array = $A-&amp;gt;getMatrix();  // Original array of arrays
$rows  = $A-&amp;gt;getM();       // number of rows
$cols  = $A-&amp;gt;getN();       // number of columns

// Matrix decompositions
// LU decomposition
$LU = $A-&amp;gt;luDecomposition();
$L  = $LU-&amp;gt;L;  // lower triangular matrix
$U  = $LU-&amp;gt;U;  // upper triangular matrix
$P  = $LU-P;   // permutation matrix

// QR decomposition
$QR = $A-&amp;gt;qrDecomposition();
$Q  = $QR-&amp;gt;Q;  // orthogonal matrix
$R  = $QR-&amp;gt;R;  // upper triangular matrix

// SVD (Singular Value Decomposition)
$SVD = $A-&amp;gt;svd();
$U   = $A-&amp;gt;U;  // m x m orthogonal matrix
$V   = $A-&amp;gt;V;  // n x n orthogonal matrix
$S   = $A-&amp;gt;S;  // m x n diagonal matrix of singular values
$D   = $A-&amp;gt;D;  // Vector of diagonal elements from S

// Crout decomposition
$LU = $A-&amp;gt;croutDecomposition();
$L  = $LU-&amp;gt;L;  // lower triangular matrix
$U  = $LU-&amp;gt;U;  // normalized upper triangular matrix

// Cholesky decomposition
$LLᵀ = $A-&amp;gt;choleskyDecomposition();
$L   = $LLᵀ-&amp;gt;L;   // lower triangular matrix
$LT  = $LLᵀ-&amp;gt;LT;  // transpose of lower triangular matrix

// Eigenvalues and eigenvectors
$eigenvalues   = $A-&amp;gt;eigenvalues();   // array of eigenvalues
$eigenvecetors = $A-&amp;gt;eigenvectors();  // Matrix of eigenvectors

// Solve a linear system of equations: Ax = b
$b = new Vector(1, 2, 3);
$x = $A-&amp;gt;solve($b);&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;
&lt;p class="foot"&gt;Библиотека для машинного обучения ↓&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href="https://php-ml.readthedocs.io/"&gt;PHP-ML&lt;/a&gt; — Machine learning library for PHP&lt;/b&gt;&lt;br /&gt;
Не по теме. Не понял, есть ли SVD.&lt;/p&gt;
</description>
</item>

<item>
<title>Классификация разделов математики Американского математического общества</title>
<guid isPermaLink="false">499</guid>
<link>https://antonlyakh.ru/blog/all/klassifikaciya-razdelov-matematiki-amerikanskogo-matematicheskog/</link>
<pubDate>Sun, 18 Aug 2024 11:51:23 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/klassifikaciya-razdelov-matematiki-amerikanskogo-matematicheskog/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/msc-2020.png" width="760" height="698" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Американское математическое общество (AMS) выработало стандарт для классификации разделов математики. Он регулярно обновляется.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mathscinet.ams.org/mathscinet/msc"&gt;https://mathscinet.ams.org/mathscinet/msc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Текущая версия стандарта MSC 2020 включает 97 разделов, подразделы которых перечислены на более, чем 200 страницах.&lt;/p&gt;
&lt;p&gt;Приятного изучения.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Если вам понравилась заметка, то вы можете купить мне пироженку, задонатив в телетайп-канале «&lt;a href="https://teletype.in/@mathrocknroll/math-subject-classification"&gt;Математический рок-н-ролл&lt;/a&gt;».&lt;/p&gt;
</description>
</item>

<item>
<title>Математический рок-н-ролл — регулярные заметки о необычной математике доступным языком</title>
<guid isPermaLink="false">497</guid>
<link>https://antonlyakh.ru/blog/all/matpop-rok-n-roll-neobychnaya-matematika-dostupnym-yazykom/</link>
<pubDate>Sat, 03 Aug 2024 16:50:05 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/matpop-rok-n-roll-neobychnaya-matematika-dostupnym-yazykom/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/slon.png" width="1000" height="1000" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Фотограф Лукас Холас. Серия «Портреты животных».&lt;/div&gt;
&lt;/div&gt;
&lt;p class="lead"&gt;&lt;b&gt;&lt;a href="https://teletype.in/@mathrocknroll"&gt;Математический рок-н-ролл&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;За последние несколько месяцев я опубликовал более 30 классных популярных математических заметок для ВК канала «&lt;a href="https://vk.com/mathhedgehog"&gt;Ежик в матане&lt;/a&gt;». Но ленточное устройство ВК оставляет их активным сутки, иногда чуть больше, после чего они канут в Лету, то есть становятся практически недоступными. Это неудобно.&lt;/p&gt;
&lt;p&gt;Чтобы избежать потери заметок, начинаю переносить их в Телетайп, в блог &lt;i&gt;«Матеатический рок-н-ролл».&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Теперь посты будут всегда доступными, пока существует Телетайп)&lt;/li&gt;
&lt;li&gt;Блог в Телетайпе содержит уникальные заметки, посвященные необычной математике, описанной доступным языком.&lt;/li&gt;
&lt;li&gt;За заметки вы можете меня &lt;b&gt;поблагодарить донатом.&lt;/b&gt; Это поможет написать новые посты.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Первый пост называется &lt;i&gt;«&lt;a href="https://teletype.in/@mathrocknroll/vika-i-raznye-srednie"&gt;Оценка средних и карьера Вики&lt;/a&gt;»&lt;/i&gt;. Он содержит краткий обзор различных средних значений.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://teletype.in/@mathrocknroll/vika-i-raznye-srednie"&gt;&lt;img src="https://img4.teletype.in/files/34/fa/34fabe1a-9085-4527-8457-ced45b750659.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Это была моя самая первая заметка для «Ежика», благодаря которой стал одни из его пишущих редакторов.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Заходите. Будет интересно.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href="https://teletype.in/@mathrocknroll"&gt;Математический рок-н-ролл&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Недостаток вычисления определителя целоисчисленных матриц на Питоне</title>
<guid isPermaLink="false">496</guid>
<link>https://antonlyakh.ru/blog/all/nedostatok-vychisleniya-opredelitelya-celoischislennyh-matric-na/</link>
<pubDate>Fri, 28 Jun 2024 22:13:50 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/nedostatok-vychisleniya-opredelitelya-celoischislennyh-matric-na/</comments>
<description>
&lt;p&gt;&lt;i&gt;Целоисчисленная матрица&lt;/i&gt; — это матрица, все элементы которой являются целыми числами.&lt;/p&gt;
&lt;p&gt;Определитель целоисчисленной матрицы — тоже целое число. (Очевидно же.)&lt;/p&gt;
&lt;p&gt;Используем класс целоисчисленных матриц, элементы которых могут принимать только значения из заданного множества целых чисел. (Такие матрицы называют &lt;i&gt;богемными.&lt;/i&gt;)&lt;/p&gt;
&lt;p&gt;Очевидно, что если множество возможных элементов матриц конечно, то и число возможных богемных матриц заданного размера тоже конечно.&lt;/p&gt;
&lt;p&gt;Пусть мы ищем среди всех богемных матриц только те, определитель которых равен нулю. Ищем при помощи кода на Питоне. Определитель матрицы вычисляем так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;dt = np.linalg.det( a )&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И вот тут возможна ошибка.&lt;/p&gt;
&lt;p&gt;Если мы будем выбирать матрицы по условию &lt;kbd&gt;dt==0&lt;/kbd&gt;, то получим неверный результат.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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 &lt;kbd&gt;np.linalg.det&lt;/kbd&gt; is &lt;i&gt;computing the determinant from a numerical factoring&lt;/i&gt; (which introduces rational numbers and rounding error) and the roundoff error means that sometimes a zero determinant was not being reported as precisely zero.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Правильный результат получится если мы используем условие &lt;kbd&gt;dt&amp;lt;0.5&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://computational-discovery-on-jupyter.github.io/Computational-Discovery-on-Jupyter/Contents/bohemian-matrices.html#table-of-results"&gt;https://computational-discovery-on-jupyter.github.io/Computational-Discovery-on-Jupyter/Contents/bohemian-matrices.html#table-of-results&lt;/a&gt;&lt;/p&gt;
</description>
</item>


</channel>
</rss>