Численные методы решения уравнений и систем уравнений
Лабораторная работа по дисциплине «Вычислительные методы». Double a ={{0.20, 0.44, 0.81, 0.74},{0.58, — 0.29, 0.05, 0.02},{0.05, 0.34, 0.10, 0.32}}; Найти значения функции в точках, а и х: F (a) и F ©. Численный метод уравнение программа. Краткое описание метода выполнения. Краткое описание метода выполнения. Кафедра «Программное обеспечение». Двумерный массив дробных чисел. Const int n=3… Читать ещё >
Численные методы решения уравнений и систем уравнений (реферат, курсовая, диплом, контрольная)
МИНОБРНАУКИ РОССИИ Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования
" ИЖЕВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Им. М.Т. Калашникова"
Кафедра «Программное обеспечение»
Лабораторная работа по дисциплине «Вычислительные методы»
на тему «Численные методы решения уравнений и систем уравнений»
Выполнил: Кузнецов А.В.
ст. гр. Б03−191−1
Принял: Коробейников А.В.
доцент, к. т. н.
Ижевск 2012
- 1. Метод половинного деления
- 1.1 Постановки задачи
- 1.2 Краткое описание метода выполнения
- 1.3 Алгоритм решения задачи
- 1.4 Описание программы
- 1.4.1 Структура входных данных
- 1.4.2 Структура выходных данных
- 1.5 Листинг текста программы
- 1.6. Контрольные примеры
- 1.7 Выводы
- 2. Метод ГАУСА
- 2.1 Постановка задачи
- 2.2 Алгоритм решения задачи
- 2.3 Описание программы
- 2.3.1 Структура входных данных
- 2.3.2 Структура выходных данных
- 2.4 Листинг текста прораммы
- 2.5 Контрольные примеры
- 2.6 Выводы
1. Метод половинного деления
1.1 Постановки задачи
Запрограммировать метод половинного деления и вычислить один корень уравнения xsinx-1=0 (рисунок 1.1) с точностью до 0,001.
Рисунок 1.1
1.2 Краткое описание метода выполнения
Метод половинного деления один из методов решения нелинейных уравнений и основан на последовательном сужении интервала, содержащего единственный корень уравнения F (x) =0 до того времени, пока не будет достигнута заданная точность Е. Метод используется при решении квадратных уравнений и уравнений высших степеней.
1.3 Алгоритм решения задачи
Пусть задан отрезок [а, b], содержащий один корень уравнения. Этот отрезок может быть предварительно найден с помощью шагового метода.
численный метод уравнение программа
1. Определить новое приближение корня х в середине отрезка [а, b]: c= (а+b) /2.
2. Найти значения функции в точках, а и х: F (a) и F ©.
3. Проверить условие F (a) *F © < 0. Если условие выполнено, то корень расположен на отрезке [а, c]. В этом случае необходимо точку b переместить в точку х (b=c). Если условие не выполнено, то корень расположен на отрезке [c, b]. В этом случае необходимо точку, а переместить в точку c (а=c).
4. Перейти к пункту 1 и вновь поделить отрезок пополам. Алгоритм продолжить до того времени, пока не будет выполнено условие |F (x) | < e.
1.4 Описание программы
1.4.1 Структура входных данных
Имя переменной | Тип | Какую функцию выполняет | |
A | Дробное число | Начало отрезка | |
B | Дробное число | Конец отрезка | |
E | Дробное число | Заданная точность | |
1.4.2 Структура выходных данных
Имя переменной | Тип | Какую функцию выполняет | |
c | Дробное число | Приближенный корень | |
1.5 Листинг текста программы
#include
#include
#include
using namespace std;
double function (double x)
{
return (x*sin (x) — 1);
}
int main ()
{
double a, a2, b, b2, c, e;
cout<<" Enter a: «;
cin>>a;
cout<<" Enter b: «;
cin>>b;
cout<<" Enter e: «;
cin>>e;
c= (a+b) /2;
while ((fabs (b-a) >e) && (function ©! =0))
{
if (function (a) *function © <0) b=c;
else a=c;
c= (a+b) /2;
}
cout<<" nC="<
return 0;
}
1.6. Контрольные примеры
1.7 Выводы
Корни, найденные с помощью программы, сходятся с корнями, полученными аналитически, значит, программа работает корректно.
2. Метод ГАУСА
2.1 Постановка задачи
Запрограммировать метод Гауса и вычислить корни для матрицы вида:
=
2.2 Алгоритм решения задачи
Суть метода Гауса заключается в последовательном исключении неизвестных. Пусть в системе уравнений (рисунок 2.1) первый элемент a11 (0) не равен 0.
Рисунок 2.1
Назовем его ведущим элементом первой строки. Поделим все элементы этой строки на a11 (0) и исключим x1 из всех последующих строк, начиная со второй, путем вычитания первой (преобразованной), умноженной на коэффициент при x1 в соответствующей строке. Получим следующий вид (рисунок 2.2).
Рисунок 2.2
Если a22 (1), то, продолжая аналогичное исключение, приходим к системе уравнений с верхней треугольной матрицей (рисунок 2.3).
Рисунок 2.3
Из нее в обратном порядке находим все значения xi (рисунок 2.4)
Рисунок 2.4
Процесс приведения к системе с треугольной матрицей называется прямым ходом, а нахождения неизвестных — обратным.
2.3 Описание программы
2.3.1 Структура входных данных
Имя переменной | Тип | Какую функцию выполняет | |
a | Двумерный массив дробных чисел | Элементы матрицы | |
2.3.2 Структура выходных данных
Имя переменной | Тип | Какую функцию выполняет | |
x | Массив дробных чисел | Корни системы уравнений | |
2.4 Листинг текста прораммы
#include
#include
using namespace std;
void main ()
{
const int n=3; // Размерность системы
double a [4] ={{0.20, 0.44, 0.81, 0.74},{0.58, — 0.29, 0.05, 0.02},{0.05, 0.34, 0.10, 0.32}};
int i, j, k;
double buf, x [n];
for (i=0; i
{
for (j=0; j
{
printf («%6.2f», a [i] [j]);
}
printf («n»);
}
// Прямой ход метода Гаусса
for (i=0; i
for (j=i+1; j
{
buf=a [i] [i] /a [j] [i];
for (k=0; k<=n; k++)
a [j] [k] =a [j] [k] *buf-a [i] [k];
}
// Обратный ход метода Гаусса
x [n-1] =a [n-1] [n] /a [n-1] [n-1];
for (i=n-2; i>=0; i—)
{
buf=0;
for (j=i+1; j
buf+=a [i] [j] *x [j];
x [i] = (a [i] [n] - buf) /a [i] [i];
}
cout << endl << «Reshenie: «<< endl;
for (i=0; i
printf («%5.2f n», x [i]);
}
2.5 Контрольные примеры
2.6 Выводы
Корни, найденные с помощью программы, сходятся с корнями, полученными аналитически, значит, программа работает корректно.