105 lines
2.8 KiB
Ada
105 lines
2.8 KiB
Ada
with Ada.Text_IO, Ada.Integer_Text_IO;
|
|
with Integrate;
|
|
|
|
procedure Numerical_Integration is
|
|
type Scalar is digits 18;
|
|
package Scalar_Text_IO is new Ada.Text_IO.Float_IO (Scalar);
|
|
|
|
generic
|
|
with function F (X : Scalar) return Scalar;
|
|
Name : String;
|
|
From, To : Scalar;
|
|
Steps : Positive;
|
|
procedure Test;
|
|
|
|
procedure Test is
|
|
package Integrate_Scalar_F is new Integrate (Scalar, F);
|
|
use Ada.Text_IO, Ada.Integer_Text_IO, Integrate_Scalar_F, Scalar_Text_IO;
|
|
begin
|
|
Put (Name & " integrated from ");
|
|
Put (From);
|
|
Put (" to ");
|
|
Put (To);
|
|
Put (" in ");
|
|
Put (Steps);
|
|
Put_Line (" steps:");
|
|
|
|
Put ("Rectangular (left): ");
|
|
Put (Left_Rectangular (From, To, Steps));
|
|
New_Line;
|
|
|
|
Put ("Rectangular (right): ");
|
|
Put (Right_Rectangular (From, To, Steps));
|
|
New_Line;
|
|
|
|
Put ("Rectangular (midpoint): ");
|
|
Put (Midpoint_Rectangular (From, To, Steps));
|
|
New_Line;
|
|
|
|
Put ("Trapezium: ");
|
|
Put (Trapezium (From, To, Steps));
|
|
New_Line;
|
|
|
|
Put ("Simpson's: ");
|
|
Put (Simpsons (From, To, Steps));
|
|
New_Line;
|
|
|
|
New_Line;
|
|
end Test;
|
|
begin
|
|
Ada.Integer_Text_IO.Default_Width := 0;
|
|
Scalar_Text_IO.Default_Fore := 0;
|
|
Scalar_Text_IO.Default_Exp := 0;
|
|
|
|
Cubed:
|
|
declare
|
|
function F (X : Scalar) return Scalar is
|
|
begin
|
|
return X ** 3;
|
|
end F;
|
|
procedure Run is new Test (F => F,
|
|
Name => "x^3",
|
|
From => 0.0,
|
|
To => 1.0,
|
|
Steps => 100);
|
|
begin
|
|
Run;
|
|
end Cubed;
|
|
|
|
One_Over_X:
|
|
declare
|
|
function F (X : Scalar) return Scalar is
|
|
begin
|
|
return 1.0 / X;
|
|
end F;
|
|
procedure Run is new Test (F => F,
|
|
Name => "1/x",
|
|
From => 1.0,
|
|
To => 100.0,
|
|
Steps => 1_000);
|
|
begin
|
|
Run;
|
|
end One_Over_X;
|
|
|
|
X:
|
|
declare
|
|
function F (X : Scalar) return Scalar is
|
|
begin
|
|
return X;
|
|
end F;
|
|
procedure Run_1 is new Test (F => F,
|
|
Name => "x",
|
|
From => 0.0,
|
|
To => 5_000.0,
|
|
Steps => 5_000_000);
|
|
procedure Run_2 is new Test (F => F,
|
|
Name => "x",
|
|
From => 0.0,
|
|
To => 6_000.0,
|
|
Steps => 6_000_000);
|
|
begin
|
|
Run_1;
|
|
Run_2;
|
|
end X;
|
|
end Numerical_Integration;
|