форкнуто от main/python-labs
Родитель
34d84be93c
Сommit
aa554d436c
|
После Ширина: | Высота: | Размер: 16 KiB |
|
После Ширина: | Высота: | Размер: 23 KiB |
|
После Ширина: | Высота: | Размер: 24 KiB |
@ -0,0 +1,5 @@
|
|||||||
|
import pylab
|
||||||
|
import M2
|
||||||
|
|
||||||
|
pylab.plot(M2.SS3)
|
||||||
|
pylab.show()
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
def fun(name, TAU, K):
|
||||||
|
sps2 = []
|
||||||
|
f = open(name, "r")
|
||||||
|
sps1 = f.readlines()
|
||||||
|
for i in range(len(sps1)):
|
||||||
|
sps1[i] = float(sps1[i].replace("\n", ""))
|
||||||
|
if i < TAU:
|
||||||
|
sps2.append(0)
|
||||||
|
else:
|
||||||
|
sps2.append(K * sps1[i-TAU])
|
||||||
|
return([sps1,sps2])
|
||||||
|
|
||||||
|
|
||||||
|
def fun2(SS1, SS2, TT):
|
||||||
|
D = 0
|
||||||
|
N = len(SS1)
|
||||||
|
SR1 = sum(SS1)/len(SS1)
|
||||||
|
SR2 = sum(SS2)/len(SS2)
|
||||||
|
for i in range(TT, len(SS1)):
|
||||||
|
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
|
||||||
|
for i in range(len(SS1)):
|
||||||
|
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
|
||||||
|
for i in range(len(SS1)):
|
||||||
|
D+=(SS1[N-1]-SR1)*(SS2[N-1-TT]-SR2)
|
||||||
|
return(D)
|
||||||
|
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
import random
|
||||||
|
import M1
|
||||||
|
while True:
|
||||||
|
name = input("Введите название текстового файла: ")
|
||||||
|
if os.path.exists(name):
|
||||||
|
print("Файл сущетсвует")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Файл НЕ сущетсвует, повторите PopITку")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
TAU = int(input("Введите значение TAU >= 0: "))
|
||||||
|
if TAU >= 0:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Сказали же, TAU больше нуля! Мне казалось, что все это поняли")
|
||||||
|
|
||||||
|
SS3 = []
|
||||||
|
k = random.randint(2,7)
|
||||||
|
|
||||||
|
res = M1.fun(name, TAU, k)
|
||||||
|
|
||||||
|
for TT in range(TAU+5):
|
||||||
|
SS3.append(M1.fun2(res[0], res[1], TT))
|
||||||
|
|
||||||
|
pickle.dump(SS3, open("Res11.bin", "wb"))
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
-0.809
|
||||||
|
0.203
|
||||||
|
1.281
|
||||||
|
0.287
|
||||||
|
-0.181
|
||||||
|
0.297
|
||||||
|
0.616
|
||||||
|
-2.017
|
||||||
|
1.034
|
||||||
|
0.166
|
||||||
|
0.062
|
||||||
|
0.121
|
||||||
|
0.077
|
||||||
|
-0.716
|
||||||
|
0.184
|
||||||
|
-0.03
|
||||||
|
-0.846
|
||||||
|
0.052
|
||||||
|
0.51
|
||||||
|
-2.679
|
||||||
|
0.115
|
||||||
|
1.64
|
||||||
|
1.424
|
||||||
|
-0.635
|
||||||
|
-0.134
|
||||||
|
-0.308
|
||||||
|
0.809
|
||||||
|
-1.251
|
||||||
|
-0.188
|
||||||
|
-2.35
|
||||||
|
-0.221
|
||||||
|
-0.329
|
||||||
|
0.184
|
||||||
|
-0.666
|
||||||
|
-0.276
|
||||||
|
-0.593
|
||||||
|
1.266
|
||||||
|
0.56
|
||||||
|
0.96
|
||||||
|
0.47
|
||||||
|
-0.862
|
||||||
|
-0.103
|
||||||
|
0.981
|
||||||
|
0.638
|
||||||
|
0.344
|
||||||
|
0.555
|
||||||
|
-0.137
|
||||||
|
0.337
|
||||||
|
0.561
|
||||||
|
-1.075
|
||||||
@ -0,0 +1,116 @@
|
|||||||
|
# Защита модуля 3
|
||||||
|
|
||||||
|
Гордиевских Данил, А-03-23
|
||||||
|
|
||||||
|
## Вариант 3 задание
|
||||||
|
|
||||||
|
1) Создайте модуль М1, содержащий две функции:
|
||||||
|
|
||||||
|
- функция 1: аргументы - имя текстового файла, содержащего некоторое число отсчетов сигнала, целочисленный параметр TAU и числовой параметр К; в функции считывается сигнал из файла в список SPS1 и формируется второй список SPS2, элементы которого определяются по правилу: первые (TAU-1) элементов равны 0, а последующие определяются по формуле: SPS2[i]=K*SPS1[i-TAU]; оба списка возвращаются в качестве результатов работы функции;
|
||||||
|
|
||||||
|
- функция 2: аргументы - два числовых списка SS1 и SS2, а также целочисленный параметр ТТ; в функции рассчитывается и возвращается значение
|
||||||
|
|
||||||
|
D= (SS1[TT]-SR1)*(SS2[0] - SR2)+ (SS1[TT+1]-SR1)*(SS2[1] - SR2)+:+
|
||||||
|
|
||||||
|
(SS1[i]-SR1)*(SS2[i-TT] - SR2)+:+ (SS1[N]-SR1)*(SS2[N-TT] - SR2),
|
||||||
|
|
||||||
|
где N - длина списка SS1, SR1, SR2 - средние значения соответствующих списков.
|
||||||
|
|
||||||
|
2) Создайте еще один модуль М2, в котором должны выполняться операции:
|
||||||
|
|
||||||
|
- запрашивается и вводится имя текстового файла с данными; проверяется наличие файла и при отсутствии - повторение запроса;
|
||||||
|
|
||||||
|
- запрашивается значение параметра TAU и проверяется TAU >=0;
|
||||||
|
|
||||||
|
- вызывается функция 1 с указанными именем файла и параметром TAU, и случайным значением К из диапазона значений от 2 до 7; отображаются рассчитанные списки;
|
||||||
|
|
||||||
|
- вызывается функция 2 в цикле со значениями TT от 0 до TAU+5; результаты записываются в список SS3;
|
||||||
|
|
||||||
|
- список SS3 записывается в текстовый файл с именем Res11.bin.
|
||||||
|
|
||||||
|
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика список SPS3.
|
||||||
|
|
||||||
|
4) Подготовьте файл с исходными данными - 50 отсчетов случайного нормально распределенного с некоторыми параметрами сигнала. Проведите по программе расчеты со значениями TAU, равными 0, 5 и 10.
|
||||||
|
|
||||||
|
## Выполнение
|
||||||
|
|
||||||
|
### Текст модуля M0
|
||||||
|
|
||||||
|
```py
|
||||||
|
import pylab
|
||||||
|
import M2
|
||||||
|
|
||||||
|
pylab.plot(M2.SS3)
|
||||||
|
pylab.show()
|
||||||
|
```
|
||||||
|
|
||||||
|
### Текст модуля M1
|
||||||
|
|
||||||
|
```py
|
||||||
|
def fun(name, TAU, K):
|
||||||
|
sps2 = []
|
||||||
|
f = open(name, "r")
|
||||||
|
sps1 = f.readlines()
|
||||||
|
for i in range(len(sps1)):
|
||||||
|
sps1[i] = float(sps1[i].replace("\n", ""))
|
||||||
|
if i < TAU:
|
||||||
|
sps2.append(0)
|
||||||
|
else:
|
||||||
|
sps2.append(K * sps1[i-TAU])
|
||||||
|
return([sps1,sps2])
|
||||||
|
|
||||||
|
|
||||||
|
def fun2(SS1, SS2, TT):
|
||||||
|
D = 0
|
||||||
|
N = len(SS1)
|
||||||
|
SR1 = sum(SS1)/len(SS1)
|
||||||
|
SR2 = sum(SS2)/len(SS2)
|
||||||
|
for i in range(TT, len(SS1)):
|
||||||
|
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
|
||||||
|
for i in range(len(SS1)):
|
||||||
|
D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
|
||||||
|
for i in range(len(SS1)):
|
||||||
|
D+=(SS1[N-1]-SR1)*(SS2[N-1-TT]-SR2)
|
||||||
|
return(D)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Текст модуля M2
|
||||||
|
|
||||||
|
```py
|
||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
import random
|
||||||
|
import M1
|
||||||
|
while True:
|
||||||
|
name = input("Введите название текстового файла: ")
|
||||||
|
if os.path.exists(name):
|
||||||
|
print("Файл сущетсвует")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Файл НЕ сущетсвует, повторите PopITку")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
TAU = int(input("Введите значение TAU >= 0: "))
|
||||||
|
if TAU >= 0:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Сказали же, TAU больше нуля! Мне казалось, что все это поняли")
|
||||||
|
|
||||||
|
SS3 = []
|
||||||
|
k = random.randint(2,7)
|
||||||
|
|
||||||
|
res = M1.fun(name, TAU, k)
|
||||||
|
|
||||||
|
for TT in range(TAU+5):
|
||||||
|
SS3.append(M1.fun2(res[0], res[1], TT))
|
||||||
|
|
||||||
|
pickle.dump(SS3, open("Res11.bin", "wb"))
|
||||||
|
```
|
||||||
|
|
||||||
|
### Вывод
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
Загрузка…
Ссылка в новой задаче