Министерство образования и науки Российской Федерации
Томский Университет Систем Управления и Радиоэлектроники (ТУСУР)
Кафедра автоматизированных систем управления (АСУ)
Отчет по лабораторной работе №1
по дисциплине «Вычислительная математика»
_______
_______
_______
2005
Содержание
Задание …………………………………………………………………………………………………...…3
Краткая теория …………………………………………………………………………………………...…4
Результаты работы …………………………………………………………………………………………6
Приложение А
3
1. Написать программу отделения корней.
2. Написать программу поиска корней (5 методами). Выполнить тестирование. Всё оформить в виде подпрограмм.
Входные данные для головной программы:
-
функция и её первая и вторая производные;
-
интервал ;
- количество узлов;
-
точность и
;
- метод.
Выходные данные:
- промежутки (интервалы), где есть корни;
-
корни , точность;
-
значения функции ;
- количество итераций n;
-
параметр сходимости .
4
Для поиска приближённого значения корней на промежутке задаётся сетка
и вычисляются значения функции
и если для двух соседних точек
выполняется неравенство
, то в
интервале ограниченном этими точками расположен по крайней мере один корень
.
Если считать , то точность
определения корня равна
Пусть в интервале расположен один
корень функции, и его нужно найти с определённой точностью
.
Будем искать корень, вычисляя значения и
Если выполняется условие ,
где
то процесс вычисления
заканчивается, а корень уравнения
.
Если условие не выполняется , то
проверяются следующие условия:
А) если , то
, и продолжаем процесс деления
интервала
;
Б) если , то
, и продолжаем процесс деления
интервала
. Процесс деления продолжаем до тех
пор, пока не будет выполнено либо условие
либо
условие
, где
,
- границы интервала на n-ом
шаге деления исходного интервала. При выполнении условия
При заданных двух числах и
. Итерационный процесс будет
строиться по формуле:
Начальное приближение определяется из условия
где равно либо
либо
.
Если не задана, то начальное
приближение можно искать по формулам:
5
Условия завершения
поиска: ,
Значение корня
равно .
Итерационный процесс строится по формулам:
, если
- неподвижен
конец
, или
если
-
неподвижен конец
.
Окончание поиска по условию ,
где
- заданная точность. Значение
корня равно
.
Золотое сечение отрезка осуществляется
двумя точками
, где
;
- золотое сечение. Алгоритм поиска
нулей функции
можно представить функции можно представить так:
Полагаем
Шаг первый:
Проверяется условие , где
- заданная точность.
Если данное
условие выполнено, то . Конец.
Если не выполнено то переход к шагу 2.
Ш2: Вычисление координат точек золотого сечения
и
проверяем условия
Если выполнено
условие , то
;
, на первый шаг.
Если выполнено
условие , то
;
и переход на шаг 1.
Исходное уравнение приводится к
виду
, где
,
а
Итерационный процесс идёт по
формуле
.
Критерий завершения вычислений имеет вид
где
а
-заданная точность.
6
Результаты работы программы
Входные данные:
Функция: f = exp (x) - 1/x;
Интервал: 0,1 – 2
Точность: 0,0001
Выходные данные:
Название метода |
Результат |
Кол-во итераций |
Дихотомии |
0,5672 |
15 |
Хорд |
0,5672 |
35 |
Касательных |
0,5671 |
5 |
Золотого сечения |
0,5640 |
11 |
Комбинированный |
0,5671 |
4 |
Вывод:
В результате выполнения работы реализованы метод отделения корней, метод дихотомии, метод Ньютона, метод хорд, метод Золотого сечения и метод итераций – поиск корней функции.
Анализ результатов показывает что для исследуемой функции самыми эффективными методами оказались: Метод Ньютона и Метод Итераций. Эти методы находят корни данной функции с за наименьшее число итераций, а следовательно с наименьшими затратами времени.
Приложение А
Листингпрограммы
uses
crt;
type
func=function(i:real):real;
var
i:word;
al,st:real;
const
eps=0.0001;
{====================================== ДИХОТОМИЯ }
function dihot (f:func; a:real; b:real):real;
var
c:real;
begin
i:=0;
repeat
inc(i);
c:=(a+b)*0.5;
if f(c)*f(a)<0 then b:=c else a:=c;
until (b-a)<=eps;
dihot:=c;
end;
{====================================== ХОРД }
function hord(f:func;a,b:real):real;
var
c:real;
begin
i:=0;
repeat
inc(i);
c:=a-f(a)*(a-b)/(f(a)-f(b));
if f(c)*f(b)>0 then b:=c else a:=c;
until f(c)<=eps;
hord:=c;
end;
{====================================== КАСАТЕЛЬНЫХ }
function kasat( f:func; fp:func; fpp:func; a,b:real ):real;
var
c,d:real;
begin
i:=0;
if f(a)*fpp(a)>0 then c:=a
else c:=b;
d:=f(c)/fp(c);
repeat
inc(i);
c:=c-d;
d:=f(c)/fp(c);
until abs(d)<=eps;
kasat:=c;
end;
{====================================== ЗОЛОТОЕ СЕЧЕНИЕ }
function gold (f:func; a:real; b:real):real;
var
c:real;
begin
i:=0;
repeat
inc(i);
c:=abs(a-b)*0.618;
if f(a+c)*f(a)<0 then b:=b-c else a:=a+c;
until (b-a)<=eps;
gold:=b;
end;
{====================================== ИТЕРАЦИИ}
function iter (f:func; a,b:real):real;
var
c,c1:real;
begin
i:=0;c:=a;
repeat
inc(i);
c1:=c;
c:=f(c);
until abs(c1-c)<=eps;
iter:=c;
end;
{====================================== КОМБИНИРОВАННЫЙ }
function komb(f,fp:func;a,b:real):real;
begin
i:=0;
repeat
inc(i);
a:=a-f(a)*(b-a)/(f(b)-f(a));
{if f(c)*f(b)>0 then b:=c else a:=c;}
b:=b-f(b)/fp(b);
until abs(a-b)<=eps;
komb:=a;
end;
{$f+}
function f1(x:real):real;
begin
f1:=exp(x)-1/x;
end;
function fp1(x:real):real;
begin
fp1:=exp(x)+1/(x*x);
end;
function fpp1(x:real):real;
begin
fpp1:=exp(x)-2/(x*x*x);
end;
{$f-}
begin
ClrScr;
writeln('Корни уравнения с точностью: ',eps:7:5);
writeln('найденные методом:');
writeln('(в скобках количество итераций)');
write('дихотомии: ');
gotoxy(20,wherey);
writeln(dihot(f1,0.1,2):7:4,' (',i:3,')');
write('хорд: ');
gotoxy(20,wherey);
writeln(hord(f1,0.1,2):7:4,' (',i:3,')');
write('касательных: ');
gotoxy(20,wherey);
writeln(kasat(f1,fp1,fpp1,0.1,2):7:4,' (',i:3,')');
write('золотого сечения: ');
gotoxy(20,wherey);
writeln(gold(f1,0.1,2):7:4,' (',i:3,')');
{write('итераций: ');
if fp1(2-0.1)<1 then
writeln('x=',iter(f1,0.1,2):7:4,i:3)
else writeln('Корни немогут быть найдены данным методом');
} write('комбинированным: ');
gotoxy(20,wherey);
writeln(komb(f1,fp1,0.1,2):7:4,' (',i:3,')');
readln;
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.