Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.61 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon Oct 20 09:31:43 2014
  4.  
  5. @author: mrazny
  6. """
  7.  
  8. import matplotlib as mpl
  9. import numpy as np
  10. import math
  11. from scipy.interpolate import interp1d
  12.  
  13. #norma pierwsza, to całka fun od a do b
  14. #norma druga, to całka fun^2 od a do b
  15.  
  16. def caleczkaSimps(a, b, pktWylicz, pktWyliczDokl, dokl):
  17.     sumaT = 0;
  18.     suma = 0;
  19.     h = (b-a)/dokl;
  20.     i = a;
  21.     j = 0;
  22.     while i<=b-h:
  23.         sumaT += (np.abs((pktWylicz[j]-pktWyliczDokl[j])) + np.abs((pktWylicz[j+1]-pktWyliczDokl[j+1])))/2.;
  24.         j+=1;
  25.         i+=h;
  26.         if i<h:
  27.             suma += np.abs(pktWylicz[j] - pktWyliczDokl[j]);
  28.     return h/6.*(pktWylicz[0]+pktWylicz[j]+2.*suma+4*sumaT);
  29.    
  30. def caleczkaSimps2(a, b, pktWylicz, pktWyliczDokl, dokl):
  31.     sumaT = 0;
  32.     suma = 0;
  33.     h = (b-a)/dokl;
  34.     i = a;
  35.     j = 0;
  36.     while i<=b-h:
  37.         sumaT += (((pktWylicz[j]-pktWyliczDokl[j]) + (pktWylicz[j+1]-pktWyliczDokl[j+1]))/2.)*(((pktWylicz[j]-pktWyliczDokl[j]) + (pktWylicz[j+1]-pktWyliczDokl[j+1]))/2.);
  38.         j+=1;
  39.         i+=h;
  40.         if i<h:
  41.             suma += (pktWylicz[j] - pktWyliczDokl[j])*(pktWylicz[j] - pktWyliczDokl[j]);
  42.     return math.sqrt(h/6.*(pktWylicz[0]+pktWylicz[j]+2.*suma+4*sumaT));
  43.  
  44. def funkcja(x):
  45.     return np.exp(x/(x-1))
  46.  
  47. def pochodna(x):
  48.     return -(np.exp(x/(x-1))/((x-1)*(x-1)))
  49.    
  50. ################################################
  51. ############## TUTAJ MASZ SPLAJNA ##############
  52. ################################################
  53. def szukaj_wart(x, xs, ys, ks): #szukana wart, tabx, taby, tabpochodna
  54.     i = 1
  55.     while xs[i]<x:
  56.         i+=1
  57.        
  58.     t = (x - xs[i-1]) / (xs[i] - xs[i-1])
  59.        
  60.     a =  ks[i-1]*(xs[i]-xs[i-1]) - (ys[i]-ys[i-1])
  61.     b = -ks[i  ]*(xs[i]-xs[i-1]) + (ys[i]-ys[i-1])
  62.        
  63.     q = (1-t)*ys[i-1] + t*ys[i] + t*(1-t)*(a*(1-t)+b*t)
  64.     return q
  65. ################################################
  66. ############## TUTAJ MASZ SPLAJNA ##############
  67. ################################################
  68.  
  69. n1 = 5    
  70. n2 = 9
  71. n3 = 17
  72. n4 = 33
  73. n5 = 65
  74. dokl = 257
  75.  
  76. a = 1.075
  77. b = 1.08
  78.  
  79. # tworzenie siatek z wat x i y danych pkt
  80. siatka1 = np.linspace(a, b, n1)
  81. siatka2 = np.linspace(a, b, n2)
  82. siatka3 = np.linspace(a, b, n3)
  83. siatka4 = np.linspace(a, b, n4)
  84. siatka5 = np.linspace(a, b, n5)
  85. siatkaDokl = np.linspace(a, b, dokl)
  86.  
  87. pkt1 = funkcja(siatka1)
  88. pkt2 = funkcja(siatka2)
  89. pkt3 = funkcja(siatka3)
  90. pkt4 = funkcja(siatka4)
  91. pkt5 = funkcja(siatka5)
  92. pktDokl = funkcja(siatkaDokl)
  93.  
  94. # i liczenie pochodnych w tych pkt
  95. pochodna1 = pochodna(siatka1)
  96. pochodna2 = pochodna(siatka2)
  97. pochodna3 = pochodna(siatka3)
  98. pochodna4 = pochodna(siatka4)
  99. pochodna5 = pochodna(siatka5)
  100. pochodnaDokl = pochodna(siatkaDokl)
  101.  
  102. i = 0
  103. pktWylicz1 = []
  104. while i<dokl:
  105.     pktWylicz1.append(szukaj_wart(siatkaDokl[i], siatka1, pkt1, pochodna1))
  106.     i+=1
  107. i = 0
  108. pktWylicz2 = []
  109. while i<dokl:
  110.     pktWylicz2.append(szukaj_wart(siatkaDokl[i], siatka2, pkt2, pochodna2))
  111.     i+=1
  112. i = 0
  113. pktWylicz3 = []
  114. while i<dokl:
  115.     pktWylicz3.append(szukaj_wart(siatkaDokl[i], siatka3, pkt3, pochodna3))
  116.     i+=1
  117. i = 0
  118. pktWylicz4 = []
  119. while i<dokl:
  120.     pktWylicz4.append(szukaj_wart(siatkaDokl[i], siatka4, pkt4, pochodna4))
  121.     i+=1
  122. i = 0
  123. pktWylicz5 = []
  124. while i<dokl:
  125.     pktWylicz5.append(szukaj_wart(siatkaDokl[i], siatka5, pkt5, pochodna5))
  126.     i+=1
  127. i = 0
  128. pktWyliczDokl = []
  129. while i<dokl:
  130.     pktWyliczDokl.append(szukaj_wart(siatkaDokl[i], siatkaDokl, pktDokl, pochodnaDokl))
  131.     i+=1
  132. i = 0
  133.  
  134.    
  135. mpl.pyplot.axis([1.075, 1.08, 0, 2500000])
  136. mpl.pylab.plot(siatka1, pkt1, 'ro')
  137. mpl.pylab.plot(siatkaDokl, pktWylicz1)
  138. #mpl.pylab.plot(siatka2, pkt2, 'ro')
  139. #mpl.pylab.plot(siatkaDokl, pktWylicz2)
  140. #mpl.pylab.plot(siatka3, pkt3, 'ro')
  141. #mpl.pylab.plot(siatkaDokl, pktWylicz3)
  142. #mpl.pylab.plot(siatka4, pkt4, 'ro')
  143. #mpl.pylab.plot(siatkaDokl, pktWylicz4)
  144. #mpl.pylab.plot(siatka5, pkt5, 'ro')
  145. #mpl.pylab.plot(siatkaDokl, pktWylicz5)
  146. #mpl.pylab.plot(siatkaDokl, pktWyliczDokl)
  147.  
  148. #cube = interp1d(siatka3, pkt3, kind='cubic')
  149. #mpl.pylab.plot(siatkaDokl, cube(siatkaDokl))
  150.  
  151. mpl.pylab.show()
  152.  
  153. print "norma1               norma2"
  154. print caleczkaSimps(a, b, pktWylicz1, pktWyliczDokl, n1), caleczkaSimps2(a, b, pktWylicz1, pktWyliczDokl, n1)
  155. print caleczkaSimps(a, b, pktWylicz2, pktWyliczDokl, n2), caleczkaSimps2(a, b, pktWylicz2, pktWyliczDokl, n2)
  156. print caleczkaSimps(a, b, pktWylicz3, pktWyliczDokl, n3), caleczkaSimps2(a, b, pktWylicz3, pktWyliczDokl, n3)
  157. print caleczkaSimps(a, b, pktWylicz4, pktWyliczDokl, n4), caleczkaSimps2(a, b, pktWylicz4, pktWyliczDokl, n4)
  158. print caleczkaSimps(a, b, pktWylicz5, pktWyliczDokl, n5), caleczkaSimps2(a, b, pktWylicz5, pktWyliczDokl, n5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement