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

информатика / 1+2+3 +4+5 лаб работа ручной счет Excel Mcad СИ++

.pdf
Скачиваний:
17
Добавлен:
28.12.2022
Размер:
2.75 Mб
Скачать

в левой части оставим х, а в правую часть перенесем все остальное: x2 =5*x-6

.Затем выражаем = √ − (x=fi(x)).

На полученном в шаговом методе интервале изоляции корня [2,95 ; 3,1] выполним проверку условия сходимости метода для приведенной функции

fi(x)= √ − на концах интервала.

Условие сходимости |fi'(x0)| 1, где x0 = 2,95 или x0 = 3,1. Первая производная

( ) =

 

 

( ) =

 

 

 

.

 

 

 

 

 

√ −

fi1(2,95)=0,845 fi1(3,1)=0,811. Выбираем в качестве x0 ,то значение х в котором первая производная по модулю больше. В нашем случае x0=2,95.

 

 

 

 

 

 

 

Вычисляем первое

приближение к корню x1=fi(x0)

x1=√5 x0 − 6 =

 

 

 

 

 

 

√5 2,95 − 6 = 2,958

 

 

 

Вычислим значение функции при x1=2,958

 

 

 

f(x1)= x12-5 x1+6=2,9582-5*2,958+6=-0,040

 

 

 

Проверяем |f(x1)|<eps

|-0,040|<0,01 нет,

 

 

 

точность не достигнута, следовательно, вычисляем следующее приближение к корню.

 

 

 

 

 

 

 

Вычисляем второе

приближение к корню x2=fi(x1)

x2=√5 x1 − 6 =

 

 

 

 

 

 

√5 2,958 − 6 = 2,965

 

 

 

Вычислим значение функции при x2=2,965

 

 

 

f(x2)= x22-5 x2+6=2,9582-5*2,959+6=-0,034

 

 

 

Проверяем |f(x2)|<eps

|-0,034|<0,01 нет,

 

 

 

точность не достигнута, следовательно, вычисляем следующее приближение к корню.

 

 

 

 

 

 

 

Вычисляем третье

приближение к корню x3=fi(x2)

x3=√5 x2 − 6 =

 

 

 

 

 

 

√5 2,965 − 6 = 2,971

 

 

 

Вычислим значение функции при x3=2,971

 

 

 

f(x3)= x32-5 x3+6=2,9712-5*2,971+6=-0,029

 

 

 

Проверяем |f(x3)|<eps

|-0,029|<0,01 нет,

 

 

 

точность не достигнута, следовательно, вычисляем следующее приближение к корню.

 

 

 

 

 

 

 

Вычисляем четвертое

приближение к корню x4=fi(x3)

x4=√5 x3 − 6 =

 

 

 

 

 

 

√5 2,971 − 6 = 2,975

 

 

 

Вычислим значение функции при x4=2,975

 

 

 

f(x4)= x42-5 x4+6=2,9752-5*2,975+6=-0,024

 

 

 

Проверяем |f(x4)|<eps

|-0,024|<0,01 нет,

 

 

 

точность не достигнута, следовательно, вычисляем следующее приближение к корню.

Вычисляем пятое приближение к корню x5=fi(x4) x5=√5 x4 − 6 =

√5 2,975 − 6 = 2,979

Вычислим значение функции при x5=2,979

11

f(x5)= x52-5 x5+6=2,9792-5*2,979+6=-0,020 Проверяем |f(x4)|<eps |-0,020|<0,01 нет,

точность не достигнута, следовательно, вычисляем следующее приближение к корню.

 

 

 

 

 

 

 

Вычисляем шестое

приближение к корню x6=fi(x5)

x6=√5 x5 − 6 =

 

 

 

 

 

 

√5 2,979 − 6 = 2,983

 

 

 

Вычислим значение функции при x4=2,983

 

 

 

f(x6)= x62-5 x6+6=2,9832-5*2,983+6=-0,017

 

 

 

Проверяем |f(x6)|<eps

|-0,017|<0,01 нет,

 

 

 

точность не достигнута, следовательно, вычисляем следующее приближение к корню.

И т.д. пока функция не достигнет точности.

Вывод: x= 2,992 можно считать приближенным корнем нашего уравнения с точностью 0,01, т.к. |f(2,992)|<0,01 |0,008|<0,01

Результат реализации в программе MSExcel (2 способ)

Реализация в программе Mcad (2 способ)

x

 

f x

 

i

i

 

i

 

 

 

2.95

 

-0.047

0

 

 

1

 

2.958

 

-0.04

 

 

 

 

2.965

 

-0.034

2

 

 

 

 

2.971

 

-0.029

3

 

 

 

 

2.975

 

-0.024

4

 

 

 

 

2.979

 

-0.02

5

 

 

 

 

2.983

 

-0.017

6

 

 

 

 

2.986

 

-0.014

7

 

 

 

 

2.988

 

-0.012

8

 

 

 

 

2.99

-9.928·10-3

9

 

 

 

2.992

-8.299·10-3

10

 

 

13

Реализация Шагового метода

начало

f(x)=x2-5*x+6

a, b, h

“Таблица”

“x f(x)”

x[0]=a

y[0]=f(a)

x[0] y[0]

n=(b-a)/h

i=1

нет

i<=n

да

x[i]=a+i*h

y[i]=f(x[i])

x[i] y[i]

нет

f(x[i-1])*f(x[i])<0

да

x[i-1] x[i]

i=i+1

конец

Программа на языке CИ++

#include “stdafx.h” #include <iostream> #include <math.h> using namespace std; double f(double x) { double Y; Y=pow(x,2)-5*x+6; return Y;}

void main() {setlocale(LC_ALL,”Russian”); double a,b,x[11],y[11],h;

int i,n;

cout<<”Vvedite a, b, h”<<endl; cin>>a>>b>>h; cout<<”Таблица\n”; cout<<”\tx \tf(x)\n”;

x[0]=a;

y[0]=f(a); cout<<x[0]<<”\t”<<y[0]<<endl; n=(b-a)/h;

for(i=1;i<=n;i++)

{

x[i]=a+i*h;

y[i]=f(x[i]); cout<<”\t”<<x[i]<<”\t”<<y[i]<<endl;

if (f(x[i-1])*f(x[i])<0) cout<<”koren na interval [“<<x[i-

1]<<”,”<<x[i]<<”]\n”;

}

}

Реализация метода половинного деления

Программа на языке CИ

#include “stdafx.h” #include <iostream> #include <math.h> using namespace std; double f (double x)

{double Y; Y=pow(x,2)-5*x+6; return Y;}

void main()

{double a,b,xc,e;

cout<<”Vvedite a, b, e”<<endl; cin>>a>>b>>e; cout<<”\t”<<”a”<<”\t”<<”xc”<<”\t”<<”b”

<<”\t”<<”f(a)”<<”\t”<<”f(xc)”<<”\t”<<”f(b)\n”; xc=(a+b)/2;

while(fabs(f(xc))>e)

{xc=(a+b)/2; cout<<”\t”<<a<<”\t”<<xc<<”\t”<<b<<”\t”<<f(a)<<”\t”<<f(xc)

<<”\t”<<f(b)<<endl; if (f(a)*f(xc)<0)

b=xc; else

a=xc;

}

cout<<”koren=”<<xc<<” f(“<<xc<<”)=”<<f(xc)<<endl;

}

Реализация метода Ньютона

15

Программа на языке CИ

#include “stdafx.h” #include <iostream> #include <math.h> using namespace std; double f (double x)

{double Y; Y=pow(x,2)-5*x+6; return Y;}

double f1 (double x)

{double Y;

Y=2*x-5; return Y;} void main()

{ double x0,x1,e=0.0001; cout<<”Vvedite x0”<<endl; cin>>x0;

cout<<”\t”<<”x”<<”\t”<<”f(x)”<<”\t”<<”f1(x)\n”; cout<<”\t”<<x0<<”\t”<<f(x0)<<”\t”<<f1(x0)<<”\n”; while(fabs(f(x0))>e)

{

x1=x0-f(x0)/f1(x0); cout<<”\t”<<x1<<”\t”<<f(x1)<<”\t”<<f1(x1)<<endl; x0=x1;

}}

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

Программа на языке CИ

#include “stdafx.h” #include <iostream> #include <math.h> using namespace std; double f (double x)

{double Y; Y=pow(x,2)-5*x+6; return Y;}

double fi (double x)

{double Y; Y=sqrt(5*x-6); return Y;} void main()

{double x0,x1,eps=0.01; cout<<”Vvedite x0”<<endl; cin>>x0;

cout<<”\t”<<”x”<<”\t”<<”f(x)”<<”\n”; cout<<”\t”<<x0<<”\t”<<f(x0)<<”\n”; while(fabs(f(x0))>eps)

x1=fi(x0); cout<<”\t”<<x1<<”\t”<<f(x1)<<endl; x0=x1;

}

}

Лабораторная работа №2 Решение систем линейных уравнений

1. Метод простой итерации Постановка задачи: Дана система линейных уравнений

8x1 -2x2 +x3 =3 -5x2 +2x3 =4 2x1 -x2 +6x3 =4

Найти приближенное решение с заданной степенью точности eps=0,1

Ручной счет

 

 

 

 

8

−2

1

1

3

Запишем систему в матричном виде [0

−5

2] [ 2] = [4] (A*x=B)

2

−1

6

3

4

1.Для того чтобы получить решение с помощью этого метода необходимо чтобы матрица A удовлетворяла следующим требования:

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

Aii

Aij

,что означает |8|>|-2|+|1|

|8|>|3|

|-5|>|0|+|2|

|5|>|2|

 

i 1,i j

|6|>|2|+|-1|

|6|>|3|

 

 

Данное условие называется условием сходимости метода.

2.Если условие сходимости выполнено, то на следующем этапе необходимо задать начальное приближение неизвестных, в качестве которого обычно выбирается нулевые значения:

10 = 0

20 = 0

30 = 0

Верхний индекс - номер итерации (приближения).

3. Формируем циклический процесс, каждый цикл которого представляет собой одну итерацию. В результате каждой итерации получается новое значение неизвестных. Для организации итерационного процесса запишем нашу систему в приведенном виде – из 1-го уравнения выражаем x1, из 2-го уравнения выражаем x2, из 3-го уравнения выражаем x3.

Приведенная система уравнений имеет вид:

1 =

3 + 2 2 − 3

 

8

 

 

 

 

2 =

−4 + 2 3

5

 

 

 

 

{ 3 =

4 − 2 1 + 2

 

 

 

 

6

 

Запишем итерационную формулу метода простой итерации:

17

 

 

 

 

1 +1 =

 

3 + 2 2 − 3

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 +1

=

−4 + 2 3

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 +1

=

 

4 − 2 1 + 2

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

Переходим к вычислению 1-ой итерации:

 

 

 

 

 

 

 

 

 

i=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

3 + 2 20 − 30

 

 

 

3 + 2 0 − 0 3

 

=

 

 

 

 

 

=

 

 

 

 

 

 

 

=

 

= 0,38

 

 

8

 

 

 

 

8

 

 

 

 

8

21 =

−4 + 2 30

 

−4 + 2 0 −4

 

 

 

 

=

 

 

 

 

=

 

 

= −0,80

 

5

 

 

 

5

 

5

 

31

 

4 − 2 10 + 20

 

 

 

4 − 2 0 + 0 4

 

=

 

 

 

 

 

=

 

 

 

 

 

 

 

=

 

= 0,67

 

 

6

 

 

 

 

6

 

 

 

 

6

Проверим достигнута ли точность:

 

 

 

 

 

 

 

 

 

 

 

|x11-x10|<eps

|0,38-0|<0,1

 

 

 

|0,38|<0,1 нет

 

 

 

 

|x21-x20|<eps

|-0,80-0|<0,1

 

 

 

 

 

|0,80|<0,1 нет

 

|x31-x30|<eps |0,67-0|<0,1

|0,67|<0,1 нет

 

 

 

 

 

 

 

 

 

Точность не достигнута, следовательно продолжаем процесс вычисления.

Переходим к вычислению 2-ой итерации:

 

i=1

 

 

 

 

 

 

 

 

 

12 =

3 + 2 21 − 31

=

3 + 2 (−0,80) − 0,67

= 0,09

8

 

 

 

 

 

 

 

 

 

8

 

 

22 =

−4 + 2 31

=

−4 + 2 0,67

= −0,53

 

5

 

5

 

 

 

 

 

 

32 =

4 − 2 11 + 21

=

4 − 2 0,38 + (−0,80)

= 0,41

6

 

 

 

 

 

 

 

6

 

 

Проверим достигнута ли точность:

 

 

 

|x12-x11|<eps

|0,09-0,38|<0,1

 

 

 

|0,28|<0,1 нет

 

|x22-x21|<eps

|-0,53-(-0,80)|<0,1

|0,27|<0,1 нет

 

|x32-x31|<eps

|0,41-0,67|<0,1

 

 

 

|0,26|<0,1 нет

 

Точность не достигнута, следовательно, продолжаем процесс вычисления.

Переходим к вычислению 3-ой итерации:

 

 

 

i=2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

=

3 + 2 22

− 32

=

3 + 2 (−0,53) − 0,41

= 0,19

 

8

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23

 

−4 + 2 32

−4 + 2 0,41

 

 

 

 

=

 

 

 

 

=

 

 

= −0,64

 

 

5

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

33

=

4 − 2 12

+ 22

=

4 − 2 0,09 + (−0,53)

= 0,55

 

6

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Проверим достигнута ли точность:

 

 

 

 

 

|x13-x12|<eps

|0,19-0,09|<0,1

 

 

 

|0,10|<0,1 нет

 

|x23-x22|<eps

|-0,64-(-0,53)|<0,1

|0,11|<0,1 нет

 

|x33-x32|<eps

|0,55-0,41|<0,1

 

 

 

|0,14|<0,1 нет

 

Точность не достигнута, следовательно, продолжаем процесс вычисления. Переходим к вычислению 4-ой итерации:

i=3

14

=

3 + 2 23

− 33

=

3 + 2 (−0,62) − 0,56

= 0,15

 

8

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

 

−4 + 2 33

−4 + 2 0,56

 

 

 

 

=

 

 

 

 

=

 

 

= −0,58

 

 

5

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

34

=

4 − 2 13

+ 23

=

4 − 2 0,21 + (−0,62)

= 0,50

 

6

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Проверим достигнута ли точность:

 

 

 

 

 

|x13-x12|<eps

|0,15-0,21|<0,1

 

 

 

|0,06|<0,1 да

 

|x23-x22|<eps

|-0,58-(-0,64)|<0,1

|0,06|<0,1 да

 

|x33-x32|<eps

|0,55-0,50|<0,1

 

 

 

|0,05|<0,1 да

 

Вывод: точность достигнута, следовательно значения x1=0,15 x2=-0,58 x3=0,50 можно считать приближенным решением системы линейных уравнений с точностью 0,1.

Реализация в MS Excel

19

Метод Гаусса(результат и формулы)