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 |