File: anrs01.f

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (105 lines) | stat: -rw-r--r-- 3,506 bytes parent folder | download | duplicates (3)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
      SUBROUTINE ANRS01(R,IR,M,B,X,IND,IO)
C
C***********************************************************************
C                                                                      *
C                                                                      *
C     ORIGEN:           Eduardo Casas Renteria                         *
C                       Cecilia Pola Mendez                            *
C                                                                      *
C       Departamento de Matematicas,Estadistica y Computacion          *
C       -----------------------------------------------------          *
C                     UNIVERSIDAD DE CANTABRIA                         *
C                     ------------------------                         *
C                          FEBRERO 1987                                *
C                                                                      *
C***********************************************************************
C
C     OBJETIVO:
C        Esta subrutina resuelve un sistema de ecuaciones lineales en el
C        que la matriz de coeficientes es triangular.
C
C     LISTA DE LLAMADA:
C     DE ENTRADA:
C
C        R      Matriz de dimension (IR,M),triangular superior.Contiene
C               en sus M primeras filas a la matriz de coeficientes del
C               sistema.La parte subdiagonal de R no es utilizada.
C
C        IR     Primera dimension de la matriz R. IR >= N.
C
C        M      Numero de filas y columnas de la matriz de coeficientes.
C
C        B      Vector M-dimensional.Guarda los terminos independientes
C               del sistema.
C
C        IND    Indica el tipo de sistema a resolver,con los valores:
C                  1  : Se resuelve R'x=b
C                  2  : Se resuelve Rx=b
C
C        IO     Numero de canal de salida de resultados.
C
C     DE SALIDA:
C
C        X      Vector m-dimensional en el que se recoge  la solucion
C               del sistema.
C
C        Esta subrutina trabaja en doble precision via una sentencia
C     "implicit":
C                Implicit double precision (a-h,o-z)
C
C     SUBPROGRAMAS AUXILIARES: ddot,dlamch
C     FUNCIONES FORTRAN INTRINSECAS: abs,mod
C
C
      implicit double precision(a-h,o-z)
      dimension r(ir,*),b(*),x(*)
CXC
CXC     Se comprueba si los valores de las variables son correctos
CXC
CX      if(m.lt.1 .or. ir.lt.1 .or. m.gt.ir .or. ind.lt.1 .or. ind.gt.2)
CX     &   then
CX         write(io,1000) 'INCORRECT LIST OF CALLING IN ANRS01.'
CX         stop
CX      end if
CXC
CXC     Se calcula un parametro para detectar la posible singularidad de
CXC     la matriz de coeficientes
CXC
CX      epsmch=dlamch('p')**0.9
C
C     Se comienza la resolucion del sistema segun sea el indicador
C
      if(ind.eq.1) then
         j=1
      else
         j=m
      end if
CX      if(abs(r(j,j)).lt.epsmch) then
CX         write(io,1000) 'SINGULAR MATRIX IN ANRS01.'
CX         stop
CX      end if
      x(j)=b(j)/r(j,j)
      if(m.eq.1) return
      do 10 i=2,m
         i1=i-1
         if(ind.eq.1) then
            j=i
            j1=1
            j2=i
            j3=1
            k=1
         else
            j=m-i1
            j1=j
            j2=j+1
            j3=j2
            k=ir
         end if
CX         if(abs(r(j,j)).lt.epsmch) then
CX            write(io,1000) 'SINGULAR MATRIX IN ANRS01.'
CX            stop
CX         end if
         x(j)=(b(j)-ddot(i1,r(j1,j2),k,x(j3),1))/r(j,j)
10    continue
1000  format(10x,A)
      end