Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Рома_Шелев_II

.pdf
Скачиваний:
8
Добавлен:
27.03.2015
Размер:
118.26 Кб
Скачать

 

L [

 

1

]

= GetA(

1

,

2

)

/

GetA(

1

,

1

)

 

;

 

 

 

 

 

 

 

 

 

M[

 

1

]

= B[

0

]

/

GetA(

1

,

1

 

)

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for

 

(

I = 2 ;

I

< N

;

I++

)

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L [

I

]

= GetA(

I

,

I

+ 1

 

)

/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

GetA(

I

,

I

1

)

L [

I

1

]

+

GetA(

I

,

I

)

)

;

 

 

 

 

 

M[

I

]

=

(

B[

I

1

]

M[

I

1

 

]

GetA(

I

,

I

1

)

)

 

}

;

 

/

(

GetA(

I

,

I 1

)

L [

I 1

]

 

+ GetA(

 

I

,

I

)

)

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X[

 

N 1

]

=

(

B[

N 1

]

M[

N 1

 

]

GetA(

N

,

N 1

)

)

 

/

(

 

L [

N 1

]

GetA(

N ,

N 1

)

+ GetA( N

,

N

)

)

;

 

 

 

 

for ( I = N 2 ; I >= 0 ; I )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X[ I ] = L [ I + 1 ] X[ I + 1 ] + M[ I + 1 ] ;

 

 

 

 

 

 

}

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void PrintX ( )

{

i n t

I

;

for

(

I

 

=

0

;

I

< N

;

I++

)

 

 

 

 

 

 

 

 

p r i n t f (

 

"

%1 6 . 1 4 l f \n"

, X[

I

]

)

 

;

p r i n t f (

 

"\n"

)

;

}

;

 

 

 

 

void PrintB ( )

{

i n t

I

;

for

(

I

 

=

0

;

I

< N

;

I++

)

 

 

 

 

 

 

 

 

p r i n t f (

 

"

%1 6 . 1 4 l f \n"

, B[

I

]

)

 

;

p r i n t f (

 

"\n"

)

;

}

;

 

 

 

 

i n t main ( )

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i n t

 

I

= 0

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CalcB (

B

) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CalcX ( )

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PrintX ( )

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return

0

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.4Метод простой итерации

#i n c l u d e <s t d i o . h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#i n c l u d e

<math . h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#i n c l u d e " Trapezy . c "

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#i n c l u d e

"GetA . c "

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#d e f i n e

N

20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#d e f i n e

Accuracy

0 .0 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

double Delta ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

double X[

N ] ; //

S o l u t i o n

o f

system

 

 

 

 

 

 

 

 

 

 

 

 

 

 

double B[ N ] ;

// I n t e g r a l array

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void CalcX ( ) {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

double NewX[

 

N ]

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i n t

I

, J ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NewX[ 0 ] =

(

B[

0

]

GetA(

1 ,

2

)

X[

1

]

) /

GetA(

1

,

1

)

;

NewX[

N 1

]

= B[

N 1

]

/

GetA(

N

,

N

)

;

 

 

 

 

 

 

 

 

for (

I = 1

;

I

< N 1

 

;

I++ )

{

 

 

 

 

 

X[

 

1

 

 

 

 

 

 

NewX[ I

]

=

(

B[

I

]

GetA(

I

+

1

,

I

)

I

]

 

 

 

 

} ;

GetA(

I

+

1

,

I +

 

2

)

X[

I

+

1

]

)

/

GetA(

I

+ 1

,

I

+

1

) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

Delta

= 0 .

;

 

 

 

 

 

 

 

for

(

I

= 0

;

I < N

;

I++ )

 

 

 

{

i f

(

f a b s (

X[

I

]

NewX[

I ]

) > Delta

)

Delta

 

= f a b s (

X[

I

]

NewX[

I

] ) ; X[ I

] = NewX[ I ] ; } ;

};

void PrintX ( )

{ i n t I

;

for ( I = 0 ;

I

< N

;

I++

)

p r i n t f (

"

%1 6 . 1 4 l f \n"

,

X[

I

] ) ;

p r i n t f ( "\n" ) ; } ;

i n t main ( )

{

 

 

 

 

 

i n t

I = 0 ;

 

 

 

 

 

CalcB ( B ) ;

do CalcX ( ) ; while ( Delta > 0.001 ) ; PrintX ( ) ;

return 0 ;

} ;

5.5вспомогательная программа GetA. c

#d e f i n e

N 20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#d e f i n e

Accuracy

0 .0 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/ Function

to

Get

needed

A array

value /

 

 

 

 

 

 

 

/ ==================================== /

 

 

 

 

 

 

 

double GetA

(

i n t

I

,

i n t

J ) {

 

 

 

 

 

 

 

 

 

 

 

 

 

double Res

;

 

( (

 

 

 

 

 

 

 

 

 

 

 

 

 

 

double Aver

=

double )

 

(

I

I

)

+

1 .

)

 

;

 

 

i f (

I == 1 && J == 1 ) Res =

0 . 5

;

//

F i r s t

 

A row

 

 

else

i f

(

I == 1 && J == 2

)

Res =

0.25 ; / /

 

F i r s t

A row

 

else

i f

(

I == N && J == N )

Res =

1 .

;

//

Last A row

 

else

i f

(

I == N && J == I 1

)

Res =

0.2

 

;

 

 

 

else i f (

I < N && J == I 1 )

 

 

 

 

 

 

 

 

 

 

Res = 1 . /

(

( (

double )

(

I

 

I

)

 

+

5 . )

 

)

;

 

 

else

i f

(

I < N && J == I )

 

Res =

1 .

 

;

 

 

 

 

 

 

else i f (

I < N && J == I + 1 )

(

 

 

 

 

 

 

 

I ) + 5 . ) ) ;

 

Res =

(

(

double )

I + 3 . )

 

/

(

(

 

double

 

)

( I

 

else Res =

0 .

;

 

 

 

 

 

 

 

 

 

 

 

 

 

} ;

return

Res

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.6Функции на Matlab для построения графиков

Построение значений системы и интеграла

xkm=load ( ’ integral20 . txt ’ ) ; plot (xkm ( : , 1 ) ,xkm ( : , 2 ) , ’ r ’ )

12

6Заключение

По результатам лабораторной работы можно сказать, что и метод прогонки, и метод минимальной невязки можно использовать для решения систем линейных уравнений. Преимуществом метода прогонки является простота реализации, но при этом для некоторых систем возможно накопление погрешности. Метод минимальной невязки обеспечивает быструю сходимость к решению системы с заданной точностью, но реализуется сложнее.

Список литературы

[1]Самарский А. А., Введение в численные методы. М.: Наука. 1982. 272с.

[2]Квадратурные формулы. Численное интегрирование /сос. В.В.Кулинич - Нижний Новгород, изд. ННГУ им.Н.И.Лобачевского, 2005 г. -24 с.

[3]Фаддеев Д. К., Фаддеева В. Н., Вычислительные методы линейной алгебры. М.-Л.: Физматгиз. 1960. 656 с.

13