I am new to Python and was asked to create a program that would take an input as a non-negative integer n and then compute an approximation for
the value of e using the first n + 1 terms of the continued fraction:
I have attempted to decipher the question but can't exactly understand everything it is asking. I am not looking for an exact answer but hopefully an example to help me on my way.
This is the exact question
Below is a code I have done with continued fractions before.
import math
# Get x from user
x = float(input("Enter x = "))# Calculate initial variables and print
a0 = x//1
r0 = x-a0
print("a0 =", a0, "\tr0 =", r0)# Calculate ai and ri for i = 1,2,3 and print resultsa1 = 1/r0//1
r1 = 1/r0 - a1
print("a1 =", a1, "\tr1 =", r1)a2 = 1/r1//1
r2 = 1/r1 - a2
print("a2 =", a2, "\tr2 =", r2)a3 = 1/r2//1
r3 = 1/r2 - a3
print("a3 =", a3, "\tr3 =", r3)
Answer
Without further information, it's probably a Good Idea™ to use the simple continued fraction expansion of e, as shown in Wikipedia:
This sequence can easily be created using a simple list comprehension.
To evaluate a simple continued fraction expansion we can process the list in reversed order.
The following code will work on Python 2 or Python 3.
#!/usr/bin/env python''' Calculate e using its simple continued fraction expansionSee http://stackoverflow.com/q/36077810/4014959Also seehttps://en.wikipedia.org/wiki/Continued_fraction#Regular_patterns_in_continued_fractionsWritten by PM 2Ring 2016.03.18
'''from __future__ import print_function, division
import sysdef contfrac_to_frac(seq):''' Convert the simple continued fraction in `seq` into a fraction, num / den'''num, den = 1, 0for u in reversed(seq):num, den = den + num*u, numreturn num, dendef e_cont_frac(n):''' Build `n` terms of the simple continued fraction expansion of e`n` must be a positive integer'''seq = [2 * (i+1) // 3 if i%3 == 2 else 1 for i in range(n)]seq[0] += 1return seqdef main():# Get the the number of terms, less onen = int(sys.argv[1]) if len(sys.argv) > 1 else 11if n < 0:print('Argument must be >= 0')exit()n += 1seq = e_cont_frac(n)num, den = contfrac_to_frac(seq)print('Terms =', n)print('Continued fraction:', seq)print('Fraction: {0} / {1}'.format(num, den))print('Float {0:0.15f}'.format(num / den))if __name__ == '__main__':main()
Pass the program an argument of 20 to get the best approximation possible using Python floats: 2.718281828459045
As Rory Daulton (& Wikipedia) mention, we don't need to reverse the continued fraction list. We can process it in the forward direction, but we need 2 more variables because we need to track 2 generations of numerators and denominators. Here's a version of contfrac_to_frac which does that.
def contfrac_to_frac(seq):''' Convert the simple continued fraction in `seq`into a fraction, num / den'''n, d, num, den = 0, 1, 1, 0for u in seq:n, d, num, den = num, den, num*u + n, den*u + dreturn num, den
Assuming I am having the following dataframe:dummy_data = [(a,1),(b,25),(c,3),(d,8),(e,1)]
df = sc.parallelize(dummy_data).toDF([letter,number])And i want to create the following dataframe: [(a,0),(b,2…
I want to find a list comprehension in python source code, for that I tried to use Pygments, but it didnt find the way to do that. To be more specific, I want to do a function that recognize all the po…
Im having an issue saving my file to a certain location on my Raspberry PI (Raspbian) computer. Im wanting the XLSX file to be saved directly to my desktop rather than the folder holding the Python Sc…
Im new to both StackOverflow and pandas. I am trying to read in a large CSV file with stock market bin data in the following format:date,time,open,high,low,close,volume,splits,earnings,dividends,sym
20…
From the pydantic docs I understand this:
import pydanticclass User(pydantic.BaseModel):id: intname: strclass Student(pydantic.BaseModel):semester: int# this works as expected
class Student_User(User, …
Given the simple XML data below:<book><title>My First Book</title><abstract><para>First paragraph of the abstract</para><para>Second paragraph of the abstract&…
Could not delete question. Please refer to question: Shade states of a country according to dictionary values with Basemap I want to plot data (number of sick people for a certain year) on each state o…
I’m trying to make an application consisting of a QMainWindow, the central widget of which is a QToolBar (it may not be usual, but for my purpose the toolbar’s well suited). Docks are allowed below o…
This question already has answers here:How to sort a list/tuple of lists/tuples by the element at a given index(11 answers)Closed 8 years ago.How can I sort a list-of-lists by "column", i.e. …
I want to let setuptools install Phoenix in my project and thus addedsetup(...dependency_links = ["git+https://github.com/wxWidgets/Phoenix.git#egg=Phoenix"],install_requires = ["Phoenix…