- •Российский государственный университет нефти и газа им. И.М. Губкина
- •Задание на выполнение курсовой работы.
- •Теория вычисления интеграла. Описание используемых численных методов.
- •1. Метод прямоугольников (правых и левых)
- •2. Метод трапеций
- •3. Метод Симпсона (парабол)
- •Расчеты в математическом пакете Mat lab
- •Литература.
Расчеты в математическом пакете Mat lab
В математическом пакете по условию задания был построен график функции и найден корень уравнения с использованием символьного решения и в численном виде используя встроенные функции. Для описания функции создан m-файл функции.
На следующем рисунке представлен график функции:
Для записи команд использован m-файл:
В командном окне были получены следующие результаты:
tochnoe = 0.56226
levpr = 0.5555
pravpr = 0.5691
trapezii = 0.5623
Sympson = 0.5623
Отчет о результатах вычисления приближенного значения корня уравнения в MS Excel.
В MS Excel был проведен расчет приближенного значения корня уравнения.
Интерфейс программы:
График уравнения:
Корни, полученные в excel:
Описание приложения созданного в среде Delphi.
При создании приложения в среде Delphi в интерфейсе был предусмотрен вывод вида функции и графика. Нахождение корня уравнения интеграла было реализовано с использование трех методов: метода правых и левых прямоугольников, метода трапеций и метода Симпсона. В отличии от расчета в Excel, где корни находились, в программе предусмотрен ввод точности вычисления пользователем. Результаты расчета выводятся, как в окно приложения, так и в текстовый файл.
Блок – схемы, реализующие численные методы
Блок-схема для метода правых прямоугольников:
Блок-схема для метода левых прямоугольников :
Блок-схема для метода трапеций:
Блок-схема метода Симпсона:
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math, AxCtrls, OleCtrls, VCF1, ExtCtrls, TeeProcs,
TeEngine, Chart, Menus, Series, OleCtnrs;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Button3: TButton;
Edit2: TEdit;
F1Book1: TF1Book;
Edit3: TEdit;
Button5: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Chart1: TChart;
Edit4: TEdit;
Button4: TButton;
Series2: TLineSeries;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
Label4: TLabel;
OleContainer1: TOleContainer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a,b,h,s,x,e:real;
i,j,n:integer;
f:text;
str:string;
implementation
{$R *.dfm}
function integral(x:real):real;
begin
integral:=1/sqrt(power(x,2)+2*x+2);
end;
procedure methlev;
begin
h:=(b-a)/(n-1);
x:=0;
s:=0;
while abs(s)<e do
for i:=2 to n do
begin
x:=x+h;
s:=s+integral(x)*h;
end;
end;
procedure methpr;
begin
h:=(b-a)/n;
x:=0;
s:=0;
while abs(s)<e do
for i:=1 to n do
begin
s:=s+integral(x)*h;
x:=x+h;
end;
end;
procedure methtr;
var
sa,sb:real;
begin
h:=(b-a)/n;
x:=0;
s:=0;
while abs(s)<e do
for i:=1 to n do
begin
sa:=integral(x);
sb:=integral(x+h);
s:=s+h*(sa+sb)/2;
x:=x+h;
end;
end;
procedure meths;
var
sa,sb,sh:real;
begin
h:=(b-a)/n;
x:=0;
s:=0;
while abs(s)<e do
for i:=1 to n do
begin
sa:=integral(x);
sb:=integral(x+h);
s:=s+(2*sa+sb)*h/3;
x:=x+h;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=StrToInt(Form1.Edit1.Text);
a:=StrToFloat(Form1.Edit2.Text);
b:=StrToFloat(Form1.Edit3.Text);
e:=StrToFloat(Edit4.Text);
methlev;
F1Book1.textRC[1,1]:= 'Method';
F1Book1.textRC[1,2]:='levix';
F1Book1.textRC[2,1]:= 'S=';
F1Book1.numberRC[2,2]:=s;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);
e:=StrToFloat(Edit4.Text);
methpr;
F1Book1.textRC[1,3]:='pravix';
F1Book1.numberRC[2,3]:=s;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);
e:=StrToFloat(Edit4.Text);
methtr;
F1Book1.textRC[1,4]:='trapezii';
F1Book1.numberRC[2,4]:=s;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);
e:=StrToFloat(Edit4.Text);
meths;
F1Book1.textRC[1,5]:='sumpsona';
F1Book1.numberRC[2,5]:=s;
end;
procedure TForm1.Button4Click(Sender: TObject);
var y:real;
begin
form1.Chart1.Series[0].Clear;
n:=StrToInt(Edit1.Text);
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);
e:=StrToFloat(Edit4.Text);
h:= (b-a)/n;
x:=a;
Chart1.Series[0].AddXY(x,y,'',clRed);
for i:=1 to n do begin
x:=x+h;
y:=integral(x);
Chart1.Series[0].AddXY(x,y,'',clRed);
end;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
AssignFile(f,'Корни');
rewrite(f);
for i:=1 to n do begin
str:='';
for j:=1 to n do str:=str+F1Book1.TextRC[i,j]+' ';
writeln(f,str);
end;
closeFile(f);
end;
end.
Изображение окна приложения
Первоначальный интерфейс имеет следующий вид:
После выполнения расчетов при E<= 0,0001:
В качестве отчета был сформирован файл «Корни.txt»:
Анализ полученных результатов
В соответствии с заданием на курсовую работу в математическом пакете мною было найдено решение определенного интеграла и построен график.
В электронных таблицах был найден корень уравнения. Результаты практически совпали с результатами в Matlab.
Для поиска корня в среде Delphi пользователь имеет возможность ввести точность вычисления с клавиатуры.
Таким образом, расчеты показали, что можно найти решение определенного интеграла в разных средах. Наиболее трудоемким расчет оказался в среде Delphi.