Реферат: Разработка программы расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью
Название: Разработка программы расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью Раздел: Рефераты по информатике, программированию Тип: реферат |
Разработка программы расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностьюМинистерство образования Республики Беларусь УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ Кафедра "ЭП и АПУ" К курсовой работе по дисциплине “Вычислительная техника и программирование” Выполнил студент группы ЭП-012 Гончаров А. М. Могилев, 2003 Министерство образования Республики Беларусь УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ Курсовая работаРазработка программы расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью Пояснительная запискаБУЛ 07.00.00.000 ПЗРуководитель ст. преподаватель ______________ Абрашкин В.П. Студент группы ЭП-02______________ Гончаров А.М. Могилев, 2003 Содержание Введение 1 Постановка задачи 1.1 Общая характеристика задачи 1.2 Анализ литературных источников 1.3 Расчётные формулы метода 2 Разработка алгоритма задачи 2.1 Описание данных , используемых для решения задачи 2.2 Описание схемы программы 3 Кодирование программы 3.1 Описание структуры разрабатываемого пакета 3.2 Описание используемых типов данных 3.3 Проектирование интерфейса программы 4 Тестирование программы 5 Разработка гипертекстового варианта документа Заключение Список используемых источников Приложение А. Твёрдая копия Приложение Б. Результаты тестирования программы Приложение В. Тестирование данных в математическом пакете Приложение Г. Гипертекстовый вариант документа Приложение Д. Акт приёмки программы ВведениеДанный курс «Вычислительной техники и программирования» мы заканчиваем курсовым проектом, в котором нам следует разработать программу согласно полученному заданию. Стремительное развитие науки и техники, в том числе и вычислительной, требует знания её от каждого, считающего себя образованным, человека. Из-за всё возрастающей сложности многих объектов требуется улучшенная организация процесса программного моделирования и высокая степень образованности специалистов, а повышение требований к функционированию этих объектов делают нашу задачу еще более сложной. Для решения этой задачи применяется математическое моделирование, которое осуществляется опять же с помощью вычислительной техники, в частности компьютера. Нельзя не упомянуть о том, что широкое применение в современной науке и технике получили дифференциальные уравнения различной степени и вида сложности. В частности, они применяются в электротехнике, машиностроении, электронике, разработке различного рода аппаратного обеспечивания, математике, физике и других видах деятельности человека. Наша задача: создать способ быстрого, качественного, удобного и недорого решения поставленных перед нами задач. В данной курсовой работе мы применили численные методы нахождения определенного интеграла. Данной курсовой работой мы заканчиваем цикл лекций и лабораторных работ по изучению среды программирования C Builder v5.0, программы выполнения расчетов MathCad, работы в многофункциональном текстовом редакторе Word XP, программы выполнения чертежей AutoCad и использованию функциональных возможностей операционной системы Windows XP. Все эти знания я постарался использовать в своем курсовом проекте. 1 Постановка задачи
1.1 Общая характеристика задачи
Численное интегрирование используется для приближенного поиска значения определенного интеграла непрерывной функции f(x) на заданном интервале [a,b] согласно выражению , ( 1.1 ) где Q[f] – формула численного интегрирования; E[f] – ошибка усечения. Формула численного интегрирования называется формулой квадратуры. В общем виде она может быть представлена как сумма ( 1.2 ) где X0 , ... , XK – узлы квадратуры; w0 , ... , wK – веса квадратуры. Степень точности формулы квадратуры равна положительному целому числу n. Величина ошибки отсечения определяется в общем случае согласно выражению E[f]=K×f(n+1) (c), ( 1.3 ) где К – определенный коэффициент, n – степень точности. 1.2 Анализ литературных источников
В зависимости от вида выражения квадратуры для нахождения значения определенного интеграла используются следующие численные методы: 1) правых, левых и средних прямоугольников; 2) трапеций; 3) формулы Симпсона и Буля; 4) Монте-Карло; 5) формулы Гаусса-Лежандра, 6) рекуррентные формулы. В зависимости от степени производной, учитываемой численным методом, определяется степень точности метода. Шаг интегрирования может быть постоянным на всём расчётном интервале аргумента X или изменяться в зависимости от величины ошибки определения функции. 1.3 Расчётные формулы метода Составная формула Буля с порядком m=4 имеет вид ( 1 ) 2 Разработка алгоритма решения задачи2.1 Описание данных, используемых для решения задач В данной задаче использовались следующие данные: 1) исходные(входные)данные: - начало отрезка а; - конец отрезка b; - точность. 2) выходные результаты решения: -значение интеграла. Схема алгоритма составлена в соответствии с математическим описанием курсовой работы и отображает последовательность операций в программе. При ее изображении используются правила и требования ГОСТ 19.701.90. Произведено выделение основных этапов в виде подпрограмм, выполняющих следующие действия: а) ввод исходных данных с клавиатуры; б) выполнение расчета; в) вывод полученных результатов на экран и в файл. Все подпрограммы выполнены в виде процедур [2]. Основные процедуры и программа выполнены на листе. При этом описание функционального назначения блоков схемы алгоритма приведено в комментариях. 3.1 Описание структуры разрабатываемого пакета Программа курсовой работы разработана в среде визуального программирования CBuilder 5.0 и состоит из головной программы, блоковUnit1, Unit2, Unit3. Программа выполнена на основе структурного программирования и содержит следующие процедуры и функции: а) f; б) Вооl. 3.2 Описание используемых типов данных
В данной задаче использовались следующие типы данных: 1) переменная: a,b,e,I ,h,s,N типа float; 2) локальные переменные для перебора элементов массивов: i,j,k типа int; 3.3 Проектирование интерфейса программы
Основные процедуры, используемые при составлении алгоритма: а) f-вызывает расчётную функцию;б) Bool- расчёт определённого интеграла. 4 Тестирование программы
4.1 Тестирование программы в математическом пакете.
4.2 Тестирование программы Для тестирования использована функция f(x)=5*x5 -x3 . Рисунок 1- Основное окно. Рисунок 2 – Ввод данных. Тестирование проводилось на ЭВМ со следующими характеристиками: - центральный процессор – Intel Pen tium 2.2 GHz; - оперативная память – 1024Mb; - видеоадаптер – GeForce 4 64 Mb; - монитор – Sony Trinitron; - операционная система – Windows XP. 5 Разработка гипертекстового варианта документа
Рисунок 3-Гипертекстовый вариант Для перевода текста программы в формат HTML использовалась команда приложения MicrosoftWord (пакета Office XP) “Сохранить как Web-страницу”. Вид полученного документа, отображаемого InternetExplorer 5.0 представлен на рисунке 3. ЗаключениеВ данной курсовой работе разработана программа расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью При работе над программой пройдены все этапы создания программных продуктов. Получены навыки в математическом описании задачи, разработке алгоритма программы, составлении текста программы и проведении тестирования программы. Использована система программирования C Builder v5.0. Список использованных источников1 Крылов В.И. Вычислительные методы высшей математики. Т.1./ Под ред. И.П. Мысовских. — Мн.: Вышэйшая школа, 1972. 2 Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран, Паскаль - Томск: МП Таско", 1992 3 Херхагер М., Партолль X. MathCAD 2000; полное руководство: Пер. с нем. - К.: Издательская группа BHV, 2000. - 416с. 4 Гусак А.А., Гусак ГМ. Справочник по высшей математике. - Мн.: Наука и техника, 1991. Приложение А(обязательное) Твёрдая копия
Project1.cpp //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop USERES("Project1.res"); USEFORM("Unit1.cpp", Form1); USEFORM("Unit2.cpp", Form2); USEFORM("Unit3.cpp", Form3); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->CreateForm(__classid(TForm2), &Form2); Application->CreateForm(__classid(TForm3), &Form3); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //---------------------------------------------------------------------------
Unit1.cpp //--------------------------------------------------------------------------- #include <vcl.h> #include<io.h> #include<math.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" #include "Unit3.h" #include <fcntl.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; float a=0,b=10,e=0.01,I[2]; float f(float x) { return 5*pow(x,5)-pow(x,3); } //------------------------------------- void Bool() { float h,s,x[5],N=2; int i,l; do { for(l=0;l<=1;l++) { s=0; h=(b-a)/N; x[0]=a; x[1]=a+h/4; x[2]=a+h/2; x[3]=a+3*h/4; x[4]=a+h; for(i=1;i<=N;i++) { s=(7*f(x[0])+32*f(x[1])+12*f(x[2])+32*f(x[3])+7*f(x[4]))+s; x[0]+=h; x[1]+=h; x[2]+=h; x[3]+=h; x[4]+=h; } I[l]=h*s/45/2; N=N*2; } }while(fabs(I[0]-I[1])>e); } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Exit1Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Exit2Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Exit1pop(TObject *Sender, TCanvas *ACanvas, TRect &ARect, bool Selected) { SB1->SimpleText="Выход"; } //--------------------------------------------------------------------------- void __fastcall TForm1::N1Click(TObject *Sender) { Form2->Show(); SB1->SimpleText="Ввод данных закончен"; } //--------------------------------------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender) { Bool(); Form3->Show(); SB1->SimpleText="Произведен расчет"; } //--------------------------------------------------------------------------- Unit2.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #include<iostream.h> #pragma hdrstop #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "ibctrls" #pragma link "ibreg" #pragma link "CSPIN" #pragma resource "*.dfm" TForm2 *Form2; extern float a,b,e; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //------------------------------------------ //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject *Sender) { Form2->Close(); } //--------------------------------------------------------------------------- float __fastcall TForm2::checkf(TObject *Sender,TEdit *e1,float w) { float buf; do{ try { if(e1->Text!="") buf=StrToFloat(e1->Text);else buf=w; } catch(const EConvertError &e) { int j=Application->MessageBox("Неверные данные", NULL, MB_OK); buf=-1; e1->Text=FloatToStr(w); }}while((buf==-1)); return buf; } //---------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { e=checkf(Sender,Edit4,e); a=checkf(Sender,Edit1,a); b=checkf(Sender,Edit2,b); Form2->Close(); } //--------------------------------------------------------------------------- void __fastcall TForm2::FormCreate(TObject *Sender) { Edit1->Text=FloatToStr(a); Edit2->Text=FloatToStr(b); Edit4->Text=FloatToStr(e); } //--------------------------------------------------------------------------- void __fastcall TForm2::GroupBox1Click(TObject *Sender) { } //---------------------------------------------------------------------------
Unit3.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit3.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "PERFGRAP" #pragma resource "*.dfm" TForm3 *Form3; extern float I[2]; //--------------------------------------------------------------------------- __fastcall TForm3::TForm3(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm3::BitBtn1Click(TObject *Sender) { Form3->Close(); } //--------------------------------------------------------------------------- void __fastcall TForm3::FormCreate(TObject *Sender) { SaveDialog1->InitialDir= GetCurrentDir(); Edit1->Text=FloatToStr(I[1]); } //--------------------------------------------------------------------------- void __fastcall TForm3::Button1Click(TObject *Sender) { TStringList *s; s= new TStringList; SaveDialog1->Execute(); s->Add(" Значение интеграла равно"+FloatToStr(I[1])); s->SaveToFile(SaveDialog1->FileName); delete s; } //--------------------------------------------------------------------------- void __fastcall TForm3::Label1Click(TObject *Sender) {
} //--------------------------------------------------------------------------- Приложение Б
Результаты тестирования программы.
Рисунок 4 - Результат тестирования
Приложение В. Тестирование данных в математическом пакете.
Приложение Г
Гипертекстовый вариант документа
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=windows-1251"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 9"> <meta name=Originator content="Microsoft Word 9"> <link rel=File-List href="./1%20Постановка%20задач1.files/filelist.xml"> <link rel=Edit-Time-Data href="./1%20Постановка%20задач1.files/editdata.mso"> <link rel=OLE-Object-Data href="./1%20Постановка%20задач1.files/oledata.mso"> <!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--> <title>1 Постановка задачи</title> <!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>ДМИТРИЙ</o:Author> <o:Template>Normal</o:Template> <o:LastAuthor>ДМИТРИЙ</o:LastAuthor> <o:Revision>1</o:Revision> <o:TotalTime>0</o:TotalTime> <o:Created>2003-06-07T13:56:00Z</o:Created> <o:LastSaved>2003-06-07T13:57:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Company>HOME</o:Company> <o:Lines>1</o:Lines> <o:Paragraphs>1</o:Paragraphs> <o:Version>9.2812</o:Version> </o:DocumentProperties> </xml><![endif]--> <style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} h2 {mso-style-next:Обычный; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:35.9pt; margin-bottom:.0001pt; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:2; background:white; font-size:14.0pt; mso-bidi-font-size:12.0pt; font-family:"Courier New"; color:black; letter-spacing:-.6pt; mso-bidi-font-weight:normal;} h6 {mso-style-next:Обычный; margin:0cm; margin-bottom:.0001pt; text-align:center; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:6; tab-stops:61.7pt; font-size:14.0pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman";} @page Section1 {size:595.3pt 841.9pt; margin:2.0cm 42.5pt 2.0cm 3.0cm; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1134"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> </head> <body lang=RU style='tab-interval:35.4pt'> <div> <h6 style='tab-stops:35.4pt'><a name="_Toc11439953">1 Постановка задачи</a></h6> <p> style="mso-spacerun: yes"> </span></span></b><span style='font-size:14.0pt; mso-bidi-font-size:12.0pt'><span style="mso-spacerun: yes"> </span><o:p></o:p></span></p> <h2><a name="_Toc11439954"><span style='font-family:"Times New Roman"; font-weight:normal;mso-bidi-font-weight:bold'>1.1 Общая характеристика задачи</span></a><span style='font-family:"Times New Roman";font-weight:normal;mso-bidi-font-weight: bold'><o:p></o:p></span></h2> <p> mso-bidi-font-size:12.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> <p> mso-bidi-font-size:12.0pt'>Численное интегрирование используется для приближенного поиска значения определенного интеграла непрерывной функции </span><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language: EN-US'>f</span><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>(</span><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language: EN-US'>x</span><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>) на заданном интервале [a,b] согласно выражению<o:p></o:p></span></p> <p> style='font-size:14.0pt;mso-bidi-font-size:12.0pt'><sub><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1049" type="#_x0000_t75" style='width:180.75pt; height:45.75pt' o:ole="" fillcolor="window"> <v:imagedata src="./1%20Постановка%20задач1.files/image001.wmz" o:title=""/> </v:shape><![endif]--><![if !vml]><img width=241 height=61 src="./1%20Постановка%20задач1.files/image002.gif" v:shapes="_x0000_i1049"><![endif]></sub><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1049" DrawAspect="Content" ObjectID="_1116513810"> </o:OLEObject> </xml><![endif]-->,<span style='mso-tab-count:3'> </span>( 1.1 )<o:p></o:p></span></p> <p> style='mso-tab-count:1'> </span>где <span style='mso-tab-count:1'> </span></span><i><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language: EN-US'>Q</span></i><i><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>[</span></i><i><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language: EN-US'>f</span></i><i><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>]</span></i><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'> – формула численного интегрирования;<o:p></o:p></span></p> <p> style='mso-tab-count:2'> </span></span><i><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language:EN-US'>E</span></i><i><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>[</span></i><i><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;mso-ansi-language: EN-US'>f</span></i><i><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>]</span></i><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'> – ошибка усечения.<o:p></o:p></span></p> <p> style='mso-tab-count:1'> </span>Формула численного интегрирования называется формулой квадратуры. В общем виде она может быть представлена как сумма<o:p></o:p></span></p> <p> style='mso-tab-count:1'> </span><sub><!--[if gte vml 1]><v:shape id="_x0000_i1050" type="#_x0000_t75" style='width:347.25pt;height:45.75pt' o:ole="" fillcolor="window"> <v:imagedata src="./1%20Постановка%20задач1.files/image003.wmz" o:title=""/> </v:shape><![endif]--><![if !vml]><img width=463 height=61 src="./1%20Постановка%20задач1.files/image004.gif" v:shapes="_x0000_i1050"><![endif]></sub><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1050" DrawAspect="Content" ObjectID="_1116513811"> </o:OLEObject> </xml><![endif]--><span style='mso-tab-count:1'> </span>( 1.2 )<o:p></o:p></span></p> <p> </div> </body> </html> Приложение Д
Акт приёмки программы
Разработанная в ходе выполнения курсового проекта программа расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью работоспособна и полностью соответствует требованиям задания. Студент гр. ЭП-012 Гончаров А.М. Руководитель работы старший преподаватель кафедры «ЭП и АПУ» Абрашкин В.П. |