Автор работы: Пользователь скрыл имя, 19 Января 2013 в 16:20, курсовая работа
Метод Ньютона, алгоритм Ньютона (также известный как метод касательных) – это итерационный численный метод нахождения корня (нуля) заданной функции. Поиск решения осуществляется путем построения последовательных приближений и основан на принципах простой итерации.
Задание 3
Сведения из теории методов решения уравнения 3
Метод половинного деления 3
Метод Ньютона (метод касательных) 4
График функции 6
Блок-схема решения задачи 7
Исходный текст программы 10
Результаты расчетов 11
Выводы по работе 12
Список использованной литературы 14
Приложение 15
Пермский государственный технический университет
Курсовая работа по информатике
Пермь,2011
Содержание
Дано уравнение , вид для варианта № 1
В качестве изменяемой переменной выбрана величина . Примем .
Необходимо найти один из корней уравнения двумя методами:
Метод половинного деления
Предположим, что корень отделен на отрезке [a, b] .
Разделим этот отрезок пополам точкой . Если (что практически наиболее вероятно), то возможны два случая: либо f(x) меняет знак на отрезке [a, c] (Рис. 1), либо на отрезке [c, b] (Рис. 2)
|
|
Рис. 1 |
Рис. 2 |
Далее определяется значение функции в этой точке: если f(с)< 0, то [a,с], если наоборот, то [с, b], т.е происходит сужение интервала. Выбирая в каждом случае тот отрезок, на котором функция меняет знак, и продолжая процесс половинного деления дальше, можно дойти до сколь угодно малого отрезка, содержащего корень уравнения.
Таким образом, в результате формируется последовательность xi, где i – номер иттерации.
Вычисления прекращаются, когда разность (b – a) меньше требуемой погрешности.
Метод Ньютона (метод касательных)
Метод Ньютона, алгоритм Ньютона (также
известный как метод
Основная идея метода заключается в следующем: задается начальное приближение вблизи предположительного корня, после чего строится касательная к исследуемой функции в точке приближения, для которой находится пересечение с осью абсцисс. Эта точка и берется в качестве следующего приближения. И так далее, пока не будет достигнута необходимая точность.
Если – начальное приближение корня уравнения f(x) = 0, то последовательные приближения находят по формуле
Если f' и f'' непрерывны и сохраняют определенные знаки на отрезке [a, b], а f(a)f(b) < 0 , то, исходя из начального приближения удовлетворяющего условию можно вычислить с любой точностью единственный корень уравнения f(x) = 0.
Рис. 3. Иллюстрация метода Ньютона (пунктиром изображена функция , нуль которой необходимо найти, сплошной – касательная в точке очередного приближения ). Здесь можно увидеть, что последующее приближение лучше предыдущего .
Алгоритм
В работе составлена программа на языке Pascal, которая выводит в текстовой файл data1.txt в два столбца значения переменной x и функции . (Шаг изменения аргумента принят постоянным). Текст данной программы и результат ее выполнения приведен в приложении.
Затем, используя программное приложение Excel, построен график функции по данным файла data1.txt (рис. 4).
Рис. 4. График функции
Графически был определен отрезок изменения переменной x вблизи корня уравнения .
Исходные данные для решения задачи:
Границы отрезка и погрешность вычислений были заданы в текстовом файле data2.txt.
В программе на языке Pascal решения уравнения методами половинного деления и Ньютона (метод касательных):
Рис. 5. Блок-схема программы решения
Рис. 6. Блок-схема процедуры «Метод Ньютона (метод касательных)»
Рис. 7. Блок-схема процедуры «Метод половинного деления»
PROGRAM Kurs;
function yn(y:real): real;
begin
yn:=abs(y - (sin(y)/cos(y)));
end;
function f(x,y:real): real;
begin
f:=(3*x*x*x-8*sqr(x)-1)/(1+
end;
function fp(x,y:real): real;
begin
fp:=((9*sqr(x)-16*x)*(1+sqr(x)
end;
Procedure Newt(a2,b2,e2:real);
VAR i: integer;
x0, x1, y : real;
s1 : text;
BEGIN
i:=0;
y:=Pi;
x0:=a2;
x1:=x0;
repeat
x0:=x1;
x1:=x0-f(x0,y)/fp(x0,y);
i:=i+1;
until abs(x1-x0)<e2;
assign(s1,'result.txt');
reset(s1);
rewrite(s1);
WRITELN (s1, 'Metod Newtona', ' x =', x1:0:3);
WRITELN (s1, ' kolichestvo iteracii = ', i);
close(s1);
end;
procedure pol(a1,b1, e1:real);
VAR i: integer;
c, x3,y: real;
s1 : text;
BEGIN
c:=(a1+b1)/2;
i:=0;
while abs (b1-a1)>e1 do
begin
i:=i+1;
if (f(a1,y)*f(c,y))< 0 then
b1:=c
else
a1:=c;
c:=(a1+b1)/2;
end;
x3:=(a1+b1)/2;
assign(s1,'result.txt');
reset(s1);
append (s1);
WRITELN (s1, 'Metod Polovinnogo delenia', ' x = ', x3:0:3);
WRITELN (s1, 'kolichestvo iteracii = ', i);
reset(s1);
readln(s1);
close(s1);
end;
VAR a, b : integer;
s: text;
e,y,x1,x3 : real;
BEGIN
y:=Pi;
assign(s,'DATA2.txt');
reset(s);
while not eof(s) do begin
read (s,e);
readln(s);
read (s,a);
readln(s);
read (s,b);
end;
close(s);
newt(a,b,e);
pol(a,b,e);
END.
В программе подсчитано количество шагов (итераций) требуемых для нахождения решения уравнения с заданной точностью каждым из методов.
Результаты расчетов записываются в текстовой файл result.txt.
В результате работы создана программа, которая находит один из корней уравнения двумя методами
Метод Ньютона более быстрый (необходимо меньшее количество итераций), по сравнению с методом половинного деления.
Метод половинного деления решения уравнений отличается тем, что для него не требуется выполнения условия, что первая и вторая производная сохраняют знак на интервале [a,b], единственным условием его применения является непрерывность исследуемой функции.
При практическом применении метода Ньютона можно столкнуться с некоторыми трудностями. Одна из них состоит в необходимости вычисления первой и второй производных функции. Более существенно то, что метод Ньютона обладает только так называемой локальной сходимостью. Это означает, что для гарантии сходимости необходимо выбирать хорошее начальное приближение, в противном случае неудачный выбор отрезка локализации корня может дать расходящуюся последовательность.
Ограничения на исходную функцию для метода Ньютона выглядят так: функция должна быть ограничена; функция должна быть гладкой, дважды дифференцируемой; ее первая производная равномерно отделена от нуля; ее вторая производная должна быть равномерно ограничена.
PROGRAM func;
VAR x, i: integer;
y, f : real;
s : text;
BEGIN
assign(s,'data1.txt');
rewrite(s);
WRITELN (s, ' x f(x)');
for x:=-10 to 10 do
BEGIN
y:= Pi;
f:=(3*x*x*x-8*x*x-1)/(1+x*x*
WRITELN (s,x,' ',f:0:2);
end;
close(s);
END.
Информация о работе Метод Ньютона, метод половинного деления