Numerical integration: Difference between revisions

Content added Content deleted
m (→‎{{header|BASIC}}: corrected the error)
(added FreeBasic example)
Line 1,667: Line 1,667:
end module FunctionHolder</lang>
end module FunctionHolder</lang>
=={{header|FreeBASIC}}==
<lang freebasic>' version 17-09-2015
' compile with: fbc -s console

#Define screen_width 1024
#Define screen_height 256
ScreenRes screen_width, screen_height, 8
Width screen_width\8, screen_height\16

Function f1(x As Double) As Double
Return x^3
End Function

Function f2(x As Double) As Double
Return 1/x
End Function

Function f3(x As Double) As Double
Return x
End Function

Function leftrect(a As Double, b As Double, n As Double, _
ByVal f As Function (ByVal As Double) As Double) As Double

Dim As Double sum, x = a, h = (b - a) / n

For i As UInteger = 1 To n
sum = sum + h * f(x)
x = x + h
Next

leftrect = sum
End Function

Function rightrect(a As Double, b As Double, n As Double, _
ByVal f As Function (ByVal As Double) As Double) As Double

Dim As Double sum, x = a, h = (b - a) / n

For i As UInteger = 1 To n
x = x + h
sum = sum + h * f(x)
Next

rightrect = sum
End Function

Function midrect(a As Double, b As Double, n As Double, _
ByVal f As Function (ByVal As Double) As Double) As Double

Dim As Double sum, h = (b - a) / n, x = a + h / 2

For i As UInteger = 1 To n
sum = sum + h * f(x)
x = x + h
Next

midrect = sum
End Function

Function trap(a As Double, b As Double, n As Double, _
ByVal f As Function (ByVal As Double) As Double) As Double

Dim As Double x = a, h = (b - a) / n
Dim As Double sum = h * (f(a) + f(b)) / 2

For i As UInteger = 1 To n -1
x = x + h
sum = sum + h * f(x)
Next

trap = sum
End Function

Function simpson(a As Double, b As Double, n As Double, _
ByVal f As Function (ByVal As Double) As Double) As Double

Dim As UInteger i
Dim As Double sum1, sum2
Dim As Double h = (b - a) / n

For i = 0 To n -1
sum1 = sum1 + f(a + h * i + h / 2)
Next i

For i = 1 To n -1
sum2 = sum2 + f(a + h * i)
Next i

simpson = h / 6 * (f(a) + f(b) + 4 * sum1 + 2 * sum2)
End Function

' ------=< main >=------

Dim As Double y
Dim As String frmt = " ##.##########"

Print
Print "function range steps leftrect midrect " + _
"rightrect trap simpson "

Print "f(x) = x^3 0 - 1 100";
Print Using frmt; leftrect(0, 1, 100, @f1); midrect(0, 1, 100, @f1); _
rightrect(0, 1, 100, @f1); trap(0, 1, 100, @f1); simpson(0, 1, 100, @f1)

Print "f(x) = 1/x 1 - 100 1000";
Print Using frmt; leftrect(1, 100, 1000, @f2); midrect(1, 100, 1000, @f2); _
rightrect(1, 100, 1000, @f2); trap(1, 100, 1000, @f2); _
simpson(1, 100, 1000, @f2)

frmt = " #########.###"
Print "f(x) = x 0 - 5000 5000000";
Print Using frmt; leftrect(0, 5000, 5000000, @f3); midrect(0, 5000, 5000000, @f3); _
rightrect(0, 5000, 5000000, @f3); trap(0, 5000, 5000000, @f3); _
simpson(0, 5000, 5000000, @f3)

Print "f(x) = x 0 - 6000 6000000";
Print Using frmt; leftrect(0, 6000, 6000000, @f3); midrect(0, 6000, 6000000, @f3); _
rightrect(0, 6000, 6000000, @f3); trap(0, 6000, 6000000, @f3); _
simpson(0, 6000, 6000000, @f3)

' empty keyboard buffer
While InKey <> "" : Var _key_ = InKey : Wend
Print : Print "hit any key to end program"
Sleep
End</lang>
{{out}}
<pre>function range steps leftrect midrect rightrect trap simpson
f(x) = x^3 0 - 1 100 0.2450250000 0.2499875000 0.2550250000 0.2500250000 0.2500000000
f(x) = 1/x 1 - 100 1000 4.6549910575 4.6047625487 4.5569810575 4.6059860575 4.6051703850
f(x) = x 0 - 5000 5000000 12499997.501 12500000.001 12500002.501 12500000.001 12500000.000
f(x) = x 0 - 6000 6000000 17999997.001 18000000.001 18000003.001 18000000.001 18000000.000</pre>

=={{header|Go}}==
=={{header|Go}}==
<lang go>package main
<lang go>package main