From c73a31b86a516ac33c4bb77ca8b180f35b652360 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 4 Dec 2025 22:24:30 +0300 Subject: [PATCH] =?UTF-8?q?report:=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/bin.mnz | Bin 743 -> 744 bytes TEMA6/task6.py | 9 +- TEMA7/Ris1.png | Bin 0 -> 19345 bytes TEMA7/protocol7.py | 561 ++++++++++++++++++++++++++++++++++++++++++++ TEMA7/protocol7.txt | 561 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1126 insertions(+), 5 deletions(-) create mode 100644 TEMA7/Ris1.png create mode 100644 TEMA7/protocol7.py create mode 100644 TEMA7/protocol7.txt diff --git a/TEMA6/bin.mnz b/TEMA6/bin.mnz index 42cd8c7e2510acf81179ce2f622c5cd80bbb0582..0fb107804e2ec2ff1bb6f34e69c40dad748c02d6 100644 GIT binary patch literal 744 zcmYL{IZnes6oz9fC8FRIsUl`$ISd`NR2(4mQ&3E3LdgLvB!q=!xWe;|nExBeB+}E& zTmI#Z58LBozu~vbeQ+iBG1d@L4enOgn;Md?Db(OEmAleOIr{u{J-J%#$ZINS$|)aw z4NxO|QY-6piwM>zy)ZWxas)6HaEG0LW1IpMVnkP1$9M|_J4sYq zScS0!e6^MHZqfsfFy*QFVu*kdZ4R3-J8h(`e%*CjBs=8UB`LCSwCdz}HU*$O>J*}g zk{q`$z?G-6KWvZp?YrCDm0do!lMVJ|!*Z}s`zZOsUTn5;d9K&lzU`+a-)*$1{zv;& a%7&89?6rb6;fZ*^o^GKn_$u>S+A?grif literal 743 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 Выполнено успешно! +type(uspeh) +>> +dir() +>> ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh'] +``` +Просмотрена помощь по функции, созданной ранее +``` +help(uspeh) +Help on function uspeh in module __main__: + +uspeh() + Подтверждение успеха операции +``` +Можно сделать вывод, что в описании к функции нужно описать ее концепцию, что делает функция и какие аргументы нужно указывать. + +### 2.2 Пример функции с двумя аргументами + +Была создана и применена функция сравнения двух чисел. При передаче в аргументы переменных класса чисел, функция сравнила числа, а при передачи чисел типа строка, функция сравнила переменные посимвольно, то есть первую цифру числа. + +``` +def sravnenie(a,b): + """Сравнение a и b""" + if a>b: + print(a,' больше ',b) + elif a> 16 больше 5 +n,m="16","5";sravnenie(n,m) +>> 16 меньше 5 +``` + +### 2.3 Пример функции, содержащей return + +Была создана и применена функция, реализующая возвращение результата вычисления математического выражения. + +``` +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 Изучение функций сложения обьектов для различных типов аргументовв + +Была создана и применена функция сложения различных обьектов. +При сложении чисел, фунцкия вернула сумму, при сложении строк, списков и кортежей, функция обьединила их в один объект +В случае же словарей и множеств, результатом программы стала ошибка. + +``` +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(b1,b2,b3,b4) #Сложение списков +q +>> [1, 2, -1, -2, 0, 2, -1, -1] + +kor1 = ("a", 1) +kor2 = ("b", 2) +kor3 = ("c", 3) +kor4 = ("d", 4) +k=slozh(kor, kor2, kor3, kor4) +k +>> ('a', 1, 'b', 2, 'c', 3, 'd', 4) + +sl1 = {"A": 1, "B": 2} +sl2 = {"B": 3, "C": 4} +sl3 = {"D": 5, "E": 6} +sl4 = {"F": 7, "H": 8} +sl=slozh(sl1, sl2, sl3, sl4) + +Traceback (most recent call last): + File "", line 1, in + sl=slozh(sl1, sl2, sl3, sl4) + File "", line 2, 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): +Traceback (most recent call last): + File "", line 1, in + mn=slozh(mn1, mn2, mn3, mn4) + File "", line 2, in slozh + return a1+a2+a3+a4 +TypeError: unsupported operand type(s) for +: 'set' and 'set' + +``` + +## 2.5 Изучение создания функции, которая создает список значений вычисленных сигналов + +Была создана функция, которая вычисляет значение в соответствии с моделью некоторого устройства, далее реализован цикл, в котором созданный ранее список пополняется новыми значениями выходного сигнала + +``` +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() +``` +Представим результат в виде графика: +![](Ris1.png) + +## 3 Функции как обьекты + +### 3.1 Получение списка атрибутов объекта-функции + +Выведены атрибуты созданной функции и применен один из них,содержащий описание функции + +``` +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 Сохранение ссылки на объект-функцию в другой переменной + +Здесь происходит присвоение функции sravnenie переменной fnkt. Функции можно передавать в переменные, как и любые другие объекты. После этого переменная fnkt ссылается на ту же самую функцию, что и sravnenie. +``` +fnkt=sravnenie +v=16 +fnkt(v,23) +>> 16 меньше 23 +``` + +### 3.3 Изучение возможности альтернативного определения функции в программе. + +Был создан цикл-условие, в котором в зависимости от выполнения того иили иного условия функция будет отличаться по функционалу. + +``` +typ_fun=8 +if typ_fun==1: + def func(): + print('Функция 1') +else: + def func(): + print('Функция 2') + +func() +>> Функция 2 +``` + +## 4 Аргументы функции. + +### 4.1 Изучение возможности использования функции в качестве аргумента другой функции + + +``` +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 Обязательные и необязательные аргументы + +``` +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.3363755443363323 +``` + +### 4.3 Изучение передачи аргументов функции в произвольном порядке + +``` +logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами +>>0.34498724056380625 +``` + +### 4.4 Пример со значениями аргументов функции, содержащимися в списке или кортеже. + +В данном случае '*' - оператор распаковки, благодаря ему происходит передача набора аргументов функции. +``` +b1234=[b1,b2,b3,b4] # Список списков из п.2.4 +qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку +qq +>> [1, 2, -1, -2, 0, 2, -1, -1] +``` + +### 4.5 Пример со значениями аргументов функции, содержащимися в словаре + +``` +dic4={"a1":1,"a2":2,"a3":3,"a4":4} +qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки +qqq +>> 10 +``` +В результате функция выделила в качестве аргументов значения из словаря. +### 4.6 Изучение cмешанных ссылок + + + +``` +e1=(-1,6);dd2={'a3':3,'a4':9} +qqqq=slozh(*e1,**dd2) +qqqq +>> 17 +``` + +### 4.7 Переменное число аргументов у функции + +``` +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 Комбинация аргументов + +``` +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 +``` +Произведем аналогичное для словаря: +``` +def func5(**slovar): + print(slovar) +func5(a=5, n=8, m=30) +>> {'a': 5, 'n': 8, 'm': 30} +``` + +### 4.9 Изменение значений объектов, используемых в качестве аргументов функции +``` +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) #Кортеж – неизменяемый тип объекта +func2(kort) +>> +Traceback (most recent call last): + File "", line 1, in + func2(kort) + File "", line 2, in func2 + sps[1]=99 +TypeError: 'tuple' object does not support item assignment +``` + +## 5 Специальные типы пользовательских функций + +Были изучены и созданы анонимные функции и функции-генераторы. + +### 5.1 Анонимные функции. +Анонимные функции или по-другому их называют лямбда-функциями – это функции без имени (поэтому их и называют анонимными) + +``` +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 Функции-генераторы +Это – такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений + +``` +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 Примеры на локализацию с глобальными и локальными обьектами + +Пример 1 +``` +glb=10 +def func7(arg): + loc1=15 + glb=8 + return loc1*arg + +res=func7(glb) +res +>> 150 +glb +>> 10 + +``` +Обратим внимание на то, что переменная glb не претерпела изменений в результате преобразований внутри функции. В данном случае glb глобальная переменная, над которой не производилось никаких действий в основной программе. +Все изменения происходят со значением arg.Значение результата обусловлено передачей в arg именно переменной glb=10. + +Пример 2 +``` +def func8(arg): + loc1=15 + print(glb) + glb=8 + return loc1*arg +res=func8(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 +``` +В данном случае выведется ошибка в силу того, что на момент обращения команды print к glb, данной переменной еще не существует. + +Пример 3 +``` +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 +``` +В данном случае наблюдаем изменение глобальной переменной в связи с объевлением переменной glb как глобальной. Однако результат функции будет рассчитан именно для первоначального значения переменной glb. +### 6.2 Выявление локализации объекта с помощью функций locals() и globals() из builtins + +Данные функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций. +``` +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() >> 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']) +def func8(arg): + loc1=15 + glb=8 + print(globals().keys()) # глобальные объекты функции + print(locals().keys()) #локальные объекты функции + return loc1*arg + + +hh=func8(glb) >> 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 +``` +В данном случае глобальные обьекты не изменятся, однако локальные объекты будут принадлежать переменной hh + +## 6.3 Локализация объектов при использовании вложенных функций + + +``` +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__', '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 Изучение моделирования системы управления +Моделирование САУ +``` +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1,T,k2,Xm,A,F,N=7,5,2,9,2,0.5,100 +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=int(znach[6]) +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) +vhod +>> [0.0, -9.797174393178826e-16, -1.959434878635765e-15, -2.9391523179536475e-15, -3.91886975727153e-15, -4.898587196589413e-15, -5.878304635907295e-15, -6.858022075225178e-15, -7.83773951454306e-15, -8.817456953860943e-15, -9.797174393178826e-15, -3.919860126290071e-14, -1.175660927181459e-14, 1.5685382719271533e-14, -1.3716044150450356e-14, -4.3117471020172244e-14, -1.567547902908612e-14, 1.1766512962000004e-14, -1.7634913907721887e-14, -4.7036340777443775e-14, -1.9594348786357652e-14, 7.847643204728474e-15, -7.839720252580143e-14, -5.0955210534715306e-14, -2.351321854362918e-14, 3.928773447456944e-15, 3.1370765438543066e-14, -5.487408029198684e-14, -2.743208830090071e-14, 9.903690185413723e-18, -8.623494204034449e-14, -5.879295004925836e-14, -3.135095805817224e-14, -3.908966067086117e-15, 2.3533025924000007e-14, -6.27118198065299e-14, -3.5269827815443773e-14, -7.827835824357647e-15, -9.407268155488755e-14, -6.663068956380142e-14, -3.9188697572715304e-14, -1.254335433032452e-13, 1.5695286409456948e-14, -7.054955932107296e-14, -1.5679440505160285e-13, -1.5665575338900706e-14, -1.0191042106943061e-13, 3.9218408643271543e-14, -4.702643708725836e-14, -1.3327128281778828e-13, 7.857546894913888e-15, -7.838729883561601e-14, 6.274153087708613e-14, -2.3503314853443768e-14, -1.0974816058397367e-13, 3.138066912872848e-14, -5.486417660180142e-14, -1.4110902233233133e-13, 1.9807380370827447e-17, -8.622503835015907e-14, -1.7246988408068898e-13, -3.134105436798683e-14, -1.1758590009851672e-13, 2.3542929614185422e-14, -6.270191611634448e-14, -1.4894676184687438e-13, -7.817932134172233e-15, -9.406277786470214e-14, 4.7066051848000014e-14, -3.917879388252989e-14, -1.254236396130598e-13, 1.570519009964236e-14, -7.053965563088755e-14, -1.5678450136141745e-13, -1.5655671648715294e-14, -1.019005173792452e-13, -1.881453631097751e-13, -4.701653339707295e-14, -1.3326137912760285e-13, 7.867450585099301e-15, -7.837739514543061e-14, -1.646222408759605e-13, -2.508670866064904e-13, 1.1763541854944381e-13, 3.1390572818913897e-14, -5.485427291161601e-14, -1.4109911864214592e-13, -2.2734396437267583e-13, -3.135888101032057e-13, 5.491369505272849e-14, -3.133115067780141e-14, -1.1757599640833132e-13, -2.0382084213886122e-13, -2.900656878693911e-13, 7.843681728654309e-14, -7.80802844398682e-15, -9.405287417451672e-14, -1.8029771990504662e-13, -2.6654256563557655e-13, 1.0195993952035768e-13] +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) +y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.327992097271526, -10.579864814161954, -37.13542021354209, 33.751922812053664, 119.08719463033788, -79.40771369492599, -341.1431068516527, 158.42167861925762, 934.7526961682643, -257.3673839435987, -2501.3394829044555, 232.60386253758892, 6584.067732394343, 551.3073303432211, -17091.023735765313, -4540.941638469293, 43783.01525142554, 19770.165548493114, -110671.74259494596, -71582.46671726667, 275826.55151830014] +``` +## 7 Завершение работы в IDLE + +Был завершен сеанс в среде IDLE. + diff --git a/TEMA7/protocol7.txt b/TEMA7/protocol7.txt new file mode 100644 index 0000000..5b7a43b --- /dev/null +++ b/TEMA7/protocol7.txt @@ -0,0 +1,561 @@ +# Отчет по теме 7 +# Лазарев Данил А-01-23 + +## 1 Запуск интерактивной оболочки IDLE +``` +import os +os.chdir("C:\\Users\\Dannyan\\OneDrive\\Рабочий стол\\python-labs\\TEMA6") +``` +## 2 Изучение создания простых функций + +### 2.1 Изучение создания функции без аргументов + +Была создана и применена функция, организующая вывод определенного текста. Был определен класс функции и просмотрено пространство имен, в котором появилось название созданной функции. + +``` +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() + Подтверждение успеха операции +``` +Можно сделать вывод, что в описании к функции нужно описать ее концепцию, что делает функция и какие аргументы нужно указывать. + +### 2.2 Пример функции с двумя аргументами + +Была создана и применена функция сравнения двух чисел. При передаче в аргументы переменных класса чисел, функция сравнила числа, а при передачи чисел типа строка, функция сравнила переменные посимвольно, то есть первую цифру числа. + +``` +def sravnenie(a,b): + """Сравнение a и b""" + if a>b: + print(a,' больше ',b) + elif a> 16 больше 5 +n,m="16","5";sravnenie(n,m) +>> 16 меньше 5 +``` + +### 2.3 Пример функции, содержащей return + +Была создана и применена функция, реализующая возвращение результата вычисления математического выражения. + +``` +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 Изучение функций сложения обьектов для различных типов аргументовв + +Была создана и применена функция сложения различных обьектов. +При сложении чисел, фунцкия вернула сумму, при сложении строк, списков и кортежей, функция обьединила их в один объект +В случае же словарей и множеств, результатом программы стала ошибка. + +``` +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(b1,b2,b3,b4) #Сложение списков +q +>> [1, 2, -1, -2, 0, 2, -1, -1] + +kor1 = ("a", 1) +kor2 = ("b", 2) +kor3 = ("c", 3) +kor4 = ("d", 4) +k=slozh(kor, kor2, kor3, kor4) +k +>> ('a', 1, 'b', 2, 'c', 3, 'd', 4) + +sl1 = {"A": 1, "B": 2} +sl2 = {"B": 3, "C": 4} +sl3 = {"D": 5, "E": 6} +sl4 = {"F": 7, "H": 8} +sl=slozh(sl1, sl2, sl3, sl4) + +Traceback (most recent call last): + File "", line 1, in + sl=slozh(sl1, sl2, sl3, sl4) + File "", line 2, 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): +Traceback (most recent call last): + File "", line 1, in + mn=slozh(mn1, mn2, mn3, mn4) + File "", line 2, in slozh + return a1+a2+a3+a4 +TypeError: unsupported operand type(s) for +: 'set' and 'set' + +``` + +## 2.5 Изучение создания функции, которая создает список значений вычисленных сигналов + +Была создана функция, которая вычисляет значение в соответствии с моделью некоторого устройства, далее реализован цикл, в котором созданный ранее список пополняется новыми значениями выходного сигнала + +``` +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() +``` +Представим результат в виде графика: +![](Ris1.png) + +## 3 Функции как обьекты + +### 3.1 Получение списка атрибутов объекта-функции + +Выведены атрибуты созданной функции и применен один из них,содержащий описание функции + +``` +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 Сохранение ссылки на объект-функцию в другой переменной + +Здесь происходит присвоение функции sravnenie переменной fnkt. Функции можно передавать в переменные, как и любые другие объекты. После этого переменная fnkt ссылается на ту же самую функцию, что и sravnenie. +``` +fnkt=sravnenie +v=16 +fnkt(v,23) +>> 16 меньше 23 +``` + +### 3.3 Изучение возможности альтернативного определения функции в программе. + +Был создан цикл-условие, в котором в зависимости от выполнения того иили иного условия функция будет отличаться по функционалу. + +``` +typ_fun=8 +if typ_fun==1: + def func(): + print('Функция 1') +else: + def func(): + print('Функция 2') + +func() +>> Функция 2 +``` + +## 4 Аргументы функции. + +### 4.1 Изучение возможности использования функции в качестве аргумента другой функции + + +``` +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 Обязательные и необязательные аргументы + +``` +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.3363755443363323 +``` + +### 4.3 Изучение передачи аргументов функции в произвольном порядке + +``` +logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами +>>0.34498724056380625 +``` + +### 4.4 Пример со значениями аргументов функции, содержащимися в списке или кортеже. + +В данном случае '*' - оператор распаковки, благодаря ему происходит передача набора аргументов функции. +``` +b1234=[b1,b2,b3,b4] # Список списков из п.2.4 +qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку +qq +>> [1, 2, -1, -2, 0, 2, -1, -1] +``` + +### 4.5 Пример со значениями аргументов функции, содержащимися в словаре + +``` +dic4={"a1":1,"a2":2,"a3":3,"a4":4} +qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки +qqq +>> 10 +``` +В результате функция выделила в качестве аргументов значения из словаря. +### 4.6 Изучение cмешанных ссылок + + + +``` +e1=(-1,6);dd2={'a3':3,'a4':9} +qqqq=slozh(*e1,**dd2) +qqqq +>> 17 +``` + +### 4.7 Переменное число аргументов у функции + +``` +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 Комбинация аргументов + +``` +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 +``` +Произведем аналогичное для словаря: +``` +def func5(**slovar): + print(slovar) +func5(a=5, n=8, m=30) +>> {'a': 5, 'n': 8, 'm': 30} +``` + +### 4.9 Изменение значений объектов, используемых в качестве аргументов функции +``` +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) #Кортеж – неизменяемый тип объекта +func2(kort) +>> +Traceback (most recent call last): + File "", line 1, in + func2(kort) + File "", line 2, in func2 + sps[1]=99 +TypeError: 'tuple' object does not support item assignment +``` + +## 5 Специальные типы пользовательских функций + +Были изучены и созданы анонимные функции и функции-генераторы. + +### 5.1 Анонимные функции. +Анонимные функции или по-другому их называют лямбда-функциями – это функции без имени (поэтому их и называют анонимными) + +``` +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 Функции-генераторы +Это – такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений + +``` +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 Примеры на локализацию с глобальными и локальными обьектами + +Пример 1 +``` +glb=10 +def func7(arg): + loc1=15 + glb=8 + return loc1*arg + +res=func7(glb) +res +>> 150 +glb +>> 10 + +``` +Обратим внимание на то, что переменная glb не претерпела изменений в результате преобразований внутри функции. В данном случае glb глобальная переменная, над которой не производилось никаких действий в основной программе. +Все изменения происходят со значением arg.Значение результата обусловлено передачей в arg именно переменной glb=10. + +Пример 2 +``` +def func8(arg): + loc1=15 + print(glb) + glb=8 + return loc1*arg +res=func8(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 +``` +В данном случае выведется ошибка в силу того, что на момент обращения команды print к glb, данной переменной еще не существует. + +Пример 3 +``` +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 +``` +В данном случае наблюдаем изменение глобальной переменной в связи с объевлением переменной glb как глобальной. Однако результат функции будет рассчитан именно для первоначального значения переменной glb. +### 6.2 Выявление локализации объекта с помощью функций locals() и globals() из builtins + +Данные функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций. +``` +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() >> 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']) +def func8(arg): + loc1=15 + glb=8 + print(globals().keys()) # глобальные объекты функции + print(locals().keys()) #локальные объекты функции + return loc1*arg + + +hh=func8(glb) >> 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 +``` +В данном случае глобальные обьекты не изменятся, однако локальные объекты будут принадлежать переменной hh + +## 6.3 Локализация объектов при использовании вложенных функций + + +``` +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__', '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 Изучение моделирования системы управления +Моделирование САУ +``` +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1,T,k2,Xm,A,F,N=7,5,2,9,2,0.5,100 +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=int(znach[6]) +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) +vhod +>> [0.0, -9.797174393178826e-16, -1.959434878635765e-15, -2.9391523179536475e-15, -3.91886975727153e-15, -4.898587196589413e-15, -5.878304635907295e-15, -6.858022075225178e-15, -7.83773951454306e-15, -8.817456953860943e-15, -9.797174393178826e-15, -3.919860126290071e-14, -1.175660927181459e-14, 1.5685382719271533e-14, -1.3716044150450356e-14, -4.3117471020172244e-14, -1.567547902908612e-14, 1.1766512962000004e-14, -1.7634913907721887e-14, -4.7036340777443775e-14, -1.9594348786357652e-14, 7.847643204728474e-15, -7.839720252580143e-14, -5.0955210534715306e-14, -2.351321854362918e-14, 3.928773447456944e-15, 3.1370765438543066e-14, -5.487408029198684e-14, -2.743208830090071e-14, 9.903690185413723e-18, -8.623494204034449e-14, -5.879295004925836e-14, -3.135095805817224e-14, -3.908966067086117e-15, 2.3533025924000007e-14, -6.27118198065299e-14, -3.5269827815443773e-14, -7.827835824357647e-15, -9.407268155488755e-14, -6.663068956380142e-14, -3.9188697572715304e-14, -1.254335433032452e-13, 1.5695286409456948e-14, -7.054955932107296e-14, -1.5679440505160285e-13, -1.5665575338900706e-14, -1.0191042106943061e-13, 3.9218408643271543e-14, -4.702643708725836e-14, -1.3327128281778828e-13, 7.857546894913888e-15, -7.838729883561601e-14, 6.274153087708613e-14, -2.3503314853443768e-14, -1.0974816058397367e-13, 3.138066912872848e-14, -5.486417660180142e-14, -1.4110902233233133e-13, 1.9807380370827447e-17, -8.622503835015907e-14, -1.7246988408068898e-13, -3.134105436798683e-14, -1.1758590009851672e-13, 2.3542929614185422e-14, -6.270191611634448e-14, -1.4894676184687438e-13, -7.817932134172233e-15, -9.406277786470214e-14, 4.7066051848000014e-14, -3.917879388252989e-14, -1.254236396130598e-13, 1.570519009964236e-14, -7.053965563088755e-14, -1.5678450136141745e-13, -1.5655671648715294e-14, -1.019005173792452e-13, -1.881453631097751e-13, -4.701653339707295e-14, -1.3326137912760285e-13, 7.867450585099301e-15, -7.837739514543061e-14, -1.646222408759605e-13, -2.508670866064904e-13, 1.1763541854944381e-13, 3.1390572818913897e-14, -5.485427291161601e-14, -1.4109911864214592e-13, -2.2734396437267583e-13, -3.135888101032057e-13, 5.491369505272849e-14, -3.133115067780141e-14, -1.1757599640833132e-13, -2.0382084213886122e-13, -2.900656878693911e-13, 7.843681728654309e-14, -7.80802844398682e-15, -9.405287417451672e-14, -1.8029771990504662e-13, -2.6654256563557655e-13, 1.0195993952035768e-13] +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) +y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.327992097271526, -10.579864814161954, -37.13542021354209, 33.751922812053664, 119.08719463033788, -79.40771369492599, -341.1431068516527, 158.42167861925762, 934.7526961682643, -257.3673839435987, -2501.3394829044555, 232.60386253758892, 6584.067732394343, 551.3073303432211, -17091.023735765313, -4540.941638469293, 43783.01525142554, 19770.165548493114, -110671.74259494596, -71582.46671726667, 275826.55151830014] +``` +## 7 Завершение работы в IDLE + +Был завершен сеанс в среде IDLE. +