форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
90 строки
4.4 KiB
Markdown
90 строки
4.4 KiB
Markdown
# Общее контрольное задание по теме 7
|
|
|
|
Подольский Никита, А-01-23
|
|
|
|
## Задание
|
|
|
|
Общее контрольное задание.
|
|
• Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
|
|
• Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
|
|
• Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
|
|
Y=b1+b2 * X
|
|
и имеющую аргументы b1, b2 и X.
|
|
|
|
## Решение
|
|
|
|
```python
|
|
|
|
def signal_zaderzhka(vhod_spisok, zaderzhka):
|
|
"""
|
|
Возвращает сигнал, где каждое значение - это значение входного сигнала
|
|
zaderzhka тактов назад (0 для первых zaderzhka тактов)
|
|
"""
|
|
vihod = []
|
|
istoriya = [] # Отдельный список для истории
|
|
|
|
for el in vhod_spisok:
|
|
istoriya.append(el) # Добавляем текущее значение в историю
|
|
|
|
if len(istoriya) <= zaderzhka:
|
|
# Еще не накопили достаточно истории
|
|
vihod.append(0)
|
|
else:
|
|
# Берем значение, которое было zaderzka тактов назад
|
|
el_zad = istoriya[len(istoriya) - zaderzhka - 1]
|
|
vihod.append(el_zad)
|
|
|
|
return vihod
|
|
zaderzhka = 3
|
|
vhod = [1, 2, 3, 4, 5]
|
|
vihod = signal_zaderzhka(vhod, zaderzhka)
|
|
print("входной сигнал: ", vhod, "выходной сигнал: ", vihod)
|
|
входной сигнал: [1, 2, 3, 4, 5] выходной сигнал: [0, 0, 0, 1, 2]
|
|
```
|
|
|
|
```python
|
|
def histogram(data, num_bins):
|
|
"""Вычисляет и выводит гистограмму в виде таблицы, возвращает bins и counts."""
|
|
min_val, max_val = min(data), max(data)
|
|
bin_width = (max_val - min_val) / num_bins
|
|
bins = [min_val + i * bin_width for i in range(num_bins + 1)] #список границ интервалов min=0, max=10, num_bins=5 → bins=[0, 2, 4, 6, 8, 10]
|
|
counts = []
|
|
for i in range(num_bins):
|
|
count = 0
|
|
for x in data:
|
|
if bins[i] <= x < bins[i+1] or (x == max_val and i == num_bins - 1):
|
|
count += 1
|
|
counts.append(count)
|
|
|
|
print("Гистограмма:")
|
|
for i in range(num_bins):
|
|
print(f"Интервал: [{bins[i]:.2f}, {bins[i+1]:.2f}], Элементов: {int(counts[i])}")
|
|
|
|
return bins, counts
|
|
|
|
import random
|
|
data = [random.gauss(0, 1) for _ in range(1000)]
|
|
num_bins = 10
|
|
bins, counts = histogram(data, num_bins)
|
|
Гистограмма:
|
|
Интервал: [-3.07, -2.46], Элементов: 11
|
|
Интервал: [-2.46, -1.85], Элементов: 33
|
|
Интервал: [-1.85, -1.24], Элементов: 64
|
|
Интервал: [-1.24, -0.64], Элементов: 160
|
|
Интервал: [-0.64, -0.03], Элементов: 207
|
|
Интервал: [-0.03, 0.58], Элементов: 246
|
|
Интервал: [0.58, 1.19], Элементов: 168
|
|
Интервал: [1.19, 1.80], Элементов: 75
|
|
Интервал: [1.80, 2.41], Элементов: 26
|
|
Интервал: [2.41, 3.02], Элементов: 10
|
|
```
|
|
|
|
```python
|
|
>>>anon = lambda b1, b2, X: b1+b2*X
|
|
>>>Y = anon(1,2,3)
|
|
>>>Y
|
|
7
|
|
```
|
|
|
|
|