import numpy as np, matplotlib.pyplot as plt Determinação de raízes de polinômios¶
roots¶
A função roots computa as raízes de uma função dentro de um intervalo dado usando o método de Hörner.
O único argumento de entrada desta função é
o array
pcom os coeficientes dos termos do polinômio.
O argumento de saída é:
x: array com as raízes de .
Problema 1¶
Determine as raízes de .
Resolução¶
Para tornar claro, em primeiro lugar, vamos inserir os coeficientes de em um array chamado p.
p = np.array([9,8,7,5,3,2,-1,-3.2,-4/5,])Em seguida, fazemos:
x = np.roots(p)Podemos imprimir as raízes da seguinte forma:
for (i, v) in enumerate(x):
print(f'Raiz {i}: {v}')Raiz 0: (0.426649114634354+0.8028394391214162j)
Raiz 1: (0.426649114634354-0.8028394391214162j)
Raiz 2: (0.6712830069677376+0j)
Raiz 3: (-0.3125768604422944+0.8705110785366041j)
Raiz 4: (-0.3125768604422944-0.8705110785366041j)
Raiz 5: (-0.7511803685416445+0.3009598192701512j)
Raiz 6: (-0.7511803685416445-0.3009598192701512j)
Raiz 7: (-0.28595566715745535+0j)
polyval¶
Podemos usar a função polyval do numpy para avaliar em . Verifiquemos, analiticamente, se as raízes anteriores satisfazem realmente o polinômio dado.
for i in x:
v = np.polyval(p,i)
print(f'P(x) = {v}')P(x) = (1.4876988529977098e-14+2.2641699942273092e-14j)
P(x) = (1.4876988529977098e-14-2.2641699942273092e-14j)
P(x) = (1.7763568394002505e-15+0j)
P(x) = (-3.219646771412954e-15+5.5914131963424615e-15j)
P(x) = (-3.219646771412954e-15-5.5914131963424615e-15j)
P(x) = (1.4432899320127035e-15-1.1174243801115226e-15j)
P(x) = (1.4432899320127035e-15+1.1174243801115226e-15j)
P(x) = 0j
Note que as duas últimas raízes são “muito próximas” de zero, mas não exatamente zero.
Podemos também fazer uma verificação geométrica plotando o polinômio e suas raízes.
xx = np.linspace(np.min(x)-0.5,np.max(x)+0.5)
plt.plot(xx,np.polyval(p,xx));
for i in x:
plt.plot(i,np.polyval(p,i),'or')
Problema 2¶
Determine as raízes de .
Resolução¶
Resolvendo diretamente com roots e usando polyval para verificação, temos:
# coeficientes e raízes
p = np.array([1,0,-3,3,0])
x = np.roots(p)# imprimindo as raizes
for i, v in enumerate(x):
print(f'Raiz {i}: {v}')Raiz 0: (-2.1038034027355375+0j)
Raiz 1: (1.0519017013677685+0.5652358516771713j)
Raiz 2: (1.0519017013677685-0.5652358516771713j)
Raiz 3: 0j
Note que, neste caso, as raízes são complexas.
Problema 3¶
Determine as raízes de .
Resolução¶
# coeficientes e raízes
p = np.array([1,-30,361,-2178,6588,-7992])
x = np.roots(p)# imprimindo as raizes
for i, v in enumerate(x):
print(f'Raiz {i}: {v}')Raiz 0: (5.999999999988843+0.9999999999938864j)
Raiz 1: (5.999999999988843-0.9999999999938864j)
Raiz 2: (6.000144446431264+0.0002502131793303477j)
Raiz 3: (6.000144446431264-0.0002502131793303477j)
Raiz 4: (5.999711107159799+0j)