<jupyter_start><jupyter_text>Métodos Numéricos Exercício 7.3: Método de Mull<NAME> Port - 5 mec GitHub:https://github.com/alcapriles/metodos-numericos/blob/master/exercicio-7-3-ana-capriles.ipynb<jupyter_code>import math
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline
#the function must necessarily take only one argument
def evaluate(range_for_evaluation, function):
    ordinate = []
    for i in range_for_evaluation:
        ordinate.append(function(i))
    return ordinate
# FOR ZOOMING IN in the graph: plt.axis([xmin,xmax,ymin,ymax]) ----------- (zoom range)
def plot(x,y, title, xlabel, ylabel, zoom, zoom_range):
    a = 0
    plt.figure(figsize=(10,10)) #(I need to find a nice size)
    plt.plot(x,y, color='magenta')
    if zoom == True:
        plt.axis(zoom_range)
    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.axhline(y=0, color='k') #this makes the x axis appear
    plt.grid()
    plt.show()
    return a
#function for a table:
def table(index, table_values, title):
    table = pd.DataFrame(table_values)
    table.index = [i for i in index]
    table.columns = [title]
    return table<jupyter_output><empty_output><jupyter_text><jupyter_code>def f(x):
    f = x**3 + x**2 - 4*x - 4
    return f
xrange = [0.0001*i for i in range(-41000, 41000)]
f73 = evaluate(xrange, f)
f73plot = plot(xrange, f73, "f(x)", "x", "f(x)", False, [0,0,0,0])<jupyter_output><empty_output><jupyter_text>Fazendo um Zoom:<jupyter_code>f73plotzoom = plot(xrange, f73, "f(x)", "x", "f(x)", True, [-2.5,2.5,-6.5,6.5])<jupyter_output><empty_output><jupyter_text>Assim, as estimativas para as raízes são: -2, -1 e 2. Como o grau do polinômio é 3, o esperado eram, de fato, 3 raízes.  Método de Muller: Os inputs desse programa serão x0, x1 e x2, que serão os "chutes" iniciais para as raízes.  Maior raiz:<jupyter_code>#inputs:
x0 = 2.5
x1 = 3
x2 = 2.1

error = 0.5
#contador de iterações:
i = 0
desired_error = 4*(10**-4)

while error > desired_error:
#em seguida, os parâmetros h e delta do método são determinados:
    h0 = x1 - x0
    h1 = x2 - x1
    
    fx1 = x1**3 + x1**2 - 4*x1 - 4
    fx0 = x0**3 + x0**2 - 4*x0 - 4
    fx2 = x2**3 + x2**2 - 4*x2 - 4

    delta0 = (fx1-fx0)/(x1-x0)
    delta1 = (fx2-fx1)/(x2-x1)
    
    #em seguida, os parâmetros a, b e c do método são determinados:
    a = (delta1 - delta0)/(h1 + h0)
    b = a*h1 + delta1
    c = fx2
    
    #x3 é determinado:
    
    
    v11 = b+(math.sqrt(-4*a*c + b**2))
    v22 = b-(math.sqrt(-4*a*c + b**2))
    
    v1 = math.fabs(v11)
    v2 = math.fabs(v22)
    
    if v1 > v2:
        x3 = x2 + (-2*c)/(b+(math.sqrt(-4*a*c + b**2)))
    if v1 < v2:
        x3 = x2 + (-2*c)/(b-(math.sqrt(-4*a*c + b**2)))
    if v1 == v2:
        x3 =  x2 + (-2*c)/b

    #o erro é computado para checar se haverá mais alguma iteração:
    error = math.fabs(100*(x3 - x2)/x3)
    
    x0 = x1
    x1 = x2
    x2 = x3
    
    i+= 1

print(x3)
print(error)  
print(i)<jupyter_output>2.0
6.837537203097099e-08
4<jupyter_text>Assim, para a maior raiz e para os chutes iniciais de x0 = 2.5, x1 = 3, e x2 = 2.1, foram feitas 4 iterações, o erro foi de 6.837537203097099e-08 e o valor final encontrado para a raiz foi igual a 2.0.  Raiz "do meio":<jupyter_code>#inputs:
x0 = -1.2
x1 = -2
x2 = -0.5

error = 0.5
#contador de iterações:
i = 0
desired_error = 4*(10**-4)

while error > desired_error:
#em seguida, os parâmetros h e delta do método são determinados:
    h0 = x1 - x0
    h1 = x2 - x1
    
    fx1 = x1**3 + x1**2 - 4*x1 - 4
    fx0 = x0**3 + x0**2 - 4*x0 - 4
    fx2 = x2**3 + x2**2 - 4*x2 - 4

    delta0 = (fx1-fx0)/(x1-x0)
    delta1 = (fx2-fx1)/(x2-x1)
    
    #em seguida, os parâmetros a, b e c do método são determinados:
    a = (delta1 - delta0)/(h1 + h0)
    b = a*h1 + delta1
    c = fx2
    
    #x3 é determinado:
    
    
    v11 = b+(math.sqrt(-4*a*c + b**2))
    v22 = b-(math.sqrt(-4*a*c + b**2))
    
    v1 = math.fabs(v11)
    v2 = math.fabs(v22)
    
    if v1 > v2:
        x3 = x2 + (-2*c)/(b+(math.sqrt(-4*a*c + b**2)))
    if v1 < v2:
        x3 = x2 + (-2*c)/(b-(math.sqrt(-4*a*c + b**2)))
    if v1 == v2:
        x3 =  x2 + (-2*c)/b

    #o erro é computado para checar se haverá mais alguma iteração:
    error = math.fabs(100*(x3 - x2)/x3)
    
    x0 = x1
    x1 = x2
    x2 = x3
    
    i+= 1

print(x3)
print(error)  
print(i)<jupyter_output>-0.9999999999999994
4.2880089479169236e-07
5<jupyter_text>Assim, para a raiz "do meio" e para os chutes iniciais de x0 = -1.2, x1 = -2, e x2 = 0.5, foram feitas 5 iterações, o erro foi de 4.2880089479169236e-07 e o valor final encontrado para a raiz foi igual a -0.9999999999999994.  Menor raiz:<jupyter_code>#inputs:
x0 = -3
x1 = -1.5
x2 = -2.2

error = 0.5
#contador de iterações:
i = 0
desired_error = 4*(10**-4)

while error > desired_error:
#em seguida, os parâmetros h e delta do método são determinados:
    h0 = x1 - x0
    h1 = x2 - x1
    
    fx1 = x1**3 + x1**2 - 4*x1 - 4
    fx0 = x0**3 + x0**2 - 4*x0 - 4
    fx2 = x2**3 + x2**2 - 4*x2 - 4

    delta0 = (fx1-fx0)/(x1-x0)
    delta1 = (fx2-fx1)/(x2-x1)
    
    #em seguida, os parâmetros a, b e c do método são determinados:
    a = (delta1 - delta0)/(h1 + h0)
    b = a*h1 + delta1
    c = fx2
    
    #x3 é determinado:
    
    
    v11 = b+(math.sqrt(-4*a*c + b**2))
    v22 = b-(math.sqrt(-4*a*c + b**2))
    
    v1 = math.fabs(v11)
    v2 = math.fabs(v22)
    
    if v1 > v2:
        x3 = x2 + (-2*c)/(b+(math.sqrt(-4*a*c + b**2)))
    if v1 < v2:
        x3 = x2 + (-2*c)/(b-(math.sqrt(-4*a*c + b**2)))
    if v1 == v2:
        x3 =  x2 + (-2*c)/b

    #o erro é computado para checar se haverá mais alguma iteração:
    error = math.fabs(100*(x3 - x2)/x3)
    
    x0 = x1
    x1 = x2
    x2 = x3
    
    i+= 1

print(x3)
print(error)  
print(i)<jupyter_output>-2.000000000001766
2.9734668882648695e-05
4
{'fraction_non_alphanumeric': 0.15863590091618596, 'fraction_numerical': 0.09467254835425856, 'mean_word_length': 2.455451348182884, 'pattern_counts': {'":': 1, '<': 26, '<?xml version=': 0, '>': 29, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 3, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '390714', 'license': 'MIT', 'n_tokens_mistral': 2888, 'n_tokens_neox': 2680, 'n_words': 680, 'path': 'capitulo7_2.ipynb', 'repo_name': 'alcapriles/seven', 'size': '5908'}