diff --git a/Homework2/README.md b/Homework2/README.md index 8c41abb..592c14a 100644 --- a/Homework2/README.md +++ b/Homework2/README.md @@ -1,75 +1,104 @@ # SP4E - Homework 2 ---- ## General Info This file provides a brief documentation and information related to the second Homework of the course "Scientific Programming for Engineers", fall 2019. This homework is done by **O. Ashtari** and **A. Sieber**. Last update: 10.30.2019 ---- ## Project Description The aim of this project is to implement a familly of objects intended to compute two types of series: an arithmetic series and a series to approximate the value of pi number. The user can then decide how to dump the results by either printing them to the screen or writing them to a file. If the later option is chosen, a python file is available to plot the results stored in the file. ---- ## Requirements ---- ## Installation ---- ## Running ---- ## Work separtion between the authors The idea was writing mother classes as interfaces first. This task was done at the exercise session: structure of two classes `Series` and `DumperSeries`, including their virtual functions, was formed and written. To be abale to work remotely, each of us took one of the daughters of `Series` (namely `compute_arithmetic` and `compute_pi`) and one of the daughters of `DumperSeries` (namely `PrintSeries` and `WriteSeries`) to work on. Moreover, two other major tasks of writing a python script for visualization and modifying `Series` class to avoid re-calculations were split between authors. Each of us developed his own part and worked on his own `main.cc`. Finally, `main`s were merged and the project reviewed. ---- ## Concluding remarks ### Complexity of the program -In the arithmetic series, summing from 1 to N needs N-1 summing operations. So, to see the result for different values of N, number of operations are: +In the arithmetic series, summing from 1 to N needs N-1 adding (+) operations. So, to print or write the result for different values of N from 1 to say m, number of operations will be: ``` N num. of operations --- ------------------ -1 0 -2 1 -3 2 -4 3 -m m-1 +1 1 +2 2 +3 3 +4 4 +m m --- ------------------ -sum1: (m-1)(m-2)/2 +sum1: m*(m+1)/2 ``` -However, if we keep track of the latest N and the value of latest value of summation, the program needs to only add the current number to the available value. So, number of operations will be: +However, if we keep track of the latest N as well as the corresponding value of summation, the program needs to only add one term to the available value. So, number of operations will be: ``` N num. of operations --- ------------------ -1 0 +1 1 2 1 3 1 4 1 m 1 --- ------------------ -sum2: (m-1) +sum2: m +``` + +Therefore, for a large m the ratio of `sum1/sum2` tends to `0.5*m`. + +For pi calculation, the problem is more complicated. to add each term `1.0/(i*i)`, one multiplying operation (*), one inversion operation (/), and one adding operation (+) is required. Finally, square root of the summation multiplied by 6 is returned. So, number of operations will be: +``` +N num. of operations +--- ------------------ +1 1*(1+1+1)+1+1=5 +2 2*(1+1+1)+1+1=8 +3 3*(1+1+1)+1+1=11 +4 4*(1+1+1)+1+1=14 +m m*(1+1+1)+1+1=3m+2 +--- ------------------ +sum2: m*(3*m+7)/2 ``` -Therefore, for a large m the ratio of `sum1/sum2` tends to `m`. +However, if we keep track of the latest N as well as the corresponding value of summation (without square root), the program needs to only add one term to the available value, multiply the result by 6, then claculate the square roo. So, number of operations will be: +``` +N num. of operations +--- ------------------ +1 (1+1+1)+1+1=5 +2 (1+1+1)+1+1=5 +3 (1+1+1)+1+1=5 +4 (1+1+1)+1+1=5 +m (1+1+1)+1+1=5 +--- ------------------ +sum2: 5*m +``` + +Therefore, for a large m the ratio of `sum1/sum2` tends to `0.3*m`. + ### Re-calculations vs. round-off errors ----