Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Calcula solução exata --------------------------------------------------------
- def solucaoExata(x):
- return np.sin(2*mt.pi*x)
- #Calcula derivada da solução exata --------------------------------------------
- def solucaoDExata(x):
- return 2 * mt.pi * np.cos(2*mt.pi*x)
- #Calcula f(x) da equação -u" = f(x) -------------------------------------------
- def Fx(x):
- return 4 * mt.pi**2 * (np.sin(2*mt.pi*x))
- #Função utilizada para calcular o erro da aproximação -------------------------
- def calcularErro(n,grau,uap,x,h,r):
- p,w = leggauss(r) #Pontos e pesos associados a quadratura
- erro = np.float64(0.0) #Erro total
- fi = np.zeros([grau+1,r]) #Armazena funções base de lagrange
- dfi = np.zeros([grau+1,r]) #Armazena a derivada das funções base de lagrange
- #Calcula os polinômios de lagrange nos pontos de Gauss
- #Em cada linha temos fi_i, onde cada coluna representa fi_i em um ponto de Gauss
- for g in range(r):
- fi[:,g],dfi[:,g] = shape(grau,p[g])
- #Faz o cálculo do erro
- for el in range(n):
- aux = grau*el
- for g in range(r): #loop em pontos de gauss
- uu = 0.0
- xx = 0.0
- for j in range(grau+1):
- uu = uu + uap[aux] * fi[j,g]
- xx = xx + x[aux] * fi[j,g]
- aux = aux + 1
- aux = grau*el
- erro = erro + (uu - solucaoExata(xx))**2 * w[g] * h/2.0
- return np.float64(mt.sqrt(erro))
- #Função utilizada para calcular o erro da derivada da aproximação -------------
- def calcularDErro(n,grau,uap,x,h,r):
- p,w = leggauss(r) #Pontos e pesos associados a quadratura
- erro = np.float64(0.0) #Erro total
- fi = np.zeros([grau+1,r]) #Armazena funções base de lagrange
- dfi = np.zeros([grau+1,r]) #Armazena a derivada das funções base de lagrange
- #Calcula os polinômios de lagrange nos pontos de Gauss
- #Em cada linha temos fi_i, onde cada coluna representa fi_i em um ponto de Gauss
- for g in range(r):
- fi[:,g],dfi[:,g] = shape(grau,p[g])
- #Faz o cálculo do erro
- for el in range(n):
- aux = grau*el
- erdu = 0.0
- for g in range(r): #loop em pontos de gauss
- uu = 0.0
- xx = 0.0
- for j in range(grau+1):
- uu = uu + uap[aux] * dfi[j,g] * 2.0/h
- xx = xx + x[aux] * fi[j,g]
- aux = aux + 1
- aux = grau*el
- erdu = erdu + ((uu - solucaoDExata(xx))**2) * w[g] * h/2.0
- erro = erro + erdu
- return np.float64(mt.sqrt(erro))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement