1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
{ ******************************************************************
Polynomials and rational fractions
****************************************************************** }
unit upolynom;
interface
uses
utypes;
function Poly(X : Float; Coef : PVector; Deg : Integer) : Float;
{ ------------------------------------------------------------------
Evaluates the polynomial :
P(X) = Coef[0] + Coef[1] * X + Coef[2] * X^2 + ...
+ Coef[Deg] * X^Deg
------------------------------------------------------------------ }
function RFrac(X : Float; Coef : PVector; Deg1, Deg2 : Integer) : Float;
{ ------------------------------------------------------------------
Evaluates the rational fraction :
Coef[0] + Coef[1] * X + ... + Coef[Deg1] * X^Deg1
F(X) = -----------------------------------------------------
1 + Coef[Deg1+1] * X + ... + Coef[Deg1+Deg2] * X^Deg2
------------------------------------------------------------------ }
implementation
function Poly(X : Float; Coef : PVector; Deg : Integer) : Float;
var
I : Integer;
P : Float;
begin
P := Coef^[Deg];
for I := Pred(Deg) downto 0 do
P := P * X + Coef^[I];
Poly := P;
end;
function RFrac(X : Float; Coef : PVector; Deg1, Deg2 : Integer) : Float;
var
I : Integer;
P, Q : Float;
begin
P := Coef^[Deg1];
for I := Pred(Deg1) downto 0 do
P := P * X + Coef^[I];
Q := 0.0;
for I := (Deg1 + Deg2) downto Succ(Deg1) do
Q := (Q + Coef^[I]) * X;
RFrac := P / (1.0 + Q);
end;
end.
|