Compare commits

...

16 Commits

Author SHA1 Message Date
Basyrov Rustam
38b092b567 Merge branch 'dev'
Some checks are pending
ci / deploy (push) Waiting to run
2024-11-01 21:59:00 +03:00
Basyrov Rustam
3c66d4a3d6 add links 2024-11-01 21:58:41 +03:00
Basyrov Rustam
70998fe74b add date 2024-11-01 21:58:36 +03:00
Basyrov Rustam
185aa1c47c fix bullet list 2024-11-01 21:58:29 +03:00
Basyrov Rustam
4f53829af4 init manpage article 2024-11-01 19:56:44 +03:00
Basyrov Rustam
a2cb0a4ca1 Merge branch 'dev' 2024-10-31 10:05:48 +03:00
Basyrov Rustam
a6d1e86cda change order 2024-10-31 10:05:41 +03:00
Basyrov Rustam
1b00fb9950 Merge branch 'dev' 2024-10-31 10:04:14 +03:00
Basyrov Rustam
7cc2691693 some cosmetic and rename article 2024-10-31 10:04:08 +03:00
Basyrov Rustam
b92c2fcc1a pretty fixes 2024-10-30 18:41:04 +03:00
Rustam
fbe8ec627a Merge branch 'dev' 2024-10-07 18:47:52 +03:00
Rustam
e464dde870 Merge branch 'dev' 2024-10-07 18:46:32 +03:00
rustbas
e3aa74b1af Merge pull request #2 from rustbas/dev
init "about" page
2024-10-07 15:46:11 +03:00
Rustam
0e5036527a Merge branch 'dev' 2024-09-24 23:45:33 +03:00
Rustam Basyrov
993a601e21 fix footnote typo 2024-09-24 18:43:13 +03:00
rustbas
380e1b0295 Merge pull request #1 from rustbas/dev
Dev
2024-09-24 18:17:09 +03:00
6 changed files with 146 additions and 20 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 961 KiB

View File

@@ -1 +1,4 @@
# Linux
## 2024-11-01 [Немного про мануалы](manpage.md)

110
docs/linux/manpage.md Normal file
View File

@@ -0,0 +1,110 @@
# Немного про мануалы
## Мотивация
Какое-то время назад возникла задача:
написать мануал к репозиторию с дотфайлами.
Вообще, сложилось впечатление, что сейчас большая часть документации создается
либо автоматически, либо техническими писателями. Причем сама документация
лежит на каком-то сайте, например, **github.io** и нечасто можно получить
к ней доступ офлайн. В таких случаях спасают `man`-ы.
## Способы
Вообще, сам мануал -- это документ для [препроцессора](https://en.wikipedia.org/wiki/Groff_(software)) `groff`, который
умеет читать команда `man`, и который можно перевести в другие форматы,
при желании.
[Пример](https://www.cyberciti.biz/faq/linux-unix-creating-a-manpage/) (`test.1`):
```groff
.\" Manpage for nuseradd.
.\" Contact vivek@nixcraft.net.in to correct errors or typos.
.TH man 8 "06 May 2010" "1.0" "nuseradd man page"
.SH NAME
nuseradd \- create a new LDAP user
.SH SYNOPSIS
nuseradd [USERNAME]
.SH DESCRIPTION
nuseradd is high level shell program for adding users to LDAP server. On Debian, administrators should usually use nuseradd.debian(8) instead.
.SH OPTIONS
The nuseradd does not take any options. However, you can supply username.
.SH SEE ALSO
useradd(8), passwd(5), nuseradd.debian(8)
.SH BUGS
No known bugs.
.SH AUTHOR
Vivek Gite (vivek@nixcraft.net.in)
```
Если выполнить команду `man ./test.1`, то увидите следующее:
![Пример manpage](assets/manpage.jpg)
Красиво, но не слишком удобно для создания. Я использовал другой -- через
конвертацию `markdown`-файлов.
## Процесс
### `pandoc`
Для начала, нужна сама [программа](https://en.wikipedia.org/wiki/Pandoc) `pandoc`. Ставим:
```shell
sudo apt install pandoc
```
### Написание мануала
Само написание мануала, думаю, стоит опустить. Синтаксис `markdown`-а
можно посмотреть на википедии.
Есть только два нюанса при написании:
1. В начале нужно указать что-то вроде
`% dotfiles(1) | dotfiles usage documentation`
2. По умолчанию, `pandoc` распознает каждую строку как отдельный
параграф. Из-за этого между строками в результате получается
разрыв. Чтобы избежать этого, нужно в конце строки добавлять `\`.
Сконвертировать файл можно командой:
```shell
pandoc --standalone --to man manpage.md --output=dotfiles.1
```
Также, стоит отметить принятое оглавление. Есть три обязательные секции:
- **NAME** - название
- **SYNOPSIS** - краткое описание (в одну строку) команды или примеры аргументов
или ключей.
- **DESCRIPTION** - подробное описание команды
Также, можно указать:
- **OPTIONS** - описание опций/аргументов.
- **EXAMPLES** - примеры запуска.
- **FILES** - описание файлов, если есть файлы конфигурации.
- **ENVIRONMENT** - описание переменных окружения.
- **BUGS** - Известные баги/ошибки.
- **AUTHORS** - авторы.
- **SEE ALSO** - референсы к другим мануалам.
- **COPYRIGHT | LICENSE** - текст лицензии.
### Как пользоваться
Для того, чтобы можно было удобно пользоваться написанным мануалом,
нужно:
1. Сжать его -- `gzip dotfiles.1`.
2. Поместить архив в любую папку, из которой читает `man` в директорию `man1`.
Для того, чтобы узнать директории, из которых читает `man`,
можно выполнить команду `manpath`
В моем случае, я поместил все в директорию `$HOME/.local/share/man/man1`,
так как `$HOME/.local/share` это как раз `$XDG_DATA_HOME`
(см. [спецификацию XDG](https://specifications.freedesktop.org/basedir-spec/latest/)).
Результат ([репозиторий](https://github.com/rustbas/dotfilesV2/tree/potatoless-pc)):
![dotfiles manual](assets/result.png)

View File

@@ -1,4 +1,4 @@
# Приложение производящей функции последовательности к числам Фибоначчи
# Немного про производящие функции
## Мотивация
Идея данной публикации родилась в процессе чтения статьи на [викиконспектах](https://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%8F%D1%89%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B_.D1.80.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B9_.D0.B7.D0.B0.D0.B4.D0.B0.D1.87_.D0.BC.D0.B5.D1.82.D0.BE.D0.B4.D0.BE.D0.BC_.D0.BF.D1.80.D0.BE.D0.B8.D0.B7.D0.B2.D0.BE.D0.B4.D1.8F.D1.89.D0.B8.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9) о производящих рядах. Мне показалось очень интересным, что существует способ решения рекуррентных уравнений с помощью бесконечных сумм.
@@ -50,6 +50,7 @@ _**Математическая индукция** — метод математ
([Википедия](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D0%B4%D1%83%D0%BA%D1%86%D0%B8%D1%8F))
Нам понадобится этот метод для того, чтобы доказать верность формулы, которую мы получим. Применяя к нашему случаю, можно сформулировать идею доказательства так:
1. Нужно доказать **базу индукции**. То есть, что формула верна для $a_0$ и $a_1$.
2. Нужно доказать **переход индукции**. В нашем случае, это означает, что нужно проверить, что формула удовлетворяет изначальному рекуррентному уравнению.
@@ -97,31 +98,36 @@ $$
Рассмотрим $(I)$ и $(II)$.
$$\Large{
(I) = \sum_{n=2}^\infty a_{n-1} z^{n-1} = \Big<
(I) = \sum_{n=2}^\infty a_{n-1} z^{n-1} = \left<
\begin{split}
k = n-1\\
n = k+1
\end{split}
\Big> = \sum_{k=1}^\infty a_{k} z^{k} =
\right> = \sum_{k=1}^\infty a_{k} z^{k} =
}$$
$$\Large{
= a_0 + \sum_{k=1}^\infty a_{k} z^{k} - a_0
= \underbrace{a_0 + \sum_{k=1}^\infty a_{k} z^{k}}_
{\sum_{k=0}^\infty a_{k} z^{k}}
- a_0
= \sum_{k=0}^\infty a_{k} z^{k} - a_0 = G(z) - a_0
}$$
$$\Large{
(II) = \sum_{n=2}^\infty a_{n-2} z^{n-2} = \Big<
(II) = \sum_{n=2}^\infty a_{n-2} z^{n-2} =
\left<
\begin{split}
k = n-2\\
n = k+2
\end{split}
\Big> = \sum_{k=0}^\infty a_{k} z^{k} = G(z)
\right>
= \sum_{k=0}^\infty a_{k} z^{k} = G(z)
}$$
Здесь мы производим замену и приводим суммы к виду $\sum_{i=0}^\infty a_iz^i$. Очевидно, значение суммы не зависит от названия счетчика $i$.
Здесь мы производим замену и приводим суммы к виду $\sum\limits_{i=0}^\infty a_iz^i$. Очевидно, значение суммы не зависит от названия счетчика $i$.
Таким образом:
$$\Large{
G(z) = a_0 + a_1 z + z \left( G\left(z\right) - a_0 \right) + z^2G(z) =
}$$
@@ -146,7 +152,7 @@ $$\Large{
G(z) = \frac{a_0 +a_1z-a_0z}{1 - z - z^2}
}$$
*Замечание*: получившееся дробь правильная. То есть степень многочлена в знаменателе больше, чем в числителе.
> *Замечание*: получившееся дробь правильная. То есть степень многочлена в знаменателе больше, чем в числителе.
## Разложение дроби на элементарные дроби
@@ -204,8 +210,8 @@ a_0 + z(a_1 - a_0) = -Az + Az_2 - Bz + Bz_1 = (Az_2 + Bz_1) + z(-A -B)
$$\Large{
\begin{cases}
a_0 = Az_2 + B z_1\\
a_1 - a_0 = -A-B
&Az_2 &+ &B z_1 &= a_0\\
&A &+ &B &= a_0 - a_1
\end{cases}
}$$
@@ -222,11 +228,11 @@ $$\Large{
$$\Large{
\begin{cases}
z_{1} = - \frac{1 + \sqrt{5}}{2}\\
z_{2} = - \frac{1 - \sqrt{5}}{2}\\
A = a_0 - a_1 - \frac{a_0 - a_0z_2 + a_1z_2}{z_1-z_2}\\
B = \frac{a_0 - a_0z_2 + a_1z_2}{z_1-z_2}\\
G(z) = \frac{A}{z - z_1} + \frac{B}{z - z_2}
z_{1} &= - \frac{1 + \sqrt{5}}{2}\\
z_{2} &= - \frac{1 - \sqrt{5}}{2}\\
A &= a_0 - a_1 - \frac{a_0 - a_0z_2 + a_1z_2}{z_1-z_2}\\
B &= \frac{a_0 - a_0z_2 + a_1z_2}{z_1-z_2}\\
G(z) &= \frac{A}{z - z_1} + \frac{B}{z - z_2}
\end{cases}
}$$
@@ -260,6 +266,7 @@ $$\Large{
}$$
Проведя аналогичные вычисления для $B$ получим:
$$\Large{
B = \frac{a_0}{z_1-z_2} - z_2 \frac{a_0-a_1}{z_1-z_2}
}$$
@@ -291,8 +298,9 @@ z_1z_2 = \frac{(1+\sqrt{5})(1-\sqrt{5})}{2\cdot2} = \frac{1-5}{4} = -1
}$$
Подставив результат в наше выражение:
$$\Large{
-\frac{a_0}{-1} = a_0, \text{Q.E.D.}
-\frac{a_0}{-1} = a_0, \text{ Q.E.D.}
}$$
#### $n = 1$
@@ -335,6 +343,7 @@ $$\Large{
}$$
Как мы доказали:
$$\Large{
z_1z_2 = -1
}$$
@@ -344,7 +353,9 @@ z_1z_2 = -1
$$\Large{
z_1+z_2 = \frac{-1-
\cancelto{0}{\sqrt{5}+\sqrt{5}}
-1}{2} = -1
-1}{2} =
\frac{-1-1}{2} =
-1
}$$
Подставив значения в выражение, получим:
@@ -360,7 +371,7 @@ $$\Large{
= -\left(
\cancelto{0}{a_0 - a_0}
-a_1
\right) = -(-a_1) = a_1, \text{Q.E.D.}
\right) = -(-a_1) = a_1, \text{ Q.E.D.}
}$$
### Переход индукции
@@ -483,12 +494,13 @@ $$\Large{
$$\Large{
= -A \frac{1}{z_1^{n+3}}
-B \frac{1}{z_2^{n+3}} =
a_{n+2}, \text{Q.E.D.}
a_{n+2}, \text{ Q.E.D.}
}$$
## Выводы
В данной публикации были рассмотрены:
- получение производящей функции из рекуррентного уравнения;
- разложение функции в ряд для нахождения $n$-го члена последовательности;
- доказана верность полученной формулы с помощью математической индукции.

View File

@@ -2,6 +2,7 @@
# Статистика
## 2024-10-30 [Немного про производящие функции](gen_fun.md)
## 2024-09-24 [Немного про Байесовскую статистику](baes.md)
## 2024-10-30 [Приложение производящей функции последовательности к числам Фибоначчи](gen_fun.md)