Деление отрезка пополам, метод деления Гаусса

Разработка программного обеспечения для решения нелинейного уравнения методом деления отрезка пополам, методом деления Гаусса. Алгоритм определения и методика уточнения корней. Составление и тестирование программы, ее листинг и оценка эффективности.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 16.12.2013
Размер файла 638,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

1. Разработать программное обеспечение для решения нелинейного уравнений методом деления отрезка пополам

Уравнение: x^2+ln(x)=0, e=??^-2.

Метод деления отрезка пополам

Отделить корень х* уравнения f(x) = 0 - значит указать окрестность точки x*, не содержащую других корней этого уравнения.

Рис. 1.1

Как известно из анализа, если непрерывная функция f(x) на концах отрезка [a, b] принимает значения разных знаков, т.е. если f(a)f(b) < 0, то внутри этого отрезка существует, по крайней мере, один корень уравнения f(x) = 0 (рис 1.1). При этом корень x* будет единственным, если f '(x) сохраняет знак внутри интервала (а, b) (рис. 1.1а).

На практике отделение корней уравнения f(x) = 0 на отрезке [а, b] и начинается с проверки условия f(a)f(b) < 0. Если это условие выполнено, то, следовательно, на (a, b) имеется корень и дальнейшая задача состоит в выяснении его единственности или не единственности.

Для отделения корней практически достаточно провести процесс половинного деления, в соответствии с которым отрезок [a, b] делится на 2,4,8,… равных частей и последовательно определяются знаки функции в точках деления. При этом если в точках деления хi, хi+1 выполнено условие f(хi)f(хi+1) < 0, то на интервале (хi, хi+1) имеется корень уравнения f(x) = 0. При определении корней всегда стараются найти интервал (хi, хi+1) как можно меньшей длины.

Согласно вышеизложенному, получается следующий алгоритм определения корней уравнения f(x) = 0:

1) находим участки возрастания и убывания функции f(x) (с помощью производной f (x), если она существует);

2) составляем таблицу знаков функции f(x) в стационарных точках (или ближайших к ним), а так же в граничных точках области определения f(x);

3) определяем интервалы по правилу xi = a + (i - 1)(b - a)/m - 1; i = 1, 2, …, m, на которых f(x) имеет противоположные знаки. Внутри таких интервалов содержится только по одному корню. На рисунке 1.1б интервалы монотонности функции (a, c), (c, d), (d, b), на концах которых функция имеет противоположные знаки. Корнями уравнения f(x) = 0 на отрезке [a, b] в данном случае являются точки x1, x2 и x3.

программа листинг тестирование уравнение

Рис. 1.2 Блок-схема

Тестирование программы

Возьмем значения a = -10, b =5.

Рис. 1.3

Рис. 1.4

Рис. 1.5

Искомый корень данной функции равен: 0,653076

Листинг программы

#include <iostream>

#include <cmath>

using namespace std;

float e=0.01;

float f (float x)

{

return x*x+log(x);

}

void main()

{

float a, b, c;

printf («Enter a=»); scanf («%f»,&a);

printf («Enter b=»); scanf («%f»,&b);

while (b - a > e) {

c = (a + b) / 2;

if (f(c) >= 0)

b = c;

else

a = c;

}

cout <<«Otvet: «<< (a + b) / 2 << endl;

}

2. Разработать программное обеспечение для решения системы линейных уравнений методом деления Гаусса

Система уравнений:

3x1+x2-x3=-1

-2 x1+4 x2+ x3=5

x1+ x2+3 x3=3

Метод Гаусса

Этот метод является наиболее распространенным методом решения СЛАУ. В его основе лежит идея последовательного исключения неизвестных, в основном, приводящая исходную систему к треугольному виду, в котором все коэффициенты ниже главной диагонали равны нулю. Существуют различные вычислительные схемы, реализующие этот метод. Наибольшее распространение имеют схемы с выбором главного элемента либо по строке, либо по столбцу, либо по всей матрице. С точки зрения простоты реализации, хотя и с потерей точности, перед этими схемами целесообразней применять так называемую схему единственного деления. Рассмотрим ее суть.

Посредством первого уравнения системы (1) исключается х1 из последующих уравнений. Далее посредством второго уравнения исключается х2 из последующих уравнений и т.д. Этот процесс называется прямым ходом Гаусса. Исключение неизвестных повторяется до тех пор, пока в левой части последнего n-го уравнения не останется одно неизвестное хn

annxn = b,

где ann и b - коэффициенты, полученные в результате линейных (эквивалентных) преобразований.

Прямой ход реализуется по формулам

а*mi = ami - ;

b*m = bm -

где m - номер уравнения, из которого исключается xk;

k - номер неизвестного, которое исключается из оставшихся (n - k) уравнений, а также обозначает номер уравнения, с помощью которого исключается xk;

i - номер столбца исходной матрицы;

akk - главный (ведущий) элемент матрицы.

Во время счета необходимо следить, чтобы akk 0. В противном случае прибегают к перестановке строк матрицы.

Обратный ход метода Гаусса состоит в последовательном вычислении xn, xn-1,…, x1, начиная с (5) по алгоритму

xn = b / ann; .

Точность полученного решения оценивается посредством «невязки» (3). В векторе невязки (r1, r2,…, rn)Т отыскивается максимальный элемент и сравнивается с заданной точностью . Приемлемое решение будет, если rmax < . В противном случае следует применить схему уточнения решения.

Уточнение корней

Полученные методом Гаусса приближенные значения корней можно уточнить.

Пусть для системы найдено приближенное решение , не удовлетворяющее по «невязке». Положим тогда. Для получения поправки = (1, 2,…, n)Т корня следует рассмотреть новую систему

или ,

где - невязка для исходной системы.

Таким образом, решая линейную систему с прежней матрицей А и новым свободным членом = (1, 2,…, n)Т, получим поправки (1, 2,…, n).

Рис. 1.6 Блок-схема

Тестирование программы

Для тестирования программы используем заданное уравнение. Получаем следующую матрицу(система) (рис 1.7)

Далее получаем нужные нам корни. Проверяем методом подстановки корней

3*(-0,347826)+0,869565-0,826087=-1 -1,043478+0,43478 = -1

-2*(-0,347826)+4*0,869565+0,826087=5 0,695652+3,47826+0,826087=4,999999

-0,347826+0,869565+3*0,826087=3 0,521739+2,478261=3

Ответы верны

Рис. 1.7

Листинг программы

#include <stdio.h>

#include <conio.h>

#include <math.h>

#define №50

void glavelem (int k, double mas[] [N + 1], int n, int otv[]);

int main(void)

{

double mas[N] [N + 1];

double x[N];

int otv[N];

int i, j, k, n;

do

{

printf («Vvedite kolichestvo uravneniy sistemy:»);

scanf («%d», & n);

if (N < n)

printf («Slishkom bolshoe chislo uravneniy. Povtorite vvod:\n»);

}

while (N < n);

printf («Vvedite sistemu:\n»);

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

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

scanf («%lf», & mas[i] [j]);

printf («Sistema:\n»);

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

{

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

printf («%7.2f», mas[i] [j]);

printf («\n»);

}

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

otv[i] = i;

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

{

glavelem (k, mas, n, otv);

if (fabs (mas[k] [k]) < 0.0001)

{

printf («Sistema ne imeet edinstvennogo reshenija»);

return (0);

}

for (j = n; j >= k; j-)

mas[k] [j] /= mas[k] [k];

for (i = k + 1; i < n; i++)

for (j = n; j >= k; j-)

mas[i] [j] -= mas[k] [j] * mas[i] [k];

}

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

x[i] = mas[i] [n];

for (i = n - 2; i >= 0; i-)

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

x[i] -= x[j] * mas[i] [j];

printf («Otvet:\n»);

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

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

if (i == otv[j])

{

printf («%f\n», x[j]);

break;

}

return (0);

}

void glavelem (int k, double mas[] [N + 1], int n, int otv[])

{

int i, j, i_max = k, j_max = k;

double temp;

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

for (j = k; j < n; j++)

if (fabs (mas[i_max] [j_max]) < fabs (mas[i] [j]))

{

i_max = i;

j_max = j;

}

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

{

temp = mas[k] [j];

mas[k] [j] = mas [i_max] [j];

mas [i_max] [j] = temp;

}

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

{

temp = mas[i] [k];

mas[i] [k] = mas[i] [j_max];

mas[i] [j_max] = temp;

}

i = otv[k];

otv[k] = otv [j_max];

otv [j_max] = i;

Литература

1. Д. Мак-Кракен, У. Дорн. Численные методы М.: Мир. 1977

2. С.В. Поршев. Вычислительная математика

3. Ю.П. Боглаев Вычислительная математика

Размещено на Allbest.ru


Подобные документы

  • Методы решения нелинейных уравнений: прямые и итерационные. Методы решения трансцендентных, алгебраических уравнений. Метод деления отрезка пополам, Ньютона, простой итерации. Поиск корня уравнения методом простой итерации с помощью электронных таблиц.

    контрольная работа [2,4 M], добавлен 16.12.2011

  • Расчет максимальной мощности двигателя автомобиля и расчет внешней характеристики двигателя. Вычислить функцию. Метод деления отрезка пополам на данном интервале и найти с точностью корни уравнения. Вычислить определенный интеграл методом прямоугольников.

    курсовая работа [233,8 K], добавлен 13.02.2007

  • Математическое описание, алгоритм и программа вычисления нелинейного уравнения методом дихотомии. Метод половинного деления. Метод поиска корней функции. Написание текста программы с комментариями. Проведение тестовых расчетов. Вывод ответа на экран.

    курсовая работа [67,2 K], добавлен 15.02.2016

  • Решение системы линейных уравнений методами деления отрезка пополам, Гаусса и подбора параметров. Формализация задач при моделировании; построение математических, алгоритмических и программных моделей задач с помощью электронных таблиц Microsoft Excel.

    лабораторная работа [1,4 M], добавлен 21.07.2012

  • Метод численного интегрирования. Использование метода половинного деления для решения нелинейного уравнения. Определение отрезка неопределенности для метода половинного деления. Получение формулы Симпсона. Уменьшение шага интегрирования и погрешности.

    курсовая работа [3,0 M], добавлен 21.05.2013

  • Сравнение методов деления отрезка пополам, хорд, касательных и итераций, поочередно используя их для решения одного и того же уравнения. Построение диаграммы и графика изменения числа. Исследование алгоритма работы программы, перечня идентификаторов.

    курсовая работа [1,3 M], добавлен 06.08.2013

  • Тестирование модуля отыскания корня уравнения методом половинного деления. Схема алгоритма тестирующей программы. Численное интегрирование по методу Симпсона с оценкой погрешности по правилу Рунге. Проверка условий сходимости методов с помощью MathCAD.

    курсовая работа [1,1 M], добавлен 04.02.2011

  • Методика реализации решения нелинейного уравнения в виде процедуры-подпрограммы следующими методами: хорд, касательных (Ньютона), простой итерации, половинного деления. Основные методы уточнения корней уравнения. Программное решение задачи, алгоритм.

    курсовая работа [4,0 M], добавлен 27.03.2011

  • Решение нелинейного уравнения шаговым методом, методом половинного деления, методом Ньютона и простой итерации с помощью программы Mathcad. Разбиение промежутка на число n интервалов. Условия сходимости корня. Составление программы для решения на С++.

    лабораторная работа [207,5 K], добавлен 10.05.2012

  • Разработка программы для нахождения корней нелинейных уравнений несколькими методами: методом хорд, касательных, половинного деления, итераций. Реализации программы с помощью системы программирования Delphi 7. Методика работы пользователя с программой.

    курсовая работа [1,3 M], добавлен 11.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.