Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка.docx
Скачиваний:
0
Добавлен:
09.09.2019
Размер:
27.03 Кб
Скачать

Міністерство освіти і науки України

Житомирський державний технологічний університет

Кафедра РТ і Т

Група РА-12

Курсова робота з дисципліни: Обчислювальна техніка та програмування на тему: “Розробка програми для утворення коренів рівняння комбінованим методом хорд та Ньютона.”

Виконав: А.С.Пошивайло

Перевірив: В.В.Захленюк

Житомир

2010

Зміст

Анотація

Вступ

1.Математичний роз’язок (математична модель).

2.Алгоритм розв’язку (алгоритм та його розробка).

3.Роздруківка тексту програми.

4.Розробка текстового прикладу.

Висновок

Список використаної літератури.

Анотація

В даній курсовій роботі використано комбінований метод Ньютона (дотичних) та метод хорд для розв’язування нелінійних алгебраїчних рівнянь. Цей метод досить часто використовується в багатьох галузях науки та техніки. Розроблено алгоритм розв’язування, схема та програма на мові Delphi6 .

Вступ

Вперше даний метод був описаний Ісаком Ньютоном в рукописі «De analysi per aequationes numero terminorum infinitas» (лат. Про аналіз рівняннями нескінченних рядів), адресованому в 1669 році Барроу, та в роботі «De metodis fluxionum et serierum infinitarum» (лат. Метод флюксій та нескінченні ряди ) або «Geometria analytica» (лат.Аналітична геометрія) зібраннях праць Ньютона, яка була написана в 1671 році. В своїх роботах Ньютон вводить такі поняття, як розклад функції в ряд, нескінченно малі і флюксії (похідні в сучасному розумінні). Вказані роботи були видані значно пізніше: перша вийшла в світ в 1711 році дякуючи Вільяму Джонсону, друга була видана Джоном Кользоном в 1736 році вже після смерті творця. Однак опис метода суттєво відрізнявся від його сучасного викладу: Ньютон застосовував свій метод виключно до поліномів. Він обраховував не послідовні наближенняя xn, а послідовність поліномів і в результаті отримував наближене значення x.

Вперше метод був опублікований в трактаті «Алгебра» Джона Валліса в 1685 році, за проханням якого він був коротко описаний самим Ньютоном. В 1690 році Джозеф Рафсон опублікував спрощений опис в роботі “Analysis aequationum universalis” (лат. Загальний аналіз рівнянь). Рафсон розглядав метод Ньютона як чисто алгебраїчний і обмежив цого застосування поліномами, однак при цьому він описав метод на основі послідовних наближень xn замість важкої для сприйняття послідовності поліномів, використовуваної Ньютоном. Нарешті, в 1740 році метод Ньютона був описаний Томасом Сімпсоном як ітеративний метод першого порядку розв’язку нелінійних рівнянь з використанням похідної в тому вигляді, в якому він описується тут. В тій же публікації Сімпсон узагальнив метод на випадок системи із двох рівнянь та відмітив, що метод Ньютона також може бути використаний для розв’язку задач оптимізації шляхом знаходження нуля похідної чи градієнта.

За останнє двадцятип’ятиріччя серед методів чисельного розв’язування наукових та інженерних задач домінуючі позиції здобув метод Ньютона (дотичних) та метод хорд для розв’язку нелінійних алгебраїчних рівнянь. Даний комбінований метод дозволяє обчислити рівняння з певною точністю і застосовується в багатьох галузях науки та техніки. Зокрема у використанні різних інформаційних технологій, математичному моделюванні різних фізичних процесів, біологіі, хімії, фізиці і т.д..

Технічне завдання

Завдання: розробити програму для утворення коренів рівняння(проміжок,на якому тільки один ізольований корінь задається)виду + +…. x+ =0 Комбінованим методом(методом хорд та Ньютона).

unit Unit1;

Interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Buttons, StdCtrls, Grids, Menus, Math;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Edit1: TEdit;

Edit5: TEdit;

StringGrid1: TStringGrid;

Label1: TLabel;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

Label6: TLabel;

Edit6: TEdit;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Implementation

{$R *.dfm}

var

n:integer;

mas,mas1: array of real;

t,xp,xk: real;

function funk(c:integer;x:real):real;

Var j:real;

u,b:integer;

begin

u:=0;

b:=c mod 2;

if x<0 then

if b=0 then

begin

x:=x*(-1);

result:=exp(c*ln(x));

u:=1;

end;

if x<0 then

if b=1 then

begin

x:=x*(-1);

j:=exp(c*ln(x))*(-1);

result:=j;

u:=1;

end;

if (x>0)and(u<>1) then

result:=exp(c*ln(x));

if x=0 then

result:=0;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

I: integer;

h:string;

begin

n:=StrToInt(Edit1.Text);

setlength(mas,n+2);

StringGrid1.RowCount:=n+2;

StringGrid1.Visible:=true;

for i:=1 to n do

begin

h:='mas';

h:=h+IntToStr(i);

StringGrid1.Cells[0,i]:=h;

end;

h:='mas';

h:=h+IntToStr(n+1);

StringGrid1.Cells[0,n+1]:=h;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

I: integer;

begin

t:=StrToFloat(Edit2.Text);

xp:=StrToFloat(Edit3.Text);

xk:=StrToFloat(Edit4.Text);

for i:=1 to n+1 do

mas[i]:=StrToFloat(StringGrid1.Cells[1,i]);

end;

procedure TForm1.Button3Click(Sender: TObject);

var

c,i,l,e: integer;

f,f1,g,g1,x,t1 : real;

begin

g:=0;

c:=n;

x:=xp;

for i:=1 to n do

begin

g:=g+mas[i]*funk(c,x);

c:=c-1;

end;

g:=g+mas[n+1];

g1:=0;

c:=n;

x:=xk;

for i:=1 to n do

begin

g1:=g1+mas[i]*funk(c,x);

c:=c-1;

end;

g1:=g1+mas[n+1];

if xp>xk then

x:=xk

else

x:=xp;

if g*g1<0 then

begin

l:=0;

t1:=t+1;

c:=n-1;

e:=n;

f1:=0;

for i:=1 to n-1 do

begin

f1:=f1+mas[i]*funk(c,x)*e;

c:=c-1;

e:=e-1;

end;

f1:=f1+mas[n]*e;

while t1>t do

begin

c:=n;

f:=0;

for i:=1 to n do

begin

f:=f+mas[i]*funk(c,x);

c:=c-1;

end;

f:=f+mas[n+1];

if f1<>0 then

begin

t1:=abs(x-f/f1);

x:=x-f/f1;

end

else

begin

ShowMessage('на проміжку є кутова точка');

l:=199;

end;

l:=l+1;

if l=200 then

t1:=t-1;

end;

end

else

ShowMessage('проміжок заданий невірно');

edit5.Text:=FloatToStr(x);

mas:=nil;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

form1.Close;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

var