Compare commits
16 Commits
b205d7211e
...
38b092b567
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38b092b567 | ||
|
|
3c66d4a3d6 | ||
|
|
70998fe74b | ||
|
|
185aa1c47c | ||
|
|
4f53829af4 | ||
|
|
a2cb0a4ca1 | ||
|
|
a6d1e86cda | ||
|
|
1b00fb9950 | ||
|
|
7cc2691693 | ||
|
|
b92c2fcc1a | ||
|
|
fbe8ec627a | ||
|
|
e464dde870 | ||
|
|
e3aa74b1af | ||
|
|
0e5036527a | ||
|
|
993a601e21 | ||
|
|
380e1b0295 |
BIN
docs/linux/assets/manpage.jpg
Normal file
BIN
docs/linux/assets/manpage.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 838 KiB |
BIN
docs/linux/assets/result.png
Normal file
BIN
docs/linux/assets/result.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 961 KiB |
@@ -1 +1,4 @@
|
||||
# Linux
|
||||
|
||||
## 2024-11-01 [Немного про мануалы](manpage.md)
|
||||
|
||||
|
||||
110
docs/linux/manpage.md
Normal file
110
docs/linux/manpage.md
Normal 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`, то увидите следующее:
|
||||

|
||||
|
||||
Красиво, но не слишком удобно для создания. Я использовал другой -- через
|
||||
конвертацию `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)):
|
||||
|
||||

|
||||
@@ -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$-го члена последовательности;
|
||||
- доказана верность полученной формулы с помощью математической индукции.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
# Статистика
|
||||
|
||||
## 2024-10-30 [Немного про производящие функции](gen_fun.md)
|
||||
|
||||
## 2024-09-24 [Немного про Байесовскую статистику](baes.md)
|
||||
|
||||
## 2024-10-30 [Приложение производящей функции последовательности к числам Фибоначчи](gen_fun.md)
|
||||
|
||||
Reference in New Issue
Block a user