Kravchuk A.I., Kravchuk A.S. (Metodichka)
.pdfТаблица 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 |
e−x2 |
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 10−2
ε=12 10−2
ε=12 10−4
ε=12 10−4
ε=12 10−4
ε=12 10−2
ε=12 10−4
ε=12 10−3
ε=12 10−3
ε=12 10−3
ε=12 10−3
ε=12 10−3
ε=12 10−4
ε=12 10−3
ε=12 10−3
ε=12 10−3
ε=12 10−3
ε=12 10−3
Лабораторная работа № 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 (xn−1 ) |
|
|
|
|
|
|
|
||||||||
|
при 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 |
ex+α − x +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