Você está na página 1de 5

Gustavo Pfeifer de Cristo - RGA: 2020.

2106-0290

OBS: Fiz pelo Python

Atividade 01

Questã o 01:

O ú nico problema do meu algoritmo é que, por nã o ter usado a biblioteca sympy, o algoritmo nã o
trabalha com todas as funçõ es. Nã o a baixei, pois uso um PC que nã o é meu.

Ficou assim:

import math

a = float(input("Digite o primeiro nº do intervalo:"))

b = float(input("Digite o ú ltimo nº do intervalo: "))

tol = 1^(-6)

def f(x):

return (2 + x/8)**4 - 3*(1.5 - x/17)**2

#print(f(a)*f(b))

#A primeira coisa que irei testar sã o as extremidades a e b:

if f(a) == 0:

print("O zero da funçã o é a extremidade", a)

if f(b) == 0:

print("O zero da funçã o é a extremidade", a)

#Teste se esse intervalo passa por 0:

if f(a)*f(b) < 0:

#Enquanto o intervalo médio for maior que o tol

while (math.fabs(b-a)/2 > tol):

xi = (a+b)/2

#print(xi)

if f(xi) ==0:

print("Zero da funçã o:", xi)

break
#caso seja falso, temos que analisar o lado da funçã o

else:

if f(a)*f(xi) < 0: #se for V, o zero está nesse lado

#se o zero está aqui, nã o usaremos o valor de b:

b = xi

else:

a = xi

else:

print("Intervalo sem zero de funçã o")

Questão 02:

Eu vi que há dois zeros de funçã o, vou tentar achar um de cada vez:

N = 100 #tentativa má xima

e = 0.0001 #epsilon

x0 = -2

import math

def newton(f, g, x0, e, N):

#f é a funçã o, g a derivada, e é epsilon N é o má ximo de iteraçã o, e x0 é o x0... :/

if abs(f(x0)) <= e: #f é a funçã o, g sua sua derivada, x0 é... x0, e é epsilon, N é o má ximo de iteraçõ es

return x0

print("a x0 f(x0)") #criaremos uma lista

a = 0 #nº de interaçã o

while a <= N: #iteraçã o má xima é 100!

x1 = x0 - f(x0)/g(x0) #descobrindo o x da reta tangente ao ponto x0

a += 1

print("%d\t%e\t%e"%(a, x1, f(x1))) #"printando" os valores achados...

if abs(f(x1)) <= e:

return x1

x0=x1 #vou trabalhar sempre com x0, x1 - valor descoberto, será x0. E o laço termina até e <=
0.0001, ou a > 100

print("ultrapassou N :(") #se o laço terminar, é porque ultrapassamos o N, e aparecerá essa


mensagem
return x1

if __name__ == "__main__": #dando nome aos bois...

def f(x):

return x**2 + x*math.cos(2*x) - 3

def g(x):

return 2*x + math.cos(2*x) - 2*x*math.sin(2*x)

raiz = newton(f,g,x0,e,N) #é um nú mero

print(raiz)

O que obtive:

a x0 f(x0)

1 -5.813825e-01 -2.892689e+00

2 -2.159269e+00 2.491056e+00

3 1.327729e+00 -2.411041e+00

4 5.871278e+00 3.546102e+01

5 4.185708e+00 1.244968e+01

6 -1.652089e+01 2.708491e+02

7 -1.242262e+01 1.394087e+02

8 -4.144690e+00 1.592657e+01

9 -3.163213e+00 3.845662e+00

10 -2.476591e+00 2.542903e+00

11 -2.908451e+01 8.443489e+02

12 -2.182542e+01 4.527115e+02

13 -5.941031e+00 2.769240e+01

14 1.759633e+00 -1.539317e+00

15 2.155599e+00 8.048097e-01

16 2.053589e+00 4.886795e-02

17 2.046523e+00 2.491068e-04

18 2.046487e+00 6.627460e-09

2.0464865998256525

18 "tentativas"...
Agora, tentarei com x0 = 2:

N = 100 #tentativa má xima

e = 0.0001 #epsilon

x0 = 2

import math

def newton(f, g, x0, e, N):#f é a funçã o, g sua sua derivada, x0 é... x0, e é epsilon, N é o má ximo de
iteraçõ es

if abs(f(x0)) <= e:

return x0

print("a x0 f(x0)") #criaremos uma lista

a=0

while a <= N:#iteraçã o má xima é 100!

x1 = x0 - f(x0)/g(x0) #descobrindo o x da reta tangente ao ponto x0

a += 1

print("%d\t%e\t%e"%(a, x1, f(x1))) #"printando" os valores achados

if abs(f(x1)) <= e:

return x1

x0=x1 #vou trabalhar sempre com x0, x1 - valor descoberto - será x1. E o laço termina até e <= 0 ou
a > 100

print("ultrapassou N :(") #se o laço terminar, é porque ultrapassamos N, e aparecerá essa mensagem.

return x1

if __name__ == "__main__": #dando nome aos bois...

def f(x):

return x**2 + x*math.cos(2*x) - 3

def g(x):

return 2*x + math.cos(2*x) - 2*x*math.sin(2*x)

raiz = newton(f,g,x0,e,N) #é um nú mero

print(raiz)
E o output:

a x0 f(x0)

1 2.048213e+00 1.183047e-02

2 2.046489e+00 1.486363e-05

2.046488770316523

Você também pode gostar