Advertisement
Guest User

Untitled

a guest
Apr 9th, 2018
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1. import pylab as pl
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. import csv
  6. from pathlib import Path
  7. from math import ceil
  8. import decimal
  9. import collections
  10. import sys, traceback
  11. import time
  12. from statistics import mean
  13.  
  14.  
  15. #Otvori subor zadany uzivatelom
  16. filename=input('Enter filename ')
  17. rawfile = open(filename, 'r')
  18.  
  19. #deklaracia prazdnych listov
  20. points = []
  21. vydelene = []
  22. sigma = []
  23. delta = []
  24. graf_list = []
  25. sigma_alfa = []
  26. delta_alfa = []
  27. napatie = []
  28. deformacia = []
  29. filtered_list=[]
  30.  
  31.  
  32. #tato funkcia premiena string na float
  33. def tofloat(string):
  34. if (string):
  35. return float(string)
  36. return 0.0
  37.  
  38. #timer
  39. t1 = time.time()
  40.  
  41. #deklaracia premennej na invertovanie osi
  42. inverter = str(input("Aky format maju vstupne udaje? (A)Napatie/Deformacia alebo (B)Deformacia/Napatie?(A/B)\n"))
  43.  
  44.  
  45. #tento cyklus prechadza subor riadok po riadku a spracuva ho do citalnej podoby pre program
  46. for l in rawfile:
  47. #ak je v riadku viac ako 0 znakov a nezacina sa "
  48. if len(l) > 0 and not l.startswith('"'):
  49. #odstrani \n -> symboly noveho riadku a znamienka
  50. l.rstrip("\n ")
  51. l.rstrip(",")
  52. l.rstrip(" ")
  53. l.rstrip("0.0")
  54. #rozdeli hodnoty tam kde su rozdelene tabulatorom
  55. split = l.split('\t')
  56. if inverter in['A','a']:
  57. napatie = tofloat(split[0])
  58. deformacia = tofloat(split[1])
  59. elif inverter in['B','b']:
  60. napatie = tofloat(split[1])
  61. deformacia = tofloat(split[0])
  62. else:
  63. print('Zly vyber, kokot')
  64.  
  65. if (10 < napatie < 2500000 and deformacia > 0 ):
  66. filtered_list.append([napatie, deformacia])
  67.  
  68.  
  69. sigma.append(napatie)
  70. delta.append(deformacia)
  71. graf_list.append([deformacia,napatie])
  72. #if deformacia == 0:
  73. # print('si kokot ty kokot')
  74. # sys.exit(0)
  75. #else:
  76. # points.append(napatie/deformacia)
  77. #points=[filtered_list[0]/filtered_list[1]]
  78.  
  79.  
  80. #transponovanie matice filtered_list
  81. anal = np.array(filtered_list)
  82. sigma_alfa, delta_alfa = anal.T
  83. boner = anal.T
  84. print(filtered_list[0])
  85. print(anal[0])
  86.  
  87. #kreslenie scatter grafu z dat v liste points
  88. data = np.array(graf_list)
  89. x,y = data.T
  90. plt.scatter(x,y,s=0.5)
  91.  
  92. #linearna regresia pre funkciu y = kx + q
  93. xds=round(len(delta_alfa)/10)
  94. xs = np.array(delta_alfa[:xds])
  95. ys = np.array(sigma_alfa[:xds])
  96.  
  97.  
  98. klz_pocitadlo = True
  99. klz = 0
  100. #tento cyklus rata modul pruznosti z kazdej dvojice [napatie, deformacia] a porovna ci sa lisi o 5% od nasledujuceho
  101. for i, vydelene in enumerate(points):
  102. if vydelene ==0:
  103. pass
  104. else:
  105. if i>=len(points)-1:
  106. pass
  107. else:
  108. if(abs(vydelene-points[i+1]))/vydelene <= 0.05:
  109. klz = 0
  110. else:
  111. klz = klz + 1
  112. if klz == 10 and klz_pocitadlo == True:
  113. klz_pocitadlo = False
  114. medza_klzu = sigma[i]
  115. young = points[0:i]
  116. helper = i
  117.  
  118.  
  119.  
  120. #funkcia ktora vrati koeficienty k, q pre linearnu regresiu
  121. def fitovanie_smernica_a_intercept(xs,ys):
  122. k = (((mean(xs) * mean(ys)) - mean(xs*ys)) / ((mean(xs)**2) - mean(xs**2)))
  123. q = mean(ys) - k*mean(xs)
  124. return k,q
  125.  
  126. #definovanie premennych pre fitovanie
  127. k,q = fitovanie_smernica_a_intercept(xs,ys)
  128. yd_sigma = round(len(sigma_alfa))
  129. xd_epsilon = round(len(delta_alfa))
  130. epsilon_skusane = np.array(delta_alfa[:xd_epsilon])
  131. sigma_skusane = np.array(sigma_alfa[:yd_sigma])
  132.  
  133. #najde sigma linearne tzn. vynasobi kazdu nameranu deformaciu nasim modulom pruznosti ziskanym z linearnej regresie
  134. def sigma_lin(lin_list):
  135. lin_list = lin_list*k
  136. return lin_list
  137.  
  138. #pre kazdu nameranu hodnotu napatia pripocita nejaku konstantu
  139. def sigma_exp(skus_list):
  140. skus_list = skus_list + 15
  141. return skus_list
  142.  
  143. K = [epsilon_skusane]
  144. K = sigma_lin(epsilon_skusane)
  145. L = [sigma_skusane]
  146. L = sigma_exp(sigma_skusane)
  147.  
  148. #vytvori z hodnot K a L arrays a potom ich pomocou boolean array porovna a najde prvu hodnotu v array K ktora odpoveda indexu v array L a je vacsia,
  149. #co je medza klzu
  150. abc = np.array([K])
  151. bcd = np.array([L])
  152. print('\n-----------------\n 1. Medza Klzu = ',abc[abc > bcd][0],'\n-----------------\n')
  153.  
  154.  
  155. #druhy sposob najdenia medze klzu...podla vzorca ε(plasticke) = ε[celkove(to je nase namerane)] - Sigma(namerane)/E(nase vypocitane) co musi byt >= ako 0.2% z ε(celkoveho)
  156. def sigma_young(sigma_vydelene):
  157. sigma_vydelene = sigma_vydelene/k
  158. return sigma_vydelene
  159.  
  160. M = [sigma_skusane]
  161. M = sigma_young(sigma_skusane)
  162. cde = np.array([M])
  163.  
  164.  
  165. def epsilon_div_sigma_young(x):
  166. epsi_pl = ((x - cde)/0.002)
  167. return epsi_pl
  168.  
  169. vysledok = epsilon_div_sigma_young(epsilon_skusane)
  170. efg = np.array([vysledok])
  171. fgh = np.array([delta_alfa])
  172. print('\n-----------------\n 2. Medza Klzu = ',(efg[efg >= fgh][0])*100000,'\n-----------------\n')
  173.  
  174. #koeficienty regresie
  175. print('k = ', k/100000, 'q = ', q)
  176. krivka_regresie = [(k*x)+q for x in xs]
  177.  
  178. #modul pruznosti z povodnej metody
  179. try:
  180. print('\n---------------------------------\n Modul pruznosti 1 :',round((((sum(young))/helper)/100000),3),'\n---------------------------------\n')
  181. except NameError:
  182. pass
  183.  
  184. #modul pruznosti z regresie
  185. print('\n---------------------------------\n Modul pruznosti 2 :',round(k/100000,3),'\n---------------------------------\n')
  186.  
  187. #trvanie vsetkych vypoctov programu
  188. t2=time.time()
  189. print(t2-t1,'[s]---- trvanie\n')
  190.  
  191. #toto fituje krivku k bodom.
  192. fit=np.polyfit(x,y,15)
  193. p=np.poly1d(fit)
  194. p.order
  195. plt.title('Ťahový diagram')
  196. plt.xlabel('deformacia')
  197. plt.ylabel('napatie')
  198. plt.plot(xs, krivka_regresie,"r--")
  199. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement