Задача 8. Собственное число

Найти наибольшее собственное число заданной квадратной матрицы. { Решение задачи 8 на языке PASCAL }

CONST N=3;

TYPE TVector=ARRAY[ 1..N] OF Real;

TMatrix=ARRAY[1..N] OF TVector; CONST      a : TMatrix = ((11,-6,2),(-6,10,-4),(2,-4,6));

BEGIN Iteration:=0; L:=0; REPEAT

Inc(Iteration); L0:=L; L:=0; FOR i:= 1 TO N DO BEGIN s:=0;

FOR j:=1 TO N DO s:=s+a[i,j]*x[j];

IF Abs(s)>Abs(L) THEN L:=s; y[i]:=s;

END;

FOR i:=1 TO N DO x[i]:=y[i]/L; UNTIL (Iteration=Limit)OR(Abs(1-L0/L)<Error); WriteLn('Нaибoльшee собственное значение матрицы='^,#10,#13,

'Достигнута относительная погрешность ',Abs(1-L0/L):7,

' за ',Iteration:3,' итераций',#10,#13,

'Соответствующий собственный вектор :'); FOR i:=1 TO N DO WriteLn(' x[',i:2,']=',x[i]);

END.

// Решение задачи 8 на языке C

#include<stdio.h>

#include<math.h>

#define N 3

void main(void){

double a[][N]={11,-6,2,-6,10,-4,2,-4,6}, x[]={1,1,1},

Error=1E-10,L=0,L0,s,y[N];

int Limit=100,Iteration=0,i,j;

do{

for(L0=L,L=0,i=0;i<N;i++)

for(s=O,j=O;j<N;j++){s+=a[i]Lj]*x[j];if(fabs(s)>fabs(L))L=s;y[i]=s;}

x : TVector = (1,1,1); Error     = 1E-10;

Limit    = 100;

VAR Iteration

L,L0,s

Word;

Real;

Byte;

TVector;

y

for(i=O;i<N;i++)x[i]=y[i]/L;}

while(++Iteration<Limit&&fabs(1-L0/L)>=Error); printf("\nИaибoльшее собственное значение мaтрицы=%g\n"

"Достигнута относительная погрешность %g за %d итерaций\n"

"Соответствующий собственный вектор :\n",L,fabs(1-L0/L),Iteration); for(i=0;i<N;i++)printf("\tx[%2d]=%g\n",i+1,x[i]);}

C Решение задачи 8 на языке FORTRAN

PARAMETER(N=3)

REAL*8 a(N,N)/11,-6,2,-6,10,-4,2,-4,6/,x(N)/1,1,1/,Error/1E-10/, & L/0/,L0,s,y(N)

INTEGER Limit/100/

Iteration=0

1 Iteration=Iteration+1

L0=L L=0

DO 2 i=1,N s=0

DO 3 j=1,N

3 s=s+a(i,j)*x(j)

IF(ABS(s).GT.ABS(L))L=s

2 y(i)=s

x=y/L

IF(Iteration.LT.Limit.AND.ABS(1-L0/L).GE.Error)GOTO 1

PRINT 998,L,ABS(1-L0/L),Iteration

998 0FORMAT(' Иаибольшее собственное значение матрицы=^8.2/

1 ' Достигнута относительная погрешность 'G7.1' за 'I3

2 ' итераций'/' Соответствующий собственный вектор :') PRINT 999,(i,x(i),i=1,N)

999 FORMAT(' x['I2']='G10.2) END