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

Kravchuk A.I., Kravchuk A.S. (Metodichka)

.pdf
Скачиваний:
85
Добавлен:
31.05.2015
Размер:
704.63 Кб
Скачать

Таблица 15.1.

f (x)

[a,b]

Квадратурные

формулы

 

 

 

 

1

 

x

0;1

(15.1), (15.2)

2

ex2

0;1

(15.2), (15.3)

3

1 (1 + x )

0;1

(15.3), (15.4)

 

 

 

 

4

1 (1 + x3 )

0;1

(15.4), (15.5)

5

ex2

0;0

(15.1), (15.2)

6

e1/ x

2;4

(15.2), (15.3)

7

sin x x

0; π 2

(15.3), (15.4)

 

 

 

 

8

sin x x

0;2

(15.4), (15.5)

 

 

 

 

9

sin x2

0; π 4

(15.1), (15.2)

10

cos x2

0;1

(15.2), (15.3)

11

1 1 x + x2

0;1

(15.3), (15.4)

12

1

x4

0;1

(15.4), (15.5)

13

1 x

1;2

(15.1), (15.2)

 

 

 

 

15

ln x

4;5.2

(15.2), (15.3)

 

 

 

 

15

x cos x

0;1

(15.3), (15.4)

16

x sin x

0;1

(15.4), (15.5)

17

sin(x)

(1 + x2 )

0;1

(15.1), (15.2)

18

cos(x) x2

π / 4;π / 2

(15.2), (15.3)

Точность

ε=12 102

ε=12 102

ε=12 104

ε=12 104

ε=12 104

ε=12 102

ε=12 104

ε=12 103

ε=12 103

ε=12 103

ε=12 103

ε=12 103

ε=12 104

ε=12 103

ε=12 103

ε=12 103

ε=12 103

ε=12 103

Лабораторная работа № 16. Тема: «Решение нелинейных уравнений»

Обобщенная формулировка задания. Решить нелинейное уравнение вида f (x) = 0 с параметром с заданной точностью ε, используя предлагаемые

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

Использовать один из следующих итерационных алгоритмов нахождения решения на отрезке [a,b]:

1. Метод Ньютона

61

 

xn +1 = xn

f (xn )

 

, n = 0,1,...,

x0 [a,b]

 

 

 

 

 

 

f (xn )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.

Модифицированный метод Ньютона

 

 

 

 

 

 

xn+1 = xn

f (xn )

 

, n = 0,1,...,

x0 [a,b]

 

 

 

 

 

 

f (x0 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.

Модифицированный метод Ньютона

 

 

 

 

 

 

xn +1 = xn

f (xn )

 

 

f ′′(xn ) f 2 (xn )

, n = 0,1,...,

x0 [a,b]

 

 

f (xn )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2[ f (xn )]2

 

 

 

 

 

4.

Модифицированный метод Ньютона

 

 

 

 

 

 

xn+1 = xn

f (xn )

f (xn ( f (xn ))1 f (xn ))

 

,n = 0,1,...,

,

 

f (xn )

 

 

 

 

 

x0 [a,b]

 

 

 

 

 

 

 

 

 

f (xn )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.

Метод секущих

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

n +1

= x

n

(xn xn 1) f (xn )

, n = 0,1,... x

0

, x [a,b]

 

 

 

 

 

 

 

 

 

 

 

 

 

f (xn ) f (xn 1)

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.

Модифицированный метод секущих

 

 

 

 

 

 

xn+1 = xn

 

 

(b xn ) f (xn )

,n = 0,1,..., x0 = a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (b) f (xn1 )

 

 

 

 

 

 

 

 

при f (b)f

′′

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(x)> 0, x [a,b].

 

 

 

 

 

7.

Модифицированный метод секущих

 

 

 

 

 

 

xn+1 = xn

 

(xn a) f (xn )

, n = 0,1,..., x0 = b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (xn ) f (a)

 

 

 

 

 

 

 

 

при

f (a)f

′′

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(x)> 0, x [a,b].

 

 

 

 

 

(16.1)

(16.2)

(16.3)

16.4)

(16.5)

(16.6)

(16.7)

Пример выполнения задания. Решить методом Ньютона с точностью ε нелинейное уравнение 3x cos x 1 = 0, предварительно отделив корни.

Описание используемых функций. Функция NewtonMethod с

прототипом

double NewtonMethod (double Previous, double Epsilon);

возвращает решение нелинейного уравнения для начального приближения Previous, посчитанного по формуле Ньютона с точностью Epsilon.

Функция Function с прототипом

double Function (double x);

возвращает значение функции f (x) =3x cos x 1 при заданном значении x. Функция Derivative с прототипом

62

double Derivative (double x);

возвращает значение производной функции 3x cos x 1 при заданном значении x.

Текст программы.

#include <stdio.h> #include <conio.h> #include <math.h>

#define TRUE 1

double NewtonMethod ( double , double); double Function(double );

double Derivative(double );

int main(void)

{

double Root, Epsilon;

while(TRUE)

{

printf("\nEnter the initial approximation and ” “accuracy: ");

scanf("%lf%lf",&Root,&Epsilon);

if ((Epsilon < 1) && (Epsilon > 0)) break; printf("\Accuracy is incorrect!!! Try ”

“again!!!\n");

}

clrscr();

printf("\nThe root of the equation is equal %lf", NewtonMethod(Root,Epsilon));

printf("\nPress any key to exit..."); getch();

return 0;

}

double NewtonMethod (double Previous, double Epsilon)

{

double Following= Previous – Function(Previous)/Derivative(Previous);

while (fabs(Previous - Following)>= Epsilon)

63

{

Previous = Following;

Following = Previous – Function(Previous)/Derivative(Previous);

}

return Following;

}

double Function (double x)

{

return 3*x-cos(x)-1;

}

double Derivative (double x)

{

return 3+sin(x);

}

Варианты заданий.

Таблица 16.1.

f (x)

Интервал

Шаг

Итерационный

для α

изменения α

метод

 

 

1

2

3

4

5

1

x2 cos2x +1 + α

1:2

0.1

(16.1), (16.7)

2

2x − αcos x

0:1

0.1

(16.2), (16.6)

3

(x 1 + α)3 + 0.5ex

0:0.5

0.01

(16.3), (16.5)

4

αx cos x 1

3:4

0.1

(16.4), (16.2)

5

x4 + αx 1

1:5

1

(16.1), (16.7)

6

x4 + cos x − α

3:7

0.5

(16.2), (16.6)

7

3x eαx

1:5

1

(16.3), (16.5)

8

ex 1 − αx3

1:5

1

(16.4), (16.2)

9

αx ln x 5

0.5:4

0.5

(16.1), (16.7)

10

exx +1

1:5

1

(16.2), (16.6)

11

e1/ x (x +1)2 + α

0:5

1

(16.3), (16.5)

12

αx3 sin x

0:1

0.1

(16.4), (16.2)

13

ex 6x − α

3:10

1

(16.1), (16.7)

14

x2 + cos x − α

3:7

0.5

(16.2), (16.6)

15

x sin x − α

2:3

0.1

(16.3), (16.5)

64

1

2

3

4

5

16

αx + ex

1:5

1

(16.4), (16.2)

Лабораторная работа № 17.

Тема: «Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции»

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

Пример выполнения задания. Дан одномерный целочисленный массив. Отсортировать массив по неубыванию методом «пузырька».

Описание используемых функций. Функция InputArray с

прототипом

void InputArray ( int* A, unsigned n );

осуществляет ввод одномерного массива A размерности n с клавиатуры. Функция DisplayArray с прототипом

void DisplayArray ( int* A, unsigned n );

осуществляет вывод одномерного массива A размерности n на экран. Функция BubbleSort с прототипом

void BubbleSort ( int* A, unsigned n);

выполняет сортировку методом «пузырька» одномерного массива A размерности n.

Текст программы.

#include <stdio.h> #include <conio.h> #include <math.h>

#define TRUE 1

void InputArray ( int* , unsigned); void DisplayArray ( int*, unsigned);

65

void BubbleSort( int* , unsigned);

int main(void)

{

unsigned const DIM = 100; int Massive[DIM]; unsigned n;

while(TRUE)

{

printf("Enter n <= %d - dimention of massive:", DIM);

scanf("%u", &n);

if ((n > 0) && (n <= DIM)) break; printf("\n Dimention is incorrect!!! Try ”

“again!!!\n");

}

printf("\nEnter the elements of massive:\n"); InputArray ( Massive, n );

clrscr();

printf("\tSource array\n"); DisplayArray ( Massive, n ) ; BubbleSort( Massive, n ); printf("\tSelected array \n"); DisplayArray ( Massive, n ) ; printf("\nPress any key to exit..."); getch();

return 0;

}

void InputArray ( int* A, unsigned n )

{

unsigned i;

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

{

printf("\nA[%u] = ",i);

scanf("%d",&*(A + i));

}

}

void DisplayArray ( int* A, unsigned n )

{

unsigned i;

66

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

{

printf("%d ",*(A + i));

}

}

void BubbleSort ( int* A, unsigned n)

{

unsigned i, j; int x;

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

{

for( j = n - 1; j > i; j --)

{

if (*(A + j) < *(A + j - 1) )

{

x =

*(A

+ j);

+ j - 1);

*(A

+

j) = *(A

*(A

+

j

- 1) =

x;

}

}

}

}

Варианты заданий. См. «Лабораторная работа № 4».

Лабораторная работа № 18. Тема: «Массивы динамической памяти»

Обобщенная формулировка задания. Ввести размеры одномерного массива. Сформировать динамический массив заданного размера. Заполнить массив значениями, введя с клавиатуры либо алгоритмически. Выполнить обработку массива согласно конкретно поставленной задаче. Вывести на экран исходный и полученный результаты. Удалить динамический массив.

Пример выполнения задания. Дан одномерный целочисленный массив. Отсортировать массив по неубыванию методом «пузырька».

Описание используемых функций. Функция InitArray с прототипом int* InitArray ( unsigned n );

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

Функция DisplayArray с прототипом

67

void DisplayArray ( int* Pointer, unsigned n );

осуществляет вывод одномерного динамического массива Pointer размерности n на экран.

Функция BubbleSort с прототипом

void BubbleSort ( int* Pointer, unsigned n);

выполняет сортировку методом «пузырька» одномерного динамического массива Pointer размерности n.

Текст программы.

#include <conio.h> #include <stdio.h> #include <math.h> #include <stdlib.h>

#define TRUE 1

int* InitArray ( unsigned);

void DisplayArray ( int*, unsigned); void BubbleSort( int* , unsigned);

int main(void)

{

unsigned Dimension; int* Massive;

while(TRUE)

{

printf("Enter dimention of massive: "); scanf("%u", &Dimension);

if (Dimension > 0) break;

printf("\n Dimention is incorrect!!! Try ” “again!!!\n");

}

clrscr();

Massive = InitArray (Dimension); clrscr();

if ( Massive == NULL )

{

printf("\nDynamic array don't exist!\n"); printf("\nPress any key to exit... "); getch();

return 0;

68

}

printf("\tSource array\n"); DisplayArray (Massive, Dimension);

BubbleSort (Massive, Dimension); printf("\n\tSelected array\n");

DisplayArray (Massive, Dimension); free(Massive);

printf("\nPress any key to exit... "); getch();

return 0;

}

int* InitArray ( unsigned n )

{

int* Pointer = (int*)malloc(n*sizeof(int)); unsigned i;

if ( Pointer == NULL ) return NULL; printf("\n Enter the elemets of array: \n"); for ( i = 0; i < n; i++ )

{

printf("\nA[%u] = ",i); scanf("%d",&*(Pointer + i));

}

return Pointer;

}

void DisplayArray ( int* Pointer, unsigned n )

{

unsigned i;

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

{

printf(" %d",*( Pointer + i));

}

}

void BubbleSort ( int* Pointer, unsigned n)

{

unsigned i, j;

69

int x;

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

{

for( j = n - 1 ; j > i; j --)

{

if (Pointer [j] < Pointer [j-1] )

{

x = Pointer[j];

Pointer[j] = Pointer[j-1]; Pointer[j-1] = x;

}

}

}

}

Варианты заданий. См. «Лабораторная работа № 4».

Лабораторная работа № 19.

Тема: «Массивы указателей и моделирование многомерных массивов»

Обобщенная формулировка задания 1. Определить максимально возможный диапазон изменения размерностей матрицы. Ввести в указанном диапазоне реальную размерность матрицы. Заполнить матрицу значениями, введя с клавиатуры либо алгоритмически. Сформировать динамический массив из указателей на строки заданной матрицы и использовать его в качестве параметра в функциях. Выполнить обработку матрицы согласно конкретно поставленной задаче. Вывести на экран исходный и полученный результаты. Удалить динамический массив.

Обобщенная формулировка задания 2. Ввести размеры матрицы.

Осуществляя подмену матрицы одномерным массивом и имитируя внутри используемых функций доступ к ней, сформировать динамический одномерный массив. Заполнить массив значениями, введя с клавиатуры либо алгоритмически. Выполнить обработку массива согласно конкретно поставленной задаче. Вывести на экран исходный и полученный результаты. Удалить динамический массив.

Обобщенная формулировка задания 3. Ввести размеры двумерного массива. Сформировать динамический двумерный массив заданного размера (массив из указателей на строки матрицы). Заполнить массив значениями, введя с клавиатуры либо алгоритмически. Выполнить обработку массива согласно конкретно поставленной задаче. Вывести на экран исходный и полученный результаты. Удалить динамический массив.

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]