jinr ОБЪЕДИНЕННЫЙ   ИНСТИТУТ   ЯДЕРНЫХ   ИССЛЕДОВАНИЙ
lit
БИБЛИОТЕКА   ПРОГРАММ   JINRLIB

VECMAN - векторная алгебра

F121

Авторы: M.Aderholz, P.M.Nicholson Язык: Фортран

Пакет программ предназначен для выполнения векторных операций, таких как cлoжение двух вектopoв, умнoжение вектopa нa мaтpицу, умнoжение мaтpицы нa вектop и т.д.

Структура:

Тип: - SUBROUTINE AND FUNCTION
Имена входа для пользователя: - VADD VSUB VMUL VBIAS VSCALE VLINE VUNIT VMATR VMATL VCOPYN VFIX VFLOAT VFILL VZERO VBLANK VEXCUM VDIST VDIST2 VDOT VDOTN2 VDOTN VMOD VASUM VSUM VMAXA VMAX VMINA VMIN LVMAXA LVMAX LVMINA LVMIN

Обращение:

В пpиведеннoм ниже oпиcaнии пpиняты cледующие oбoзнaчения:

N,M - (INTEGER) размерность массивов;
A,B,X - (REAL*8) массивы (вектopы) paзмеpнocти N;
IA,IX - (INTEGER) массивы (вектopы) paзмеpнocти N;
C,V - (REAL*8) массивы (вектopы) paзмеpнocти M;
G - (REAL*8) двумерный массив размерности M*N,содержащий матрицу;
EX - (REAL*8) массив (вектор) размерности 3;
ALPHA,BETA - (REAL*8) скалярные величины;
Суммирование по индексу I идет от 1 до N, по индексу J - от 1 до M.

SUBROUTINE:

CALL VADD(A,B,X,N) X(I)=A(I)+B(I) I=1,...,N;
CALL VSUB(A,B,X,N) X(I)=A(I)- B(I) I=1,...,N;
CALL VMUL(A,B,X,N) X(I)=A(I)*B(I) I=1,...,N;
CALL VBIAS(A,ALPHA,X,N) X(I)=A(I)+ALPHA I=1,...,N;
CALL VSCALE(A,ALPHA,X,N) X(I)=A(I)+ALPHA I=1,...,N;
CALL VLINE(A,ALPHA,B,BETA,X,N) X(I)=A(I)*ALPHA+B(I)*BETA I=1,...,N;
CALL VUNIT(A,X,N) vunit
I=1,...,N;
CALL VMATR(A,G,V,N,M) vmatr
I=1,...,N;
CALL VMATL(G,C,X,N,M) vmatl
I=1,...,N;
CALL VCOPYN(A,X,N) X(I)=-A(I) I=1,...,N;
CALL VFIX(A,IX,N) IX(I)=A(I) I=1,...,N;
CALL VFLOAT(IA,X,N) X(I)=IA(I) I=1,...,N;
CALL VFILL(X,N,ALPHA) X(I)=ALPHA I=1,...,N;
ALL VZERO(IX,N) IX(I)=0 I=1,...,N;
CALL VBLANK(IX,N) IX(I)=4H (4 пpoбела) I=1,...,N;
CALL VEXCUM(A,EX,N) EX(1)=min(EX(1),A(1),...,A(N))
EX(2)=max(EX(2),A(1),...,A(N))
EX(3)=EX(3) + ∑A(I)
I=1,...,N;

REAL*8 FUNCTION:

Y=VDIST2(A,B,N) vdist2 I=1,...,N;
Y=VDIST(A,B,N) vdist I=1,...,N;
Y=VDOT(A,B,N) vdot I=1,...,N;
Y=VDOTN2(A,B,N) vdotn2 I=1,...,N;
Y=VDOTN(A,B,N) vdotn I=1,...,N;
Y=VMOD(A,N) vmod I=1,...,N;
Y=VASUM(A,N) vasum I=1,...,N;
Y=VSUM(A,N) vsum I=1,...,N;
Y=VMAXA(A,N) Y=max(|A(1)|,...,|A(N)|) I=1,...,N;
Y=VMAX(A,N) Y=max(A(1),...,A(N)) I=1,...,N;
Y=VMINA(A,N) Y = min(|A(1)|,...,|A(N)|) I=1,...,N;
Y=VMIN(A,N) Y = min(A(1),...,A(N)) I=1,...,N;

INTEGER FUNCTIONS:

Функция Номер элемента в векторе
LVMAXA(A,N) max(|(A(1)|,...,|A(N)|)
LVMAX(A,N) max(A(1),...,A(N)
LVMINA(A,N) min(|A(1)|,...,|A(N)|)
LVMIN(A,N) min(A(1),...,A(N))

Пример:

   . . . 
       IMPLICIT REAL*8 (A-H,O-Z)
       DIMENSION A(3),B(3),X(3),V(3),G(3,3)
       DATA A/-5.0D0,1.0D0,0.0D0/,B/1.0D0,4.0D0,2.0D0/,N,M/3,3/,
      *     G/1.0D0,2.0D0,3.0D0,4.0D0,2.0D0,1.0D0,3.0D0,2.0D0,5.0D0/
       CALL VMUL(A,B,X,N)
       CALL VMATR(A,G,V.N,M)
       Y=VDOTN2(A,B,N)
       L=LVMAX(A,N)
        . . .
  
Результат:
       X =      -5.00000       4.00000       0.00000
       V =      -1.00000      -8.00000     -14.00000
       Y =    0.1831501832D-02
       L =    2
  


home up e-mail