форкнуто от main/python-labs
				
			
			Вы не можете выбрать более 25 тем
			Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
		
		
		
		
		
			
		
			
				
	
	
		
			90 строки
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Markdown
		
	
			
		
		
	
	
			90 строки
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Markdown
		
	
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 7
 | 
						|
Выполнил: Тимошенко А.А. Проверил: Козлюк Д.А.
 | 
						|
 | 
						|
## Задание
 | 
						|
•	Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с за-держкой на заданное время Т.
 | 
						|
 | 
						|
•	Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращае-мый результат функции: список с числами элементов выборки в интервалах разбиения.
 | 
						|
 | 
						|
•	Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х 
 | 
						|
Y=b1+b2*X и имеющую аргументы b1, b2 и X.
 | 
						|
 | 
						|
## Решение
 | 
						|
```
 | 
						|
def delay_signal(signal, T):
 | 
						|
   
 | 
						|
    # Создаю копию исходного сигнала
 | 
						|
    delayed_signal = signal.copy()
 | 
						|
    if T < len(signal):
 | 
						|
        # Сдвигаю сигнал вправо на T отсчетов, начало заполняем нулями
 | 
						|
        delayed_signal = [0] * T + signal[:-T]
 | 
						|
    else:
 | 
						|
        # Если задержка больше длины сигнала - возвращаем нули
 | 
						|
        delayed_signal = [0] * len(signal)
 | 
						|
 | 
						|
    return delayed_signal
 | 
						|
 | 
						|
>>> y = [random.gauss(3, 1.5) for _ in range(40)]
 | 
						|
>>> y
 | 
						|
[5.325416780634114, 2.3593622133749808, 1.2470676959301887, -0.593060108499694, 1.4340279482713292, 2.162904911751828, 3.5966381215435743, 3.1215233313521367, 3.278769015552392, 1.4600848702469413, 2.227188218562767, -0.02101290555432689, 2.9015754761132713, 5.507229347318583, 4.392918705255052, 2.893096608173657, 2.400184728443876, 2.3464420973774045, -0.29207940771891217, 4.868968794420769, 5.1569207689963275, 2.966999923764223, 0.9443978469937528, 5.562190945114451, 3.4834584941068765, 1.7250255447073042, 3.013873484634806, 3.783067951814041, 4.602220595567667, 2.283163010872606, 4.563248136396248, 5.370530689941988, -0.5394330191088121, 4.481730159619498, 2.6088804215267345, 3.562728440630803, 4.422684655442551, 1.846276163481897, 3.8925551687094426, 4.720299420830592]
 | 
						|
 | 
						|
>>> yd = delay_signal(y, 4)
 | 
						|
>>> yd
 | 
						|
[0, 0, 0, 0, 5.325416780634114, 2.3593622133749808, 1.2470676959301887, -0.593060108499694, 1.4340279482713292, 2.162904911751828, 3.5966381215435743, 3.1215233313521367, 3.278769015552392, 1.4600848702469413, 2.227188218562767, -0.02101290555432689, 2.9015754761132713, 5.507229347318583, 4.392918705255052, 2.893096608173657, 2.400184728443876, 2.3464420973774045, -0.29207940771891217, 4.868968794420769, 5.1569207689963275, 2.966999923764223, 0.9443978469937528, 5.562190945114451, 3.4834584941068765, 1.7250255447073042, 3.013873484634806, 3.783067951814041, 4.602220595567667, 2.283163010872606, 4.563248136396248, 5.370530689941988, -0.5394330191088121, 4.481730159619498, 2.6088804215267345, 3.562728440630803]
 | 
						|
 | 
						|
import matplotlib.pyplot as plt
 | 
						|
 | 
						|
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(10,200))]
 | 
						|
intervals = int(input("Введите количество интервалов разбиения: "))
 | 
						|
output = histo(sample, intervals)
 | 
						|
 | 
						|
======= RESTART: C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА7\OKZ2.py ======
 | 
						|
Введите количество интервалов разбиения: 12
 | 
						|
Список с числами элементов в интервалах: [3, 4, 10, 10, 6, 8, 7, 0, 1, 0, 0, 1]
 | 
						|
 | 
						|
#График сохранен под именем Figure_2
 | 
						|
 | 
						|
 | 
						|
 | 
						|
linreg = lambda b1, b2, x: b1 + b2 * x
 | 
						|
b1 = float(input("Введите коэффициент b1 линейной регрессии: "))
 | 
						|
b2 = float(input("Введите коэффициент b2 линейной регрессии: "))
 | 
						|
x_val = float(input("Введите значение x: "))
 | 
						|
print(linreg(b1, b2, x_val))
 | 
						|
 | 
						|
 | 
						|
Введите коэффициент b1 линейной регрессии: 2
 | 
						|
Введите коэффициент b2 линейной регрессии: 3
 | 
						|
Введите значение x: 5
 | 
						|
17.0
 | 
						|
``` |