Текст программы
procedure TForm1.Button1Click(Sender: TObject);
var a, b, x0, x, Eps:Real;
function F(x:Real):real;
begin
F:=sin(ln(x))-cos(ln(x))+2*ln(x);
end;
begin
a:=StrToFloat(edit1.Text); {начало отрезка}
b:=StrToFloat(edit2.Text); {конец отрезка}
eps:=StrToFloat(edit3.Text); {абсолютная погрешность}
if (F(a)*F(b)>=0) then
edit4.Text:='на заданном отрезке корней нет'
else
begin
if F(a)=0 then x:=a
else
begin
if F(b)=0 then x:=b
else
begin
x0:=(a+b)/2;
while (f(x0)<>0) and (Abs(b-x0)>=eps) do
begin
if (F(a)*F(x0)<0) then b:=x0
else a:=x0;
x0:=(b+a)/2;
end;
x:=x0
end;
end;
edit4.Text:=FloatToStr(x);
end;
end;
end.
Результаты тестирования
С использование программы MathCad был найден корень заданной функции.
Разработанная программа была протестирована в двух режимах: корректные значения, не корректные значения. Граничные значения отсутствуют. Результаты представлены в таблице 1.
Таблица 1. Результаты тестирования.
Режим тестирования |
a |
b |
eps |
Результат |
Корректные значения |
1 0,2 1,2 |
4 6 4 |
0,001 0,00004 0,01 |
1,374267578125 1,37487258911133 1,36953125 |
Не корректные значения |
s |
4 |
0,001 |
Ошибка – неверный формат |
Вывод: программа работает верно.
Заключение
В ходе проделанной работы был освоен способ нахождения корня уравнения методом половинного деления.
Задание 2. Вычисление конечных сумм.
Теоретическое введение
Обычно формула общего члена суммы принадлежит к одному из следующих трех типов:
. xn/n! (-1)n* x2n-1/(2n+1)! x2n/(2n)!
cos(nx)/n sin((2n-1)x)/2n-1 cos(2nx)/4n2-1
X4n-1/4n+1 (-1)n*cos(nx)/n2 n2+1(x/2)n/n!
В случаи b) необходимо каждый член суммы вычислять по общей формуле.
Алгоритм решения задач суммирования при значениях параметра суммирования, изменяющегося в некотором диапазоне с заданным шагом, сводится к двум вложенным циклам. Внутренний цикл суммирует слагаемые при фиксированном параметре x, а внешний организует изменение параметра x. Вычисляемая сумма является частичной суммой некоторого функционального ряда, поэтому наряду с вычислением суммы необходимо вычислить для сравнения и значения соответствующей функции y=F(x).
Техническое задание
Составить программу для вычисления суммы ряда с заданной точностью eps и значения функции на заданном диапазоне изменения аргумента (количество расчетных точек – не менее 10).
Сумма: S=(x*cos(pi)/3))/1+(x^2*cos(2*pi)/3))/2+…+(x^n*cos(n*pi)/3))/n
Диапазон изменения аргумента:0,1<=x<=0,8
Функция y:= -1/2*ln(1-2*x*cos((pi)/3)+x^2)
Анализ технического задания
Для нахождения суммы ряда, значения функции на заданном диапазоне необходимо:
Рассчитать точки
Найти значения функции в полученных точках
Определить способ задания входных параметров – ввод с экрана.
Найти суммы рядов в полученных точках и сопоставить со значениями функции в соответствующих значениях.
Блок-схема
Блок-схема алгоритма
Блок-схема функции
Модульная структура программы
Спецификация на программные модули
Модуль 1.
Имя модуля TForm1.Button1Click(Sender: TObject).
Имя вызывающего модуля – Unit1.
Выполняемые функции – реализует алгоритм нахождения конечных сумм.
Входные данные – eps.
Выходные данные – y,s,x.
Особенности, ограничения – нет.
Модуль 2.
Имя модуля y.
Имя вызывающего модуля – TForm1.Button1Click(Sender: TObject).
Выполняемые функции – вычисление значения функции.
Входные данные – x.
Выходные данные – y.
Особенности, ограничения – нет.
Модуль 3.
Имя модуля Unit1
Имя вызывающего модуля – нет.
Выполняемые функции – обеспечивает работу всех модулей.
Входные данные – нет.
Выходные данные – нет.
Особенности, ограничения – нет.
Модуль 4.
Имя модуля TForm1.FormCreate(Sender: TObject).
Имя вызывающего модуля – Unit1.
Выполняемые функции – обеспечивает очистку полей Memo.
Входные данные – нет.
Выходные данные – нет.
Особенности, ограничения – нет.
