From a37ffcf5b5cb3d919371aec32455442c3eebcc82 Mon Sep 17 00:00:00 2001 From: Alex <-> Date: Mon, 24 Nov 2025 09:01:52 +0300 Subject: [PATCH] first one --- TEMA7/figure1.png | Bin 0 -> 21957 bytes TEMA7/report.md | 643 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 643 insertions(+) create mode 100644 TEMA7/figure1.png create mode 100644 TEMA7/report.md diff --git a/TEMA7/figure1.png b/TEMA7/figure1.png new file mode 100644 index 0000000000000000000000000000000000000000..32480f0b9b1d0ade22d5bf1213e5ff8fb15009cc GIT binary patch literal 21957 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�#&fct=ZmM9&7aFHQ^sR*| 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 literal 0 HcmV?d00001 diff --git a/TEMA7/report.md b/TEMA7/report.md new file mode 100644 index 0000000..01e67f7 --- /dev/null +++ b/TEMA7/report.md @@ -0,0 +1,643 @@ +# Отчёт по ТЕМЕ №7 +Криштул Александр, А-03-23 + +## 1. Начало работы + +```py + +>>> import os +>>> os.chdir(r"C:\Users\alexv\Desktop\4\python-labs\TEMA7") +>>> os.getcwd() +'C:\\Users\\alexv\\Desktop\\4\\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() + Подтверждение успеха операции + +``` + +### 2.2. Функция с аргументами. + +```py + +>>> def sravnenie(a, b): +... """Сравнение a и b""" +... if a > b: +... print(a, "больше", b) +... elif a < b: +... print(a, "меньше", b) +... else: +... print(a, "равно", b) +... +>>> n, m = 16, 5 +>>> sravnenie(n, m) + 16 больше 5 + +``` + +```py + +>>> sravnenie("Text", "Text but bigger") + Text меньше Text but bigger +>>> sravnenie("abc", "ABC") + abc больше ABC + +``` + +### 2.3. Функция, возвращающая значение. + +```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(b1, b2, b3, b4) +>>> q + [1, 2, -1, -2, 0, 2, -1, -1] + +``` + +Данная функция может работать и с кортежами, но вот при работе со словарями и множествами уже получается ошибка: + +```py + +>>> slozh((1, 2), (3, 4), (5, 6), (7, 8)) # Сложение кортежей + (1, 2, 3, 4, 5, 6, 7, 8) + +>>> slozh({"A" : 1, "B" : 2}, {"C" : 3, "D" : 4}, {"E" : 5, "F" : 6}, {"G" : 7, "H" : 8}) # Сложение словарей + Traceback (most recent call last): + File "", line 1, in + slozh({"A" : 1, "B" : 2}, {"C" : 3, "D" : 4}, {"E" : 5, "F" : 6}, {"G" : 7, "H" : 8}) + File "", line 3, in slozh + return a1 + a2 + a3 + a4 + TypeError: unsupported operand type(s) for +: 'dict' and 'dict' + +>>> slozh({1, 2}, {3, 4}, {5, 6}, {7, 8}) # Сложение множеств + Traceback (most recent call last): + File "", line 1, in + slozh({1, 2}, {3, 4}, {5, 6}, {7, 8}) + 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 +>>> pylab.plot(spsy) + [] +>>> pylab.xlabel("Время, сек.") + Text(0.5, 0, 'Время, сек.') +>>> pylab.ylabel("Выходной сигнал") +... Text(0, 0.5, 'Выходной сигнал') +>>> pylab.grid(True) +>>> pylab.show() + +``` + +Полученный график выходного сигнала: + + + +## 3. Функции как объекты. + +### 3.1. Атрибуты объекта-функции. + +Так как функции являются объектами, то у них есть некоторые атрибуты. Получить их список можно с помощью инструкции dir(). + +```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__'] +>>> inerz.__doc__ # Использование атрибута объекта-функции + 'Модель устройства с памятью:\n x - текущее значение вх. сигнала,\n T - постоянная времени,\n ypred - предыдущее значение выхода устройства' +>>> 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. Альтернативное определение функций. + +Функции могут быть определены разным образом в зависимости от особенностей реализации кода: + +```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 - имя функции, используемой в качестве аргумента""" +... return(a + fff(c, b)) +... +>>> zz = fun_arg(logistfun, -3, 1, 0.7) +>>> zz + -2.3318122278318336 + +``` + +### 4.2. Обязательные и необязательные аргументы. + +Аргументы функции могут быть необязательными, т.е. иметь некоторое значение, заданное по умолчанию: + +```py + +>>> def logistfun(a, b = 1): +... """Вычисление логистической функции""" +... import math +... return b / (1 + math.exp(-a)) +... +>>> logistfun(0.7) + 0.6681877721681662 +>>> logistfun(0.7, 2) + 1.3363755443363323 + +``` + +### 4.3. Расположение аргументов функции. + +К функции можно обращаться с произвольным (непозиционным) расположением аргументов, при этом необходимо указывать их имена: + +```py + +>>> logistfun(b = 0.5, a = 0.8) + 0.34498724056380625 +>>> logistfun(0.8, 0.5) + 0.34498724056380625 + +``` + +### 4.4. Аргументы функции, содержащиеся в списке или кортеже. + +Аргументы функции могут содержаться в списке или кортеже, в таком случае при их передаче в функцию необходима распаковка с помощью оператора " __*__ ". + +```py + +>>> b1234 = [b1, b2, b3, b4] +>>> slozh(*b1234) + [1, 2, -1, -2, 0, 2, -1, -1] +>>> slozh(b1, b2, b3, b4) + [1, 2, -1, -2, 0, 2, -1, -1] + +``` + +### 4.5. Аргументы функции, содержащиеся в словаре. + +Аналогичная ситуация происходит и с аргументами, представленными в виде словаря. Однако распаковка в таком случае проводится с помощью оператора " __**__ ". Важно также заметить, что имена ключей словаря с аргументами не должны совпадать с именами остальных переданных аргументов, иначе произойдет ошибка. + +```py + +>>> dic4 = {"a1" : 1, "a2" : 2, "a3" : 3, "a4" : 4} +>>> slozh(**dic4) + 10 + +``` + +### 4.6. Смешанные ссылки. + +Данные способы передачи аргументов в функцию можно комбинировать: + +```py + +>>> e1 = (-1, 6) +>>> dd2 = {"a3" : 3, "a4" : 4} +>>> slozh(*e1, **dd2) + 12 + +``` + +### 4.7. Переменное число аргументов у функции. + +Число аргументов у функции может быть произвольным, что осуществляется с помощью того же оператора " __*__ ". + +```py + +>>> def func4(*kort7): +... """Произвольное число элементов в составе кортежа""" +... smm = 0 +... for el in kort7: +... smm += el +... return smm +... +>>> func4(-1, 2) + 1 +>>> func4(-1, 2, 0, 3, 6) + 10 + +``` + +### 4.8. Комбинация аргументов. + +Данные способы передачи аргументов также можно комбинировать: + +```py + +>>> def func4(a, b = 7, *kort7): +... """Кортеж - сборка аргументов - должен быть последним!""" +... smm = 0 +... for el in kort7: +... smm += el +... return a * smm + b +... +>>> func4(-1, 2, 0, 3, 6) + -7 + +``` + + +Пример реализации аналогичной функции для произвольного количества аргументов, переданного в виде словаря: + +```py + +>>> def func4(a, b = 7, **dict7): +... """Словарь - сборка аргументов - должен быть последним!""" +... smm = 0 +... for el in dict7.values(): +... smm += el +... return a * smm + b +... +>>> func4(-1, 2, **{"a1" : 0, "a2" : 3, "a3" : 6}) + -7 + +``` + +### 4.9. Изменение значений объектов с помощью функций. + +С помощью функций можно изменять значения переменных - объектов изменяемого типа: + +```py + +>>> a = 90 +>>> def func3(b): +... b = 5 * b + 67 +... +>>> func3(a) +>>> a # Числовой объект является неизменяемым + 90 + +>>> sps1 = [1, 2, 3, 4] +>>> def func2(sps): +... sps[1] = 99 +... +>>> func2(sps1) +>>> 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 [[<Список аргументов >]]: <Возвращаемое значение или выражение>__
+__lambda [<Список аргументов >]: <Возвращаемое значение или выражение>__
+Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту. + +```py + +>>> anfun1 = lambda: 1.5 + math.log10(12.23) +>>> anfun1() + 2.5874264570362855 +>>> anfun2 = lambda a, b: a + math.log10(b) +>>> anfun2(17, 234) + 19.369215857410143 +>>> anfun3 = lambda a, b = 234: a + math.log10(b) +>>> anfun3(100) + 102.36921585741014 + +``` + +### 5.2. Функции-генераторы. + +Функции-генераторы - функции, использующиеся в итерационных процессах, позволяющие на каждой из итераций получать значение с помощью инструкции __yield__, приостанавливающей выполнение функции. + +```py + +>>> def func5(diap, shag): +... """Итератор, возвращающий значения из диапазона от 1 до diap с шагом shag""" +... for i in range(1, diap + 1, shag): +... yield i +... +>>> for mm in func5(7, 3): +... print(mm) +... + 1 + 4 + 7 + +``` + +При работе с такими функциями часто используют метод __/_/_next/_/___, активирующий очередную итерацию выполнения функции: + +```py +>>> 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 +... +>>> func7(glb) + 150 +>>> glb # Значение не измени лось, т.к. операции проводились над локальной переменной + 10 +``` + +При использовании локального объекта до его определения будет ошибка: + +```py +>>> def func8(arg): +... loc1 = 15 +... print(glb) +... glb = 8 +... return loc1 * arg +... +>>> func8(glb) + Traceback (most recent call last): + File "", line 1, in + func8(glb) + File "", line 3, in func8 + print(glb) + UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value +``` + +Локализацию объекта можно переопределить с помощью дескриптора __global__: + +```py +>>> glb = 11 +>>> def func7(arg): +... loc1 = 15 +... global glb +... print(glb) +... glb = 8 +... return loc1 * arg +... +>>> func7(glb) + 11 + 165 +>>> glb # Значение изменилось, т.к. была переопределена локализация объекта + 8 +``` + +### 6.2. Функции для выявления локализации объектов. + +Чтобы узнать текущую локализацию объекта можно использовать функции __globals()__ и __locals()__, которые возвращают словари с ключами - именами объектов, являющихся, соответственно, глобальными или локальными на уровне вызова этих функций. + +```py +>>> globals().keys() + dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8']) +>>> locals().keys() + dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8']) +``` + +Пример просмотра локальных и глобальных объектов изнутри функциии: + +```py +>>> def func8(arg): +... loc1 = 15 +... glb = 8 +... print(globals().keys()) +... print(locals().keys()) +... return loc1 * arg +... +>>> func8(glb) + dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8']) + dict_keys(['arg', 'loc1', 'glb']) + 150 +>>> "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 +... loc1 = 5 +... glb = func9_1(loc1) +... print("glob_func9:", globals().keys()) +... print("locl_func9:", locals().keys()) +... return arg2 + arg3 * glb +... +>>> func9(10, 1) + glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8', 'func9']) + locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1']) + glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'func8', 'func9']) + locl_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb']) + 85 +``` + +### 6.4. Моделирование некоторой системы с помощью нескольких функций. + +Моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа "зона нечувствительности", при подаче на нее синусоидального входного сигнала. + +Этап 1 - запрос и обработка введенных параметров системы: + +```py +>>> znach = input("k1, T, k2, Xm, A, F, N = ").split(",") +>>> k1, T, k2, Xm, A, F, N = 7, 4, 2, 5, 2, 0.01, 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]) +``` + +Этап 2 - реализация входного сигнала: + +```py +>>> import math +>>> vhod = [] +>>> for i in range(N): +... vhod.append(A * math.sin((2 * i * math.pi) / F)) +... +>>> vhod + [0.0, 7.857546894913888e-15, 1.5715093789827776e-14, -2.038010347584904e-13, 3.143018757965555e-14, -6.428332918551267e-13, -4.076020695169808e-13, -1.081865548951763e-12, ..., -7.666359036382766e-12, -6.521633112271693e-12, -5.376907188160619e-12, -1.8784096492416397e-11, -3.0874553399384703e-12] +``` + +Этап 3 - создание функций, реализующих компоненты системы: + +```py +>>> 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 and xtt > (-gran): +... return 0 +... elif xtt >= gran: +... return xtt - gran +... elif xtt <= (-gran): +... return xtt + gran +``` + +Этап 4 - соединение компонент в соответствии с заданием и получение выходного сигнала: + +```py +>>> 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, 2.0750309723388316, 0, -12.800524758874488, 11.328734010636943, 37.9986846091337, -51.695128234754044, -93.73359277523646, 176.80628109766909, 206.3512386278131, -546.6832050741272, -399.06819555417735, 1598.4573240949626, 604.2307443815814, -4487.243599090263, -296.234076116122, 12162.217953139934, -2805.586281370296, -31870.75393905672, 17036.29869407474, 80623.4912164512, -69802.97975583967, -195996.03820751337, 245998.54033834403, 453751.31553486304, -796405.0354457049, -982958.5881199688, 2433666.144586724, 1918572.300755354, -7113910.846421458, -3041359.0662945407, 20031038.041300073, 2216408.8952286365, -54513798.16041583, 10262153.3054456, 143509014.33326405] +``` + + +## 7. Завершение работы со средой. + +Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE. \ No newline at end of file