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
|
PROCEDURE mtt_solve(VAR x : StateVector;
A : StateMatrix;
VAR B : StateVector;
n : integer;
Small : real);
{
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % $Id$
% % $Log$
% % Revision 1.1 1998/08/13 08:51:57 peterg
% % Initial revision
% %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}
VAR
i : integer;
wmax,wmin : real;
w : StateVector ;
v : StateMatrix;
(*$I svdcmp.p *)
(*$I svbksb.p *)
BEGIN{mtt_solve}
(* decompose matrix A using SVD *)
svdcmp(A,n,n,w,v);
(* find maximum singular value *)
wmax := 0.0;
FOR i := 1 to n DO BEGIN
IF (w[i] > wmax) THEN wmax := w[i]
END;
(* define "small" *)
wmin := wmax*Small;
(* zero the "small" singular values *)
FOR i := 1 to n DO BEGIN
IF (w[i] < wmin) THEN w[i] := 0.0
END;
(* backsubstitute for B *)
svbksb(A,w,v,n,n,B,x);
END{mtt_solve};
|
|
<
>
>
>
|
|
<
<
|
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
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
|
PROCEDURE mtt_solve(VAR x : StateVector;
A : StateMatrix;
VAR B : StateVector;
n : integer);
{
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % $Id$
% % $Log$
% % Revision 1.2 1998/08/14 12:09:13 peterg
% % A passed by value - its destroyed by SVDcm
% %
% % Revision 1.1 1998/08/13 08:51:57 peterg
% % Initial revision
% %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}
VAR
i : integer;
wmax,wmin : real;
w : StateVector ;
v : StateMatrix;
(*$I mtt_solve_lud.p *)
(* I mtt_solve_svd.p *)
BEGIN{mtt_solve}
mtt_solve_lud(xsub,AAsub,BB,Nx);
(*** mtt_solve_svd(xsub,AAsub,BB,Nx); ***)
END{mtt_solve};
|