Численные методы решения уравнений и систем уравнений

МИНОБРНАУКИ РОССИИ

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

«ИЖЕВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ Им.М.Т. Калашникова»

Кафедра «Программное обеспечение»

Лабораторная работа

по дисциплине «Вычислительные методы»

на тему «Численные методы решения уравнений и систем уравнений»

Выполнил: Кузнецов А.В.

ст. гр. Б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 (c).

3. Проверить условие F (a) *F (c) < 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 <stdio. h>

#include <math. h>

#include <iostream>

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 (c)! =0))

{

if (function (a) *function (c) <0) b=c;

else a=c;

c= (a+b) /2;

}

cout<<«nC=»<<c<<endl;

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 <iostream>

#include <stdlib. h>

using namespace std;

void main ()

{

const int n=3; // Размерность системы

double a [3] [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<n; i++)

{

for (j=0; j<n+1; j++)

{

printf («%6.2f», a [i] [j]);

}

printf («n»);

}

// Прямой ход метода Гаусса

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

for (j=i+1; j<n; 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<n; j++)

buf+=a [i] [j] *x [j];

x [i] = (a [i] [n] — buf) /a [i] [i];

}

cout << endl << «Reshenie: » << endl;

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

printf («%5.2f n», x [i]);

}

2.5 Контрольные примеры

2.6 Выводы

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...