Министерство образования и науки РФ
Рязанская Государственная Радиотехническая Академия
Кафедра САПР ВС
Пояснительная записка к курсовой работе
по дисциплине ,,Информатика”
Тема: ,,Метод хорд”
Выполнил:
студент 351 группы
Литвинов Е.П.
Проверил:
Скворцов С.В.
Рязань 2004г.
Контрольный пример к курсовой работе студента 351 группы Литвинова Евгения.
Задание: Разработать программу, которая выполняет уточнение корня нелинейного уравнения отделенного на заданном интервале [a,b], заданным методом.
Решить нелинейное уравнение с использованием разработанной программы и средств системы MathCAD. Сравнить полученные результаты.
Определить количество необходимых итераций для следующих значений погрешностей результата: Eps=;;;;.
Используемый метод: метод хорд.
Контрольный пример: ;
Интервал [a,b]: [0,1].
Вариант: 2.2
Задание принял:
Число выдачи задания:
Число выполнения задания:
Проверил: Скворцов С.В.
Метод хорд.
Пусть дано уравнение , где - непрерывная функция, имеющая в интервале (a,b) производные первого и второго порядков. Корень считается отделенным и находится на отрезке [a,b].
Идея метода хорд состоит в том, что на достаточно малом промежутке [a,b] дугу кривой можно заменить хордой и в качестве приближенного значения корня принять точку пересечения с осью абсцисс. Рассмотрим случай (рис.1), когда первая и вторая производные имеют одинаковые знаки, т.е. .
Уравнение хорды - это уравнение прямой, проходящей через две точки (a, f(a)) и (b, f(b)).
Общий вид уравнения прямой, проходящей через две точки:
Подставляя в эту формулу значения, получим уравнение хорды AB:
.
Пусть x1 - точка пересечения хорды с осью x, так как y = 0, то
x1 может считаться приближенным значением корня.
Аналогично для хорды, проходящей через точки и , вычисляется следующее приближение корня:
В общем случае формулу метода хорд имеет вид:
(1)
Если первая и вторая производные имеют разные знаки, т.е. , то все приближения к корню выполняются со стороны правой границы отрезка (рис.2) и вычисляются по формуле:
(2)
Выбор формулы в каждом конкретном случае зависит от вида функции и осуществляется по правилу: неподвижной является такая граница отрезка изоляции корня, для которой знак функции совпадает со знаком второй производной. Формула (1) используется в том случае, когда . Если справедливо неравенство , то целесообразно применять формулу (2).
Итерационный процесс метода хорд продолжается до тех пор, пока не будет получен приближенный корень с заданной степенью точности. При оценке погрешности приближения можно пользоваться соотношением
Если обозначить через m наименьшее значение |f'(x)| на промежутке [a, b], которое можно определить заранее, то получим формулу для оценки точности вычисления корня:
или
где - заданная погрешность вычислений.
Список идентификаторов.
a – начало отрезка,
b – конец отрезка,
eps – погрешность вычислений,
x – искомое значение корня,
min – модуль значения производной функции в начале отрезка,
d – модуль значения производной функции в конце отрезка,
x0 – точка, в которой мы ищем производную.
****************************************************************
Program kursovaia;
uses crt;
Var
a,b,eps,x,min: real;
{Вычисление данной функции}
Function fx(x:real): real;
begin
fx:=exp(x)-10*x;
end;
----------------------------------------------------------------
{Функция вычисления производной и определение точности вычислений}
{Для определения точности вычисления берем значение 2-й производной в точке x*=}
Function proizv(x0,eps: real): real;
var
dx,dy,dy2: real;
begin
dx:=1;
Repeat
dx:=dx/2;
dy:=fx(x0+dx/2)-fx(x0-dx/2);
dy2:=fx(5*x0/4+dx)-2*fx(5*x0/4);
dy2:=dy2+fx(5*x0/4-dx);
Until abs(dy2/(2*dx))<eps;
proizv:=dy/dx;
end;
----------------------------------------------------------------
{Уточнение количества знаков после запятой}
Function utoch(eps:real): integer;
var
k: integer;
begin
k:=-1;
Repeat
eps:=eps*10;
k:=k+1;
Until eps>1;
utoch:=k;
end;
----------------------------------------------------------------
{Процедура определения наименьшего значения производной на
заданном промежутке}
Procedure minimum(a,b,eps: real; var min: real);
var
d: real;
begin
a:=a-eps;
b:=b+eps;
Repeat
a:=a+eps;
b:=b-eps;
min:=abs(proizv(a,eps));
d:=abs(proizv(b,eps));
If min>d Then min:=d
Until min <>0
end;
----------------------------------------------------------------
{Процедура уточнения корня методом хорд}
Procedure chord(a,b,eps,min: real; var x:real);
Var
x1: real;
begin
x1:=a;
Repeat
x:=x1-((b-x1)*fx(x1))/(fx(b)-fx(x1));
x1:=x
Until abs(fx(x))/min<eps
end;
----------------------------------------------------------------
{Основная программа}
Begin
clrscr;
Writeln ('Введите начало отрезка a, конец отрезка b');
Readln (a,b);
Writeln ('Введите погрешность измерений eps');
Readln (eps);
minimum(a,b,eps,min);
chord(a,b,eps,min,x);
Writeln ('Корень уравнения x= ',x:3:utoch(eps));
End.
****************************************************************
После работы программы для различных значений погрешностей, получим результаты корня x :
0,11
0,111
0,1119
0,11183
0,111833
Результат вычислений в программе MathCAD дал следующее значение корня x:
x=0.112
График функции выглядит так:
Поведение функции вблизи точки пересеченья с осью ОХ выглядит так:
Алгоритм.
Пользуясь рекуррентной формулой (2) и формулой для оценки точности вычисления, составим процедуру уточнения корня методом хорд:
Procedure chord(a, b, eps, min : real; var x : real);
Здесь x:=x1-((b-x1)*fx(x1))/(fx(b)-fx(x1)) – рекуррентная формула,
abs(fx(x))/min < eps – формула для оценки точности вычислений.
При вычислении производной функции
Function proizv(x0, eps : real) : real;
будем иметь в виду, что один из способов найти производную - это взять достаточно малые значения справа и слева на равном расстоянии от - точке, в которой мы хотим найти производную.
Таким образом, вычисляется производная в середине промежутка.
По значениям f' можно таким же способом найти производную от f', т.е. f''. Можно выразить f'' непосредственно через f(x):
Для производной третьего порядка можно использовать следующую формулу:
Здесь dx:=1 - первоначальная величина промежутка,
dx:=dx/2 – для уточнений делим промежуток на 2,
dy:=fx(x0+dx/2 -fx(x0-dx/2) – вычисление первой производной в точке x0 ,
dy2:=fx(5*x0/4+dx)-2*fx(5*x0/4)+fx(5*x0/4-dx) – вычисление второй производной, для определения точности вычисления, используется вторая производная в точке
abs(dy2/(2*dx))<eps - формула для оценки погрешности
дифференцирования,
proizv:=dy/dx – значение первой производной.
Для оценки точности вычисления корня необходимо вычислять наименьшее значение производной f'(x) на промежутке [a, b], поэтому надо найти производную в точке x0.
Так как мы вычислили значение производной, то составим процедуру определения модуля ее наименьшего значения на промежутке [a, b]:
Procedure minimum(a,b,eps:real;var min:real);
Для этого достаточно сравнить модуль значения производной на концах промежутка и выбрать среди этих двух значений меньшее. Это можно сделать , так как по условию, функция на промежутке строго монотонна вместе со своими производными первого и второго порядков. Следует брать значение очень близкое к a, но справа от нее, аналогично для точки b - брать близкое значение слева от b, так как если в точке a или b производная будет равна нулю, тогда деление на нуль станет невозможным и в программе будет получена ошибка.
Здесь min:=abs(proizv(a,eps))- модуль значения производной функции в начале отрезка,
d:=abs(proizv(b,eps))- модуль значения производной функции в конце отрезка,
If min>d Then – сравнение значений модуля производной.
Функция для указания точности вычисления:
Function utoch(eps:real):integer;
Применяется в выводе корня x для уточнения его порядка относительно погрешности.
Здесь k:=k+1 – оператор, подсчитывающий степень погрешности и порядка корня x.
Заданную функцию запишем так:
Function fx(x:real):real;
Здесь fx:=exp(x)-10*x – наша заданная функция.
Блок-схема алгоритма.
Список используемой литературы:
1) Математическое обеспечение САПР: Методические указания к практическим занятиям. Рязань, РРТИ, 1990 (№1706).
2) Математическое обеспечение САПР: Методические указания к лабораторным работам. Рязань, РРТИ, 1991 (№1890).
3) Бахвалов Н.С., Шадков И.П., Кобельников Г.М., Численные методы. М.: Наука, 1987.
4) Волков Е.А., Численные методы. М.: Наука, 1988.
5) Элементы вычислительной математики, под ред. С.Б.Норкина. М.: Высшая школа, 1966.
Похожие работы
... 4. АНАЛИЗ РЕЗУЛЬТАТОВ В результате выполнения задания на курсовую работу была создана программа VI Function 2.0 , находящая корни алгебраического многочлена вида (1) с указываемой точностью посредством следующих методов: · метод деления отрезка пополам; · метод хорд и касательных (комбинированный) Также при составлении программы была учтена возможность наличия у многочлена кратных ...
... уравнения являются нули соответствующей функции. Следует отметить, что обе функции непрерывны и дважды дифференцируемы на всей области определения (–¥ ; ¥). Необходимо найти приближенные решения уравнений с заданной точностью (0,001). С целью упростить работу (в частности, избавить человека от однотипных арифметических и логических операций) и обеспечить максимальную точность ...
... не будет. Эти контраргументы стали основанием для отклонения метода итераций при выборе алгоритмизируемого метода. 2.2.3. Метод половинного деления (метод бисекции) рис.2 Метод половинного деления (известный еще и как «метод деления отрезка пополам») также является рекурсивным, т.е. предусматривает повторение с учетом полученных результатов. ...
... методов Рисунок 12. Решение системы уравнений методом простых итераций Рисунок 13. Решение уравнения методом Зейделя Раздел 4. Сравнительный анализ методов численного дифференцирования и интегрирования 4.1 Методы численного дифференцирования Необходимость численного дифференцирования может возникнуть при необходимости исследований функций заданных табличным образом, кроме тех ...
0 комментариев