Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.35 KB | None | 0 0
  1. import math as m
  2. import numpy as np
  3. import tkinter as tk
  4. from PIL import Image
  5. from PIL import ImageTk
  6.  
  7. def getMax(arr):
  8.     maxim = arr[0][0][0]
  9.     for i in range(len(arr)):
  10.         for j in range(len(arr[i])):
  11.             for k in range(1,len(arr[i][j])):
  12.                 if arr[i][j][k] > maxim:
  13.                     maxim = arr[i][j][k]
  14.     return maxim
  15.  
  16. def getMin(arr):
  17.     minim = arr[0][0][0]
  18.     for i in range(len(arr)):
  19.         for j in range(len(arr[i])):
  20.             for k in range(1,len(arr[i][j])):
  21.                 if arr[i][j][k] < minim:
  22.                     minim = arr[i][j][k]
  23.     return minim
  24.  
  25. def next(ev):
  26.     global M, q, matrix, img1
  27.     if q < M-1:
  28.         q += 1
  29.         img = Image.fromarray(matrix[q], 'RGB')
  30.         basewidth = N * 16
  31.         wpercent = (basewidth / float(img.size[0]))
  32.         hsize = int((float(img.size[1]) * float(wpercent)))
  33.         img = img.resize((basewidth, hsize))
  34.  
  35.         img1 = ImageTk.PhotoImage(img)
  36.         canvas.create_image(160, 160, image=img1)
  37.     else:
  38.         print("It's last frame")
  39.  
  40. def last(ev):
  41.     global M, q, matrix, img1
  42.     if q > 0:
  43.         q -= 1
  44.         img = Image.fromarray(matrix[q], 'RGB')
  45.         basewidth = N * 16
  46.         wpercent = (basewidth / float(img.size[0]))
  47.         hsize = int((float(img.size[1]) * float(wpercent)))
  48.         img = img.resize((basewidth, hsize))
  49.  
  50.         img1 = ImageTk.PhotoImage(img)
  51.         canvas.create_image(160, 160, image=img1)
  52.         canvas.pack()
  53.     else:
  54.         print("It's first frame")
  55.  
  56. def visual(arr):
  57.     global M, N, c, matrix, img1
  58.     maxim = getMax(arr)
  59.     minim = getMin(arr)
  60.     diff = maxim - minim
  61.     matrix = np.zeros((M, N, N, 3), dtype=np.uint8)
  62.     for i in range(M):
  63.         for j in range(N):
  64.             for k in range(N):
  65.                 matrix[i][j][k] = [int(arr[i][int(j)][int(k)] * 255 / diff), 0, 255 - int(arr[i][int(j)][int(k)] * 255 / diff)]
  66.  
  67.     img = Image.fromarray(matrix[q], 'RGB')
  68.     basewidth = N * 16
  69.     wpercent = (basewidth / float(img.size[0]))
  70.     hsize = int((float(img.size[1]) * float(wpercent)))
  71.     img = img.resize((basewidth, hsize))
  72.  
  73.     img1 = ImageTk.PhotoImage(img)
  74.     canvas.create_image(160, 160, image=img1)
  75.     root.mainloop()
  76.  
  77.  
  78.  
  79. def kf(x1, x2, t):
  80.     return x1**2 + x2**2 + t**2 + 10
  81.  
  82. def p(x1, x2, t):
  83.     return x1**2 + x2**2 + t**2 + 30
  84.  
  85. def u0(x1, x2):
  86.     return m.exp(x1+x2)
  87.  
  88. def u1L(x2, t):
  89.     return m.exp(x2+t)
  90.  
  91. def u1R(x2, t):
  92.     global l
  93.     return m.exp(x2+t+l)
  94.  
  95. def u2L(x1, t):
  96.     return m.exp(x1+t)
  97.  
  98. def u2R(x1, t):
  99.     global l
  100.     return m.exp(x1 + t + l)
  101.  
  102. q = 0
  103. l = 1
  104. T = 1
  105. N = 20
  106. M = 20
  107. h = l/N
  108. tau = T/M
  109. y = []
  110. x = []
  111. t = []
  112. a = []
  113. b = []
  114. c = []
  115. f = []
  116. alpha = []
  117. beta = []
  118. y = []
  119. real = []
  120. pogr = []
  121.  
  122. for i in range(N):
  123.     x.append(i*h)
  124.     a.append(0)
  125.     b.append(0)
  126.     c.append(0)
  127.     f.append(0)
  128.     alpha.append(0)
  129.     beta.append(0)
  130.  
  131.  
  132. for i in range(M):
  133.     t.append(i*tau)
  134.     row = []
  135.     r3 = []
  136.     r4 = []
  137.     for j in range(N):
  138.         row2 = []
  139.         r5 = []
  140.         r6 = []
  141.         for k in range(N):
  142.             row2.append(0)
  143.             r5.append(0)
  144.             r6.append(0)
  145.         row.append(row2)
  146.         r3.append(r5)
  147.         r4.append(r6)
  148.     y.append(row)
  149.     real.append(r3)
  150.     pogr.append(r4)
  151. yTemp = y.copy()
  152.  
  153. for i in range(N):
  154.     for j in range(N):
  155.         y[0][i][j] = u0(x[i], x[j])
  156.  
  157. for n in range(M):
  158.     for j in range(N):
  159.         y[n][j][0] = u1L(x[j],t[n])
  160.         y[n][j][N-1] = u1R(x[j],t[n])
  161.         y[n][0][j] = u2L(x[j],t[n])
  162.         y[n][N-1][j] = u2R(x[j],t[n])
  163.  
  164. for n in range(1, M):
  165.     for j in range(1, N-1):
  166.         alpha[0] = 0
  167.         beta[0] = u1L(x[j], t[n])
  168.         for i in range(1, N-1):
  169.             a[i] = kf(x[i]-0.5*h, x[j], t[n])/h**2
  170.             b[i] = kf(x[i]+0.5*h, x[j], t[n])/h**2
  171.             c[i] = a[i] + b[i] + 1/tau
  172.             f[i] = y[n-1][i][j]/tau
  173.             alpha[i + 1] = b[i] / (c[i] - alpha[i] * a[i])
  174.             beta[i + 1] = (f[i] + alpha[i] * b[i]) / (c[i] - alpha[i] * a[i])
  175.  
  176.  
  177.         for i in range(N-2, -1, -1):
  178.             yTemp[n][i][j] = yTemp[n][i+1][j] * alpha[i+1] + beta[i+1]
  179.  
  180.     for i in range(1, N-1):
  181.         alpha[0] = 0
  182.         beta[0] = u2L(x[j], t[n])
  183.         for j in range(1, N-1):
  184.             a[j] = p(x[i], x[j] - 0.5 * h, t[n]) / h ** 2
  185.             b[j] = p(x[i], x[j] + 0.5 * h, t[n]) / h ** 2
  186.             c[j] = a[i] + b[i] + 1 / tau
  187.             f[j] = yTemp[n][i][j] / tau
  188.             alpha[j + 1] = b[j] / (c[j] - alpha[j] * a[j])
  189.             beta[j + 1] = (f[j] + alpha[j] * b[j]) / (c[j] - alpha[j] * a[j])
  190.         for j in range(N - 2, -1, -1):
  191.             y[n][i][j] = y[n][i][j+1] * alpha[j + 1] + beta[j + 1]
  192.     yTemp = y.copy()
  193.  
  194. root = tk.Tk()
  195. canvas = tk.Canvas(root, width=360, height=360)
  196. canvas.pack()
  197.  
  198. btn1 = tk.Button(root, text="next frame")
  199. btn1.bind("<Button-1>", next)
  200. btn2 = tk.Button(root, text="last frame")
  201. btn2.bind("<Button-1>", last)
  202. btn1.pack()
  203. btn2.pack()
  204.  
  205.  
  206. for i in range(M):
  207.     for k in range(N):
  208.         for j in range(N):
  209.             real[i][k][j] = m.exp(x[j] + x[k] + t[i])
  210.             pogr[i][k][j] = abs(real[i][j][k] - y[i][j][k])
  211.  
  212. pog = getMax(pogr)
  213. for i in range(M):
  214.     print(y[i])
  215. print(pog)
  216. print(y[0])
  217. print(real[0])
  218. y = np.asarray(y, float)
  219. real = np.asarray(real, float)
  220. visual(y)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement