Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.67 KB | None | 0 0
  1. #Calcula solução exata --------------------------------------------------------
  2. def solucaoExata(x):
  3.     return np.sin(2*mt.pi*x)
  4.  
  5. #Calcula derivada da solução exata --------------------------------------------
  6. def solucaoDExata(x):
  7.     return 2 * mt.pi * np.cos(2*mt.pi*x)
  8.  
  9. #Calcula f(x) da equação -u" = f(x) -------------------------------------------
  10. def Fx(x):
  11.     return 4 * mt.pi**2 * (np.sin(2*mt.pi*x))
  12.  
  13. #Função utilizada para calcular o erro da aproximação -------------------------
  14. def calcularErro(n,grau,uap,x,h,r):
  15.     p,w = leggauss(r)            #Pontos e pesos associados a quadratura  
  16.     erro = np.float64(0.0)       #Erro total
  17.     fi = np.zeros([grau+1,r])    #Armazena funções base de lagrange
  18.     dfi = np.zeros([grau+1,r])   #Armazena a derivada das funções base de lagrange
  19.    
  20.     #Calcula os polinômios de lagrange nos pontos de Gauss
  21.     #Em cada linha temos fi_i, onde cada coluna representa fi_i em um ponto de Gauss
  22.     for g in range(r):
  23.         fi[:,g],dfi[:,g] = shape(grau,p[g])
  24.        
  25.     #Faz o cálculo do erro
  26.     for el in range(n):  
  27.         aux = grau*el
  28.         for g in range(r): #loop em pontos de gauss
  29.             uu = 0.0
  30.             xx = 0.0
  31.             for j in range(grau+1):
  32.                 uu = uu + uap[aux] * fi[j,g]
  33.                 xx = xx + x[aux] * fi[j,g]
  34.                 aux = aux + 1
  35.             aux = grau*el      
  36.             erro = erro + (uu - solucaoExata(xx))**2 * w[g] * h/2.0
  37.    
  38.     return np.float64(mt.sqrt(erro))
  39.    
  40. #Função utilizada para calcular o erro da derivada da aproximação -------------
  41. def calcularDErro(n,grau,uap,x,h,r):
  42.     p,w = leggauss(r)            #Pontos e pesos associados a quadratura  
  43.     erro = np.float64(0.0)       #Erro total
  44.     fi = np.zeros([grau+1,r])    #Armazena funções base de lagrange
  45.     dfi = np.zeros([grau+1,r])   #Armazena a derivada das funções base de lagrange
  46.    
  47.     #Calcula os polinômios de lagrange nos pontos de Gauss
  48.     #Em cada linha temos fi_i, onde cada coluna representa fi_i em um ponto de Gauss
  49.     for g in range(r):
  50.         fi[:,g],dfi[:,g] = shape(grau,p[g])
  51.        
  52.     #Faz o cálculo do erro
  53.     for el in range(n):  
  54.         aux = grau*el
  55.         erdu = 0.0
  56.         for g in range(r): #loop em pontos de gauss
  57.             uu = 0.0
  58.             xx = 0.0
  59.             for j in range(grau+1):
  60.                 uu = uu + uap[aux] * dfi[j,g] * 2.0/h
  61.                 xx = xx + x[aux] * fi[j,g]
  62.                 aux = aux + 1
  63.             aux = grau*el      
  64.             erdu = erdu + ((uu - solucaoDExata(xx))**2) * w[g] * h/2.0
  65.         erro = erro + erdu
  66.    
  67.     return np.float64(mt.sqrt(erro))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement