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

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

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

#include <iostream>

#include <conio.h>

#include <cmath>

using namespace std;

void main()

{

int p=0;

float x, y, e, j, a, b, j11,j12,j21,j22,f1,f2;

do {

clrscr();

cout<<"\nZNAHODGENNJA KORENIV SUSTEMU NELINIJNUH RIVNJAN\nMETODOM NJUTONA:\n";

cout<<"\n\nF1(x,y)=sin(x+y)-1.3*x\n";

cout<<"\nF2(x,y)=x*x+y*y-1\n\n";

cout<<"\n\n1) Znajtu koreni zadanoi nelinijnoi sustemu\n\n\n";

cout<<"2) EXIT\n\n\n";

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

cin>>p;

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

if(p==1)

{

clrscr();

cout<<"\n\nVvedit pochatkovi nabluzhennja:\n";

cout<<"\n\nx=";

cin>>x;

cout<<"\n\ny=";

cin>>y;

cout<<"\n\nVvedit pohubky e=";

cin>>e;

do{

j11=cos(x+y)-1.3;

j12=cos(x+y);

j21=2*x;

j22=2*y;

j=j11*j22-j12*j21;

f1=sin(x+y)-1.3*x;

f2=x*x+y*y-1;

if(j==0)

{

cout<<"\n\nJakobian rivnjannja = 0";

getch();

exit(1);

}

a=x;

b=y;

x=a-(f1*j22-f2*j12)/j;

y=b+(f1*j21-f2*j11)/j;

}while((fabs(x-a)>e)&&(fabs(y-b)>e));

if((x<0)||(y<0))

cout<<"Nevirne pochankove nabluzhennja ";

else

{

cout<<"\n\nx="<<x;

cout<<"\n\ny="<<y; }

}

getch();

}while(p!=2);

getch();

}

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

#include <iostream>

#include <conio.h>

#include <cmath>

using namespace std;

int i;

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

void main()

{

clrscr();

cout<<"ROZV’JAZANNJA SUSTEMU NELINIJNUH RIVNJAN \nMETODOM PROSTOI ITERACII:"<<endl;

cout<<endl<<"cos(x-1)+y=1"<<endl;

cout<<"sin(y)+2x=1.6"<<endl;

cout<<endl<<"Vvedit pochatkovi nabluzhennja:"<<endl;

cout<<"x0= ";

cin>>x[0];

cout<<"y0= ";

cin>>y[0];

cout<<endl;

cout.precision(4);

cout<<"x[0]= "<<x[0]<<" "<<"y[0]= "<<y[0]<<endl;

i=0;

do{

i++;

x[i]=0.8-0.5*sin(y[i-1]);

y[i]=1-cos(x[i-1]-1);

cout<<"x["<<i<<"]= "<<x[i]<<" "<<"y["<<i<<"]= "<<y[i]<<endl;

a=x[i]-x[i-1];

if (a<0) a*=-1;

b=y[i]-y[i-1];

if (b<0) b*=-1;

} while (a>0.001 && b>0.001);

cout<<endl<<endl<<"Vidpovid: "<<endl;

cout.precision(3);

cout<<"x= "<<x[i]<<" "<<"y= "<<y[i];

getch();

}

Контрольні питання

  1. Назвіть відомі вам методи розв’язання систем нелінійних рівнянь.

  2. Наведіть алгоритм знаходження коренів системи нелінійних рівнянь за допомогою ітераційного методу.

  3. Наведіть алгоритм уточнення коренів системи нелінійних рівнянь методом Ньютона.

  4. Яка умова є критерієм для зупинки ітераційного процесу методу Ньютона?

  5. Наведіть алгоритм уточнення коренів системи нелінійних рівнянь методом простої ітерації.

  6. Назвіть умови збіжності ітераційного процесу для методу простої ітерації.

  7. Яка умова є критерієм для зупинки ітераційного процесу методу простої ітерації?

Лабораторна робота №4

Тема: Звичайні диференційні рівняння

Завдання: 1) Методом Ейлера скласти розв’язок задачі Коші для звичайного диференційного рівняння першого порядку на відрізку з кроком h=0.1 за початкових умов ;

2) Методом Ейлера з уточненням скласти розв’язок задачі Коші для звичайного диференційного рівняння першого порядку на відрізку з кроком h=0.1 за початкових умов .

Всі обчислення виконувати з чотирма десятковими знаками.

Вар.

1

y(1.8)=2.6

[1.8;2.8]

2

y(1.6)=4.6

[1.6;2.6]

3

y(0.6)=0.8

[0.6;1.6]

4

y(0.5)=0.6

[0.5;1.5]

5

y(1.7)=5.3

[1.7;2.7]

6

y(1.4)=2.2

[1.4;2.4]

7

y(1.4)=2.5

[1.4;2.4]

8

y(0.8)=1.4

[0.8;1.8]

9

y(1.2)=2.1

[1.2;2.2]

10

y(2.1)=2.5

[2.1;3.1]

11

y(1.8)=2.6

[1.8;2.8]

12

y(1.6)=4.6

[1.6;2.6]

13

y(0.6)=0.8

[0.6;1.6]

14

y(0.5)=0.6

[0.5;1.5]

15

y(1.7)=5.3

[1.7;2.7]

16

y(1.4)=2.2

[1.4;2.4]

17

y(1.4)=2.5

[1.4;2.4]

18

y(0.8)=1.3

[0.8;1.8]

19

y(1.1)=1.5

[1.1;2.1]

20

y(0.6)=1.2

[0.6;1.6]