Documentation for 27f1ed312f

This commit is contained in:
github-actions
2021-10-16 01:44:46 +00:00
parent df95b45011
commit 8dfb738786
69 changed files with 3076 additions and 1915 deletions

View File

@@ -0,0 +1,478 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Algorithms_in_C++: math/integral_approximation2.cpp File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML/MathJax.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Algorithms_in_C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">Set of algorithms implemented in C++.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('../../',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('db/d40/integral__approximation2_8cpp.html','../../'); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle"><div class="title">integral_approximation2.cpp File Reference</div></div>
</div><!--header-->
<div class="contents">
<p><a href="https://en.wikipedia.org/wiki/Monte_Carlo_integration" target="_blank">Monte Carlo Integration</a>
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;cmath&gt;</code><br />
<code>#include &lt;cstdint&gt;</code><br />
<code>#include &lt;ctime&gt;</code><br />
<code>#include &lt;functional&gt;</code><br />
<code>#include &lt;iostream&gt;</code><br />
<code>#include &lt;random&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for integral_approximation2.cpp:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d5c/integral__approximation2_8cpp__incl.svg" width="607" height="112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:dd/d47/namespacemath"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d47/namespacemath.html">math</a></td></tr>
<tr class="memdesc:dd/d47/namespacemath"><td class="mdescLeft">&#160;</td><td class="mdescRight">for IO operations <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:d0/da4/namespacemonte__carlo"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/da4/namespacemonte__carlo.html">monte_carlo</a></td></tr>
<tr class="memdesc:d0/da4/namespacemonte__carlo"><td class="mdescLeft">&#160;</td><td class="mdescRight">Functions for the <a href="https://en.wikipedia.org/wiki/Monte_Carlo_integration" target="_blank">Monte Carlo Integration</a> implementation. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:acdb8cc5065db87c9cbe2a8867dca35e8"><td class="memItemLeft" align="right" valign="top"><a id="acdb8cc5065db87c9cbe2a8867dca35e8" name="acdb8cc5065db87c9cbe2a8867dca35e8"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>math::monte_carlo::Function</b> = <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt; double(double &amp;)&gt;</td></tr>
<tr class="separator:acdb8cc5065db87c9cbe2a8867dca35e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a71249ee535f16f8ed2e9cc8f0199a2cf"><td class="memItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d40/integral__approximation2_8cpp.html#a71249ee535f16f8ed2e9cc8f0199a2cf">math::monte_carlo::generate_samples</a> (const double &amp;start_point, const Function &amp;pdf, const uint32_t &amp;num_samples, const uint32_t &amp;discard=100000)</td></tr>
<tr class="memdesc:a71249ee535f16f8ed2e9cc8f0199a2cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">short-hand for std::functions used in this implementation <a href="../../db/d40/integral__approximation2_8cpp.html#a71249ee535f16f8ed2e9cc8f0199a2cf">More...</a><br /></td></tr>
<tr class="separator:a71249ee535f16f8ed2e9cc8f0199a2cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7da9ba8932f1f48b9bbc2d80471af51"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d40/integral__approximation2_8cpp.html#af7da9ba8932f1f48b9bbc2d80471af51">math::monte_carlo::integral_monte_carlo</a> (const double &amp;start_point, const Function &amp;function, const Function &amp;pdf, const uint32_t &amp;num_samples=1000000)</td></tr>
<tr class="memdesc:af7da9ba8932f1f48b9bbc2d80471af51"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute an approximation of an integral using Monte Carlo integration. <a href="../../db/d40/integral__approximation2_8cpp.html#af7da9ba8932f1f48b9bbc2d80471af51">More...</a><br /></td></tr>
<tr class="separator:af7da9ba8932f1f48b9bbc2d80471af51"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8dca7b867074164d5f45b0f3851269d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d40/integral__approximation2_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a> ()</td></tr>
<tr class="memdesc:aa8dca7b867074164d5f45b0f3851269d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Self-test implementations. <a href="../../db/d40/integral__approximation2_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">More...</a><br /></td></tr>
<tr class="separator:aa8dca7b867074164d5f45b0f3851269d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d40/integral__approximation2_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
<tr class="memdesc:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main function. <a href="../../db/d40/integral__approximation2_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">More...</a><br /></td></tr>
<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p ><a href="https://en.wikipedia.org/wiki/Monte_Carlo_integration" target="_blank">Monte Carlo Integration</a> </p>
<p >In mathematics, Monte Carlo integration is a technique for numerical integration using random numbers. It is a particular Monte Carlo method that numerically computes a definite integral. While other algorithms usually evaluate the integrand at a regular grid, Monte Carlo randomly chooses points at which the integrand is evaluated. This method is particularly useful for higher-dimensional integrals.</p>
<p >This implementation supports arbitrary pdfs. These pdfs are sampled using the <a href="https://en.wikipedia.org/wiki/MetropolisHastings_algorithm" target="_blank">Metropolis-Hastings algorithm</a>. This can be swapped out by every other sampling techniques for example the inverse method. Metropolis-Hastings was chosen because it is the most general and can also be extended for a higher dimensional sampling space.</p>
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/DerAndereDomenic" target="_blank">Domenic Zingsheim</a> </dd></dl>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a71249ee535f16f8ed2e9cc8f0199a2cf" name="a71249ee535f16f8ed2e9cc8f0199a2cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a71249ee535f16f8ed2e9cc8f0199a2cf">&#9670;&nbsp;</a></span>generate_samples()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>&lt; double &gt; math::monte_carlo::generate_samples </td>
<td>(</td>
<td class="paramtype">const double &amp;&#160;</td>
<td class="paramname"><em>start_point</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">Function</a> &amp;&#160;</td>
<td class="paramname"><em>pdf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t &amp;&#160;</td>
<td class="paramname"><em>num_samples</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t &amp;&#160;</td>
<td class="paramname"><em>discard</em> = <code>100000</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>short-hand for std::functions used in this implementation </p>
<p >Generate samples according to some pdf</p>
<p >This function uses Metropolis-Hastings to generate random numbers. It generates a sequence of random numbers by using a markov chain. Therefore, we need to define a start_point and the number of samples we want to generate. Because the first samples generated by the markov chain may not be distributed according to the given pdf, one can specify how many samples should be discarded before storing samples. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">start_point</td><td>The starting point of the markov chain </td></tr>
<tr><td class="paramname">pdf</td><td>The pdf to sample </td></tr>
<tr><td class="paramname">num_samples</td><td>The number of samples to generate </td></tr>
<tr><td class="paramname">discard</td><td>How many samples should be discarded at the start </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A vector of size num_samples with samples distributed according to the pdf </dd></dl>
<div class="fragment"><div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;double&gt;</a> samples;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> samples.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(num_samples);</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">double</span> x_t = start_point;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/random.html">std::default_random_engine</a> generator;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution.html">std::uniform_real_distribution&lt;double&gt;</a> uniform(0.0, 1.0);</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/random/normal_distribution.html">std::normal_distribution&lt;double&gt;</a> normal(0.0, 1.0);</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> generator.seed(<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/chrono/c/time.html">time</a>(<span class="keyword">nullptr</span>));</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span>(uint32_t t = 0; t &lt; num_samples + discard; ++t) {</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// Generate a new proposal according to some mutation strategy.</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// This is arbitrary and can be swapped.</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">double</span> x_dash = normal(generator) + x_t;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">double</span> acceptance_probability = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(pdf(x_dash)/pdf(x_t), 1.0);</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">double</span> u = uniform(generator);</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// Accept &quot;new state&quot; according to the acceptance_probability</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span>(u &lt;= acceptance_probability) {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> x_t = x_dash;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> }</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(t &gt;= discard) {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> samples.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(x_t);</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> }</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> samples;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span>}</div>
<div class="ttc" id="amin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a></div><div class="ttdeci">T min(T... args)</div></div>
<div class="ttc" id="anormal_distribution_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/random/normal_distribution.html">std::normal_distribution</a></div></div>
<div class="ttc" id="apush_back_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">std::vector::push_back</a></div><div class="ttdeci">T push_back(T... args)</div></div>
<div class="ttc" id="arandom_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/random.html">std::default_random_engine</a></div></div>
<div class="ttc" id="areserve_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">std::vector::reserve</a></div><div class="ttdeci">T reserve(T... args)</div></div>
<div class="ttc" id="atime_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/c/time.html">std::time</a></div><div class="ttdeci">T time(T... args)</div></div>
<div class="ttc" id="auniform_real_distribution_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution.html">std::uniform_real_distribution</a></div></div>
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="../../db/d40/integral__approximation2_8cpp_a71249ee535f16f8ed2e9cc8f0199a2cf_cgraph.svg" width="355" height="139"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
</div>
</div>
<a id="af7da9ba8932f1f48b9bbc2d80471af51" name="af7da9ba8932f1f48b9bbc2d80471af51"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7da9ba8932f1f48b9bbc2d80471af51">&#9670;&nbsp;</a></span>integral_monte_carlo()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double math::monte_carlo::integral_monte_carlo </td>
<td>(</td>
<td class="paramtype">const double &amp;&#160;</td>
<td class="paramname"><em>start_point</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">Function</a> &amp;&#160;</td>
<td class="paramname"><em>function</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">Function</a> &amp;&#160;</td>
<td class="paramname"><em>pdf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint32_t &amp;&#160;</td>
<td class="paramname"><em>num_samples</em> = <code>1000000</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Compute an approximation of an integral using Monte Carlo integration. </p>
<p >The integration domain [a,b] is given by the pdf. The pdf has to fulfill the following conditions: 1) for all x \in [a,b] : p(x) &gt; 0 2) for all x \not\in [a,b] : p(x) = 0 3) \int_a^b p(x) dx = 1 </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">start_point</td><td>The start point of the Markov Chain (see generate_samples) </td></tr>
<tr><td class="paramname">function</td><td>The function to integrate </td></tr>
<tr><td class="paramname">pdf</td><td>The pdf to sample </td></tr>
<tr><td class="paramname">num_samples</td><td>The number of samples used to approximate the integral </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The approximation of the integral according to 1/N \sum_{i}^N f(x_i) / p(x_i) </dd></dl>
<div class="fragment"><div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> {</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">double</span> integral = 0.0;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;double&gt;</a> samples = <a class="code hl_function" href="../../db/d40/integral__approximation2_8cpp.html#a71249ee535f16f8ed2e9cc8f0199a2cf">generate_samples</a>(start_point, pdf, num_samples);</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span>(<span class="keywordtype">double</span> sample : samples) {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> integral += <span class="keyword">function</span>(sample) / pdf(sample);</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> integral / <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(samples.size());</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>}</div>
<div class="ttc" id="aintegral__approximation2_8cpp_html_a71249ee535f16f8ed2e9cc8f0199a2cf"><div class="ttname"><a href="../../db/d40/integral__approximation2_8cpp.html#a71249ee535f16f8ed2e9cc8f0199a2cf">math::monte_carlo::generate_samples</a></div><div class="ttdeci">std::vector&lt; double &gt; generate_samples(const double &amp;start_point, const Function &amp;pdf, const uint32_t &amp;num_samples, const uint32_t &amp;discard=100000)</div><div class="ttdoc">short-hand for std::functions used in this implementation</div><div class="ttdef"><b>Definition:</b> integral_approximation2.cpp:53</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="../../db/d40/integral__approximation2_8cpp_af7da9ba8932f1f48b9bbc2d80471af51_cgraph.svg" width="550" height="147"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
</div>
</div>
<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int main </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Main function. </p>
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
<div class="fragment"><div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_function" href="../../db/d40/integral__approximation2_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span>}</div>
<div class="ttc" id="aintegral__approximation2_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../db/d40/integral__approximation2_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Self-test implementations.</div><div class="ttdef"><b>Definition:</b> integral_approximation2.cpp:115</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="../../db/d40/integral__approximation2_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.svg" width="274" height="190"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
</div>
</div>
<a id="aa8dca7b867074164d5f45b0f3851269d" name="aa8dca7b867074164d5f45b0f3851269d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8dca7b867074164d5f45b0f3851269d">&#9670;&nbsp;</a></span>test()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void test </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Self-test implementations. </p>
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
<div class="fragment"><div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> {</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;Disclaimer: Because this is a randomized algorithm,&quot;</span> &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;it may happen that singular samples deviate from the true result.&quot;</span> &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a> &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">math::monte_carlo::Function</a> f;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">math::monte_carlo::Function</a> pdf;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">double</span> integral = 0;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">double</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/lower_bound.html">lower_bound</a> = 0, <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/upper_bound.html">upper_bound</a> = 0;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="comment">/* \int_{-2}^{2} -x^2 + 4 dx */</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> f = [&amp;](<span class="keywordtype">double</span>&amp; x) {</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">return</span> -x*x + 4.0;</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> };</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/lower_bound.html">lower_bound</a> = -2.0;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/upper_bound.html">upper_bound</a> = 2.0;</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> pdf = [&amp;](<span class="keywordtype">double</span>&amp; x) {</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(x &gt;= lower_bound &amp;&amp; x &lt;= -1.0) {</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">return</span> 0.1;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> }</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>(x &lt;= upper_bound &amp;&amp; x &gt;= 1.0) {</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">return</span> 0.1;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(x &gt; -1.0 &amp;&amp; x &lt; 1.0) {</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> 0.4;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> 0.0;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> };</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> integral = <a class="code hl_function" href="../../db/d40/integral__approximation2_8cpp.html#af7da9ba8932f1f48b9bbc2d80471af51">math::monte_carlo::integral_monte_carlo</a>((upper_bound - lower_bound) / 2.0, f, pdf);</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;This number should be close to 10.666666: &quot;</span> &lt;&lt; integral &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">/* \int_{0}^{1} e^x dx */</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> f = [&amp;](<span class="keywordtype">double</span>&amp; x) {</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/math/exp.html">std::exp</a>(x);</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> };</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/lower_bound.html">lower_bound</a> = 0.0;</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/upper_bound.html">upper_bound</a> = 1.0;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> pdf = [&amp;](<span class="keywordtype">double</span>&amp; x) {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span>(x &gt;= lower_bound &amp;&amp; x &lt;= 0.2) {</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span> 0.1;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> }</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(x &gt; 0.2 &amp;&amp; x &lt;= 0.4) {</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">return</span> 0.4;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span>(x &gt; 0.4 &amp;&amp; x &lt; upper_bound) {</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">return</span> 1.5;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">return</span> 0.0;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> };</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> integral = <a class="code hl_function" href="../../db/d40/integral__approximation2_8cpp.html#af7da9ba8932f1f48b9bbc2d80471af51">math::monte_carlo::integral_monte_carlo</a>((upper_bound - lower_bound) / 2.0, f, pdf);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;This number should be close to 1.7182818: &quot;</span> &lt;&lt; integral &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="comment">/* \int_{-\infty}^{\infty} sinc(x) dx, sinc(x) = sin(pi * x) / (pi * x)</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment"> This is a difficult integral because of its infinite domain.</span></div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="comment"> Therefore, it may deviate largely from the expected result.</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment"> */</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> f = [&amp;](<span class="keywordtype">double</span>&amp; x) {</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/math/sin.html">std::sin</a>(M_PI * x) / (M_PI * x);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> };</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> pdf = [&amp;](<span class="keywordtype">double</span>&amp; x) {</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> 1.0 / <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/math/sqrt.html">std::sqrt</a>(2.0 * M_PI) * <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/math/exp.html">std::exp</a>(-x * x / 2.0);</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> };</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> integral = <a class="code hl_function" href="../../db/d40/integral__approximation2_8cpp.html#af7da9ba8932f1f48b9bbc2d80471af51">math::monte_carlo::integral_monte_carlo</a>(0.0, f, pdf, 10000000);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;This number should be close to 1.0: &quot;</span> &lt;&lt; integral &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>}</div>
<div class="ttc" id="abasic_ostream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a></div></div>
<div class="ttc" id="aendl_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div><div class="ttdeci">T endl(T... args)</div></div>
<div class="ttc" id="aexp_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/math/exp.html">std::exp</a></div><div class="ttdeci">T exp(T... args)</div></div>
<div class="ttc" id="afunction_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a></div></div>
<div class="ttc" id="aintegral__approximation2_8cpp_html_af7da9ba8932f1f48b9bbc2d80471af51"><div class="ttname"><a href="../../db/d40/integral__approximation2_8cpp.html#af7da9ba8932f1f48b9bbc2d80471af51">math::monte_carlo::integral_monte_carlo</a></div><div class="ttdeci">double integral_monte_carlo(const double &amp;start_point, const Function &amp;function, const Function &amp;pdf, const uint32_t &amp;num_samples=1000000)</div><div class="ttdoc">Compute an approximation of an integral using Monte Carlo integration.</div><div class="ttdef"><b>Definition:</b> integral_approximation2.cpp:97</div></div>
<div class="ttc" id="alower_bound_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/lower_bound.html">std::lower_bound</a></div><div class="ttdeci">T lower_bound(T... args)</div></div>
<div class="ttc" id="asin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/math/sin.html">std::sin</a></div><div class="ttdeci">T sin(T... args)</div></div>
<div class="ttc" id="asqrt_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/math/sqrt.html">std::sqrt</a></div><div class="ttdeci">T sqrt(T... args)</div></div>
<div class="ttc" id="aupper_bound_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/upper_bound.html">std::upper_bound</a></div><div class="ttdeci">T upper_bound(T... args)</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="../../db/d40/integral__approximation2_8cpp_aa8dca7b867074164d5f45b0f3851269d_cgraph.svg" width="175" height="190"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="../../dir_296d53ceaeaa7e099814a6def439fe8a.html">math</a></li><li class="navelem"><a class="el" href="../../db/d40/integral__approximation2_8cpp.html">integral_approximation2.cpp</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.2 </li>
</ul>
</div>
</body>
</html>

View File

@@ -0,0 +1,7 @@
var integral__approximation2_8cpp =
[
[ "generate_samples", "db/d40/integral__approximation2_8cpp.html#a71249ee535f16f8ed2e9cc8f0199a2cf", null ],
[ "integral_monte_carlo", "db/d40/integral__approximation2_8cpp.html#af7da9ba8932f1f48b9bbc2d80471af51", null ],
[ "main", "db/d40/integral__approximation2_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ],
[ "test", "db/d40/integral__approximation2_8cpp.html#aa8dca7b867074164d5f45b0f3851269d", null ]
];

View File

@@ -0,0 +1,6 @@
<map id="math::monte_carlo::generate_samples" name="math::monte_carlo::generate_samples">
<area shape="rect" id="node1" title="short&#45;hand for std::functions used in this implementation" alt="" coords="5,49,145,90"/>
<area shape="rect" id="node2" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/algorithm/min.html#" title=" " alt="" coords="237,5,306,32"/>
<area shape="rect" id="node3" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/container/vector/push_back.html#" title=" " alt="" coords="193,56,349,83"/>
<area shape="rect" id="node4" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/container/vector/reserve.html#" title=" " alt="" coords="203,107,339,133"/>
</map>

View File

@@ -0,0 +1 @@
3a679f87fcf84b642be9208e2dfec84c

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
-->
<!-- Title: math::monte_carlo::generate_samples Pages: 1 -->
<svg width="266pt" height="104pt"
viewBox="0.00 0.00 266.00 104.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 100)">
<title>math::monte_carlo::generate_samples</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-100 262,-100 262,4 -4,4"/>
<!-- Node1 -->
<g id="node1" class="node">
<title>Node1</title>
<g id="a_node1"><a xlink:title="short&#45;hand for std::functions used in this implementation">
<polygon fill="#bfbfbf" stroke="black" points="0,-33 0,-63 105,-63 105,-33 0,-33"/>
<text text-anchor="start" x="8" y="-51" font-family="Helvetica,sans-Serif" font-size="10.00">math::monte_carlo::</text>
<text text-anchor="middle" x="52.5" y="-40" font-family="Helvetica,sans-Serif" font-size="10.00">generate_samples</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node1 -->
<g id="edge1" class="edge">
<title>Node1&#45;&gt;Node1</title>
<path fill="none" stroke="midnightblue" d="M27.06,-63.16C20.92,-72.56 29.4,-81.5 52.5,-81.5 66.58,-81.5 75.22,-78.18 78.44,-73.46"/>
<polygon fill="midnightblue" stroke="midnightblue" points="81.92,-72.98 77.94,-63.16 74.93,-73.32 81.92,-72.98"/>
</g>
<!-- Node2 -->
<g id="node2" class="node">
<title>Node2</title>
<g id="a_node2"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/algorithm/min.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="173.5,-76.5 173.5,-95.5 225.5,-95.5 225.5,-76.5 173.5,-76.5"/>
<text text-anchor="middle" x="199.5" y="-83.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::min</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge2" class="edge">
<title>Node1&#45;&gt;Node2</title>
<path fill="none" stroke="midnightblue" d="M105.03,-61.5C124.35,-66.57 145.85,-72.2 163.36,-76.79"/>
<polygon fill="midnightblue" stroke="midnightblue" points="162.59,-80.21 173.15,-79.36 164.37,-73.44 162.59,-80.21"/>
</g>
<!-- Node3 -->
<g id="node3" class="node">
<title>Node3</title>
<g id="a_node3"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/container/vector/push_back.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="141,-38.5 141,-57.5 258,-57.5 258,-38.5 141,-38.5"/>
<text text-anchor="middle" x="199.5" y="-45.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::vector::push_back</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node3 -->
<g id="edge3" class="edge">
<title>Node1&#45;&gt;Node3</title>
<path fill="none" stroke="midnightblue" d="M105.03,-48C113.34,-48 122.05,-48 130.67,-48"/>
<polygon fill="midnightblue" stroke="midnightblue" points="130.72,-51.5 140.72,-48 130.72,-44.5 130.72,-51.5"/>
</g>
<!-- Node4 -->
<g id="node4" class="node">
<title>Node4</title>
<g id="a_node4"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/container/vector/reserve.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="148.5,-0.5 148.5,-19.5 250.5,-19.5 250.5,-0.5 148.5,-0.5"/>
<text text-anchor="middle" x="199.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::vector::reserve</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node4 -->
<g id="edge4" class="edge">
<title>Node1&#45;&gt;Node4</title>
<path fill="none" stroke="midnightblue" d="M105.03,-34.5C120.37,-30.47 137.09,-26.09 152.09,-22.16"/>
<polygon fill="midnightblue" stroke="midnightblue" points="153.37,-25.45 162.16,-19.52 151.6,-18.67 153.37,-25.45"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1,7 @@
<map id="test" name="test">
<area shape="rect" id="node1" title="Self&#45;test implementations." alt="" coords="5,81,49,108"/>
<area shape="rect" id="node2" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/io/manip/endl.html#" title=" " alt="" coords="97,5,169,32"/>
<area shape="rect" id="node3" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/numeric/math/exp.html#" title=" " alt="" coords="99,56,168,83"/>
<area shape="rect" id="node4" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/numeric/math/sin.html#" title=" " alt="" coords="101,107,165,133"/>
<area shape="rect" id="node5" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/numeric/math/sqrt.html#" title=" " alt="" coords="99,157,168,184"/>
</map>

View File

@@ -0,0 +1 @@
622fbdac78e8364ce6c073de02e68f54

View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
-->
<!-- Title: test Pages: 1 -->
<svg width="131pt" height="142pt"
viewBox="0.00 0.00 131.00 142.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 138)">
<title>test</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-138 127,-138 127,4 -4,4"/>
<!-- Node1 -->
<g id="node1" class="node">
<title>Node1</title>
<g id="a_node1"><a xlink:title="Self&#45;test implementations.">
<polygon fill="#bfbfbf" stroke="black" points="0,-57.5 0,-76.5 33,-76.5 33,-57.5 0,-57.5"/>
<text text-anchor="middle" x="16.5" y="-64.5" font-family="Helvetica,sans-Serif" font-size="10.00">test</text>
</a>
</g>
</g>
<!-- Node2 -->
<g id="node2" class="node">
<title>Node2</title>
<g id="a_node2"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/io/manip/endl.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="69,-114.5 69,-133.5 123,-133.5 123,-114.5 69,-114.5"/>
<text text-anchor="middle" x="96" y="-121.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::endl</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge1" class="edge">
<title>Node1&#45;&gt;Node2</title>
<path fill="none" stroke="midnightblue" d="M30.61,-76.7C41.01,-84.39 55.92,-95.4 69,-105 70.43,-106.05 71.89,-107.12 73.38,-108.21"/>
<polygon fill="midnightblue" stroke="midnightblue" points="71.63,-111.27 81.76,-114.35 75.76,-105.62 71.63,-111.27"/>
</g>
<!-- Node3 -->
<g id="node3" class="node">
<title>Node3</title>
<g id="a_node3"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/numeric/math/exp.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="70,-76.5 70,-95.5 122,-95.5 122,-76.5 70,-76.5"/>
<text text-anchor="middle" x="96" y="-83.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::exp</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node3 -->
<g id="edge2" class="edge">
<title>Node1&#45;&gt;Node3</title>
<path fill="none" stroke="midnightblue" d="M33.18,-70.84C40.91,-72.74 50.57,-75.11 59.94,-77.4"/>
<polygon fill="midnightblue" stroke="midnightblue" points="59.34,-80.86 69.88,-79.84 61,-74.06 59.34,-80.86"/>
</g>
<!-- Node4 -->
<g id="node4" class="node">
<title>Node4</title>
<g id="a_node4"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/numeric/math/sin.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="72,-38.5 72,-57.5 120,-57.5 120,-38.5 72,-38.5"/>
<text text-anchor="middle" x="96" y="-45.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::sin</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node4 -->
<g id="edge3" class="edge">
<title>Node1&#45;&gt;Node4</title>
<path fill="none" stroke="midnightblue" d="M33.18,-63.16C41.54,-61.11 52.15,-58.5 62.22,-56.04"/>
<polygon fill="midnightblue" stroke="midnightblue" points="63.11,-59.42 71.99,-53.64 61.44,-52.62 63.11,-59.42"/>
</g>
<!-- Node5 -->
<g id="node5" class="node">
<title>Node5</title>
<g id="a_node5"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/numeric/math/sqrt.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="70,-0.5 70,-19.5 122,-19.5 122,-0.5 70,-0.5"/>
<text text-anchor="middle" x="96" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::sqrt</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node5 -->
<g id="edge4" class="edge">
<title>Node1&#45;&gt;Node5</title>
<path fill="none" stroke="midnightblue" d="M30.61,-57.3C41.01,-49.61 55.92,-38.6 69,-29 70.43,-27.95 71.89,-26.88 73.38,-25.79"/>
<polygon fill="midnightblue" stroke="midnightblue" points="75.76,-28.38 81.76,-19.65 71.63,-22.73 75.76,-28.38"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1,8 @@
<map id="main" name="main">
<area shape="rect" id="node1" title="Main function." alt="" coords="5,81,56,108"/>
<area shape="rect" id="node2" href="$db/d40/integral__approximation2_8cpp.html#aa8dca7b867074164d5f45b0f3851269d" title="Self&#45;test implementations." alt="" coords="104,81,148,108"/>
<area shape="rect" id="node3" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/io/manip/endl.html#" title=" " alt="" coords="196,5,268,32"/>
<area shape="rect" id="node4" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/numeric/math/exp.html#" title=" " alt="" coords="197,56,267,83"/>
<area shape="rect" id="node5" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/numeric/math/sin.html#" title=" " alt="" coords="200,107,264,133"/>
<area shape="rect" id="node6" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/numeric/math/sqrt.html#" title=" " alt="" coords="197,157,267,184"/>
</map>

View File

@@ -0,0 +1 @@
87d957db15915ba0b9079108122e1563

View File

@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
-->
<!-- Title: main Pages: 1 -->
<svg width="205pt" height="142pt"
viewBox="0.00 0.00 205.00 142.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 138)">
<title>main</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-138 201,-138 201,4 -4,4"/>
<!-- Node1 -->
<g id="node1" class="node">
<title>Node1</title>
<g id="a_node1"><a xlink:title="Main function.">
<polygon fill="#bfbfbf" stroke="black" points="0,-57.5 0,-76.5 38,-76.5 38,-57.5 0,-57.5"/>
<text text-anchor="middle" x="19" y="-64.5" font-family="Helvetica,sans-Serif" font-size="10.00">main</text>
</a>
</g>
</g>
<!-- Node2 -->
<g id="node2" class="node">
<title>Node2</title>
<g id="a_node2"><a xlink:href="../../db/d40/integral__approximation2_8cpp.html#aa8dca7b867074164d5f45b0f3851269d" target="_top" xlink:title="Self&#45;test implementations.">
<polygon fill="white" stroke="black" points="74,-57.5 74,-76.5 107,-76.5 107,-57.5 74,-57.5"/>
<text text-anchor="middle" x="90.5" y="-64.5" font-family="Helvetica,sans-Serif" font-size="10.00">test</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge1" class="edge">
<title>Node1&#45;&gt;Node2</title>
<path fill="none" stroke="midnightblue" d="M38.26,-67C46.07,-67 55.31,-67 63.79,-67"/>
<polygon fill="midnightblue" stroke="midnightblue" points="63.95,-70.5 73.95,-67 63.95,-63.5 63.95,-70.5"/>
</g>
<!-- Node3 -->
<g id="node3" class="node">
<title>Node3</title>
<g id="a_node3"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/io/manip/endl.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="143,-114.5 143,-133.5 197,-133.5 197,-114.5 143,-114.5"/>
<text text-anchor="middle" x="170" y="-121.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::endl</text>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node3 -->
<g id="edge2" class="edge">
<title>Node2&#45;&gt;Node3</title>
<path fill="none" stroke="midnightblue" d="M104.61,-76.7C115.01,-84.39 129.92,-95.4 143,-105 144.43,-106.05 145.89,-107.12 147.38,-108.21"/>
<polygon fill="midnightblue" stroke="midnightblue" points="145.63,-111.27 155.76,-114.35 149.76,-105.62 145.63,-111.27"/>
</g>
<!-- Node4 -->
<g id="node4" class="node">
<title>Node4</title>
<g id="a_node4"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/numeric/math/exp.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="144,-76.5 144,-95.5 196,-95.5 196,-76.5 144,-76.5"/>
<text text-anchor="middle" x="170" y="-83.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::exp</text>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node4 -->
<g id="edge3" class="edge">
<title>Node2&#45;&gt;Node4</title>
<path fill="none" stroke="midnightblue" d="M107.18,-70.84C114.91,-72.74 124.57,-75.11 133.94,-77.4"/>
<polygon fill="midnightblue" stroke="midnightblue" points="133.34,-80.86 143.88,-79.84 135,-74.06 133.34,-80.86"/>
</g>
<!-- Node5 -->
<g id="node5" class="node">
<title>Node5</title>
<g id="a_node5"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/numeric/math/sin.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="146,-38.5 146,-57.5 194,-57.5 194,-38.5 146,-38.5"/>
<text text-anchor="middle" x="170" y="-45.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::sin</text>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node5 -->
<g id="edge4" class="edge">
<title>Node2&#45;&gt;Node5</title>
<path fill="none" stroke="midnightblue" d="M107.18,-63.16C115.54,-61.11 126.15,-58.5 136.22,-56.04"/>
<polygon fill="midnightblue" stroke="midnightblue" points="137.11,-59.42 145.99,-53.64 135.44,-52.62 137.11,-59.42"/>
</g>
<!-- Node6 -->
<g id="node6" class="node">
<title>Node6</title>
<g id="a_node6"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/numeric/math/sqrt.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="144,-0.5 144,-19.5 196,-19.5 196,-0.5 144,-0.5"/>
<text text-anchor="middle" x="170" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::sqrt</text>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node6 -->
<g id="edge5" class="edge">
<title>Node2&#45;&gt;Node6</title>
<path fill="none" stroke="midnightblue" d="M104.61,-57.3C115.01,-49.61 129.92,-38.6 143,-29 144.43,-27.95 145.89,-26.88 147.38,-25.79"/>
<polygon fill="midnightblue" stroke="midnightblue" points="149.76,-28.38 155.76,-19.65 145.63,-22.73 149.76,-28.38"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,8 @@
<map id="math::monte_carlo::integral_monte_carlo" name="math::monte_carlo::integral_monte_carlo">
<area shape="rect" id="node1" title="Compute an approximation of an integral using Monte Carlo integration." alt="" coords="5,78,152,119"/>
<area shape="rect" id="node2" href="$db/d40/integral__approximation2_8cpp.html#a71249ee535f16f8ed2e9cc8f0199a2cf" title="short&#45;hand for std::functions used in this implementation" alt="" coords="200,49,340,90"/>
<area shape="rect" id="node6" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/container/vector/size.html#" title=" " alt="" coords="213,115,327,141"/>
<area shape="rect" id="node3" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/algorithm/min.html#" title=" " alt="" coords="431,5,501,32"/>
<area shape="rect" id="node4" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/container/vector/push_back.html#" title=" " alt="" coords="388,56,544,83"/>
<area shape="rect" id="node5" href="/Users/runner/work/C-Plus-Plus/C-Plus-Plus/doc/cppreference-doxygen-web.tag.xml$cpp/container/vector/reserve.html#" title=" " alt="" coords="398,107,534,133"/>
</map>

View File

@@ -0,0 +1 @@
fb76a30ea0b4c0681c06849e0844eff8

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.49.1 (20210923.0004)
-->
<!-- Title: math::monte_carlo::integral_monte_carlo Pages: 1 -->
<svg width="412pt" height="110pt"
viewBox="0.00 0.00 412.00 110.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 106)">
<title>math::monte_carlo::integral_monte_carlo</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-106 408,-106 408,4 -4,4"/>
<!-- Node1 -->
<g id="node1" class="node">
<title>Node1</title>
<g id="a_node1"><a xlink:title="Compute an approximation of an integral using Monte Carlo integration.">
<polygon fill="#bfbfbf" stroke="black" points="0,-17 0,-47 110,-47 110,-17 0,-17"/>
<text text-anchor="start" x="8" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">math::monte_carlo::</text>
<text text-anchor="middle" x="55" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">integral_monte_carlo</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node1 -->
<g id="edge6" class="edge">
<title>Node1&#45;&gt;Node1</title>
<path fill="none" stroke="midnightblue" d="M30.25,-47.16C24.29,-56.56 32.54,-65.5 55,-65.5 68.69,-65.5 77.1,-62.18 80.23,-57.46"/>
<polygon fill="midnightblue" stroke="midnightblue" points="83.71,-56.98 79.75,-47.16 76.72,-57.31 83.71,-56.98"/>
</g>
<!-- Node2 -->
<g id="node2" class="node">
<title>Node2</title>
<g id="a_node2"><a xlink:href="../../db/d40/integral__approximation2_8cpp.html#a71249ee535f16f8ed2e9cc8f0199a2cf" target="_top" xlink:title="short&#45;hand for std::functions used in this implementation">
<polygon fill="white" stroke="black" points="146,-39 146,-69 251,-69 251,-39 146,-39"/>
<text text-anchor="start" x="154" y="-57" font-family="Helvetica,sans-Serif" font-size="10.00">math::monte_carlo::</text>
<text text-anchor="middle" x="198.5" y="-46" font-family="Helvetica,sans-Serif" font-size="10.00">generate_samples</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge1" class="edge">
<title>Node1&#45;&gt;Node2</title>
<path fill="none" stroke="midnightblue" d="M110.3,-40.44C118.71,-41.75 127.44,-43.11 135.98,-44.44"/>
<polygon fill="midnightblue" stroke="midnightblue" points="135.48,-47.9 145.9,-45.98 136.56,-40.98 135.48,-47.9"/>
</g>
<!-- Node6 -->
<g id="node6" class="node">
<title>Node6</title>
<g id="a_node6"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/container/vector/size.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="155.5,-0.5 155.5,-19.5 241.5,-19.5 241.5,-0.5 155.5,-0.5"/>
<text text-anchor="middle" x="198.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::vector::size</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node6 -->
<g id="edge7" class="edge">
<title>Node1&#45;&gt;Node6</title>
<path fill="none" stroke="midnightblue" d="M110.3,-23.56C121.76,-21.78 133.83,-19.9 145.21,-18.13"/>
<polygon fill="midnightblue" stroke="midnightblue" points="146.08,-21.54 155.43,-16.54 145.01,-14.62 146.08,-21.54"/>
</g>
<!-- Node2&#45;&gt;Node2 -->
<g id="edge2" class="edge">
<title>Node2&#45;&gt;Node2</title>
<path fill="none" stroke="midnightblue" d="M173.75,-69.16C167.79,-78.56 176.04,-87.5 198.5,-87.5 212.19,-87.5 220.6,-84.18 223.73,-79.46"/>
<polygon fill="midnightblue" stroke="midnightblue" points="227.21,-78.98 223.25,-69.16 220.22,-79.31 227.21,-78.98"/>
</g>
<!-- Node3 -->
<g id="node3" class="node">
<title>Node3</title>
<g id="a_node3"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/algorithm/min.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="319.5,-82.5 319.5,-101.5 371.5,-101.5 371.5,-82.5 319.5,-82.5"/>
<text text-anchor="middle" x="345.5" y="-89.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::min</text>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node3 -->
<g id="edge3" class="edge">
<title>Node2&#45;&gt;Node3</title>
<path fill="none" stroke="midnightblue" d="M251.03,-67.5C270.35,-72.57 291.85,-78.2 309.36,-82.79"/>
<polygon fill="midnightblue" stroke="midnightblue" points="308.59,-86.21 319.15,-85.36 310.37,-79.44 308.59,-86.21"/>
</g>
<!-- Node4 -->
<g id="node4" class="node">
<title>Node4</title>
<g id="a_node4"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/container/vector/push_back.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="287,-44.5 287,-63.5 404,-63.5 404,-44.5 287,-44.5"/>
<text text-anchor="middle" x="345.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::vector::push_back</text>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node4 -->
<g id="edge4" class="edge">
<title>Node2&#45;&gt;Node4</title>
<path fill="none" stroke="midnightblue" d="M251.03,-54C259.34,-54 268.05,-54 276.67,-54"/>
<polygon fill="midnightblue" stroke="midnightblue" points="276.72,-57.5 286.72,-54 276.72,-50.5 276.72,-57.5"/>
</g>
<!-- Node5 -->
<g id="node5" class="node">
<title>Node5</title>
<g id="a_node5"><a target="_blank" xlink:href="http://en.cppreference.com/w/cpp/container/vector/reserve.html#" xlink:title=" ">
<polygon fill="white" stroke="black" points="294.5,-6.5 294.5,-25.5 396.5,-25.5 396.5,-6.5 294.5,-6.5"/>
<text text-anchor="middle" x="345.5" y="-13.5" font-family="Helvetica,sans-Serif" font-size="10.00">std::vector::reserve</text>
</a>
</g>
</g>
<!-- Node2&#45;&gt;Node5 -->
<g id="edge5" class="edge">
<title>Node2&#45;&gt;Node5</title>
<path fill="none" stroke="midnightblue" d="M251.03,-40.5C266.37,-36.47 283.09,-32.09 298.09,-28.16"/>
<polygon fill="midnightblue" stroke="midnightblue" points="299.37,-31.45 308.16,-25.52 297.6,-24.67 299.37,-31.45"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB