def signal_delay(input_signal, delay_time): """ Реализация устройства задержки сигнала Args: input_signal: список входного сигнала delay_time: время задержки (количество тактов) Returns: list: задержанный сигнал """ # Инициализируем выход нулями для первых delay_time тактов output = [0] * delay_time # Добавляем входной сигнал со сдвигом output.extend(input_signal[:-delay_time] if delay_time > 0 else input_signal) return output # Проверка функции задержки print("=== ПРОВЕРКА ФУНКЦИИ ЗАДЕРЖКИ ===") test_signal = [1, 2, 3, 4, 5, 6, 7, 8] delay = 3 delayed_signal = signal_delay(test_signal, delay) print(f"Исходный сигнал: {test_signal}") print(f"Задержка: {delay} тактов") print(f"Задержанный сигнал: {delayed_signal}") # Визуализация import matplotlib.pyplot as plt plt.figure(figsize=(10, 4)) plt.plot(test_signal, 'bo-', label='Входной сигнал', markersize=8) plt.plot(delayed_signal, 'ro-', label=f'Выход (задержка {delay})', markersize=6) plt.title('Устройство задержки сигнала') plt.xlabel('Время (такты)') plt.ylabel('Амплитуда') plt.legend() plt.grid(True, alpha=0.3) plt.show() def calculate_histogram(data, num_bins): """ Расчет гистограммы для выборки данных Args: data: список значений выборки num_bins: количество интервалов разбиения Returns: tuple: (границы интервалов, частоты) """ if not data: return [], [] min_val = min(data) max_val = max(data) bin_width = (max_val - min_val) / num_bins # Создаем границы интервалов bins = [min_val + i * bin_width for i in range(num_bins + 1)] # Инициализируем счетчики frequencies = [0] * num_bins # Подсчитываем элементы в каждом интервале for value in data: for i in range(num_bins): if bins[i] <= value < bins[i + 1]: frequencies[i] += 1 break else: # Обработка максимального значения if value == bins[-1]: frequencies[-1] += 1 return bins, frequencies def print_histogram_table(bins, frequencies): """Вывод гистограммы в виде таблицы""" print("\nГИСТОГРАММА:") print("Интервал\t\tКоличество элементов") print("-" * 45) for i in range(len(frequencies)): lower = bins[i] upper = bins[i + 1] count = frequencies[i] print(f"{lower:8.3f} - {upper:8.3f}\t\t{count:4d}") total = sum(frequencies) print("-" * 45) print(f"Всего:\t\t\t\t{total:4d}") # Проверка функции гистограммы print("\n=== ПРОВЕРКА ФУНКЦИИ ГИСТОГРАММЫ ===") import random # Генерируем тестовые данные (нормальное распределение) test_data = [random.gauss(0, 1) for _ in range(1000)] bins, freq = calculate_histogram(test_data, 10) print_histogram_table(bins, freq) # Визуализация гистограммы plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) plt.hist(test_data, bins=10, alpha=0.7, edgecolor='black') plt.title('Гистограмма (matplotlib)') plt.xlabel('Значение') plt.ylabel('Частота') plt.grid(True, alpha=0.3) plt.subplot(1, 2, 2) # Рисуем нашу гистограмму bin_centers = [(bins[i] + bins[i+1])/2 for i in range(len(bins)-1)] plt.bar(bin_centers, freq, width=(bins[1]-bins[0])*0.8, alpha=0.7, edgecolor='black') plt.title('Наша гистограмма') plt.xlabel('Значение') plt.ylabel('Частота') plt.grid(True, alpha=0.3) plt.tight_layout() plt.show() # Анонимная функция для расчета линейной регрессии linear_regression = lambda b1, b2, X: b1 + b2 * X # Проверка анонимной функции print("\n=== ПРОВЕРКА АНОНИМНОЙ ФУНКЦИИ ЛИНЕЙНОЙ РЕГРЕССИИ ===") # Тестовые параметры модели b1_test = 2.5 # intercept b2_test = 1.8 # slope X_values = [0, 1, 2, 3, 4, 5] print(f"Параметры модели: b1 = {b1_test}, b2 = {b2_test}") print("Расчет значений Y = b1 + b2*X:") print("X\tY") print("-" * 12) for X in X_values: Y = linear_regression(b1_test, b2_test, X) print(f"{X}\t{Y:.2f}") # Визуализация линейной регрессии plt.figure(figsize=(10, 6)) # Генерируем больше точек для плавного графика X_smooth = [i/10 for i in range(0, 51)] Y_smooth = [linear_regression(b1_test, b2_test, x) for x in X_smooth] plt.plot(X_smooth, Y_smooth, 'b-', linewidth=2, label=f'Y = {b1_test} + {b2_test}*X') plt.plot(X_values, [linear_regression(b1_test, b2_test, x) for x in X_values], 'ro', markersize=8, label='Расчетные точки') plt.title('Линейная регрессия: Y = b1 + b2*X') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.grid(True, alpha=0.3) plt.show() # Дополнительная проверка с разными параметрами print("\n=== ПРОВЕРКА С РАЗНЫМИ ПАРАМЕТРАМИ ===") test_cases = [ (0, 1, 10), # Y = X (5, 0.5, 10), # Y = 5 + 0.5*X (-2, 2, 10) # Y = -2 + 2*X ] for b1, b2, X in test_cases: Y = linear_regression(b1, b2, X) print(f"b1={b1}, b2={b2}, X={X} -> Y = {Y}")