From 9e094ee17c0c50449aa6873fe27b49eb51564192 Mon Sep 17 00:00:00 2001 From: ShinkarenkoVA Date: Mon, 24 Nov 2025 13:30:15 +0300 Subject: [PATCH] Tema 7 --- TEMA7/TEMA7report.md | 549 ++++++++++++++++++++++++++++++++++++++++ TEMA7/TEMA7task.md | 76 ++++++ TEMA7/pics/Figure_1.PNG | Bin 0 -> 15309 bytes TEMA7/pics/Figure_2.PNG | Bin 0 -> 14733 bytes 4 files changed, 625 insertions(+) create mode 100644 TEMA7/TEMA7report.md create mode 100644 TEMA7/TEMA7task.md create mode 100644 TEMA7/pics/Figure_1.PNG create mode 100644 TEMA7/pics/Figure_2.PNG diff --git a/TEMA7/TEMA7report.md b/TEMA7/TEMA7report.md new file mode 100644 index 0000000..b2d3d85 --- /dev/null +++ b/TEMA7/TEMA7report.md @@ -0,0 +1,549 @@ +# Отчет по теме 7 + +Шинкаренко Варвара, А-02-23 + +## 1. Настроили рабочий каталог + +```py +import os +os.chdir('C:\\Users\\LENOVO\\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() + Подтверждение успеха операции +``` + +При выводе команды help(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) + +m, n = 16, 5; sravnenie(n, m) +5 меньше 16 + +# Выполнение с аргументами-симвльными строками +m, n = '16', '5'; sravnenie(n, m) +5 больше 16 + +m, n = 'forty', 'twenty five'; sravnenie(n, m) +twenty five больше forty +``` + +### 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 +logistfun(10, 2) +1.9999092042625952 +``` + +### 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] + +# Сложение кортежей +slozh((1, 2), (3, 4), (-5, 0), (-7, -3)) +(1, 2, 3, 4, -5, 0, -7, -3) + +# Сложение словарей +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,1,1,1}, {2}, {"hehe", True, None}, {6, 6, "a"}) +Traceback (most recent call last): + File "", line 1, in + slozh({1,1,1,1}, {2}, {"hehe", True, None}, {6, 6, "a"}) + File "", line 3, in slozh + return a1 + a2 + a3 + a4 +TypeError: unsupported operand type(s) for +: 'set' and 'set' + +``` + +### 2.5. Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал x, на выходе получается y. + +```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 as plt +plt.plot(spsy, label = "Выходной сигнал") +[] +plt.show() +``` +![Первый график](pics/Figure_1.png) + +## 3. Функции как объекты +### 3.1. Получение списка атрибутов объекта-функции + +```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__ +'Модель устройства с памятью:\nx- текущее значение вх.сигнала,\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) +fnkt(v,23) +16 меньше 23 +``` +Здесь происходит присвоение функции sravnenie переменной fnkt. Функции можно передавать в +переменные, как и любые другие объекты. После этого переменная fnkt ссылается на ту же самую +функцию, что и sravnenie. + +### 3.3. Возможность альтернативного определения функции в программе + +```py +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". Функция становится доступной только после того, как интерпретатор достигает строки с её определением. + +``` + +## 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) +0.6681877721681662 +logistfun(0.7, 2) +1.3363755443363323 +``` + +### 4.3. Обращение к функции с произвольным расположением аргументов + +```py +logistfun(b = 0.5, a = 0.8) +0.34498724056380625 +``` + +### 4.4. Пример со значениями аргументов функции, содержащимися в списке или кортеже + +```py +b1234 = [b1, b2, b3, b4] +qq = slozh(*b1234) +b1234 +[[1, 2], [-1, -2], [0, 2], [-1, -1]] +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 +qqq=slozh(*dic4) +qqq +'a1a2a3a4' +``` + +### 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) +1 +func4(-1,2,0,3,6) +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 +``` + +### 4.9. Изменение значений объектов, используемых в качестве аргументов функции + +```py +a = 90 +def func3(b): + b = 5*b +67 + +func3(a) +a +90 +# Поскольку функция ничего не возвращает (то есть, формально, является процедурой), то вычисленное значение b = 5*b+67 существует только локально внутри нее и не выносится в глобальную область видимости +def func3(b): + b = 5*b +67 + print(b) + +func3(a) +517 +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. Анонимные функции + +```py +anfun1=lambda: 1.5+math.log10(17.23) +anfun1() +2.7362852774480286 +anfun2=lambda a,b : a+math.log10(b) +anfun2(17, 234) +19.369215857410143 +anfun3=lambda a,b=234: a+math.log10(b) +anfun3(100) +102.36921585741014 +``` + +### 5.2. Функции-генераторы + +```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 +# __next__ помогает вывести значение, которое yield передает на каждoй итерации цикла. Если функция отработала последнюю итерацию, но мы все попытаемся сделать вызов, вернется ошибка +``` + +## 6. Локализация объектов в функциях +### 6.1. Примеры локализации + +```py +# Одноименные локальный и глобальный объекты +glb = 10 +def func7(arg): + loc1=15 + glb=8 + return loc1*arg + + +res = func7(glb) +res +150 + +# Посмотрим, что внутри функции +def func7(arg): + loc1=15 + glb=8 + print(glb, arg) + return loc1*arg + +res = func7(glb) +8 10 +# Видно, что внутри объект с именем glb принял значение 8, но глобальная переменная при этом после выполнения функции значения не поменяла. Это происходит потому, что технически, локальный glb и глобальный glb - это два разных объекта. + +# Ошибка в использовании локального объекта +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 +# Ошибка возникает, потому что когда python видит внутри функции переменную, он по умолчанию считает ее локальной. И получается, что вызов локальной переменной glb происходит раньше объявления локальной переменной glb, на что нам и указывает ошибка + +# Переопределение локализации объекта +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 + +```py +# Эти функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций. + +globals().keys() +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', + '__builtins__', '__file__', 'math', 'random', 'pickle', 'task', 't', 'number', 'a', + 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', + 'func5', 'mm', 'r', 'r1', 'test', 'l', 'alp', 'glb', 'func7', 'res', 'func8']) +locals().keys() +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', + '__builtins__', '__file__', 'math', 'random', 'pickle', 'task', 't', 'number', 'a', + 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'func5', 'mm', 'r', + 'r1', 'test', 'l', 'alp', 'glb', 'func7', 'res', 'func8']) + +# Сейчас различий нет, потому что эти методы возвращают объекты на уровне вызова этих функций, но мы вызвали обе самом внешнем уровне, не внутри какой-либо функции, а в самом рабочем пространстве, где локальная и глобальная области видимости совпадают. + +glb = 10 +def func8(arg): + loc1=15 + glb=8 + print(globals().keys()) #Перечень глобальных объектов «изнутри» функции + print(locals()) #Перечень локальных объектов «изнутри» функции (для наглядности отобразим + и значения тоже) + return loc1*arg + +hh=func8(glb) +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', + '__builtins__', '__file__', 'math', 'random', 'pickle', 'task', 't', 'number', 'a', + 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'func5', 'mm', 'r', + 'r1', 'test', 'l', 'alp', 'glb', 'func7', 'res', 'func8', 'hh']) # Тут глобальное glb +{'arg': 10, 'loc1': 15, 'glb': 8} # Это локальное glb +glb # Снова глобальное glb +10 + +``` + +### 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('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', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'dict1', 'dict2', 'dict3', 'dict4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'sravnenie', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', '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', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'dict1', 'dict2', 'dict3', 'dict4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'sravnenie', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'func9']) # Такой же, как glob_func9_1 + +``` + +### 6.4. Моделирование системы, состоящей из последовательного соединения раельного двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа "зона нечувствительности", при подаче на нее синусоидального входного сигнала. + +```py +znach=input('k1,T,k2,Xm,A,F,N=').split(',') +k1,T,k2,Xm,A,F,N=10, 0.1, 100, 1, 15, 5, 22 +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, 14.265847744427303, 8.816778784387099, -8.816778784387095, -14.265847744427305, -3.67394039744206e-15, 14.265847744427303, 8.8167787843871, -8.816778784387092, -14.265847744427306, -7.34788079488412e-15, 14.265847744427292, 8.816778784387104, -8.816778784387088, -14.265847744427306, -1.1021821192326178e-14, 14.2658477444273, 8.816778784387107, -8.816778784387086, -14.265847744427308, -1.469576158976824e-14, 14.2658477444273] +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, 128.6895249493391, -117676.93611959639, 106733573.48596653, -96807213021.59416, 87804016061244.64, -7.963812814932213e+16, 7.223167845425189e+19, -6.551403823223646e+22, 5.942114730468773e+25, -5.38949031731037e+28, 4.888260694705697e+31, -4.433646080160227e+34, 4.021311217180005e+37, -3.647324033774328e+40, 3.308118145771545e+43, -3.000458847375359e+46, 2.7214122646437033e+49, -2.468317377734281e+52, 2.238760645117729e+55, -2.030552987772023e+58, 1.841708913876797e+61] +``` + +## 7. Завершили сеанс работы со средой \ No newline at end of file diff --git a/TEMA7/TEMA7task.md b/TEMA7/TEMA7task.md new file mode 100644 index 0000000..88c6644 --- /dev/null +++ b/TEMA7/TEMA7task.md @@ -0,0 +1,76 @@ +# Общее контрольное задание по теме 7 + +## 1. Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с за-держкой на заданное время Т. + +## Решение + +```py +def delays (signal, T): + for i in range(len(signal)): + signal[i] += T + return signal + +# Входной сигнал: +import random +y = [random.gauss(3, 1.5) for _ in range(40)] +y +[3.800594048216618, 4.603898159275703, 6.18380558240054, 5.148045413794919, 3.7524482675845903, 1.1681059958583488, 5.921368034666685, 3.3117135811885006, 3.552762332790598, 3.315132665164249, 2.717047573572687, 4.723285324100683, 3.8225850617919885, 5.204965426860147, 7.287734242157516, 2.3788105341962567, 3.4585259362342056, 2.04523714628145, 2.490194024500499, 4.451169656660628, 3.0942298783762725, 0.2800297301804986, 2.2058662662867947, 1.536293936886591, 4.597490040465702, 6.33255117580885, 1.7456170571968772, 1.7402638958654961, 2.854473953945524, 3.557302623785625, 3.1460896928508864, 1.9023066563505908, 3.365721749509861, 1.3881782760501395, 3.5659228149591, 2.0929630500606278, 3.4699330659023837, 1.103202439037665, -0.8824843994297784, 4.2346895774686475] + +yd = delays(y, 4) +yd +[7.8005940482166185, 8.603898159275703, 10.18380558240054, 9.148045413794918, 7.75244826758459, 5.168105995858349, 9.921368034666685, 7.311713581188501, 7.552762332790598, 7.315132665164249, 6.717047573572687, 8.723285324100683, 7.8225850617919885, 9.204965426860147, 11.287734242157516, 6.378810534196257, 7.458525936234206, 6.045237146281449, 6.490194024500499, 8.451169656660628, 7.0942298783762725, 4.280029730180498, 6.205866266286795, 5.536293936886591, 8.597490040465702, 10.332551175808849, 5.745617057196878, 5.740263895865496, 6.854473953945524, 7.557302623785625, 7.146089692850886, 5.902306656350591, 7.365721749509861, 5.388178276050139, 7.5659228149591, 6.092963050060628, 7.469933065902383, 5.1032024390376645, 3.1175156005702216, 8.234689577468647] +``` + +## 2. Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения. + +## Решение + +```py +import numpy as np +import random +import matplotlib.pyplot as plt + +def histo(data, num): + minval, maxval = min(data), max(data) + parts = np.linspace(minval, maxval, num + 1) + rows = [0] * num + for now in data: + for i in range(num): + if parts[i] <= now < parts[i + 1]: + rows[i] += 1 + break + if now == maxval: + rows[-1] += 1 + + plt.hist(data, bins=parts) + plt.xlabel('Значения выборки') + plt.ylabel('Число элементов') + plt.title('Гистограмма выборки') + plt.show() + + return rows +s +sample = [random.gauss(random.random(), random.random()) for _ in range(random.randint(10,200))] +intervals = int(input("Введите количество интервалов разбиения: ")) +output = histo(sample, intervals) + +Введите количество интервалов разбиения: 12 +``` + +![Гистограмма](pics/Figure_2.png) + +## 3. Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+X*b2* и имеющую аргументы b1, b2 и X. + +## Решение + +```py +linreg = lambda b1, b2, x: b1 + b2 * x +b1 = float(input("Введите коэффициент b1 линейной регрессии: ")) +Введите коэффициент b1 линейной регрессии: 2 +b2 = float(input("Введите коэффициент b2 линейной регрессии: ")) +Введите коэффициент b2 линейной регрессии: 3 +x_val = float(input("Введите значение x: ")) +Введите значение x: 5 +print(linreg(b1, b2, x_val)) +17.0 +``` \ No newline at end of file diff --git a/TEMA7/pics/Figure_1.PNG b/TEMA7/pics/Figure_1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..65d1db5d34cad1c0fbc2ccfc2604172b48dc839e GIT binary patch literal 15309 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 Y|7NCti)+XRu^ZCWGP+)>dH3;u17G;UmjD0& literal 0 HcmV?d00001 diff --git a/TEMA7/pics/Figure_2.PNG b/TEMA7/pics/Figure_2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0a9187e03a984d9e7c7047f3cffb767d75c9eb7b GIT binary patch literal 14733 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