Численное интегрирование с использованием степенных рядов
Курсовая работа
Численное интегрирование
с использованием степенных рядов
1. Постановка задачи и определение основных
требований к разрабатываемому программному обеспечению
.1 Введение
Интегрирование - вычисление значения определённого интеграла.
Под численным интегрированием понимают набор численных методов отыскания
значения определённого интеграла. Если в конкретном случае для подынтегральной
функции сложно или невозможно найти первообразную, удобно воспользоваться
разложением функции на ряд однотипных слагаемых, и затем интегрировать каждое
слагаемое отдельно до тех пор, пока не будет достигнута требуемая точность.
Данное программное средство было разработано на основе
следующего технического задания:
Разработать программное средство позволяющее применить
численное интегрирование функции с использованием степенных рядов.
.2
Основание для разработки
Программа разрабатывается на основе учебного плана кафедры
«Информационные системы и технологии» по вычислительной математике.
.3
Назначение программного средства
Основной функцией программного средства является численное
интегрирование функции с использованием степенных рядов.
1.4
Требования к программному средству
Требования
к функциональным характеристикам
После запуска программа предлагает пользователю выбрать из
предложенного списка функцию, которую необходимо интегрировать, и необходимые
коэффициенты. После этого пользователь вводит пределы интегрирования и
требуемую точность вычислений. Нажав на кнопку, пользователь получает ответ или
сообщение о некорректно введённых данных или некорректно поставленной задаче.
Требования
к надежности
Предусмотреть блокировку некорректных действий.
Требования
к условиям эксплуатации
Носитель с программой должен эксплуатироваться в условиях с
температурой от -5 до 500С и влажностью воздуха 10-80%.
Требования
к составу и параметрам технических средств
Наличие ПК с клавиатурой. Необходимое пространство на жестком
диске - около 400 Кб.
Требования
к информационно-программной совместимости
Программа должна работать под управление операционной системы
семейства DOS (версии не ниже 3.3), либо Win 32 (Windows 95, Windows 98, Windows 2000, Windows XP, Windows Vista Windows 7 и т. п.).
2. Проектирование программного средства и
программная реализация
интегрирование модульный алгоритм программный
2.1
Построение математической модели для интегрирования функции с использованием
степенных рядов
Пусть нам необходимо вычислить определённый интеграл
некоторой функции f(x) на отрезке [a, b]. Введём понятие
степенного ряда.
Степенной ряд - это функциональный ряд следующего вида:
C0+C1(x-x0)+C2(x-x0)2+…+Cn(x-x0)n+…
Здесь С0,С1,С2,…,Сn,… - некоторые
фиксированные известные числа, которые называются коэффициентами степенного
ряда, они образуют бесконечную последовательность. X0 - известное число
(фиксированное) - центр разложения степенного ряда. X - переменная величина.
Для любого степенного ряда существует интервал (-R;R), в каждой внутренней
точке которого ряд сходится, а в каждой внешней точке расходится.
Разложением функции y= f(x) в степенной ряд
называется представление этой функции в некоторой области значений переменного x в виде суммы сходящегося
степенного ряда. Область, в которой функция представлена в виде суммы
степенного ряда, называется областью разложения функции в степенной ряд.
Если данная функция разлагается в степенной ряд, то
разложение
называется ряд Тейлора для функции f(x), а при x0=0 - ряд
Маклорена.
Всякой функции, которая в точке x0 имеет
бесконечное число производных, можно сопоставить ряд Тейлора.
Одно из основных свойств степенного ряда выглядит так:
То есть, разложив функцию в ряд Маклорена и проинтегрировав каждое
слагаемое (пока не будет достигнута требуемая точность), а затем просуммировав
их, мы проинтегрируем исходную функцию. Интегрировать каждое слагаемое в
отдельности безусловно проще, так как здесь мы имеем дело с интегрированием
хорошо известной степенной функции.
При вычислениях необходимо учитывать, что отрезок интегрирования
должен попадать в область сходимости ряда.
Если нам необходимо проинтегрировать не функцию f(x), а,
например, функцию f(x2), то в разложении функции f(x) следует заменить x на x2, а затем поступать аналогично.
Для основных элементарных функций составлены типовые разложения:
) ,
) ,
) ,
) , при ; при .
) ,
) ,
) ,
) ,
) ,
) ,
Для знакочередующихся рядов вычисление приближённого значения
интеграла следует прекратить тогда, когда абсолютное значение очередного
слагаемого станет меньше требуемой точности e. Для знакопостоянных рядов необходимо оценить сумму членов,
отброшенных после n-ого
слагаемого. Как только эта сумма станет меньше e, вычисления можно прекратить.
.2
Ручное интегрирование функции с использованием степенных рядов
Найти интеграл , e=0,0001.
Решение.
Разложим функцию cosx в степенной
ряд:
Проинтегрируем получившийся ряд:
Так как программа производит вычисления с большим количеством
знаков после запятой, она даёт более точный результат, равный 0,841468.
Вычислим данный интеграл вручную:
Таким образом, мы видим, что наш метод работает верно и точность
вычислений соблюдается.
.3 Разработка модульной структуры программы
Рис. 1. Модульная структура программы
2.4
Разработка алгоритма программы
Блок-схема
программы
1. Основная программа - процедура Button1Click(Sender:
TObject).
Назначение: основная процедура программы, производит проверки
на корректность данных и выводит результат работы программы. (см. Рис. 2).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 2.1.. Процедура Button1Click
Рис. 2.2. Процедура Button1Click
Рис. 2.3. Процедура Button1Click
2. Процедура proc0.
Назначение: считает значение интеграла функции e^(kx). (см. Рис. 3).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 3.1. Процедура Proc0
Рис. 3.2. Процедура Proc0
3. Процедура proc1.
Назначение: считает значение интеграла функций sin(kx), arctg (kx) (см. Рис. 4).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 4.1.. Процедура Proc1
Рис. 4.2. Процедура Proc1
4. Процедура proc2.
Назначение: считает значение интеграла функций cos(kx). (см. Рис. 5).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 5.1. Процедура Proc2
Рис. 5.2. Процедура Proc2
5.
Процедура proc4.
Назначение: считает значение интеграла функции (1+kx)^m. (см. Рис. 6).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 6. Процедура Proc4
6.
Процедура proc5.
Назначение: считает значение интеграла функций 1/(1+kx). (см. Рис. 7).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 7. Процедура Proc5
7. Процедура proc6.
Назначение: считает значение интеграла функции 1/(1-kx). (см. Рис. 8).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 8.1. Процедура Proc6
Рис. 8.2. Процедура Proc6
8. Процедура proc7.
Назначение: считает значение интеграла функции ln(1+kx). (см. Рис. 9).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 9 Процедура Proc7.
9.
Процедура proc9.
Назначение: считает значение интеграла функции sh(kx). (см. Рис. 10).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 10.1. Процедура Proc9
Рис. 10.2. Процедура Proc9
10. Процедура proc10.
Назначение: считает значение интеграла функции ch(kx). (см. Рис. 11).
Входные параметры: нет.
Выходные параметры: нет.
Рис. 11.1. Процедура Proc10
Рис. 11.2. Процедура Proc10
2.5
Описание структур, типов данных и глобальных переменных
На главной форме присутствуют объекты:- объект для
осуществления выбора функции.
Edit2 - поле для ввода коэффициента k.
Edit4 - поле для ввода коэффициента m.
Edit5 - поле для ввода предела интегрирования a.
Edit6 - поле для ввода предела интегрирования b.
Edit7 - поле для ввода точности вычислений e.
Edit8 - поле для вывода ответа.
Button1 - кнопка «Ответ».
В программе используются следующие глобальные переменные:
real fb2 - значение интеграла в точке b на текущем шаге.
real fa1 - значение интеграла в точке a на предыдущем
шаге.
real fa2 - значение интеграла в точке a на текущем шаге.
real k - коэффикиент перед x.
real m - параметр функции.
real a - верхний предел интегрирования.
real b - нижний предел интегрирования.
real e - точность.
boolean f - определяет алгоритм вычиисления схожих функций.
2.6
Описание процедур и функций
1 Процедура Button1Click(Sender: TObject).
Назначение: основная процедура программы, производит проверки
на корректность данных и выводит результат работы программы. (см. Рис. 2).
Входные параметры: нет.
Выходные параметры: нет.
2. Процедура proc0.
Назначение: считает значение интеграла функции e^(kx). (см. Рис. 3).
Входные параметры: нет.
Выходные параметры: нет.
3. Процедура proc1.
Назначение: считает значение интеграла функций sin(kx), arctg (kx) (см. Рис. 4).
Входные параметры: нет.
Выходные параметры: нет.
4. Процедура proc2.
Назначение: считает значение интеграла функций cos(kx). (см. Рис. 5).
Входные параметры: нет.
Выходные параметры: нет.
5. Процедура proc4.
Назначение: считает значение интеграла функции (1+kx)^m. (см. Рис. 6).
Входные параметры: нет.
Выходные параметры: нет.
6. Процедура proc5.
Назначение: считает значение интеграла функции 1/(1+kx). (см. Рис. 7).
Входные параметры: нет.
Выходные параметры: нет.
7. Процедура proc6.
Назначение: считает значение интеграла функций 1/(1-kx). (см. Рис. 8).
Входные параметры: нет.
Выходные параметры: нет.
8. Процедура proc7.
Назначение: считает значение интеграла функции ln(1+kx). (см. Рис. 9).
Входные параметры: нет.
Выходные параметры: нет.
9. Процедура proc9.
Назначение: считает значение интеграла функции sh(kx). (см. Рис. 10).
Входные параметры: нет.
Выходные параметры: нет.
10. Процедура proc10.
Назначение: считает значение интеграла функции ch(kx). (см. Рис. 11).
Входные параметры: нет.
Выходные параметры: нет.
Заключение
В данной курсовой работы были закреплены и систематизированы
навыки программирования на языке Delphi, а так же навыки в разработке алгоритмов и в
составлении программ для решения поставленной задачи. Был изучен один из
методов численного интегрирования функции - интегрирование функции с
использованием степенных рядов.
Список литературы
1. Delphi. Программирование на языке высокого уровня / В.В Фаронов - СПб.:
Питер, 2007. - 640 с.
2. Демидович
Б.П., Марон И.А. Основы вычислительной математики. - М.: Наука, 1970.
Приложение
Исходный текст программы
unit Unit1;
interface
, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,, StdCtrls;
= class(TForm): TLabel;: TComboBox;: TLabel;:
TLabel;: TEdit;: TLabel;: TEdit;: TButton;: TEdit;: TLabel;: TLabel;: TEdit;:
TLabel;: TLabel;: TLabel;: TEdit;: TEdit;Button1Click(Sender:
TObject);proc0;proc1;proc2;proc4;proc5;proc6;proc7;proc9;proc10;
{ Private declarations }
{ Public declarations };
: TForm1;,fa1,fb2,fa2,k,m,a,b,e:real;:boolean;
{$R *.dfm}
TForm1.Button1Click(Sender:
TObject);s:real;(length(edit2.text)=0) or (length(edit5.text)=0) or
(length(edit6.text)=0) or (length(edit7.text)=0)MessageDlg ('Заполните все
поля', mtInformation, [mbOk], 0);((form1.ComboBox1.ItemIndex=3) or
(form1.ComboBox1.ItemIndex=4)) and (length(edit4.text)=0) then MessageDlg
('Введите значение m', mtInformation, [mbOk],
0);:=StrToFloat(Edit2.Text);:=StrToFloat(Edit5.Text);:=StrToFloat(Edit6.Text);:=StrToFloat(Edit7.Text);EconvertError
do
('Значения полей должны быть числовыми', mtInformation, [mbOk], 0);
end;(form1.ComboBox1.ItemIndex=3) or
(form1.ComboBox1.ItemIndex=4) then:=StrToFloat(Edit4.Text);EconvertError
do('Значения полей должны быть числовыми', mtInformation, [mbOk],
0);;;(form1.ComboBox1.ItemIndex=4) or (form1.ComboBox1.ItemIndex=5) or
(form1.ComboBox1.ItemIndex=6) or (form1.ComboBox1.ItemIndex=7)((k*a<=-1) or
(k*b<=-1)) or ((k*b>=1) or (k*a>=1)) then MessageDlg ('Неверные
пределы интегрирования', mtInformation, [mbOk], 0);(form1.ComboBox1.ItemIndex=8)
then((k*a<-1) or (k*b<-1)) or ((k*b>1) or (k*a>1)) then MessageDlg
('Неверные пределы интегрирования', mtInformation, [mbOk],
0);(form1.ComboBox1.ItemIndex=1) then f:=true;a<>b
thenform1.ComboBox1.ItemIndex of
: proc0;
: proc1;
: proc2;
: proc4;
: proc5;
: proc6;
: proc7;
: proc1;
: proc9;
:
proc10;;:=fb1-fa1;s:=0;.Clear;.text:=FloatToStr(s);;
procedure TForm1.proc0;x,x1,r:real;
i,p:integer;:=b*k;:=b*k;:=2;:=1;:=x;:=x*x1;:=x/(i*p);b<(i+1) thenb=0
then:=1/(p*i*(i+1-b))(b>0) or ((i+1)mod 2=0) then:=exp(ln(abs(b))*(i+1))/(p*i*(i+1-b)):=-exp(ln(abs(b))*(i+1))/(p*i*(i+1-b))r:=1;abs(r)>e
do:=fb1+fb2;:=x*x1;:=p*i;:=i+1;:=x/(k*i*p);b<(i+1) thenb=0
then:=1/(p*i*(i+1-b))(b>0) or ((i+1)mod 2=0)
then:=exp(ln(abs(b))*(i+1))/(p*i*(i+1-b)):=-exp(ln(abs(b))*(i+1))/(p*i*(i+1-b))r:=1;;:=a*k;:=a*k;:=2;:=1;:=x;:=x*x1;:=x/(k*i*p);a<(i+1)
thena=0 then:=1/(p*i*(i+1-a))(a>0) or ((i+1)mod 2=0)
then:=exp(ln(abs(a))*(i+1))/(p*i*(i+1-a))r:=-exp(ln(abs(a))*(i+1))/(p*i*(i+1-a))r:=1;abs(r)>e
do:=fa1+fa2;:=x*x1;:=p*i;:=i+1;:=x/(k*i*p);a<(i+1) thena=0
then:=1/(p*i*(i+1-a))(a>0) or ((i+1)mod 2=0)
then:=exp(ln(abs(a))*(i+1))/(p*i*(i+1-a))r:=-exp(ln(abs(a))*(i+1))/(p*i*(i+1-a))r:=1;;;
TForm1.proc1;x,x1:real;
i,p,z:integer;:=b*k*b*k;:=b*k*b*k;:=2;:=1;:=1;:=x/(k*i*p);:=i+2;:=z*(-1);f then:=p*(i-1)*(i-2);:=x*z/(k*i*p);:=x*z/(k*i*(i-1));abs(fb2)>e
do:=fb1+fb2;:=x*x1;:=i+2;:=z*(-1);f
then:=p*(i-1)*(i-2);:=x*z/(k*i*p);:=x*z/(k*i*(i-1));;:=a*k*a*k;:=a*k*a*k;:=2;:=1;:=1;:=x/i*p;:=i+2;:=z*(-1);f
then:=p*(i-1)*(i-2);:=x*z/(k*i*p);:=x*z/(k*i*(i-1));abs(fa2)>e
do:=fa1+fa2;:=x*x1;:=i+2;:=z*(-1);f
then:=p*(i-1)*(i-2);:=x*z/(k*i*p);:=x*z/(k*i*(i-1));;;
TForm1.proc2;x,x1:real;
i,p,z:integer;:=b*k;:=b*k*b*k;:=x;:=x*x1;:=-1;:=3;:=2;:=x*z/(k*i*p);abs(fb2)>e
do:=fb1+fb2;:=z*(-1);:=x*x1;:=i+2;:=p*(i-1)*(i-2);:=x*z/(k*i*p);;:=a*k;:=a*k*a*k;:=x;:=x*x1;:=-1;:=3;:=2;:=x*z/(k*i*p);abs(fa2)>e
do:=fa1+fa2;:=z*(-1);:=x*x1;:=i+2;:=p*(i-1)*(i-2);:=x*z/(k*i*p);;;
TForm1.proc4;x,x1,m1:real;
i,p:integer;:=b*k;:=b*k;:=x;:=2;:=1;:=x*x1;:=m;:=m1*x/(k*i*p);abs(fb2)>e
do:=fb1+fb2;:=m1*(m1-i+1);:=x*x1;:=p*i;:=i+1;:=m1*x/(k*i*p);;:=a*k;:=a*k;:=x;:=2;:=1;:=x*x1;:=m;:=m1*x/(k*i*p);abs(fa2)>e
do:=fb1+fb2;:=m1*(m1-i+1);:=x*x1;:=p*i;:=i+1;:=m1*x/(k*i*p);;;
procedure TForm1.proc5;x,x1:real;
i,z:integer;:=b*k;:=b*k;:=x;:=2;:=x*x1;:=-1;:=x*z/(k*i);abs(fb2)>e
do:=fb1+fb2;:=z*(-1);:=x*x1;:=i+1;:=x*z/(k*i);;:=a*k;:=a*k;:=x;:=2;:=x*x1;:=-1;:=x*z/(k*i);abs(fa2)>e
do:=fa1+fa2;:=z*(-1);:=x*x1;:=i+1;:=x*z/(k*i);;;
TForm1.proc6;x,x1,r:real;
i:integer;:=b*k;:=b*k;:=x;:=2;:=x*x1;:=x/(k*i);b<i thenb=0
then:=1/((i+1)*(i-b))(b>0) or ((i+1)mod 2=0)
then:=exp(ln(abs(b))*(i+1))/((i+1)*(i-b)):=-exp(ln(abs(b))*(i+1))/((i+1)*(i-b))r:=1;abs(r)>e
do:=fb1+fb2;:=x*x1;:=i+1;:=x/(k*i);b<i thenb=0 then:=1/((i+1)*(i-b))(b>0)
or ((i+1)mod 2=0) then:=exp(ln(abs(b))*(i+1))/((i+1)*(i-b)):=-exp(ln(abs(b))*(i+1))/((i+1)*(i-b))r:=1;;:=a*k;:=a*k;:=x;:=2;:=x*x1;:=x/(k*i);a<i
thena=0 then:=1/((i+1)*(i-a))(a>0) or ((i+1)mod 2=0)
then:=exp(ln(abs(a))*(i+1))/((i+1)*(i-a)):=-exp(ln(abs(a))*(i+1))/((i+1)*(i-a))r:=1;abs(r)>e
do:=fa1+fa2;:=x*x1;:=i+1;:=x/(k*i);a<i thena=0 then:=1/((i+1)*(i-a))(a>0)
or ((i+1)mod 2=0)
then:=exp(ln(abs(a))*(i+1))/((i+1)*(i-a)):=-exp(ln(abs(a))*(i+1))/((i+1)*(i-a))r:=1;;;
TForm1.proc7;x,x1:real;
i,z:integer;:=b*k*b*k;:=b*k;:=2;:=x/(k*i);:=-1;:=x*x1;:=i+1;:=x*z/(k*i*(i-1));abs(fb2)>e
do:=fb1+fb2;:=z*(-1);:=x*x1;:=i+1;:=x*z/(k*i*(i-1));;:=a*k*a*k;:=a*k;:=2;:=x/(k*i);:=-1;:=x*x1;:=i+1;:=x*z/(k*i*(i-1));abs(fa2)>e
do:=fa1+fa2;:=z*(-1);:=x*x1;:=i+1;:=x*z/(k*i*(i-1));;;
TForm1.proc9;x,x1,r:real; i,p:integer;:=b*k*b*k;:=b*k*b*k;:=2;:=1;:=x/(k*i*p);:=i+2;:=p*(i-1)*(i-2);:=x/(k*i*p);b<(i+2)
thenb=0
then:=(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b)):=exp(ln(abs(b))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b))r:=1;abs(r)>e
do:=fb1+fb2;:=x*x1;:=i+2;:=p*(i-1)*(i-2);:=x/(k*i*p);b<(i+2) thenb=0
then:=(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b)):=exp(ln(abs(b))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b))r:=1;;:=a*k*a*k;:=a*k*a*k;:=2;:=1;:=x/i*p;:=i+2;:=p*(i-1)*(i-2);:=x/(k*i*p);a<(i+2)
thena=0 then:=(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a)):=exp(ln(abs(a))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a))r:=1;abs(r)>e
do:=fa1+fa2;:=x*x1;:=i+2;:=p*(i-1)*(i-2);:=x/(k*i*p);a<(i+2) thena=0
then:=(i+2)/(p*i*(i+1)*(i+3-a*a)):=exp(ln(abs(a))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a))r:=1;;;
TForm1.proc10;x,x1,r:real; i,p:integer;:=b*k;:=b*k*b*k;:=x;:=x*x1;:=3;:=2;:=x/(k*i*p);b<(i+2)
thenb=0 then:=(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b))b>0
then:=exp(ln(abs(b))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b)):=-exp(ln(abs(b))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b))r:=1;abs(r)>e
do:=fb1+fb2;:=x*x1;:=i+2;:=p*(i-1)*(i-2);:=x/(k*i*p);b<(i+2) thenb=0
then:=(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b))b>0
then:=exp(ln(abs(b))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b)):=-exp(ln(abs(b))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-b*b))r:=1;;:=a*k;:=a*k*a*k;:=x;:=x*x1;:=3;:=2;:=x/(k*i*p);a<(i+2)
thena=0 then:=(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a))a>0
then:=exp(ln(abs(a))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a)):=-exp(ln(abs(a))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a))r:=1;abs(r)>e
do:=fa1+fa2;:=x*x1;:=i+2;:=p*(i-1)*(i-2);:=x/(k*i*p);a<(i+2) thena=0
then:=(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a))a>0
then:=exp(ln(abs(a))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a)):=-exp(ln(abs(a))*(i+2))*(i+2)/(p*i*(i+1)*(sqr(i+2)-a*a))r:=1;;