Baixe o app para aproveitar ainda mais
Prévia do material em texto
INSTITUTO FEDERAL DA PARAÍBA CAMPUS CAJAZEIRAS ALUNOS: Ana Maria do Carmo Lourenço Nivan Ferreira Furtado CURSO: Engenharia Civil PROFESSOR : Vinicius 1º Avaliação - Cálculo Numérico Assunto: Implementação dos métodos de resolução de equações não lineares Cajazeiras 2019 1º PARTE MÉTODO DA BISSEÇÃO: from math import cos def bisseccao(f, a, b, raiz): if f(a) == 0: print('a ja é a raiz') return a elif f(b) == 0: print('b ja é a raiz') return b print ('a \t', end='') print ('b', end='\t') print ('x', end='\t') print ('fx', end='\t') print ('EA', end='\t') print ('ER') ea = 1.0 er = 1.0 while((ea!=0) or (er!=0)): x = (a+b)/2 fx = f(x) ea = raiz - x er = ea/x print (a, end='\t') print (b, end='\t') print (x, end='\t') print (fx, end='\t') print (ea, end='\t') print (er) if (fx == 0): return x elif fx>0: b = x else: a = x return x # def f(x): # return x**2 + x - 6 # r = bisseccao(f, 0.8, 1.5, 1) # print (r) MÉTODO ITERATIVO: def interativo(f, g, x, raiz): print ('x', end='\t') print ('g(x)', end='\t') print ('f(x)', end='\t') print ('EA', end='\t') print ('ER') ea = 1.0 er = 1.0 if (f(x)==0): return 'x ja é a raiz' while((ea!=0) or (er!=0)): x=g(x) ea = raiz - x er = ea/x print (x, end='\t') print (g(x), end='\t') print (f(x), end='\t') print (ea, end='\t') print (er) def f(x): pass def g(x): pass MÉTODO DE NEWTON : from decimal import Decimal from math import cos from sympy import * x = symbols('x') def newton(f, xn, raiz): print ('xn', end='\t') print ('f(xn)', end='\t') print ('EA', end='\t') print ('ER') ea = 1.0 er = 1.0 while((ea!=0) or (er!=0)): di=f(xn) dd=diff(f(x),x).subs(x, xn) xn=xn-(di/dd) ea = raiz - xn er = ea/xn print (xn, end='\t') print (f(xn), end='\t') print (ea, end='\t') print (er) if f(xn)==0: return xn return xn # def f(x): # return x**2 + x - 6 # r = newton(f, 0.5, 1) # print (r) MÉTODO DA SECANTE: def secante(f, a, b, raiz): if f(a) == 0.0: return 'a ja é a raiz' elif f(b) == 0.0: return 'b ja é a raiz' x = 0.0 print('a', end='\t') print('b', end='\t') print('x', end='\t') print('f(x)', end='\t') print ('EA', end='\t') print ('ER') ea = 1.0 er = 1.0 while((ea!=0) or (er!=0)): di = (f(b)*(b-a)) dd = (f(b)-f(a)) x = b-(di/dd) ea = raiz - x er = ea/x print(a, end='\t') print(b, end='\t') print (x, end='\t') print (f(x), end='\t') print (ea, end='\t') print (er) if(f(x) == 0): return x a = b b = x # def f(x): # return x**2 + x - 6 # r = secante(f, 0.8, 1.5, 1) # print (r) 2ª PARTE Comparação entre os métodos from math import cos from bisseccao import bisseccao from secantes import secante from newton import newton from sympy import * x = symbols('x') def f(x): return x**2 + x - 6 # print ('metodo de bisseccao') # b = bisseccao(f, 0.8, 1.3, 1) # print () print ('metodo de secante') s = secante(f, 0.8, 1.3, 1) print () print ('metodo de newton') n = newton(f, 0.9, 1) Pela comparação entre os métodos, pode-se observar que o menor erro está no método de Newton.
Compartilhar