Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
«Белорусский государственный университет информатики и
радиоэлектроники»
КОНТРОЛЬНАЯ РАБОТА
по дисциплине «Технология проектирования программного
обеспечения информационных систем»
ВАРИАНТ 9
Выполнил:
студент группы 790441
Манченко Алексей Анатольевич
Минск 2021
2
Задание № 1. Интерполяция
x -1 2 5
y 4 3 4
y1 y0 34 1
f10
x1 x0 2 (1) 3
1 1
f11 f10 3 3 1
f 20
x2 x0 5 (1) 9
y2 y1 4 3 1
f11
x2 x1 5 2 3
( x x1 )( x x2 ) ( x x0 )( x x2 ) ( x x0 )( x x1 )
P ( x ) y0 y1 y2
( x0 x1 )( x0 x2 ) ( x1 x0 )( x1 x2 ) ( x2 x0 )( x2 x1 )
( x 2)( x 5) ( x 1)( x 5) ( x 1)( x 2) x 2 4 31
4 3 4 x
( 1 2)( 1 5) (2 1)(2 5) (5 1)(5 2) 9 9 9
3
Построим графики интерполяционных многочленов и убедимся, что они
проходят через заданные точки.
4
Задание № 2. Численное решение нелинейных уравнений f ( x ) 0
9. x 3 6 x 1 0
5
Функция содержит единственный действительный корень на интервале
[0,0; 0,5] .
Программно произведем уточнение заданного корня методом деления
отрезка пополам. Листинг программы на языке программирования Java:
} while(Math.abs(a-b)>2*eps);
c=(a+b)/2;
System.out.format("Корень: %.5f \n", c);
System.out.format("Невязка: %.5f \n", Math.abs(f(c)));
}
public static double f(double x) {
return x*x*x+6*x-1;
}
}
Результат вычислений:
6
x3 1
( x)
6
x2
'( x)
3
Функция '( x) на всем интервале локализации корня не превышает по
модулю значения 1, следовательно выполняется достаточное условие сходимости
метода простых итераций.
Листинг программы:
System.out.format("Корень: %.5f\n",x);
System.out.format("Невязка % .5f\n",Math.abs(y(x)));
}
// заданная функция
public static double y(double x) {
return x*x*x+6*x-1;
}
// эквивалентная функция
public static double f(double x) {
return (x*x*x-1)/-6;
}
}
Результат вычислений:
7
Метод Ньютона
Итерации в методе Ньютона осуществляются по формуле:
f ( xn1 )
xn xn1 , f ( xn 1 ) 0
f ( xn 1 )
Метод очень чувствителен к выбору начального приближения.
Если производные f '( x) и f ''( x) сохраняют знак в окрестности корня,
рекомендуется выбирать начальное приближение x0 так, чтобы выполнялось
условие:
f ( x 0 ) f ( x 0 ) 0
Это условие итерационной последовательности является достаточным.
Вычислим первую производную функции f (x) , она равна:
f '( x) 3x 2 6
f ''( x ) 6 x
System.out.format("\nКорень: %.5f\n",x);
System.out.format("Невязка % .5f\n",Math.abs(f(x)));
}
// заданная функция
public static double f(double x) {
return x*x*x+6*x-1;
}
// производная функции
public static double fp(double x) {
8
return 3*x*x+6;
}
}
Результат вычислений:
9
Задание № 3. Численное решение систем линейных алгебраических
уравнений (СЛАУ)
2 x1 x2 x3 2 x4 2
2 x 2 x 2 x 3x 1
1 2 3 4
9.
2 x1 2 x2 3x3 4 x4 0
2 x1 2 x2 3x3 5 x4 1
Листинг программы:
System.out.println("Заданная матрица");
for(int i=0;i<n; i++){
for(int j=0;j<n; j++){
System.out.format(" % .1f ", a[i][j]);
}
System.out.format(" % .1f\n", y[i]);
}
// вектор результатов
double [] x = new double[n];
k = 0;
while (k < n)
{
// Поиск строки с максимальным a[i][k]
max = Math.abs(a[k][k]);
index = k;
for (int i = k + 1; i < n; i++) {
if (Math.abs(a[i][k]) > max) {
max = Math.abs(a[i][k]);
index = i;
}
}
10
// Перестановка строк
if (max < eps) {
// нет ненулевых диагональных элементов
System.out.println("Решение получить невозможно из-за
нулевого столбца ");
System.out.println(index + " матрицы A");
return;
}
for (int j = 0; j < n; j++) {
double temp = a[k][j];
a[k][j] = a[index][j];
a[index][j] = temp;
}
// Нормализация уравнений
for (int i = k; i < n; i++) {
temp = a[i][k];
if (Math.abs(temp) < eps)
continue; // для нулевого коэффициента пропустить
if (i == k)
continue; // уравнение не вычитать само из себя
// обратная подстановка
for (k = n - 1; k >= 0; k--)
{
x[k] = y[k];
for (int i = 0; i < k; i++)
y[i] = y[i] - a[i][k] * x[k];
}
// вывод результата
System.out.println("\nРезультат");
for(int i=0;i<n;i++)
System.out.format("x[%d] = % .2f\n", i+1, x[i]);
return;
}
}
11
Результат вычислений:
1, 25 x1 0, 2 x2 2,3
1,7 x 2,87 x x 4
1 2 3
9.
1, 4 x2 4,7 x3 2 x4 3,5
x3 5 x4 1, 4
Листинг программы:
double y;
double [] a = new double[n];
double [] b = new double[n];
double [] x = new double[n];
12
// матрица коэффициентов при неизвестных
double[][] matA = {
{1.25, -0.2, 0, 0},
{-1.7, 2.87, -1, 0},
{0, 1.4, 4.7, -2},
{0, 0, -1, 5}
};
// прямой проход
y = matA[0][0];
a[0] = -matA[0][1] / y;
b[0] = matB[0] / y ;
for (int i = 1; i < n-1; i++) {
y = matA[i][i] + matA[i][i - 1] * a[i - 1];
a[i] = -matA[i][i + 1] / y;
b[i] = (matB[i] - matA[i][i - 1] * b[i - 1]) / y;
}
// обратный проход
x[n-1] = (matB[n-1] - matA[n-1][n - 2] * b[n-2]) / (matA[n-1][n-1] +
matA[n-1][n-2] * a[n-2]);
for (int i = n-2; i >= 0; i--) {
x[i] = a[i] * x[i + 1] + b[i];
}
// вывод результата
System.out.println("\nРезультат");
for(int i=0;i<n;i++)
System.out.format("x[%d] = % .2f\n", i+1, x[i]);
}
}
Результат вычислений:
13
Список использованных источников
14