Jump to content
Fórum Script Brasil
  • 0

Ajuda com Briot Ruffini


Victor Santos Silva
 Share

Question

Bom, estou precisando criar um programa que use desta ferramenta para calcular uma função de grau 3, inicialmente pretendo grau 3. E usando o método de Newton junto a Briot Ruffini, para conseguir uma precisão melhor com menos tempo, do que usando somente o primeiro. A minha ideia, foi de criar 2 vetores, e zerar um, conforme necessário, para que o outro possa aparecer de novo como uma dependência do primeiro.

No programa abaixo, não apareceu nenhum erro que eu não conseguisse removê-lo, exceto um que ocorreu na primeira linha após: def briot(): (após o, por enquanto, comentário). Outra coisa, eu posso criar uma função que dependa de uma outra função? Como no comentário?

Aí galera, muito obrigado pela ajuda, quem puder me dizer onde está o erro em meu código, ou de alguma forma ajudar, eu agradeço desde já. Assim que conseguir, dou um feedback.

Boa noite.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

v = [] # função inicial
z = [] # função após briot
x = [] # multiplicadores
i = 0
k0 = input('Forneça o limitante inferior do intervalo:')
kf = input('Forneça o limitante superior do intervalo:')
x0 = input('Forneça o valor de x0, multiplicador:')
e = input('Forneça a precisão desejada:')
x.append(x0)
if x0 > kf or x0 < k0:
	print('Forneça um valor dentro do intervalo fornecido!')
	k0 = input('Forneça um novo intervalo inferior:')  
	kf = input('Forneça um novo intervalo superior:')
else:
	a = input('Escolha o primeiro elemento do vetor:')
	b = input('Escolha o segundo elemento do vetor:')
	d = input('Escolha o terceiro elemento do vetor:')
	e = input('Escolha o termo independente da equação:')
	gmax = 3 # o grau maior da equação, quando a equação é de grau menor basta colocar zero como os termos que acompanham x
for i in range(1,2):
	v.append(a)
	v.append(b)
	v.append(d)
	v.append(e)
a1 = v[0] # o valor da equação que desce, mas se mantem sempre o mesmo
def briot():
	#While t > e  
	a2 = a1 * x0 + v[1]
	a3 = a2 * x0 + v[2]
	a4 = a3 * x0 + v[3]
	z.append(a2)
	z.append(a3)
	z.append(a4)
	v = []
	v.append(a1) # v0
	v2 = v[0] * x0 + z[1]
	v3 = v[1] * x0 + z[2]
	x[i+1] = x[i-1] - (a[4]/v[3])
	print (x[i+1])
briot()
#def teste_parada():
 
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Bom, consegui resolver este problema, no entanto me ocorreu este: File "novo2.py", line 31
for t > e:
^
SyntaxError: invalid syntax
Como eu acredito que o problema seja puramente de formatação, ou de alguma coisa que estou ignorando no python, não me preocupei em explicar o método Briot Ruffini com Newton. Refiz o código, e corrigindo o erro antigo ficou:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

v = [] # função inicial
z = [] # função após briot
x = [] # multiplicadores
i = 0
k0 = input('Forneça o limitante inferior do intervalo:')
kf = input('Forneça o limitante superior do intervalo:')
x0 = input('Forneça o valor de x0, multiplicador:')
e = input('Forneça a precisão desejada:')
x.append(x0)
briot()
if x0 > kf or x0 < k0:
	print('Forneça um valor dentro do intervalo fornecido!')
	k0 = input('Forneça um novo intervalo inferior:')  
	kf = input('Forneça um novo intervalo superior:')
else:
	a = input('Escolha o primeiro elemento do vetor:')
	b = input('Escolha o segundo elemento do vetor:')
	d = input('Escolha o terceiro elemento do vetor:')
	e = input('Escolha o termo independente da equação:')
	gmax = 3 # o grau maior da equação, quando a equação é de grau menor basta colocar zero como os termos que acompanham x
for i in range(1,2):
	v.append(a)
	v.append(b)
	v.append(d)
	v.append(e)
a1 = v[0] # o valor da equação que desce, mas se mantem sempre o mesmo
def briot():
	for t > e:  
		a2 = a1 * x0 + v[1]
		a3 = a2 * x0 + v[2]
		a4 = a3 * x0 + v[3]
		z.append(a2)
		z.append(a3)
		z.append(a4)
		v = []
		v.append(a1) # v0
		v2 = v[0] * x0 + z[1]
		v3 = v[1] * x0 + z[2]
		x[i+1] = x[i-1] - (a[4]/v[3])
		print (x[i+1])
		teste_parada(x[i-1], x[i+1])

def teste_parada(x[i-1], x[i+1]):
	
	t = (x[i+1] - x[i-1]) / x
	if t < 0:
		print(-t)
	else:
		print(t)

Se alguém conseguir me ajudar, serei de imensa gratidão. Valeu.

Falou.

Link to comment
Share on other sites

  • 0

Muito obrigado, mas ainda havia um erro no teste de parada. Então bolei outra ideia, e tive de refazer de outra maneira. Apenas a função, que é onde há um erro (for a in range(0,1):

^
SyntaxError: invalid syntax), o qual não imagino a causa.
Por favor, me ajudem a resolver este problema. Segue o código:
def briot():
	z.append(v[0])
	z.append(v[0] * x[0] + v[1])  #z[1] = v[0] * x[0] + v[1]
	z.append(v[1] * x[0] +v[2])   #z[2] = v[1] * x[0] + v[2]
	z.append(v[2] * x[0] + v[3])  #z[3] = v[2] * x[0] + v[3]
	w.append(v[0])   #w[0] = v[0]
	w.append(w[0] * x[0] + z[1])  #w[1] = w[0] * x[0] + z[1]
	w.append(w[1] * x[0] + z[2]) #w[2] = w[1] * x[0] + z[2]
	x.append(x[0] - (z[3]/w[2])  #x[1] = x[0] - (z[3]/w[2])
	for a in range(0,1):
		print(x[a])
	for a in range(0,3):
		print(z[a])
		print(w[a])

Valeu, tenham uma boa noite!

Link to comment
Share on other sites

  • 0

Muito obrigado, consegui fazer a correção desta parte, mas tive de mudar a função pela minha necessidade.

E agora tenho de repetir a função, usando diferentes elementos dos vetores. Eu gostaria de fazer isto usando um iterador i, porém não estou conseguindo. De outra maneira eu poderia selecionar estes elementos pela sua posição numérica e zerar os vetores em determinada etapa. Acho um trampo desnecessário.

Segue o código:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

v = [] # função inicial
z = [] # função após 1ª briot
w = [] # função após 2ª briot
x = [] # multiplicadores
t = 9
i = 0
def briot(i,t): #rodar a multiplicação com para x0
	z.append(v[0])				#z[0] = v[0]
	z.append((z[0] * x[i]) + v[1])  #z[1] = v[0] * x[0] + v[1]
	z.append((z[1] * x[i]) + v[2])   #z[2] = v[1] * x[0] + v[2]
	z.append((z[2] * x[i]) + v[3])  #z[3] = v[2] * x[0] + v[3]
	w.append(z[0])   			  #w[0] = v[0]
	w.append((w[0] * x[i]) + z[1])  #w[1] = w[0] * x[0] + z[1]
	w.append((w[1] * x[i])+ z[2]) #w[2] = w[1] * x[0] + z[2]
	x.append(x[i] - (z[3]/w[2]))  #x[1] = x[0] - (z[3]/w[2])
	
	t = x[i] -(z[3]/w[2])
	print('O novo valor de x encontrado é:')
	print(x[i+1])
	print('O valor da precisão está em:')
	print(t)
	i = i+1


k0 = input('Forneça o limitante inferior do intervalo:')
kf = input('Forneça o limitante superior do intervalo:')
x0 = input('Forneça o valor de x0, multiplicador:')
e = input('Forneça a precisão desejada:')
x.append(x0)
if x0 > kf or x0 < k0:
	print('Forneça um valor dentro do intervalo fornecido!')
	k0 = input('Forneça um novo intervalo inferior:')  
	kf = input('Forneça um novo intervalo superior:')
else:
	a = input('Escolha o primeiro elemento do vetor:')
	b = input('Escolha o segundo elemento do vetor:')
	d = input('Escolha o terceiro elemento do vetor:')
	e = input('Escolha o termo independente da equação:')
	gmax = 3 # o grau maior da equação, quando a equação é de grau menor basta colocar zero como os termos que acompanham x
for i in range(1,2):
	v.append(a) #v[0]
	v.append(b) #v[1]
	v.append(d) #v[2]
	v.append(e) #v[3]
a1 = v[0] # o valor da equação que desce, mas se mantem sempre o mesmo
while t > e:
	briot(i,t)
print('Obrigado!')

O erro que me retorna é este: Traceback (most recent call last):

File "testefc.py", line 50, in <module>
briot(i,t)
File "testefc.py", line 12, in briot
z.append((z[0] * x) + v[1]) #z[1] = v[0] * x[0] + v[1]
IndexError: list index out of range
Acho que o problema está em como eu devo usar este iterador.
Agradeço a ajuda de todos, tenham uma boa noite.
Link to comment
Share on other sites

  • 0

Então, muito obrigado por indicar o erro. Mas o que ocorre, é que não faço ideia de como corrigi-lo. Na verdade eu não consigo achar nem mesmo o erro, eu não usei um índice maior que o comprimento da lista, ainda mais nesta linha do erro, ao meu ver, todas as linhas seguintes também acusariam o mesmo problema. Por favor, alguém me ajude a corrigir o problema.

Muito obrigado desde já a ajuda de todos, tenham um bom sábado.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...