From 76a116f64ee0580b02fcc5c4205dc80fa1d685e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20A=2E=20Ortega?= Date: Thu, 1 Dec 2016 21:08:45 +0100 Subject: [PATCH] Added documentation with LaTeX. --- .gitignore | 5 ++ docs/Summary.pdf | Bin 0 -> 40633 bytes docs/Summary.tex | 125 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 docs/Summary.pdf create mode 100644 docs/Summary.tex diff --git a/.gitignore b/.gitignore index 12d0162..0a127f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ # Ignore binaries build/* !build/.keep + +# Ignore LaTeX generated files +docs/* +!docs/Summary.tex +!docs/Summary.pdf diff --git a/docs/Summary.pdf b/docs/Summary.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b84146774ec4d2356fc67d93c4bae53d77adf1ae GIT binary patch literal 40633 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 %@1LZK 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 literal 0 HcmV?d00001 diff --git a/docs/Summary.tex b/docs/Summary.tex new file mode 100644 index 0000000..831dfc1 --- /dev/null +++ b/docs/Summary.tex @@ -0,0 +1,125 @@ +%%%%% +% +% Copyright (c) 2016 Nicolás A. Ortega +% This document is licensed under a Creative Commons +% Attribution-Share Alike 4.0 International License. +% +%%%%% +\documentclass[12pt, a4paper]{article} +\usepackage{fontspec} +% Set language of document +\usepackage[english]{babel} +\usepackage{hyperref} + +\begin{document} +\title{\texttt{numint}} +\author{Nicolás A. Ortega} +\maketitle +\section{Usage} +\texttt{numint} is a quick program written in C that calculates the area underneath a function using Left Rectangle, Right Rectangle, Middle-Point Rectangle, Trapezoidal, and Simpson part integrations. The usage is simple, first define the function you wish to integrate in the \texttt{`func'} function found at the end of the \texttt{`main.c'} file. After doing so compile and run the program. By default \texttt{numint} uses the CMake build system, therefore with CMake installed you could run the following commands from the root directory of the project: + +\begin{verbatim} +$ cd build/ +$ cmake .. +$ make +\end{verbatim} + +This would generate a file, \texttt{`build/numint'} which is the program's executable file. On UNIX systems you can run this file directly from the command-line from the \texttt{`build/'} directory by running \texttt{`./numint'}. At this point \texttt{numint} will prompt you with \texttt{`Enter "min, max":'}, which is asking you to enter the range in which you want to calculate the integral (e.g. \texttt{`4, 6'}), these numbers may contain decimals. After this you will be prompted \texttt{`Number of parts:'} which is asking for the number parts for the range previously given should be divided into (this number \emph{cannot} contain a decimal). + +If all has been done correctly then the program should print the results of the integrations for the formula in all five methods. + +\section{Examples} +In order make sure that the program works the way we think it does we'd have to test it first. For these examples let's use the integral $\int_{2}^{5} x^{3} + 4x - 2$. The results taken by hand for this integral in one part for all forms are as follows: +\begin{itemize} + \item Left Rectangle: $f(a) \cdot (b - a) = (2^{3} + 4 \cdot 2 - 2) \cdot (5 - 2) = 42$ + \item Right Rectangle: $f(b) \cdot (b - a) = (5^{3} + 4 \cdot 5 - 2) \cdot (5 - 2) = 429$ + \item Middle-Point Rectangle: $f(\frac{a + b}{2}) \cdot (b - a) = (3.5^{3} + 4 \cdot 3.5 - 2) \cdot (5 - 2) = 164.625$ + \item Trapezoid: $\frac{f(a) + f(b)}{2} \cdot (b - a) = \frac{(2^{3} + 4 \cdot 2 - 2) + (5^{3} + 4 \cdot 5 - 2)}{2} \cdot (5 - 2) = 235.5$ + \item Simpson: $\frac{b - a}{6} \cdot (f(a) + f(b) + 4 \cdot f(\frac{a + b}{2})) = \frac{5 - 2}{6} \cdot ((2^{3} + 4 \cdot 2 - 2) + (5^{3} + 4 \cdot 5 - 2) + 4 \cdot (3.5^{3} + 4 \cdot 3.5 - 2)) = 188.25$ +\end{itemize} + +If we run this in \texttt{numint} we get the following output: +\begin{verbatim} +Enter "min, max": 2, 5 +Number of parts: 1 +Left Rectangle: 42.000000 +Right rectangle: 429.000000 +Middle Point Rectangle: 164.625000 +Trapezoidal: 235.500000 +Simpson: 188.250000 +\end{verbatim} + +As you can see you get the exact same results (with trailing zeros due to the \texttt{`double'} data type). + +We have now seen how \texttt{numint} works for integrals in one part, but we should also test it for multiple parts. Let's use the same integral but test for 2 parts, which should give us slightly more accuracy. The results are as follows: + +\begin{itemize} + \item Left Rectangle: $\displaystyle\sum_{i = 1}^{2} f(x_{i}) \cdot (x_{i + 1} - x_{i}) = 103.3125$ + \item Right Rectangle: $\displaystyle\sum_{i = 1}^{2} f(x_{i + 1}) \cdot (x_{i + 1} - x_{i}) = 296.8125$ + \item Middle-Point Rectangle: $\displaystyle\sum_{i = 1}^{2} f(\frac{x_{i} + x_{i + 1}}{2}) \cdot (x_{i + 1} - x_{i}) = 182.34375$ + \item Trapezoidal: $\displaystyle\sum_{i = 1}^{2} \frac{f(x_{i}) + f(x_{i + 1})}{2} \cdot (x_{i + 1} - x_{i}) = 200.0625$ + \item Simpson: $\displaystyle\sum_{i = 1}^{2} \frac{x_{i + 1} - x_{i}}{6} \cdot (f(x_{i}) + f(x_{i + 1}) + 4 \cdot f(\frac{x_{i} + x_{i + 1}}{2})) = 188.25$ +\end{itemize} + +If we then run this in \texttt{numint} we get the following output: +\begin{verbatim} +Enter "min, max": 2, 5 +Number of parts: 2 +Left Rectangle: 103.312500 +Right rectangle: 296.812500 +Middle Point Rectangle: 182.343750 +Trapezoidal: 200.062500 +Simpson: 188.250000 +\end{verbatim} + +Again the same exact results. + +\section{Technical Analysis} +Now let's analyze how the code works. To begin let's look at the function $f(x)$ which is defined in the \texttt{`func(double x)'} C function. The function is defined as follows: +\begin{verbatim} +double func(double x) { + return pow(x, 3.0) + 4.0 * x - 2.0; +} +\end{verbatim} + +It's a simple function that takes in \texttt{`double'} as a parameter and returns the result in the form of a \texttt{`double'} as well. The function itself uses the \texttt{`pow()'} from the C Math library which is what allows us to easily use exponents (in this case \texttt{`pow(x, 3.0)'} is equivalent to $x^{3}$). If you want to change the function you'll have to modify the \texttt{`return'} statement in this function. + +Later, after retrieving the \texttt{`min'}, \texttt{`max'}, and \texttt{`parts'} variables that were prompted to the user we enter the main loop of the program for the calculations. +\begin{verbatim} +for(unsigned int i = 0; i < parts; ++i) { + ... +} +\end{verbatim} + +This loop will create a variable \texttt{`i'} which will be useful later. This variable (as stated by the loop) will increment while it is less than the \texttt{`parts'} variable. + +After this are the following lines: +\begin{verbatim} +double p0 = a + (i * (b - a) / parts); +double p1 = p0 + ((b - a) / parts); +\end{verbatim} + +Here we create two variables: \texttt{`p0'} and \texttt{`p1'}. In regards to the previous calculations done in the `Examples' section, \texttt{`p0'} and \texttt{`p1'} would be equivalent to $x_{i}$ and $x_{i + 1}$ respectively. So, let's imagine that we're looking at the first part of two for this integral that goes from 2 to 5 (like in the example). In this case, mathematically, the equation would look like this: $p0 = 2 + \frac{0 \cdot (5 - 2)}{2}$ and $p1 = p0 + \frac{5 - 2}{2}$. Now, why multiply by 0? Doesn't the loop start at 1? Well, in programming, luckily, we always start with 0 (remember in the \texttt{`for'} loop where it said \texttt{`unsigned int i = 0'}?). Since this is the first part we multiply by 0 because we want to start at 2. This is all being setup for the calculation of the integrals with parts. + +Finally comes the calculation of the integrals, which is as follows: +\begin{verbatim} +lRect += func(p0) * (p1 - p0); +rRect += func(p1) * (p1 - p0); +mRect += func((p0 + p1) / 2) * (p1 - p0); +trap += (func(p0) + func(p1)) / 2 * (p1 - p0); +simp += (p1 - p0) / 6 * (func(p0) + func(p1) + 4 * func((p0 + p1) / 2)); +\end{verbatim} + +All these variables (\texttt{`lRect'}, \texttt{`rRect'}, etc.) have all been assigned to 0 before entering the loop. Therefore, on each of these lines the integral for a given part of the function (where \texttt{`p0'} is the beginning of the part and \texttt{`p1'} is the end of the part) which is then added to all the other parts because of the \texttt{`for'} loop seen previously. + +After this all the variables are printed to \texttt{`stdout'} (Standard Output) for the user to see the results. + +\section{Modifications} +Currently \texttt{numint} is limited to a pre-coded function (as previously mentioned, this function can be modified in \texttt{`func(double x)'} found at the end of the file \texttt{`main.c'}). Modifications to the source for this project are permitted and encouraged, however all distributions of said changes must comply with the project license, which is the GNU General Public License version 3. + +\section{License} +This document is licensed under a Creative Commons Attribution-Share Alike 4.0 International License. + +Copyright \copyright{} 2016 Nicolás A. Ortega \texttt{<\href{mailto:deathsbreed@themusicinnoise.net}{deathsbreed@themusicinnoise.net}>} + +\end{document}