hozer

Shturm's method [not completed]

Jun 3rd, 2014
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.70 KB | None | 0 0
  1. from numpy import poly1d
  2. import numpy
  3. #bad code. It It needs refactoring and optimization
  4. def printT(tabl):
  5.     for r in tabl:
  6.         print(r)
  7.  
  8.  
  9. def zchange(arr, i):
  10.     c = 0
  11.     z = arr[0][i]
  12.     for k in range(len(arr)):
  13.         if z == -arr[k][i]:
  14.             z = arr[k][i]
  15.             c += 1
  16.     return c
  17.  
  18.  
  19. coef = input("Input coef: ").split()
  20. for i in range(len(coef)):
  21.     coef[i] = float(coef[i])
  22.  
  23. f = []
  24. f.append(poly1d(coef))
  25. f.append(poly1d(coef).deriv())
  26.  
  27. while len(f[-1]) > 0:
  28.     tmp, ft = f[-2] / f[-1]
  29.     f.append(-ft)
  30.  
  31. tabl = []
  32. tablHead = ['inf', 0, 'inf']
  33. for fp in f:
  34.     row = []
  35.     row.append(fp(-10000) / abs(fp(-10000)))
  36.     row.append(fp(0) / abs(fp(0)))
  37.     row.append(fp(10000) / abs(fp(10000)))
  38.     tabl.append(row)
  39.  
  40. znk = []
  41. for i in range(len(tabl[0])):
  42.     znk.append(zchange(tabl, i))
  43.  
  44. vidrc = abs(znk[0] - znk[1])
  45. dodrc = abs(znk[0] - znk[2])
  46. print("vidroots" + str(vidrc))
  47. print("dodroots" + str(dodrc))
  48.  
  49.  
  50. i = -1
  51. while vidrc != 0:
  52.     tablHead.insert(1, i)
  53.     for fi in range(len(f)):
  54.         x = i
  55.         if f[fi](x) != 0:
  56.             fx = f[fi](x) / abs(f[fi](x))
  57.         else:
  58.             fx = 0
  59.         tabl[fi].insert(1, fx)
  60.     i -= 1
  61.     print(zchange(tabl, -2))
  62.     print(zchange(tabl, -3))
  63.     if abs(zchange(tabl, -2) - zchange(tabl, -3)) == 1:
  64.         vidrc -= 1
  65.  
  66. i = 1
  67. while dodrc != 0:
  68.     tablHead.insert(-1, i)
  69.     for fi in range(len(f)):
  70.         x = i
  71.         if f[fi](x) != 0:
  72.             fx = f[fi](x) / abs(f[fi](x))
  73.         else:
  74.             fx = 0
  75.         tabl[fi].insert(-1, fx)
  76.     i += 1
  77.     if abs(zchange(tabl, -2) - zchange(tabl, -3)) == 1:
  78.         dodrc -= 1
  79.  
  80. print(tablHead)
  81. printT(tabl)
Advertisement
Add Comment
Please, Sign In to add comment