-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
95 lines (76 loc) · 2.85 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Program służy do lokalizacji ogniska wstrząsu górniczego na podstawie danych dostarczonych do 8 stanowisk
## Paweł Nalepka PolŚl GIBiAP semestr 3 gr 2 2020
# import bibliotek
import numpy as np
import easygui
import matplotlib.pyplot as plt
# zmienne
v_fali = 4500
def wczytanie_stanowisk():
plik_stanowiska = easygui.fileopenbox(title='Wybierz plik stanowisk:')
poprawne_wczytanie = False
while poprawne_wczytanie == False:
try:
stanowiska = np.loadtxt(plik_stanowiska, delimiter=';', skiprows=1)
poprawne_wczytanie = True
except OSError as e:
print("Błąd wczytania pliku, spróbuj jeszcze raz ")
return stanowiska
def wczytanie_wstrzasow():
plik_wstrzasu = easygui.fileopenbox('Wybierz plik danych:')
poprawne_wczytanie = False
while poprawne_wczytanie == False:
try:
wstrzasy = np.loadtxt(plik_wstrzasu, delimiter=';', skiprows=1)
poprawne_wczytanie = True
except OSError as e:
print("Błąd wczytania pliku, spróbuj jeszcze raz ")
wstrzasy = wstrzasy / 1000
return wstrzasy
def matrixA(s, d, w):
a = np.zeros((7, 4))
for row in range(0, 7):
for col in range(0, 4):
if col != 3:
a[row, col] = 2 * (s[0, col] - s[row + 1, col])
else:
a[row, col] = 2 * (d[row + 1, w] - d[0, w]) * (v_fali ** 2)
return a
def matrixB(s, d, w):
b = np.zeros((7, 1))
# print (d)
# print (w)
for row in range(0, 7):
b[row, 0] = (v_fali ** 2) * ((d[row + 1, w] ** 2) - (d[0, w] ** 2)) + (s[0, 0] ** 2) - (s[row + 1, 0] ** 2) + (
s[0, 1] ** 2) - (s[row + 1, 1] ** 2) + (s[0, 2] ** 2) - (s[row + 1, 2] ** 2)
return b
def wynik(a, b, w):
AT = a.T
macierzA = np.dot(AT, a)
# print(macierzA)
macierzB = np.dot(AT, b)
# print(macierzB)
wynik = np.linalg.solve(macierzA, macierzB)
for row in range(0, 4):
Tablicawyniku[row, w] = wynik[row, 0]
return Tablicawyniku
def wydruk(tabela_wyniku, stanowiska):
f = open('wynik.csv', "a")
print(tabela_wyniku)
np.savetxt('wynik.csv', tabela_wyniku, delimiter=';')
wykres_stanowiska = stanowiska.T
fig, ax = plt.subplots()
ax.grid(True, which='both')
plt.plot(tabela_wyniku[0:1], tabela_wyniku[1:2], marker='x')
plt.plot(wykres_stanowiska[0:1], wykres_stanowiska[1:2], marker='o')
plt.show()
if __name__ == ("__main__"):
Stanowiska = wczytanie_stanowisk() # s= stanowiska d=wstrzasy w=ilosc wstrzasow
Wstrzasy = wczytanie_wstrzasow()
ilosc_wstrzasow = (Wstrzasy.shape[1])
Tablicawyniku = np.zeros((4, ilosc_wstrzasow))
for i in range(0, ilosc_wstrzasow):
A = matrixA(Stanowiska, Wstrzasy, i)
B = matrixB(Stanowiska, Wstrzasy, i)
do_druku = wynik(A, B, i)
wydruk(do_druku, Stanowiska)