форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
110 строки
4.8 KiB
Markdown
110 строки
4.8 KiB
Markdown
# Общее контрольное задание.
|
|
|
|
* Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
|
|
* Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
|
|
* Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X.
|
|
|
|
***1. Функция устройства задержки***
|
|
|
|
```python
|
|
def delay_signal(signal, delay_time):
|
|
"""
|
|
Реализация устройства задержки
|
|
signal - входной сигнал (список значений)
|
|
delay_time - время задержки (количество отсчетов)
|
|
возвращает задержанный сигнал
|
|
"""
|
|
delayed = [0] * delay_time + signal
|
|
return delayed[:len(signal)]
|
|
|
|
print("Тест функции задержки:")
|
|
test_signal = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|
delayed_signal = delay_signal(test_signal, 3)
|
|
print(f"Исходный сигнал: {test_signal}")
|
|
print(f"Задержанный на 3: {delayed_signal}")
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
Тест функции задержки:
|
|
Исходный сигнал: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|
Задержанный на 3: [0, 0, 0, 1, 2, 3, 4, 5, 6, 7]
|
|
```
|
|
|
|
***2. Функция расчета гистограммы***
|
|
|
|
```python
|
|
def calculate_histogram(data, num_bins):
|
|
"""
|
|
Расчет гистограммы для выборки данных
|
|
data - выборка случайной величины
|
|
num_bins - число интервалов разбиения
|
|
возвращает список с количеством элементов в каждом интервале
|
|
"""
|
|
if not data:
|
|
return [0] * num_bins
|
|
|
|
min_val = min(data)
|
|
max_val = max(data)
|
|
bin_width = (max_val - min_val) / num_bins
|
|
|
|
histogram = [0] * num_bins
|
|
|
|
for value in data:
|
|
if value == max_val:
|
|
bin_index = num_bins - 1
|
|
else:
|
|
bin_index = int((value - min_val) / bin_width)
|
|
if 0 <= bin_index < num_bins:
|
|
histogram[bin_index] += 1
|
|
|
|
print("\nГистограмма:")
|
|
print("Интервал\t\tКоличество")
|
|
for i in range(num_bins):
|
|
lower_bound = min_val + i * bin_width
|
|
upper_bound = min_val + (i + 1) * bin_width
|
|
print(f"{lower_bound:.2f} - {upper_bound:.2f}\t\t{histogram[i]}")
|
|
|
|
return histogram
|
|
|
|
num_bins = int(input("Введите количество интервалов разбиения: "))
|
|
|
|
data = [1.2, 2.5, 3.1, 4.8, 5.2, 6.7, 7.3, 8.9, 9.1, 10.5,
|
|
2.1, 3.8, 4.2, 5.9, 6.3, 7.8, 8.2, 9.7]
|
|
|
|
result = calculate_histogram(data, num_bins)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
Введите количество интервалов разбиения: 5
|
|
|
|
Гистограмма:
|
|
Интервал Количество
|
|
1.20 - 3.06 3
|
|
3.06 - 4.92 4
|
|
4.92 - 6.78 4
|
|
6.78 - 8.64 3
|
|
8.64 - 10.50 4
|
|
```
|
|
|
|
***3. Анонимная функция для линейной регрессии***
|
|
|
|
```python
|
|
linear_regression = lambda b1, b2, X: b1 + b2 * X
|
|
|
|
b1 = float(input("Введите коэффициент b1: "))
|
|
b2 = float(input("Введите коэффициент b2: "))
|
|
X = float(input("Введите значение X: "))
|
|
|
|
result = linear_regression(b1, b2, X)
|
|
print(f"Y = {b1} + {b2} * {X} = {result}")
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
Введите коэффициент b1: 2
|
|
Введите коэффициент b2: 3
|
|
Введите значение X: 1
|
|
Y = 2.0 + 3.0 * 1.0 = 5.0
|
|
``` |