From 32ac9e0cbfd761b5c5ea955ce02cb71e297958ed Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 4 Dec 2025 21:19:54 +0300 Subject: [PATCH] =?UTF-8?q?task:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA6/popul.txt | 1 + TEMA7/1.png | Bin 0 -> 36944 bytes TEMA7/report.md | 573 ++++++++++++++++++++++++++++++++++++++++++++++++ TEMA7/task.md | 88 ++++++++ TEMA7/taskik.py | 21 ++ 5 files changed, 683 insertions(+) create mode 100644 TEMA7/1.png create mode 100644 TEMA7/report.md create mode 100644 TEMA7/task.md create mode 100644 TEMA7/taskik.py diff --git a/TEMA6/popul.txt b/TEMA6/popul.txt index e69de29..70c2b35 100644 --- a/TEMA6/popul.txt +++ b/TEMA6/popul.txt @@ -0,0 +1 @@ +{-0.48, 1.68, 2.38, 3.86, 4.91, 5.83, 4.2, 7.17, 8.31, 9.92, 9.68, 9.15, 9.52, 0.27, -6.61, -13.16, -0.15, -12.69, -9.35, -3.17, -7.77, -4.01, -18.3, -17.27, -17.51, -18.08, -14.69, -18.46, -16.27, -15.08, -18.42, -9.82, -17.19, -13.97, -6.91, -11.2, -11.48, -3.5, -2.11, -1.49} \ No newline at end of file diff --git a/TEMA7/1.png b/TEMA7/1.png new file mode 100644 index 0000000000000000000000000000000000000000..f2bb9faed2f1fafc46b61761bfde08a0822056ca GIT binary patch literal 36944 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 literal 0 HcmV?d00001 diff --git a/TEMA7/report.md b/TEMA7/report.md new file mode 100644 index 0000000..10c5ee2 --- /dev/null +++ b/TEMA7/report.md @@ -0,0 +1,573 @@ +# Отчет по теме 7 + +Анисенков Павел, А-01-23 + +## 1 Запуск интерактивной оболочки IDLE + +Была запущена интерактивная оболочка IDLE. +```py +os.chdir('C:\\Users\\Professional\\Desktop\\python-labs\\TEMA7') +``` + +## 2 Изучение создания пользовательских функций + +Было изучено создание функций. + +## 2.1 Изучение создания функции без аргументов + +Была создана и потом применена функция, которая печатает определенный текст. Был определен класс функции и просмотрено пространство имен, в котором появилось название созданной функции. Просмотрена помощь по функции, в которой был выведен комментарий, созданный при создании функции. Можно сделать вывод, что в описании к функции нужно описать ее концепцию, что делает функция и какие аргументы нужно указывать. + +```py +>>>def uspeh(): + """Подтверждение успеха операции""" + print('Выполнено успешно!') + + +>>>uspeh() +Выполнено успешно! +>>>type(uspeh) + +>>>dir() +['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh'] +>>>help(uspeh) +Help on function uspeh in module __main__: + +uspeh() + Подтверждение успеха операции +``` +docstring помогает другим разработчикам понимать, что делает функция, не изучая её код. + +## 2.2 Изучение создания функции с аргументами + +Была создана и применена функция сравнения двух чисел. При передаче в аргументы переменных класса чисел, функция сравнила числа, а при передачи данных типа строка, функция сравнила размер кодового номера, в случае с числами переменные сравниваются посимвольно, то есть первой цифрой числа. + +```py +>>>def sravnenie(a,b): + """Сравнение a и b""" + if a>b: + print(a,' больше ',b) + elif a>>n,m=16,5;sravnenie(n,m) +16 больше 5 +>>>n,m="А","а";sravnenie(n,m) +А меньше а #Каждому символу присвоен кодовый номер в стандарте Unicode A = U+0041 (десятичное: 65), a = U+0061 (97) +``` + +## 2.3 Изучение создания функции с применением return + +Была создана и применена функция, которая возвращает результат вычисления математического выражения. + +```py +>>>def logistfun(b,a): + """Вычисление логистической функции""" + import math + return a/(1+math.exp(-b)) + +>>>v,w=1,0.7;z=logistfun(w,v) +>>>z +0.6681877721681662 +``` + +## 2.4 Изучение создания функции сложения обьектов различных типов + +Была создана и применена функция сложения различных обьектов. При сложении чисел, фунцкия вернула сумму, при сложении строк, списков и кортежей, функция обьединила их в один обьект, а при передаче в виде аргументов словарей и множеств произошла ошибка. + +```py +>>>def slozh(a1,a2,a3,a4): + """ Сложение значений четырех аргументов""" + return a1+a2+a3+a4 + + +>>>slozh(1,2,3,4) # Сложение чисел +10 +>>>slozh('1','2','3','4') # Сложение строк +'1234' +>>>b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1] +>>>q=slozh([1,2],[-1,-2],[0,2],[-1,-1]) #Сложение списков +q +[1, 2, -1, -2, 0, 2, -1, -1] +>>>kor = ("a", 8) +>>>kor2 = ("b", 9) +>>>kor3 = ("c", 10) +>>>kor4 = ("d", 11) +>>>k=slozh(kor, kor2, kor3, kor4) +>>>k +('a', 8, 'b', 9, 'c', 10, 'd', 11) +>>>sl1 = {"A": 8, "B": 9} +>>>sl2 = {"B": 10, "C": 11} +>>>sl3 = {"D": 12, "E": 13} +>>>sl4 = {"F": 14, "H": 15} +>>>sl=slozh(sl1, sl2, sl3, sl4) +Traceback (most recent call last): + File "", line 1, in + sl=slozh(sl1, sl2, sl3, sl4) + File "", line 3, in slozh + return a1+a2+a3+a4 +TypeError: unsupported operand type(s) for +: 'dict' and 'dict' +>>>mn1 = {"A", "B"} +>>>mn2 = {"C", "D"} +>>>mn3 = {"E", "F"} +>>>mn4 = {"H", "J"} +>>>mn=slozh(mn1, mn2, mn3, mn4) +Traceback (most recent call last): + File "", line 1, in + mn=slozh(mn1, mn2, mn3, mn4) + File "", line 3, in slozh + return a1+a2+a3+a4 +TypeError: unsupported operand type(s) for +: 'set' and 'set' +``` + +## 2.5 Изучение создания функции, которая создает список со значениями вычисленных сигналов + +Была создана функция, которая вычисляет значение по определенной формуле, далее реализован цикл, в котором созданный ранее список пополняется новыми значениями выходного сигнала, которые зависят от предыдущего значения выходного сигнала. По данным выходного сигнала был построен график. + +```py +>>>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) + + +>>>import pylab +>>>spsm = list(range(101)) +>>>pylab.plot(spsm, spsy) +[] +>>>pylab.show() +``` + +![](1.png) + +## 3 Изучение действий с функциями как с обьектами + +## 3.1 Изучение вывода подсказок по функции + +Были выведены атрибуты созданной функции и применен один из них, который показал описание функции, которое также было выведено с помощью функции help. + +```py +>>>dir(inerz) +['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__'] +>>>inerz.__doc__ +'Модель устройства с памятью:\n x- текущее значение вх.сигнала,\nT -постоянная времени,\nypred - предыдущее значение выхода устройства' +>>>help(inerz) +Help on function inerz in module __main__: + +inerz(x, T, ypred) + Модель устройства с памятью: + x- текущее значение вх.сигнала, + T -постоянная времени, + ypred - предыдущее значение выхода устройства +``` + +## 3.2 Изучение создания ссылки на обьект + +Была создана ссылка на функцию и уже по этой ссылке вызвана функция, которая сравнила два числа по величине. + +```py +>>>fnkt=sravnenie +>>>v=16 +>>>fnkt(v,23) +16 меньше 23 +``` + +## 3.3 Изучение применения условия if для применения разных функций + +Был создан цикл-условия, в котором при одном условии функция определяется одними инструкциями, а при другом условии - другими. И была вызвана эта функция. + +```py +>>>typ_fun=8 +>>>if typ_fun==1: + def func(): + print('Функция 1') +else: + def func(): + print('Функция 2') + + +>>>func() +Функция 2 +``` + +## 4 Изучение работы с аргументами функции + +Были рассмотрены различные варианты передачи аргументов функции и работы с ними. + +## 4.1 Изучение функции как аргумента другой функции + +Была создана функция, а потом вызвана с передачей в виде первого аргумента - другой функции. + +```py +def fun_arg(fff,a,b,c): + """fff-имя функции, используемой + в качестве аргумента функции fun_arg""" + return a+fff(c,b) + + +zz=fun_arg(logistfun,-3,1,0.7) +zz +-2.3318122278318336 +``` + +## 4.2 Изучение функции, в которой присутствует предопределенный аргумент + +Была создана функция, в которой один аргумент уже предопределен, а при вызове функции передается всего один аргумент из двух. + +```py +>>>def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1 + """Вычисление логистической функции""" + import math + return b/(1+math.exp(-a)) + + +>>>logistfun(0.7) #Вычисление со значением b по умолчанию +0.6681877721681662 +>>>logistfun(0.7,2) #Вычисление с заданным значением b +1.3363486314678965 +``` +## 4.3 Изучение передачи аргументов функции в произвольном порядке +Функция была вызвана с передачей аргументов не по порядку, а по названию аргументов. + +```py +>>>logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами a/(1+math.exp(-b)) +0.34498724056380625 +``` + +## 4.4 Изучение передачи аргумента в виде ссылки на список/ кортеж + +Была вызвана функция, которой в качестве аргументов была передана ссылка на список. + +```py +b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1] +>>>b1234=[b1,b2,b3,b4] # Список списков из п.2.4 +>>>qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку +>>>qq +[1, 2, -1, -2, 0, 2, -1, -1] +``` + +## 4.5 Изучение передачи аргумента в виде ссылки на словарь + +Была вызвана функция, которой в качестве аргументов была передана ссылка на словарь. В результате функция взяла в качестве аргументов значения из словаря. + + +```py +dic4={"a1":1,"a2":2,"a3":3,"a4":4} +qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки +qqq +10 +``` + +## 4.6 Изучение смешанных ссылок + +Была вызвана функция, которой в качестве аргументов была передана ссылка на список и словарь. + +```py +>>>e1=(-1,6);dd2={'a3':3,'a4':9} +>>>qqqq=slozh(*e1,**dd2) +>>>qqqq +17 +``` + +## 4.7 Изучение функции, в которой в качестве аргумента присутствует кортеж неопределенного размера + +Была создана функция, где изначально не определено количество аргументов. Все переданные переменные в функцию, собираются в кортеж, доступный внутри функции. + +```py +>>>def func4(*kort7): + """Произвольное число аргументов в составе кортежа""" + smm=0 + for elt in kort7: + smm+=elt + return smm + + +>>>func4(-1,2) #Обращение к функции с 2 аргументами +1 +>>>func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами +10 +``` + +## 4.8 Изучение функции, с неопределенным количеством аргументов + +Была создана функция где изначально есть два аргумента, а далее не определено количество аргументов. Все переданные переменные в функцию, собираются в кортеж, доступный внутри функции. Также была создана функция, где переданные аргументы собираются в словарь. + +```py +>>>def func4(a,b=7,*kort7): #Аргументы: a-позиционный, b- по умолчанию + кортеж + """Кортеж - сборка аргументов - должен быть последним!""" + smm=0 + for elt in kort7: + smm+=elt + return a*smm+b + +>>>func4(-1,2,0,3,6) +-7 # (-1) * 9 + 2 + +>>>def func5(**slovar): + print(slovar) +>>>func5(a=5, n=8, m=30) +{'a': 5, 'n': 8, 'm': 30} +``` + +## 4.9 Изучение изменения обьектов внутри функции + +Были созданы функции, внутри которых передаваемый аргумент как-либо был изменен, и после применения функции, просмотрено значение переменных. Числовая переменная осталась такой же (а созданная внутри функции переменная "a" не имела связи с созданной "а" вне функции), какой была задана, элемент списка изменился, а при попытке передать в функцию кортеж вышла ошибка. + +```py +>>>a=90 # Числовой объект – не изменяемый тип +>>>def func3(b): + a=5*b+67 + + +>>>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) #Кортеж – неизменяемый тип объекта +>>>def func2(kort): + kort[1]=99 + +>>>print(kort) +(1, 2, 3, 4) +``` + +## 5 Изучение специальных типов пользовательских функций + +Были изучены и созданы анонимные функции и функции-генераторы. + +## 5.1 Изучение анонимных функций + +Были созданы и применены функции без имени без аргументов, с двумя аргументами и с необязательным аргументом. + +```py +>>>import math +>>>anfun1=lambda: 1.5+math.log10(17.23) #Анонимная функция без аргументов +>>>anfun1() # Обращение к объекту-функции +2.7362852774480286 +>>>anfun2=lambda a,b : a+math.log10(b) #Анонимная функция с 2 аргументами +>>>anfun2(17,234) +19.369215857410143 +>>>anfun3=lambda a,b=234: a+math.log10(b) #Функция с необязательным вторым аргументом +>>>anfun3(100) +102.36921585741014 +``` + +## 5.2 Изучение функции-генератора + +Была создана функция-генератор, которая производит последовательность чисел. Она была выведена с помощью цикла for, а также генерирующиеся значения были выведены поотдельности, с помощью метода __next__. + +```py +>>>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 + print(alp.__next__()) +StopIteration +``` + +## 6 Изучение обьектов в функциях + +Были изучены локальные и глобальные обьекты, а также смоделирована система управления. + +## 6.1 Изучение работы с глобальными и локальными обьектами + +Локальными являются объекты, которые создаются в функциях присваиванием им некоторых значений. Они записываются в пространство имен, создаваемое в функции. Глобальные – это те объекты, значения которых заданы вне функции. +Была создана функция, внутри которой уже существующей в глобальном пространстве переменной было присвоено определенное новое значение. При выполнении функции глобальная переменная не изменялась. Далее внутри созданной функции была попытка напечатать переменную, которой не существует в пространстве имен функции. Также была создана функция, внутри которой была обьявлена переменная как глобальная и после этого она была изменена внутри функции, что изменило ее в глобальном пространстве. + +```py +>>>glb=10 +>>>def func7(arg): + loc1=15 + glb=8 + return loc1*arg + + +>>>res=func7(glb) #Для получения результата здесь использовалось значение переменной glb=10, то есть глобальной переменной, потому что именно она была передана в arg, который использовался в вычислениях. +>>>res +150 +>>>glb #Значение переменной не изменилось, так как это глобальная переменная и вне функции она не переопределялась. +10 +>>>def func8(arg): + loc1=15 + print(glb) + glb=8 + return loc1*arg + + +>>>res=func8(glb) #В данном случае выведется ошибка, так как до функции print внутри пространства имен функции переменной glb не существует +Traceback (most recent call last): + File "", line 1, in + res=func8(glb) + File "", line 3, in func8 + print(glb) +UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value + +>>>glb=11 +>>>def func7(arg): + loc1=15 + global glb + print(glb) + glb=8 + return loc1*arg + + +>>>res=func7(glb) +11 +>>>glb #В этом случае значение переменной меняется, так как внутри функции обьявляется именно глобальная переменная glb. +8 +>>>res #Однако в виде arg мы передали именно значение glb равное 11, поэтому как аргумент будет использоваться именно это значение, хоть сама переменная glb и была изменена. +165 +``` + +## 6.2 Изучение нахождения локальных и глобальных обьектов + +Были выведены локальные и глобальные обьекты в глобальном пространстве видимости и также внутри функции. + +```py +>>>globals().keys() #На глобальном уровне локальная и глобальная области видимости совпадают. +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'al', 'glb', 'func7', 'res', 'func8']) +>>>locals().keys() #В данном случае отличий не будет, так как локализация обьектов запрашивается в глобальной области видимости. +>>>def func8(arg): + loc1=15 + glb=8 + print(globals().keys()) #Перечень глобальных объектов «изнутри» функции + print(locals().keys()) #Перечень локальных объектов «изнутри» функции + return loc1*arg + + +>>>hh=func8(glb) #В этом случае глобальные обьекты остались те же, место локализации - функция, в ней существуют три локальных обьекта. +>>>hh +165 +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'al', 'glb', 'func7', 'res', 'func8']) +dict_keys(['arg', 'loc1', 'glb']) +'glb' in globals().keys() +True +``` + +## 6.3 Изучение глобальных и локальных обьектов внутри вложенных функций + +Были выведены глобальные и локальные обьекты внутри функции и внутри вложенной в нее функции. Можно следать вывод, что созданные переменные во вложенной функции не будут доступны для той функции, в которую вложена данная функция, так как в списке локальных обьектов в основной функции их нет. То есть они существуют только в пространстве вложенной функции. Так же и с обьектами основной функции - их не существует для вложенной функции. Сама же основная функция становится локальным обьектом, а вот вложенная функция как обьект существует только внутри основной функции. + +```py +>>>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 #75 + loc1=5 + glb=func9_1(loc1) + print('loc_func9:',locals().keys()) + print('glob_func9:',globals().keys()) + return arg2+arg3*glb #85 + + +>>>kk=func9(10,1) +glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'al', '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__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'al', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) +``` + +## 6.4 Изучение моделирования системы управления + +Была смоделирована система управления, состоящая из реального двигателя, тахогенератора и зоны нечувствительности (их модели представляются пользовательскими функциями). На вход системы подается синусоидальный сигнал, который проходит через отрицательную обратную связь. Модель реального двигателя и тахогенератора представлены интеграторами и усилителями, а зона нечувствительности ограничивает значения выходного сигнала. В результате работы программы вычисляется и выводится список значений, представляющих выходной сигнал системы. + +```py +>>>znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1,T,k2,Xm,A,F,N=0.5,35,0.6,5,1000,5,15 +>>>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)) +>>>vhod +[0.0, 951.0565162951535, 587.7852522924733, -587.785252292473, -951.0565162951536, -2.4492935982947065e-13, 951.0565162951535, 587.7852522924734, -587.7852522924728, -951.0565162951538, -4.898587196589413e-13, 951.0565162951528, 587.7852522924736, -587.7852522924726, -951.0565162951538] +>>>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) #Если скорость yin1 = 0.3 → выход yt = 0 (слишком мало) + vyhod.append(yt) + + +>>>print('y=',vyhod) +y= [0, 8.209118281877132, 29.104924685415277, 40.86232427117668, 38.3075414151359, 34.68635884409398, 42.90679739719954, 57.19526562043458, 60.53754513466764, 47.64611630565597, 31.742316122264157, 25.812753880749888, 24.278160244795345, 10.44509996519298, -10.518946273258612] +``` + + +## 7 Завершение работы в IDLE + +Был завершен сеанс в среде IDLE. \ No newline at end of file diff --git a/TEMA7/task.md b/TEMA7/task.md new file mode 100644 index 0000000..d915b57 --- /dev/null +++ b/TEMA7/task.md @@ -0,0 +1,88 @@ +# Общее контрольное задание по теме 7 + +Анисенков Павел, А-01-23 + +## Задание + +Общее контрольное задание. + • Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т. + • Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения. + • Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х +Y=b1+b2*X +и имеющую аргументы b1, b2 и X. + +## Решение + +```py + +def signal_zaderzka(vhod_spisok, zaderzka): + """ + Возвращает сигнал, где каждое значение - это значение входного сигнала + zaderzka тактов назад (0 для первых zaderzka тактов) + """ + vihod = [] + istoriya = [] # Отдельный список для истории + + for el in vhod_spisok: + istoriya.append(el) # Добавляем текущее значение в историю + + if len(istoriya) <= zaderzka: + # Еще не накопили достаточно истории + vihod.append(0) + else: + # Берем значение, которое было zaderzka тактов назад + el_zad = istoriya[-zaderzka - 1] + vihod.append(el_zad) + + return vihod +zaderzka = 3 +vhod = [1, 2, 3, 4, 5] +vihod = signal_zaderzka(vhod, zaderzka) +print("входной сигнал: ", vhod, "выходной сигнал: ", vihod) +входной сигнал: [1, 2, 3, 4, 5] выходной сигнал: [0, 0, 0, 1, 2] + + +def histogram(data, num_bins): + """Вычисляет и выводит гистограмму в виде таблицы, возвращает bins и counts.""" + min_val, max_val = min(data), max(data) + bin_width = (max_val - min_val) / num_bins + bins = [min_val + i * bin_width for i in range(num_bins + 1)] #список границ интервалов min=0, max=10, num_bins=5 → bins=[0, 2, 4, 6, 8, 10] + counts = [] + for i in range(num_bins): + count = 0 + for x in data: + if bins[i] <= x < bins[i+1] or (x == max_val and i == num_bins - 1): + count += 1 + counts.append(count) + + print("Гистограмма:") + for i in range(num_bins): + print(f"Интервал: [{bins[i]:.2f}, {bins[i+1]:.2f}], Элементов: {int(counts[i])}") + + return bins, counts + +import random +data = [random.gauss(0, 1) for _ in range(1000)] +num_bins = 10 +bins, counts = histogram(data, num_bins) +Гистограмма: +Интервал: [-3.07, -2.46], Элементов: 11 +Интервал: [-2.46, -1.85], Элементов: 33 +Интервал: [-1.85, -1.24], Элементов: 64 +Интервал: [-1.24, -0.64], Элементов: 160 +Интервал: [-0.64, -0.03], Элементов: 207 +Интервал: [-0.03, 0.58], Элементов: 246 +Интервал: [0.58, 1.19], Элементов: 168 +Интервал: [1.19, 1.80], Элементов: 75 +Интервал: [1.80, 2.41], Элементов: 26 +Интервал: [2.41, 3.02], Элементов: 10 +``` + +```py +>>>anon = lambda b1, b2, X: b1+b2*X +>>>Y = anon(1,2,3) +>>>Y +7 +``` + + diff --git a/TEMA7/taskik.py b/TEMA7/taskik.py new file mode 100644 index 0000000..f2c552f --- /dev/null +++ b/TEMA7/taskik.py @@ -0,0 +1,21 @@ +def histogram(data, num_bins): + """Вычисляет и выводит гистограмму в виде таблицы, возвращает bins и counts.""" + min_val, max_val = min(data), max(data) + bin_width = (max_val - min_val) / num_bins + bins = [min_val + i * bin_width for i in range(num_bins + 1)] #список границ интервалов min=0, max=10, num_bins=5 → bins=[0, 2, 4, 6, 8, 10] + counts = [] + for i in range(num_bins): + count = 0 + for x in data: + if bins[i] <= x < bins[i+1] or (x == max_val and i == num_bins - 1): + count += 1 + counts.append(count) + + print("Гистограмма:") + for i in range(num_bins): + print(f"Интервал: [{bins[i]:.2f}, {bins[i+1]:.2f}], Элементов: {int(counts[i])}") + + return bins, counts + +import taskik +