From df857e366594c1fe1b6e1cd2bff1d2269fa5a927 Mon Sep 17 00:00:00 2001 From: VatariShin Date: Fri, 21 Nov 2025 10:55:42 +0300 Subject: [PATCH] done lab7 --- TEMA7/Figure_okz.png | Bin 0 -> 14802 bytes TEMA7/report.md | 346 +++++++++++++++++++++++++++++++++++++++++++ TEMA7/task.md | 85 +++++++++++ 3 files changed, 431 insertions(+) create mode 100644 TEMA7/Figure_okz.png create mode 100644 TEMA7/report.md create mode 100644 TEMA7/task.md diff --git a/TEMA7/Figure_okz.png b/TEMA7/Figure_okz.png new file mode 100644 index 0000000000000000000000000000000000000000..c116694863e207139960e07a9fbcaa60eb6fcfee GIT binary patch literal 14802 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 literal 0 HcmV?d00001 diff --git a/TEMA7/report.md b/TEMA7/report.md new file mode 100644 index 0000000..bf7f9c7 --- /dev/null +++ b/TEMA7/report.md @@ -0,0 +1,346 @@ +# Отчет по теме 7 + +Коваленко Дмитрий, А-01-23 + +## 7 Создание пользовательских функций + +## 7.1 Создание пользовательской функции. + +```py +>>> def uspeh(): +... """Подтверждение успеха операции""" +... print('Выполнено успешно!') +... +>>> uspeh() +Выполнено успешно! +>>> dir() +['PS1', 'REPLHooks', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'get_last_command', 'is_wsl', 'original_ps1', 'platform', 'readline', 'sys', 'uspeh'] + +Help on function uspeh in module __main__: + +uspeh() + Подтверждение успеха операции + + +def sravnenie(a,b): + """Сравнение a и b""" + if a>b: + print(a,' больше ',b) + elif a>> n,m=16,5;sravnenie(n,m) +16 больше 5 + +>>> sravnenie('a', ',') +a больше , + +def logistfun(b,a): + """Вычисление логистической функции""" + import math + return a/(1+math.exp(-b)) + +>>> v,w=1,0.7;z=logistfun(w,v) +>>> z +0.6681877721681662 + + +def slozh(a1,a2,a3,a4): + """ Сложение значений четырех аргументов""" + return a1+a2+a3+a4 +slozh(1,2,3,4) +slozh('1','2','3','4') +b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1] +q=slozh(b1,b2,b3,b4) +>>> q +[1, 2, -1, -2, 0, 2, -1, -1] + + +def inerz(x,T,ypred): + """ Модель устройства с памятью: + x- текущее значение вх.сигнала, + T -постоянная времени, + ypred - предыдущее значение выхода устройства""" + y=(x+T*ypred)/(T+1) + return y + +sps=[0]+[1]*100 +spsy=[] +TT=20 +yy=0 +for xx in sps: + yy=inerz(xx,TT,yy) + spsy.append(yy) + +``` + +## 7.2 Функции как объекты. + +```py +>> dir(inerz) +['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] +>>> inerz.__doc__ +' Модель устройства с памятью:\n x- текущее значение вх.сигнала,\n T -постоянная времени,\n ypred - предыдущее значение выхода устройства' + +>>> fnkt=sravnenie +>>> v=16 +>>> fnkt(v,23) +16 меньше 23 + +typ_fun=8 +if typ_fun==1: + def func(): + print('Функция 1') +else: + def func(): + print('Функция 2') + +func() +Функция 2 +``` + +## 7.3 Аргументы функции + +```py +def fun_arg(fff,a,b,c): + """fff-имя функции, используемой + в качестве аргумента функции fun_arg""" + return a+fff(c,b) + +zz=fun_arg(logistfun,-3,1,0.7) + +def logistfun(a,b=1): + """Вычисление логистической функции""" + import math + return b/(1+math.exp(-a)) + +logistfun(0.7) +logistfun(0.7,2) +>>> logistfun(b=0.5,a=0.8) +0.34498724056380625 + + +>>> b1234=[b1,b2,b3,b4] +>>> qq=slozh(*b1234) +>>> qq +[1, 2, -1, -2, 0, 2, -1, -1] + +dic4={"a1":1,"a2":2,"a3":3,"a4":4} +qqq=slozh(**dic4) +>>> qqq +10 + +>>> e1=(-1,6);dd2={'a3':3,'a4':9} +>>> qqqq=slozh(*e1,**dd2) +>>> qqqq +17 + +def func4(*kort7): + """Произвольное число аргументов в составе кортежа""" + smm=0 + for elt in kort7: + smm+=elt + return smm + +>>> func4(-1,2) +1 +>>> func4(-1,2,0,3,6) +10 + + +def func4(a,b=7,*kort7): + """Кортеж - сборка аргументов - должен быть последним!""" + smm=0 + for elt in kort7: + smm+=elt + return a*smm+b + +>>> func4(-1,2,0,3,6) +-7 + +a=90 +def func3(b): + b=5*b+67 + +>>> func3(a) +>>> a +90 + +sps1=[1,2,3,4] +def func2(sps): + sps[1]=99 + +>>> func2(sps1) +>>> print(sps1) +[1, 99, 3, 4] + +kort=(1,2,3,4) +func2(kort) +Traceback (most recent call last): + File "", line 1, in + File "", line 2, in func2 +TypeError: 'tuple' object does not support item assignment +``` + +## 7.4 Анонимные функции + +```py +>>> anfun1=lambda: 1.5+math.log10(17.23) +>>> anfun1() +2.7362852774480286 +>>> anfun2=lambda a,b : a+math.log10(b) +>>> anfun2(17,234) +19.369215857410143 +>>> anfun3=lambda a,b=234: a+math.log10(b) +>>> anfun3(100) +102.36921585741014 + +>>> def func5(diap,shag): +... """ Итератор, возвращающий значения +... из диапазона от 1 до diap с шагом shag""" +... for j in range(1,diap+1,shag): +... yield j +... +>>> for mm in func5(7,3): +... print(mm) +1 +4 +7 + +>>> alp=func5(7,3) +>>> print(alp.__next__()) +1 +>>> print(alp.__next__()) +4 +>>> print(alp.__next__()) +7 +>>> print(alp.__next__()) +Traceback (most recent call last): + File "", line 1, in +StopIteration +``` + +## 7.5 Локализация объектов в функциях + +```py +glb=10 +def func7(arg): + loc1=15 + glb=8 + return loc1*arg + +>>> res=func7(glb) +>>> res +150 +>>> glb +10 + +def func8(arg): + loc1=15 + print(glb) + glb=8 + return loc1*arg + +res=func8(glb) +# получаем ошибку, потому что функция не видит глобальную переменную, а локальная ещё не была объявлена + +glb=11 +def func7(arg): + loc1=15 + global glb + print(glb) + glb=8 + return loc1*arg + +>>> res=func7(glb) +11 +>>> glb +8 + +>>> globals().keys() +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +>>> locals().keys() +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) + +def func8(arg): + loc1=15 + glb=8 + print(globals().keys()) + print(locals().keys()) + return loc1*arg + +hh=func8(glb) +>>> 'glb' in globals().keys() +True + +def func9(arg2,arg3): + def func9_1(arg1): + loc1=15 + glb1=8 + print('glob_func9_1:',globals().keys()) + print('locl_func9_1:',locals().keys()) + return loc1*arg1 + loc1=5 + glb=func9_1(loc1) + print('loc_func9:',locals().keys()) + print('glob_func9:',globals().keys()) + return arg2+arg3*glb + +>>> kk=func9(10,1) +glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) +locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1']) +loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb']) +glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) + +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1=float(znach[0]) +T=float(znach[1]) +k2=float(znach[2]) +Xm=float(znach[3]) +A=float(znach[4]) +F=float(znach[5]) +N=float(znach[6]) + + +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) +def realdvig(xtt,kk1,TT,yti1,ytin1): + #Модель реального двигателя + yp=kk1*xtt #усилитель + yti1=yp+yti1 #Интегратор + ytin1=(yti1+TT*ytin1)/(TT+1) + return [yti1,ytin1] + +def tahogen(xtt,kk2,yti2): + #Модель тахогенератора + yp=kk2*xtt #усилитель + yti2=yp+yti2 #интегратор + return yti2 + +def nechus(xtt,gran): + #зона нечувствит + if xtt(-gran): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt + +yi1=0;yin1=0;yi2=0 +vyhod=[] +for xt in vhod: + xt1=xt-yi2 #отрицательная обратная связь + [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1) + yi2=tahogen(yin1,k2,yi2) + yt=nechus(yin1,Xm) + vyhod.append(yt) + + print('y=',vyhod) + + +``` \ No newline at end of file diff --git a/TEMA7/task.md b/TEMA7/task.md new file mode 100644 index 0000000..b5e2253 --- /dev/null +++ b/TEMA7/task.md @@ -0,0 +1,85 @@ +# Общее контрольное задание по теме 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 +``` + +Созданная гистограмма: ![hist](Figure_okz.png) \ No newline at end of file