Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_ОМ2_edit.doc
Скачиваний:
13
Добавлен:
17.03.2016
Размер:
2.67 Mб
Скачать

Зразок виконання завдання

Завдання: 1) Методом простої ітерації розв’язати систему лінійних рівнянь з точністю до 0.001:

(7)

Розв’язання:

Перепишемо систему (7) в матричній формі:

Перевіримо достатню умову збіжності ітераційного процесу:

За нульові наближення коренів системи приймемо значення вільних членів:

, , ,.

Підставимо ці значення в праві частини рівнянь системи (7) й отримаємо для ,,,перші наближення. Й так далі.

Обчислення розташуємо у таблиці:

k

0

2.15

-0.83

1.16

0.44

1

2.9719

-1.0775

1.5093

-0.4326

2

2.3555

-1.0721

1.5075

-0.7317

3

3.5017

-1.0106

1.5015

-0.8111

4

3.5511

-0.9277

1.4944

-0.8321

5

3.5637

-0.9563

1.4834

-0.8298

6

3.5678

-0.9566

1.4890

-0.8332

7

3.5700

-0.9575

1.4889

-0.8356

8

3.5709

-0.9573

1.4890

-0.8362

Критерієм закінчення ітераційного процесу є виконання умови

Оскільки

то ітераційний процес зупиняється.

В якості розв’язку системи рівнянь беремо ,,,.

Відповідь: ,,,.

2) Використовуючи схему Гауса, розв’язати систему лінійних рівнянь, з точністю до 0.001:

Розв’язання:

Виключимо з другого та третього рівнянь системи. Для цього спочатку помножимо перше рівняння на 0.3 й результат додамо до другого. А потім помножимо перше рівняння на -0.5 й результат додамо до третього. Матимемо:

Продовжимо виключення невідомих. Помножимо друге рівняння на 25 й результат додамо до третього рівняння. Отримаємо систему у трикутному вигляді:

На цьому закінчується прямий хід Гауса.

Зворотній хід Гауса полягає у послідовному обчисленні ,тавідповідно з третього, другого та першого рівнянь:

Відповідь:

Приклади програм

// 1) Розв’язання системи лінійних рівнянь методом простої ітерації

#include <conio.h>

#include <iostream>

#include <cmath>

using namespace std;

void main()

{

float a[4][4]={{0.13, 0.23, -0.44, -0.05},

{0.24, 0,-0.31, 0.15},

{0.06, 0.15, 0, -0.23},

{0.72, -0.08, -0.05, 0}};

float f[4]={2.13, -0.18, 1.44, 2.42};

float n, j, x[4], x0[4];

int i, q, c;

cout<<"Rozvjazok SLAR metodom iteraciy"<<endl<<endl;

cout<<"Zadana systema:"<<endl<<endl;

for (i=0; i<4; i++)

{

cout<<"x"<<i+1<<"= "<<"("<<a[i][0]<<")"<<"x1+"<<"("<<a[i][1]<<")"<<"x2+"

<<"("<<a[i][2]<<")"<<"x3+"<<"("<<a[i][3]<<")"<<"x4;"<<endl;

}

n=-2;

for (i=0;i<=3;i++)

{

j=fabs(a[i][0])+fabs(a[i][1])+fabs(a[i][2])+fabs(a[i][3]);

if (n<j) n=j;

}

cout.precision(3);

cout<<endl<<"Norma A= "<<n<<endl;

if (n<1) cout<<"Metod zbizhnyj"<<endl<<endl;

else

{

cout<<"Metod rozzbizhnyj"<<endl;

getch();

exit(1);

}

for (i=0; i<=3; i++) x[i]=f[i];

c=1;

do{

q=0;

for (i=0; i<=3; i++)

{

x0[i]=x[i];

x[i]=a[i][0]*x[0]+a[i][1]*x[1]+a[i][2]*x[2]+a[i][3]*x[3]+f[i];

if (fabs(x0[i]-x[i])<0.001) q++;

}

c++;

}while (q!=4);

cout.precision(3);

cout<<"Rozvjazok sustemu:"<<endl;

for (i=0; i<=3; i++) cout<<"x"<<i+1<<"="<<x[i]<<endl;

cout.precision(0);

cout<<endl<<"i="<<c<<endl;

getch();

}

// 2) Розв’язання системи лінійних рівнянь методом Гауса

#include <iostream>

#include <conio.h>

#include <cmath>

using namespace std;

void vuvid(float v[100][100], int q)

{

for (int i=0; i<q; i++)

{

for (int j=0; j<=q; j++)

{

if (j==q) cout<<"|\t";

cout<<v[i][j]<<"\t";

}

cout<<"\n";

}

};

void vvod(float a[100][100], int q)

{

cout<<"Vvedit matrucjy koeficientiv\n";

for (int i=0; i<q; i++)

{

for (int j=0; j<q; j++)

{

cout<<"a["<<i+1<<"]["<<j+1<<"]=";

cin>>a[i][j];

}

}

cout<<"\n\nVvedit matrucjy vilnuh chleniv\n";

for (int i=0; i<q; i++)

{

int j;

j=q;

cout<<"b["<<i+1<<"]=";

cin>>a[i][j];

}

};

void tform(float v[100][100], int q)

{

float e;

for (int k=0; k<q; k++)

{

for (int i=1+k; i<q; i++)

{

e=v[i][k];

for (int j=0; j<=q; j++)

v[i][j]=v[i][j]-e/v[k][k]*v[k][j];

}

}

};

void xxx(float v[100][100], float x[100], int q)

{

float dx=0;

for (int i=0; i<100; i++)

x[i]=0;

for(int i=q-1; i>=0; i--)

{

dx=0;

for(int j=i; j<q; j++)

dx=dx+x[j]*v[i][j] ;

x[i]=(v[i][q]-dx)/v[i][i];

}

};

void main()

{

clrscr();

int q=3, p=0;

float a[100][100], x[100];

do {

cout<<"\n\n\tRozvjazok SLAR metodom Gaysa:\n\n";

cout<<"\n\t1) Obchuslutu zi standartnumu znachennjamu \n\n";

cout<<"\t2) Vvestu znachennja\n\n";

cout<<"\t3) Exit\n\n";

cout<<"Vash vubir (1, 2, 3)\t";

cin>>p;

if(p==3) exit(1);

if(p==2)

{

clrscr();

cout<<"\nVvedit kilkist rivnjan: ";

cin>>q;

if((q<1)||(q>=100))

{

cout<<"Zaveluka kilkist rivnjan";

getch();

exit(1);

}

else

{

cout<<"\n";

vvod(a, q);

cout<<"\n\tObjednana matrucja\n";

vuvid(a, q);

}

}

if (p==1)

{

clrscr();

q=3;

a[0][0]=3.6; a[0][1]=1.8; a[0][2]=-4.7;

a[1][0]=2.7; a[1][1]=-3.6; a[1][2]=1.9;

a[2][0]=1.5; a[2][1]=4.5; a[2][2]=3.3;

a[0][3]=3.8; a[1][3]=0.4; a[2][3]=-1.6;

cout<<"\n\tObjednana matrucja\n";

vuvid(a, q);

}

tform(a, q);

xxx(a, x, q) ;

cout<<"\n\n\tRozvjazok sustemu\n\n";

for (int i=0; i<q; i++)

cout<<"x"<<i+1<<"="<<x[i]<<"\n";

getch();

}while(p!=3);

getch();

}