Skip to content

31. (П14) Лінійна алгебра, статистика, симуляції

Передумови

Мова в коді

Усі рядкові літерали, вивід print(), імена файлів та змінних — лише латиницею. Кирилиця допускається тільки в коментарях.

Завдання

Написати скрипт linalg_stats.py, у якому кожне завдання нижче виводить свій результат. Перед кожним завданням вивести заголовок, наприклад --- Task 3 ---.

Цикли for / while для обчислень не використовувати — лише операції над масивами.

Персоналізація

STUDENT_NAME = "Ivan Petrenko"   # ваше ім'я та прізвище транслітерацією
STUDENT_GROUP = "KI-31"          # ваша група
N = 7                            # ваш номер у списку групи + 5

Перший рядок виводу: Ivan Petrenko, KI-31, N = 7.

Генератор випадкових чисел створити один раз на початку скрипта: rng = np.random.default_rng(N).

Завдання 1. Система рівнянь

Розв'язати систему:

\[ \begin{cases} 2x + y - z = N \\ x + 3y + 2z = 2N \\ 3x - y + z = 10 \end{cases} \]
  1. Записати матрицю коефіцієнтів A і вектор b.
  2. Знайти розв'язок через np.linalg.solve і вивести його.
  3. Перевірити: вивести A @ x та результат np.allclose(A @ x, b).

Приклад для N = 7:

[3.4 2.2 2. ]
[ 7. 14. 10.]
True

Завдання 2. Матриці

Для матриці M = [[N, 2], [1, 3]] вивести:

  1. M * M і M @ M — і в коментарі одним реченням пояснити різницю;
  2. визначник, округлений до 2 знаків;
  3. обернену матрицю;
  4. перевірку, що M @ inv(M) дорівнює одиничній матриці (np.allclose + np.eye).

Завдання 3. Аналіз оцінок

Придумайте 10 оцінок за 100-бальною шкалою (серед них мають бути нижчі за 60) і створіть масив grades. Вивести:

  1. середнє, медіану, стандартне відхилення (2 знаки), мінімум і максимум;
  2. кількість незданих (оцінка < 60);
  3. оцінки >= 90;
  4. номер студента з найвищою оцінкою.

Завдання 4. Кидки кубика

  1. Кинути кубик 1000 разів: rng.integers(1, 7, size=1000). Вивести перші 10 кидків.
  2. Порахувати, скільки разів випала кожна грань (np.bincount), і вивести 6 чисел.
  3. Вивести середнє значення кидків і порівняти з теоретичним 3.5.
  4. Вивести частку шісток і порівняти з 1 / 6.

Завдання 5. Два кубики

  1. Кинути два кубики 10 000 разів — масив формою (10_000, 2) — і порахувати суму кожної пари.
  2. Вивести, скільки разів випала кожна сума від 2 до 12.
  3. Вивести найчастішу суму (argmax).
  4. Вивести ймовірність суми 7 (порівняти з 6 / 36) і ймовірність суми >= 10.

Завдання 6. Симуляція оцінок групи

  1. Згенерувати оцінки N + 20 студентів з 3 предметів: rng.normal(70, 12, size=(N + 20, 3)).
  2. Округлити, обрізати до [0, 100] через np.clip і перетворити на int. Вивести форму і перших 3 студентів.
  3. Вивести середній бал по кожному предмету (axis=0).
  4. Порахувати середній бал кожного студента (axis=1) і вивести номер найкращого та його середній бал.
  5. Вивести кількість студентів із середнім балом < 60.

Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub