From b0aef753ef20800ab77a564d43a63f1b77306d67 Mon Sep 17 00:00:00 2001 From: GoloshchapovDY Date: Wed, 12 Nov 2025 19:29:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA7/Figure_1.png | Bin 0 -> 15309 bytes TEMA7/Figure_2.png | Bin 0 -> 13709 bytes TEMA7/report .md | 599 +++++++++++++++++++++++++++++++++++++++++++++ TEMA7/task.md | 84 +++++++ 4 files changed, 683 insertions(+) create mode 100644 TEMA7/Figure_1.png create mode 100644 TEMA7/Figure_2.png create mode 100644 TEMA7/report .md create mode 100644 TEMA7/task.md diff --git a/TEMA7/Figure_1.png b/TEMA7/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4f388df9c768e6cf8ad267a4eaa7d144bfcdbc GIT binary patch literal 15309 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 Y{>@DP7T1ssVmG9#Wpuq%^X}vS2Do#=b^rhX literal 0 HcmV?d00001 diff --git a/TEMA7/Figure_2.png b/TEMA7/Figure_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c9df118bc75aa326a00864ea068a35babe4381 GIT binary patch literal 13709 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�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 os + >>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6') + +Пользовательская функция – это совокупность инструкций, которая выполняется при обращении к функции из любого места программы. Аргументы функции – это ссылки на объекты-источники данных, которые используются при её выполнении. Возвращаемые данные – это результаты вычисления функции, передаваемые в ту часть программы, из которой была вызвана функция. + +# 2. Создание пользовательской функции + +Создание функции предполагает выполнение трех операций: формирование функции, ее сохранение и использование. + +В общем виде функция в языке Python представляется так: +def <Имя функции>([<Список аргументов >]): +[<отступы>"""<Комментарий по назначению функции>"""] +<отступы><Блок инструкций – тело функции> +[<отступы>return <Значение или вычисляемое выражение>] + +Функция считается оконченной, если в очередной строке нет отступов или их число меньше, чем в отступах в функции. Если при выполнении функции будет выполнена инструкция return, то выполнение функции прекращается с возвратом значения, следующего за этой инструкцией. Если функция не содержит оператора return, она автоматически возвращает значение +None. + +# 2.1 Функция без аргументов + + >>> def uspeh(): + ... """Подтверждение успеха операции""" + ... print('Выполнено успешно!') + ... + ... + >>> uspeh() + Выполнено успешно! + >>> type(uspeh) + # Функция является объектом класса function. + >>> dir() # Имя функции появилось в пространстве имён + ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh'] + >>> help(uspeh) + Help on function uspeh in module __main__: + + uspeh() + Подтверждение успеха операции + +help вывело справку по функции uspeh в модуле main. Далее выведена документационная строка функции (то описание, которое было указано в тройных кавычках при её определении). Документационная строка позволяет кратко и понятно описывать назначение функции. + + +## 2.2 Функция с аргументами + + >>> def sravnenie(a,b): + ... """Сравнение a и b""" + ... if a>b: + ... print(a,' больше ',b) + ... elif a>> n,m=16,5;sravnenie(n,m) + 16 больше 5 + +Функция работает с любыми данными, которые можно сравнить. Если нельзя сравнить, вернется TypeError. + + >>> n,m='aaa', 'bbbb';sravnenie(n,m) + aaa меньше bbbb + +Сравнение строк происходит по алфавиту, так же значение имеет регистр букв (заглавные меньше строчных), более короткая строка считается меньшей ("abc" < "abcd"), но "hi">"hello" + + +## 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] + + >>> c1=(1,2); c2=(-1,-2); c3= (0,2); c4=(-1,-1) + >>> q=slozh(c1,c2,c3,c4) #Сложение кортежей + >>> q + (1, 2, -1, -2, 0, 2, -1, -1) + + q = slozh({1,1}, {2,2}, {"abc"}, {3,3}) # Сложение множеств + Traceback (most recent call last): + File "", line 1, in + q = slozh({1,1}, {2,2}, {"abc"}, {3,3}) + File "", line 3, in slozh + return a1+a2+a3+a4 + TypeError: unsupported operand type(s) for +: 'set' and 'set' + + >>> dict1 = {'a': 1}; dict2 = {'b': 2}; dict3 = {'c': 3}; dict4 = {'d': 4} + >>> slozh(dict1, dict2, dict3, dict4) # Сложение словарей + Traceback (most recent call last): + File "", line 1, in + slozh(dict1, dict2, dict3, dict4) + File "", line 3, in slozh + return a1+a2+a3+a4 + TypeError: unsupported operand type(s) for +: 'dict' and 'dict' + + slozh(1, "а", 2, "b") # Сложение числа и строки + Traceback (most recent call last): + File "", line 1, in + slozh(1, "а", 2, "b") + File "", line 3, in slozh + return a1+a2+a3+a4 + TypeError: unsupported operand type(s) for +: 'int' and 'str' + +Как видно сложение для множеств и словарей не применимо. Также нельзя складывать числа и строки, но можно складывать числа и логический тип. + +## 2.5 Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y: + + >>> 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 as plt + >>> plt.plot(spsy, label = "Выходной сигнал") + [] + >>> plt.show() + +![График](Figure_1.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 - предыдущее значение выхода устройства + +Атрибут __doc__ содержит значение docstring, если при инициализации функции он был задан. Если не был, то inerz.__doc__ будет иметь значение None. + +## 3.2 Сохранение ссылки на объект-функции в другой переменной + + >>> fnkt=sravnenie + >>> v=16 + >>> fnkt(v,23) + 16 меньше 23 + +Функции можно передавать в переменные, как и любые другие объекты. После этого переменная fnkt ссылается на ту же самую функцию, что и sravnenie. + +## 3.3 Возможность альтернативного определения функции в программе + + >>> typ_fun=8 + >>> if typ_fun==1: + ... def func(): + ... print('Функция 1') + ... else: + ... def func(): + ... print('Функция 2') + ... + >>> func() + Функция 2 + +Программа выводит сообщение "Функция 2", потому что переменная typ_fun не равна 1, и +выполняется блок else, в котором функция func определена как выводящая "Функция 2". + + >>> tup_fun=1 + >>> func() + Функция 2 + +Сначала у нас выполнялась ветка else, создаётся функция func и вывелось "Функция 2". Эта функция сохранилась в памяти. Потом мы изменили значение typ_fun. Но здесь уже код с if-else не выполняется, функция func остаёся прежней. + +# 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 + +Python передаёт ссылку на объект функции logistfun в переменную fff. Внутри функции выполняется заданная операция. + +## 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 + >>> b1234 + [[1, 2], [-1, -2], [0, 2], [-1, -1]] + >>> qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку + >>> qq + [1, 2, -1, -2, 0, 2, -1, -1] + +Со звёздочкой коллекции передаются как набор аргументов функции. * - "оператор распаковки". Это было бы эквивалентно записи slozh(b1,b2,b3,b4). + +## 4.5 Пример со значениями аргументов функции, содержащимися в словаре + + >>> dic4={"a1":1,"a2":2,"a3":3,"a4":4} + >>> qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки + >>> qqq + 10 + >>> slozh(*dic4) + 'a1a2a3a4' + +Ключи на входе функции воспринимаются как значения позиционных переменных, а значения, как значения. Если поставить только одну звездочку, python попытается интерпретировать +ключи, а не значения словаря как позиционные аргументы. + +## 4.6 Смешанные ссылки + + >>> 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 + +Если мы не хотим передавать b, придется переопределить функцию так, чтобы именованный параметр b был в конце, а позиционный кортеж - перед ним. + +Подобным же образом в списке аргументов функции также можно использовать словарь, предварив его имя двумя звездочками. + + >>> def func4(a,b=7,**dct1): #Аргументы: a-позиционный, b- по умолчанию + словарь + ... """Словарь - сборка аргументов - должен быть последним!""" + ... smm=0 + ... smm = sum (dct1.values()) + ... return a*smm + b + ... + >>> func4(-1,2, x=3, y=4, z=5) + -10 + +*args и **kwargs - способы передать не уточненное заранее число элементов: +*args — переменное количество позиционных аргументов. Переданные с одной звездочкой аргументы собираются в кортеж. +**kwargs — переменное количество именованных аргументов. Все переданные аргументы, которые указываются по имени, собираются в словарь. + +*args всегда должно идти перед **kwargs. + +## 4.9 Изменение значений объектов, используемых в качестве аргументов функции. + +Такое изменение возможно только у объектов изменяемого типа + + >>> a=90 # Числовой объект – не изменяемый тип + >>> def func3(b): + ... b=5*b+67 + ... + >>> func3(a) + >>> a + 90 + +Поскольку функция ничего не возвращает то вычисленное значение b = 5*b+67 существует только локально внутри нее и не выносится в глобальную область видимости. + +Пример со списком: + + >>> 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 Анонимные функции + +Анонимные функции или по-другому их называют лямбда-функциями – это функции без имени, определяемые по следующей схеме: +lambda [<Аргумент1>[,<Аргумент2>,…]]:<Возвращаемое значение или выражение> + +Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту. + + >>> 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 + +Вызов лямбда-функции создает объект класса "функция". Внутри лямбда-функции не могут использоваться многострочные выражения, нельзя использовать if-else. + +## 5.2 Функции-генераторы + +Это – такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений. Для этого в функцию включают инструкцию yield приостанавливающую её выполнение и возвращающую очередное значение. +Данный оператор в отличие от return не останавливает полностью выполнение программы. Когда выполнение функции возобновляется после yield, оно продолжается с того места, где было +приостановлено, до следующего оператора yield (или до конца функции). + + >>> 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 + +Здесь при каждом обращении к функции будет генерироваться только одно очередное значение. +При программировании задач у таких функций часто используют метод __next__, активирующий очередную итерацию выполнения функции. + + >>> 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 + +__next__ помогает вывести значение, которое yield передает на каждой итерации цикла. Если функция отработала последнюю итерацию, но мы попытаемся сделать вызов, вернется ошибка. + +В отличии от функций, которые возвращают список со значениями итераций, функции - генераторы генерируют значения по одному, не храня всё в памяти; а функция, возвращающая список создаёт весь список в памяти. Также генератор можно использовать только один раз - после прохождения всех значений он "опустошается" и больше не производит элементов. + +# 6. Локализация объектов в функциях + +По отношению к функции все объекты подразделяются на локальные и глобальные. Локальными являются объекты, которые создаются в функциях присваиванием им некоторых значений. Глобальные – это те объекты, значения которых заданы вне функции. +Локализация может быть переопределена путем прямого объявления объектов как глобальных с помощью дескриптора global. + +## 6.1 Примеры на локализацию объектов + +Пример 1. Одноименные локальный и глобальный объекты: + + >>> glb=10 + >>> def func7(arg): + ... loc1=15 + ... glb=8 + ... return loc1*arg + ... + >>> res=func7(glb) + >>> res + 150 + >>> glb + 10 + +Внутри функции glb принял значение 8, но глобальная переменная при этом после выполнения +функции значения не поменяла. Это происходит потому, что локальный glb и глобальный glb - это два разных объекта. + +Пример 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 + + +Переменной glb присваивается значение внутри функции. Поэтому python решает, что glb - это локальная переменная для всей функции. Но когда выполнение доходит до строки 3 print(glb), локальная переменная glb еще не была инициализирована (это происходит только в строке 4), поэтому выходит ошибка. + +Пример 3. Переопределение локализации объекта. + + >>> glb=11 + >>> def func7(arg): + ... loc1=15 + ... global glb + ... print(glb) + ... glb=8 + ... return loc1*arg + ... + ... + >>> res=func7(glb) + 11 + >>> glb + 8 + +Здесь мы явно указали, что в функции используем глобальную переменную, поэтому она изменилась. + +## 6.2 Выявление локализации объекта с помощью функций locals() и globals() из builtins + +Эти функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций. + + >>> globals().keys() #Перечень глобальных объектов + dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8']) + >>> locals().keys() #Перечень локальных объектов + dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', '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', 'glb', 'func7', 'res', 'func8']) # Глобальное glb + dict_keys(['arg', 'loc1', 'glb']) # Локальное glb + >>> 'glb' in globals().keys() # Глобально glb + True + +## 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', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) + locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1']) # # Содержит только объекты, определенные внутри func9_1, а также объект, переданный как аргумент функции + loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb']) # # Содержит все то же, что и locl_func9_1, но еще и arg3, переданный func9, и саму func9_1 + glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) + +## 6.4 Моделирование системы + +Моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала. +Реальный двигатель: последовательное соединение усилителя с коэффициентом усиления k1,интегратора: y(t)=x(t)+y(t-1), и инерционного звена: y(t)=(x(t)+T*y(t-1)) / (T+1) с постоянной времени Т. +Тахогенератор: последовательное соединение усилителя с коэффициентом усиления k2 и интегратора: y(t)=x(t)+y(t-1). +Нелинейное звено типа «зона нечувствительности»: y=0 при -xm≤ x ≤xm, y=x-xm при x>xm, y=x+xm при x<-xm. +Таким образом, система характеризуется параметрами: k1, T, k2, xm. Входной сигнал характеризуется параметрами: A (амплитуда синусоиды) и F (период синусоиды). +Еще один параметр задачи : N – время (число тактов) подачи сигнала. + +Решение задачи: + + >>> znach=input('k1,T,k2,Xm,A,F,N=').split(',') # Запрос и введение параметров задачи + k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000 + >>> 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, ...] + +Создание функций реализующие компоненты системы + + >>> 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, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, ...] + + # 7. Завершение сеанса работы с IDLE + diff --git a/TEMA7/task.md b/TEMA7/task.md new file mode 100644 index 0000000..8f2e7d8 --- /dev/null +++ b/TEMA7/task.md @@ -0,0 +1,84 @@ +# Общее контрольное задание по теме 7 + +Голощапов Дмитрий, А-01-23 + +# Задание: + +1. Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т. + +2. Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения. + +3. Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X. + +# Решение + +## 1. + + >>> def delay_signal (signal, T): + ... """"Расчёт выхода y(t) для устройства задержки""" + ... output=[] + ... for i in range(len(signal)): + if i < T: + output.append(0) + else: + ... output.append(signal[i-T]) + ... return output + ... + ... + >>> x=[1,0.5,3.6,4.5,1,2,0.5] # Входной сигнал + >>> y= delay_signal (x, 2) + >>> y + [0, 0, 1, 0.5, 3.6, 4.5, 1] + +## 2. + + >>> import random + >>> import matplotlib.pyplot as plt + >>> def histogram (sample, number): + ... min_1=min(sample) + ... max_1=max(sample) + ... bins=(max_1-min_1)/number # Ширина одного интервала + ... rows = [0]*number # Создание списка для подсчёта элементов в каждом интервале + ... intervals = [] # Список для хранения границ интервалов + ... for i in range(number): + ... lower = min_1 + i * bins + ... upper = min_1 + (i+1) * bins + ... intervals.append((lower, upper)) + ... + ... for x in sample: + ... i = int((x-min_1)/bins) # Вычисление номера интервала для текущего элемента + ... if i == number: + ... i=number-1 + ... rows [i] +=1 + ... print("Границы интервала | Число элементов") + ... for i in range(number): + ... lower, upper = intervals[i] + ... print(lower, "-", upper, " |", rows[i]) + ... plt.hist(sample, number) + ... plt.xlabel('Значения выборки') + ... plt.ylabel('Число элементов') + ... plt.title('Гистограмма выборки') + ... plt.show() + ... return rows + ... + >>> data = [random.gauss(1, 20) for _ in range(10)] + >>> histogram (data, 3) + Границы интервала | Число элементов + -23.534334630492655 - -11.561019750784087 | 3 + -11.561019750784087 - 0.4122951289244803 | 2 + 0.4122951289244803 - 12.385610008633048 | 5 + [3, 2, 5] + +Гистограмма сохранена в файле Figure_2.png +![График](Figure_2.png) + +## 3. + +>>> linear_regression = lambda b1, b2, x: b1+b2 * x +>>> result = linear_regression (2,3,5) +>>> result +17 + + + +