ответвлено от main/python-labs
Изменил(а) на 'TEMA8/report.md'
Этот коммит содержится в:
@@ -199,38 +199,67 @@ Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
|
|||||||
```
|
```
|
||||||
## 3.2. Еще пример.
|
## 3.2. Еще пример.
|
||||||
|
|
||||||
Создайте модуль MM1, включив в него (скопировать из текста темы 7) разработанные при выполнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенератор и нелинейное звено типа «зона нечувствительности». Затем создайте модуль ММ2, включив в него инструкции, обеспечивающие ввод параметров задачи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала:
|
Файл MM0.py:
|
||||||
```py
|
|
||||||
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
|
|
||||||
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))
|
|
||||||
|
|
||||||
import MM1 as mod
|
|
||||||
yi1=0;yin1=0;yi2=0
|
|
||||||
vyhod=[]
|
|
||||||
for xt in vhod:
|
|
||||||
xt1=xt-yi2 #отрицательная обратная связь
|
|
||||||
[yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1)
|
|
||||||
yi2=mod.tahogen(yin1,k2,yi2)
|
|
||||||
yt=mod.nechus(yin1,Xm)
|
|
||||||
vyhod.append(yt)
|
|
||||||
```
|
|
||||||
Наконец, создайте главную программу – модуль ММ0, запускающую на выполнение модуль ММ2 и выводящую полученный выходной сигнал
|
|
||||||
```py
|
```py
|
||||||
import MM2
|
import MM2
|
||||||
print('y=',MM2.vyhod)
|
print('y =', MM2.vyhod)
|
||||||
```
|
```
|
||||||
В ответ на запрос программы введите некоторые, подходящие по смыслу значения параметров задачи и проанализируйте полученный выходной сигнал.
|
Файл MM1.py:
|
||||||
|
```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)):
|
||||||
|
ytt = 0
|
||||||
|
elif xtt >= gran:
|
||||||
|
ytt = xtt - gran
|
||||||
|
elif xtt <= (-gran):
|
||||||
|
ytt = xtt + gran
|
||||||
|
return ytt
|
||||||
|
```
|
||||||
|
Файл MM2.py:
|
||||||
|
```py
|
||||||
|
znach = input('k1,T,k2,Xm,A,F,N=').split(',')
|
||||||
|
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))
|
||||||
|
|
||||||
|
import mm1 as mod
|
||||||
|
yi1 = 0; yin1 = 0; yi2 = 0
|
||||||
|
vyhod=[]
|
||||||
|
for xt in vhod:
|
||||||
|
xt1 = xt - yi2 #отрицательная обратная связь
|
||||||
|
[yi1,yin1] = mod.realdvig(xt1,k1,T,yi1,yin1)
|
||||||
|
yi2 = mod.tahogen(yin1,k2,yi2)
|
||||||
|
yt = mod.nechus(yin1,Xm)
|
||||||
|
vyhod.append(yt)
|
||||||
|
```
|
||||||
|
|
||||||
|
```py
|
||||||
|
k1,T,k2,Xm,A,F,N=9,6,4,11,3,0.5,1500
|
||||||
|
y = [0, 0, ... 0, -70.20177063675057, 0, 257.73311334096866, -677.4095530135962, ... -6.270038281034423e+306, -1.198995988522659e+307]
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## 3.3. Области действия объектов в модулях.
|
## 3.3. Области действия объектов в модулях.
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user