tmainD.cpp.html - numeric - C++ library with numerical algorithms
 (HTM) git clone git://src.adamsgaard.dk/numeric
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       tmainD.cpp.html (9468B)
       ---
            1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
            2 <html>
            3 <head>
            4 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
            5 <title>~/code/numeric/exam/mainD.cpp.html</title>
            6 <meta name="Generator" content="Vim/7.4">
            7 <meta name="plugin-version" content="vim7.4_v1">
            8 <meta name="syntax" content="cpp">
            9 <meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
           10 <meta name="colorscheme" content="desert">
           11 <style type="text/css">
           12 <!--
           13 pre { white-space: pre-wrap; font-family: monospace; color: #ffffff; background-color: #000000; }
           14 body { font-family: monospace; color: #ffffff; background-color: #000000; }
           15 * { font-size: 1em; }
           16 .Type { color: #008000; }
           17 .Statement { color: #804000; }
           18 .LineNr { color: #804000; }
           19 .PreProc { color: #c000c0; }
           20 .Constant { color: #af5f00; }
           21 .Special { color: #c000c0; }
           22 .Comment { color: #008080; }
           23 -->
           24 </style>
           25 
           26 <script type='text/javascript'>
           27 <!--
           28 
           29 /* function to open any folds containing a jumped-to line before jumping to it */
           30 function JumpToLine()
           31 {
           32   var lineNum;
           33   lineNum = window.location.hash;
           34   lineNum = lineNum.substr(1); /* strip off '#' */
           35 
           36   if (lineNum.indexOf('L') == -1) {
           37     lineNum = 'L'+lineNum;
           38   }
           39   lineElem = document.getElementById(lineNum);
           40   /* Always jump to new location even if the line was hidden inside a fold, or
           41    * we corrected the raw number to a line ID.
           42    */
           43   if (lineElem) {
           44     lineElem.scrollIntoView(true);
           45   }
           46   return true;
           47 }
           48 if ('onhashchange' in window) {
           49   window.onhashchange = JumpToLine;
           50 }
           51 
           52 -->
           53 </script>
           54 </head>
           55 <body onload='JumpToLine();'>
           56 <pre id='vimCodeElement'>
           57 <span id="L1" class="LineNr"> 1 </span><span class="PreProc">#include </span><span class="Constant">&lt;iostream&gt;</span>
           58 <span id="L2" class="LineNr"> 2 </span><span class="PreProc">#include </span><span class="Constant">&lt;vector&gt;</span>
           59 <span id="L3" class="LineNr"> 3 </span><span class="PreProc">#include </span><span class="Constant">&lt;complex&gt;</span>
           60 <span id="L4" class="LineNr"> 4 </span><span class="PreProc">#include </span><span class="Constant">&lt;cmath&gt;</span>
           61 <span id="L5" class="LineNr"> 5 </span><span class="PreProc">#include </span><span class="Constant">&lt;fstream&gt;</span>
           62 <span id="L6" class="LineNr"> 6 </span><span class="PreProc">#include </span><span class="Constant">&quot;typedefs.h&quot;</span>
           63 <span id="L7" class="LineNr"> 7 </span><span class="PreProc">#include </span><span class="Constant">&quot;check.h&quot;</span>
           64 <span id="L8" class="LineNr"> 8 </span><span class="PreProc">#include </span><span class="Constant">&quot;ode.h&quot;</span>
           65 <span id="L9" class="LineNr"> 9 </span><span class="PreProc">#include </span><span class="Constant">&quot;functions.h&quot;</span>
           66 <span id="L10" class="LineNr">10 </span>
           67 <span id="L11" class="LineNr">11 </span>
           68 <span id="L12" class="LineNr">12 </span><span class="Type">int</span> main()
           69 <span id="L13" class="LineNr">13 </span>{
           70 <span id="L14" class="LineNr">14 </span>  <span class="Comment">// Namespace declarations</span>
           71 <span id="L15" class="LineNr">15 </span>  <span class="Statement">using</span> std::cout;
           72 <span id="L16" class="LineNr">16 </span>  <span class="Statement">using</span> std::vector;
           73 <span id="L17" class="LineNr">17 </span>  <span class="Statement">using</span> std::<span class="Type">complex</span>;
           74 <span id="L18" class="LineNr">18 </span>
           75 <span id="L19" class="LineNr">19 </span>  <span class="Comment">// Calculate machine precision</span>
           76 <span id="L20" class="LineNr">20 </span>  Floattype eps_machine = <span class="Constant">1.0f</span>;
           77 <span id="L21" class="LineNr">21 </span>  <span class="Statement">while</span> (<span class="Constant">1.0f</span> + eps_machine != <span class="Constant">1.0f</span>)
           78 <span id="L22" class="LineNr">22 </span>    eps_machine /= <span class="Constant">2.0f</span>;
           79 <span id="L23" class="LineNr">23 </span>
           80 <span id="L24" class="LineNr">24 </span>  cout &lt;&lt; <span class="Constant">&quot;</span><span class="Special">\n\033</span><span class="Constant">[1;33m--- Part D: Precision analysis ---</span><span class="Special">\033</span><span class="Constant">[0m</span><span class="Special">\n</span><span class="Constant">&quot;</span>;
           81 <span id="L25" class="LineNr">25 </span>  <span class="Type">complex</span>&lt;Floattype&gt; a(<span class="Constant">0.0f</span>, <span class="Constant">0.0f</span>);     <span class="Comment">// Lower limit</span>
           82 <span id="L26" class="LineNr">26 </span>  <span class="Type">complex</span>&lt;Floattype&gt; b(<span class="Constant">2.0f</span>*<span class="Constant">M_PI</span>, <span class="Constant">2.0f</span>*<span class="Constant">M_PI</span>); <span class="Comment">// Upper limit</span>
           83 <span id="L27" class="LineNr">27 </span>  cout &lt;&lt; <span class="Constant">&quot;Integration path: b-a = &quot;</span> &lt;&lt; b-a &lt;&lt; <span class="Special">'\n'</span>;
           84 <span id="L28" class="LineNr">28 </span>  Inttype n_eqs = <span class="Constant">2</span>; <span class="Comment">// Number of equations in ODE system</span>
           85 <span id="L29" class="LineNr">29 </span>  vector&lt;<span class="Type">complex</span>&lt;Floattype&gt; &gt; y_start(n_eqs);
           86 <span id="L30" class="LineNr">30 </span>  <span class="Type">complex</span>&lt;Floattype&gt; y0(<span class="Constant">0.0f</span>, <span class="Constant">0.0f</span>);
           87 <span id="L31" class="LineNr">31 </span>  <span class="Type">complex</span>&lt;Floattype&gt; y1(<span class="Constant">1.0f</span>, <span class="Constant">1.0f</span>);
           88 <span id="L32" class="LineNr">32 </span>  y_start[<span class="Constant">0</span>] = y0;
           89 <span id="L33" class="LineNr">33 </span>  y_start[<span class="Constant">1</span>] = y1;
           90 <span id="L34" class="LineNr">34 </span>  Floattype h_start = <span class="Constant">0.01f</span>;
           91 <span id="L35" class="LineNr">35 </span>
           92 <span id="L36" class="LineNr">36 </span>  vector&lt;Floattype&gt; precs; <span class="Comment">// Vector containing precision values</span>
           93 <span id="L37" class="LineNr">37 </span>  vector&lt;Inttype&gt;   steps; <span class="Comment">// Vector containing number of steps required</span>
           94 <span id="L38" class="LineNr">38 </span>
           95 <span id="L39" class="LineNr">39 </span>  <span class="Statement">for</span> (Floattype prec=eps_machine*<span class="Constant">10.0f</span>; prec&lt;<span class="Constant">0.1f</span>; prec *= <span class="Constant">10.0f</span>) {
           96 <span id="L40" class="LineNr">40 </span>    ODE ode(func1,      <span class="Comment">// ODE system</span>
           97 <span id="L41" class="LineNr">41 </span>            y_start,    <span class="Comment">// Initial values</span>
           98 <span id="L42" class="LineNr">42 </span>            a,          <span class="Comment">// Lower limit</span>
           99 <span id="L43" class="LineNr">43 </span>            b,          <span class="Comment">// Upper limit</span>
          100 <span id="L44" class="LineNr">44 </span>            h_start,    <span class="Comment">// Start value of step size</span>
          101 <span id="L45" class="LineNr">45 </span>            <span class="Constant">100000</span>,     <span class="Comment">// Max. number of steps</span>
          102 <span id="L46" class="LineNr">46 </span>            prec,       <span class="Comment">// Absolute precision</span>
          103 <span id="L47" class="LineNr">47 </span>            prec);      <span class="Comment">// Relative precision</span>
          104 <span id="L48" class="LineNr">48 </span>    precs.push_back(prec);        <span class="Comment">// Save precision</span>
          105 <span id="L49" class="LineNr">49 </span>    steps.push_back(ode.steps()); <span class="Comment">// Save number of steps taken</span>
          106 <span id="L50" class="LineNr">50 </span>  }
          107 <span id="L51" class="LineNr">51 </span>
          108 <span id="L52" class="LineNr">52 </span>  <span class="Comment">// Save results to text file</span>
          109 <span id="L53" class="LineNr">53 </span>  std::ofstream ost; <span class="Comment">// Out stream object</span>
          110 <span id="L54" class="LineNr">54 </span>  ost.open(<span class="Constant">&quot;funcD.dat&quot;</span>); <span class="Comment">// Open outfile for write</span>
          111 <span id="L55" class="LineNr">55 </span>  <span class="Statement">if</span> (!ost) {
          112 <span id="L56" class="LineNr">56 </span>    std::cerr &lt;&lt; <span class="Constant">&quot;Error, can't open output file!</span><span class="Special">\n</span><span class="Constant">&quot;</span>;
          113 <span id="L57" class="LineNr">57 </span>    <span class="Statement">return</span> <span class="Constant">1</span>;
          114 <span id="L58" class="LineNr">58 </span>  }
          115 <span id="L59" class="LineNr">59 </span>  <span class="Comment">// Write output values</span>
          116 <span id="L60" class="LineNr">60 </span>  <span class="Statement">for</span> (Inttype i=<span class="Constant">0</span>; i&lt;precs.size(); ++i)
          117 <span id="L61" class="LineNr">61 </span>    ost &lt;&lt; precs[i] &lt;&lt; <span class="Special">'\t'</span> &lt;&lt; steps[i] &lt;&lt; <span class="Special">'\n'</span>;
          118 <span id="L62" class="LineNr">62 </span>
          119 <span id="L63" class="LineNr">63 </span>  <span class="Comment">// Close file</span>
          120 <span id="L64" class="LineNr">64 </span>  ost.close();
          121 <span id="L65" class="LineNr">65 </span>
          122 <span id="L66" class="LineNr">66 </span>  <span class="Comment">// Return successfully</span>
          123 <span id="L67" class="LineNr">67 </span>  <span class="Statement">return</span> <span class="Constant">0</span>;
          124 <span id="L68" class="LineNr">68 </span>}
          125 </pre>
          126 </body>
          127 </html>
          128 <!-- vim: set foldmethod=manual : -->