# Project 1 Calculations

## 301 days ago by sehunt2000

The Collatz conjecture, as known as the Hailstone sequence, is the 3n+1 problem which can be defined as the following function f(n) where n must be a positive integer greater than one and f(n) is used to produce the next value in the Collatz conjecture.

def f(n): #defines f(n) if n.is_integer() and n >0: #checks if n is a positive integer greater than 1 if n==1: return(0) elif is_odd(n): return(3*n+1) else: return(n/2) else: return("Please enter a positive integer.")
f(6)
 3 3
f(-2)
 'Please enter a positive integer.' 'Please enter a positive integer.'
f(9)
 28 28

To obain all iterations within a specific n value's Collatz conjecture, the equation f(n) is used continuously until terminated by the values 4-2-1. Sage is a very useful tool when computing conditonal values as such, especially larger values with lots of iterations.

def f_seq(n): # function to display sequence of Hailstone numbers for n L = [n] # sets values in brackets x = n while x != 1: # checks if input is not 1 x=f(x) # plugs input into f equation L.append(x) # adds vaule to existing list return (L)
f_seq(12)
 [12, 6, 3, 10, 5, 16, 8, 4, 2, 1] [12, 6, 3, 10, 5, 16, 8, 4, 2, 1]
f_seq(29)
 [29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1] [29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
f_seq(44)
 [44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1] [44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

What if we only want the value for the number of iterations it takes f(n) to reach the Collatz conjecture?

def f_its(n): # defining function to calculate number of iterations x = n its = 1 # creates a starting point for counting at 1 to consider original n while x != 1: x=f(x) its = its + 1 return(its)
f_its(12)
 10 10
f_its(50)
 25 25
f_its(429)
 103 103
f_its(29)
 19 19

Now that we can calculate the value of f(n), the entire range of values for f(n), and the number of iterations of f(n), we will observe their behavior linearly.

hailstone=[[1,0]] # defines initial point champions=[] # creates variable for outliers max_value_seen=3 # creates max value variable for i in srange(2,10001): # applies range for vaules stepcounter=0 n=i while n> 1: # while loop to generate x component n=f(n) # sets n into f(n) stepcounter+=1 # counter to obtain number of iterations if stepcounter> max_value_seen: # if statement to check for outliers max_value_seen = stepcounter # sets max value to counter when it occurs champions.append([i,max_value_seen]) # correlates max value to champions hailstone.append([i,stepcounter])

Here we can see the hailstone values for n with a range up to 10,000. Although f(12) only has 10 iterations to reach the Collatz conjecture, we can observe all iterations of every value produced.

list_plot(hailstone[12:10000])
list_plot(hailstone[12:500])
list_plot(hailstone[12:100])

Notice, there are values far from the general trend of log and decay curves. These values are called champions, which take longer than any other iterations within f(n).

list_plot(champions)

We can see that the champion values have a general pattern of the log curve. Why is this important? Taking this for example and looking back at the previous hailstone plots, we can see that 2 general patterns occur, a positve logrithmic curve a negative decay curve. What does tell us about the iterations of f(n)?