<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juanroalvarado</title>
    <description>The latest articles on DEV Community by Juanroalvarado (@juanroalvarado).</description>
    <link>https://dev.to/juanroalvarado</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F71744%2F6b32c24c-fbce-4476-b333-b6a4c16c5314.png</url>
      <title>DEV Community: Juanroalvarado</title>
      <link>https://dev.to/juanroalvarado</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juanroalvarado"/>
    <language>en</language>
    <item>
      <title>Functional approach to Trapezoidal rule Integration</title>
      <dc:creator>Juanroalvarado</dc:creator>
      <pubDate>Mon, 21 May 2018 00:52:19 +0000</pubDate>
      <link>https://dev.to/juanroalvarado/functional-approach-to-trapezoidal-rule-integration-m68</link>
      <guid>https://dev.to/juanroalvarado/functional-approach-to-trapezoidal-rule-integration-m68</guid>
      <description>&lt;h2&gt;
  
  
  What are Numerical Methods:
&lt;/h2&gt;

&lt;p&gt;No matter how powerful we make out computers to be, they are limited. Their limits prevent us from directly evaluating mathematical equations, this is where numerical methods come into play. We defined numerical methods as mathematical models which approximate solutions to more complex equations using a computer’s inherent problem-solving methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating using the trapezoidal rule:
&lt;/h2&gt;

&lt;p&gt;Wikipedia describes an integral as “assigning numbers to functions in a way that can describe displacement, area, volume, and other concepts that arise by combining infinitesimal data.”&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwikimedia.org%2Fapi%2Frest_v1%2Fmedia%2Fmath%2Frender%2Fsvg%2Fac02adeed584466d53dee65f3228ad66939eb58b" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwikimedia.org%2Fapi%2Frest_v1%2Fmedia%2Fmath%2Frender%2Fsvg%2Fac02adeed584466d53dee65f3228ad66939eb58b" alt="Integral"&gt;&lt;/a&gt;&lt;br&gt;
They are one of the fundamental concepts introduced in calculus and are used commonly throughout the engineering and scientific world.&lt;/p&gt;

&lt;p&gt;The trapezoidal rule is a way of approximating a definite integral by creating trapezoid partitions through the function. Taking the cumulative area of the partitions which give us the approximate integral.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.stack.imgur.com%2FdaZ4D.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.stack.imgur.com%2FdaZ4D.png" alt="Trapezoidal rule"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Functional approach to Numerical Methods:
&lt;/h2&gt;

&lt;p&gt;To compute the following method we are going to use the functional programming language Haskell.&lt;br&gt;
You can find the source to the following code &lt;a href="https://github.com/Juanroalvarado/Integratehaskell" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First of all we will define the function we are integrating.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight haskell"&gt;&lt;code&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For our example we will be integrating the sin function from 0 to pi.&lt;/p&gt;

&lt;p&gt;Now we begin defining our method.&lt;/p&gt;

&lt;p&gt;Since Haskell is a lazy language we must first define our function integrate's parameters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight haskell"&gt;&lt;code&gt;&lt;span class="n"&gt;integrate&lt;/span&gt; &lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;Float&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Float&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Float&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Float&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Float&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Float&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The function will take :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;an initial value&lt;/li&gt;
&lt;li&gt;the number of iterations or partitions needed&lt;/li&gt;
&lt;li&gt;the lower limit&lt;/li&gt;
&lt;li&gt;lower limit plus delta&lt;/li&gt;
&lt;li&gt;the upper limit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Since Haskell is a functional language we will recursively compute each of the trapezoidal partitions.&lt;/p&gt;

&lt;p&gt;We must first add a way for the function to know when to compute our final value, this happens by multiplying the complete summation by a delta. Stopping our recursion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight haskell"&gt;&lt;code&gt;&lt;span class="n"&gt;integrate&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="n"&gt;newlim0&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt; 
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;newlim0&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;lim1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lim0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We check the "newlim0" which will be equal to the initial limit plus the delta, stopping recursion when we get to the upper limit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight haskell"&gt;&lt;code&gt;&lt;span class="n"&gt;integrate&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="n"&gt;newlim0&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt; 
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;newlim0&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;integrate&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newlim0&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt;
    &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;lim1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lim0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We follow up with doing the first sum, in which if we look at the formula we are calculating the trapezoid's area. Adding it when our initial value is 0.&lt;br&gt;
Recursively calling integrate with out new value and our new limit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight haskell"&gt;&lt;code&gt;&lt;span class="n"&gt;integrate&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="n"&gt;newlim0&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt; 
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;newlim0&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;integrate&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newlim0&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;otherwise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;integrate&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="n"&gt;newlim0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="n"&gt;lim0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newlim0&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;lim1&lt;/span&gt;
    &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;lim1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lim0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally in any other case we will compute the summation by adding the evaluated function with our newlim0.&lt;/p&gt;

&lt;p&gt;Our completed compact code can be found on my GitHub.&lt;br&gt;
&lt;a href="https://github.com/Juanroalvarado/Integratehaskell" rel="noopener noreferrer"&gt;https://github.com/Juanroalvarado/Integratehaskell&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Where do we use integrals?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2F9%2F9f%2FIntegral_example.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2F9%2F9f%2FIntegral_example.svg" alt="Integral visual"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Integrals can be seen everywhere! Specially when dealing with physics!&lt;/p&gt;

&lt;p&gt;For example, lets say we have a water tank in our town. We want to know if it will be capable of providing enough water for the town for a week.&lt;/p&gt;

&lt;p&gt;Calculating the integral for the tank's area will give us the volume. And now we are able to know how much water it can hold and will be able to provide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Usually we won't be able to calculate the integral of an exact function. Or compute a method exactly, using a numerical method to approach a value will be a more efficient and quick way of getting to that value.&lt;/p&gt;

&lt;p&gt;A functional programming approach to numerical methods provides an intuitive way to calculate complex equations without the hassle of conventional programming methods.&lt;/p&gt;

&lt;h4&gt;
  
  
  references:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Trapezoidal_rule" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Trapezoidal_rule&lt;/a&gt;&lt;br&gt;
&lt;a href="http://learnyouahaskell.com/introduction" rel="noopener noreferrer"&gt;http://learnyouahaskell.com/introduction&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Numerical_method" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Numerical_method&lt;/a&gt;&lt;/p&gt;

</description>
      <category>numericalmethod</category>
      <category>haskell</category>
      <category>functionalprog</category>
    </item>
  </channel>
</rss>
