Міністерство освіти і науки України
Житомирський державний технологічний університет
Кафедра РТ і Т
Група РА-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