форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
85 строки
4.1 KiB
Markdown
85 строки
4.1 KiB
Markdown
# Общее контрольное задание по теме 7
|
|
|
|
Коваленко Дмитрий, А-01-23
|
|
|
|
## Задание
|
|
|
|
• Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.\
|
|
• Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: вы-борка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.\
|
|
• Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
|
|
Y=b1+b2*X
|
|
и имеющую аргументы b1, b2 и X.
|
|
|
|
|
|
## Решение
|
|
|
|
```py
|
|
import random
|
|
|
|
|
|
def delay_signal(signal, T):
|
|
delayed_signal = signal.copy()
|
|
if T < len(signal):
|
|
delayed_signal = [0] * T + signal[:-T]
|
|
else:
|
|
delayed_signal = [0] * len(signal)
|
|
return delayed_signal
|
|
|
|
y = [random.gauss(3, 1.5) for _ in range(10)]
|
|
>>> y
|
|
[3.855862654001017, 0.5055896775676754, 0.4154450162502199, 6.550103308532915, 2.5329276972223584, 5.199934653811578, 2.7808708229733328, 3.009437226477874, 2.6526954887061165, 2.2993461230571697]
|
|
|
|
yd = delay_signal(y, 3)
|
|
>>> yd
|
|
[0, 0, 0, 3.855862654001017, 0.5055896775676754, 0.4154450162502199, 6.550103308532915, 2.5329276972223584, 5.199934653811578, 2.7808708229733328]
|
|
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
def calculate_histogram(data, num_bins):
|
|
min_val, max_val = min(data), max(data)
|
|
bins = np.linspace(min_val, max_val, num_bins + 1)
|
|
counts = [0] * num_bins
|
|
|
|
for value in data:
|
|
for i in range(num_bins):
|
|
if bins[i] <= value < bins[i + 1]:
|
|
counts[i] += 1
|
|
break
|
|
if value == max_val:
|
|
counts[-1] += 1
|
|
|
|
return counts, bins
|
|
|
|
def plot_histogram(data, bins, counts):
|
|
plt.hist(data, bins=bins, alpha=0.7, edgecolor='black')
|
|
plt.xlabel('Значения выборки')
|
|
plt.ylabel('Число элементов')
|
|
plt.title('Гистограмма выборки')
|
|
plt.show()
|
|
|
|
def histo(data, num_bins):
|
|
counts, bins = calculate_histogram(data, num_bins)
|
|
plot_histogram(data, bins, counts)
|
|
return counts
|
|
|
|
sample = [random.gauss(random.random(), random.random()) for _ in range(random.randint(1,100))]
|
|
intervals = int(input("Введите количество интервалов разбиения: "))
|
|
output = histo(sample, intervals)
|
|
|
|
Введите количество интервалов разбиения: 5
|
|
Список с числами элементов в интервалах: [3, 10, 12, 6, 1]
|
|
|
|
|
|
linreg = lambda b1, b2, x: b1 + b2 * x
|
|
>>> b1 = float(input("Введите коэффициент b1 линейной регрессии: "))
|
|
Введите коэффициент b1 линейной регрессии: 4
|
|
>>> b2 = float(input("Введите коэффициент b2 линейной регрессии: "))
|
|
Введите коэффициент b2 линейной регрессии: 6
|
|
>>> x_val = float(input("Введите значение x: "))
|
|
Введите значение x: 56
|
|
>>> print(linreg(b1, b2, x_val))
|
|
340.0
|
|
```
|
|
|
|
Созданная гистограмма:  |