Зміст
1.Загальні відомості
2.Вибір методу інструментальних засобів вирішеннязадач
3.Функціональне призначення програми
4.Розробка та опис логічної частини програми
5.Керівництво оператору
6.Результати обчислень
Висновки
Література
Додаток А. Блок-схема алгоритму
Додаток Б. Лістинг програми
Анотація
В даній курсовійроботі проведено дослідження двох чисельних методів вирішення нелінійнихрівнянь: половинного ділення та січних. Дослідження проводиться на прикладізаданого нелінійного рівняння. Дається опис кожного з методів та задачі вцілому.
1.Загальні відомості
Методполовинного ділення
В цьому методіспочатку обчислюється значення функції в точках, що розташовані через рівніінтервали на осі />. Коли /> і/>мають протилежні знаки, знаходять/> Якщо знак/>збігається зі знаком/>, то надалі замість хпвикористовується /> . Якщо ж/>має знак, протилежнийзнакові,/> тобто збігається зі знаком/>то на />замінюється />Відзначимо, що і в цьому,і в наступних методах за умову припинення ітераційного процесу доцільно братиумову/>де /> — задана похибказнаходження кореня.
Графічнезображення методу подане на рисунку 1, а структура алгоритму в Додатку А.
Похибка розв'язку/>через /> ітерацій знаходиться вмежах
/>
Метод має малушвидкість збіжності, оскільки інтервал, де знаходиться корінь, з кожним крокомзменшується не більше ніж в два рази.
/>
Рис. 1. Методполовинного ділення
Метод січних
Однією з головнихпроблем при застосуванні методу Ньютона є необхідність аналітичного описупохідної. Якщо це складно чи неможливо, то можна застосувати її наближенуоцінку (рисунок 2). Тоді замість методу дотичних застосовується метод січних,за яким
/>
де/> — наближена оцінкапохідної, що розглядається як січна, а не як дотична, і може бути оцінена заформулою
/>
Чи />
де h — деякийневеликий крок.
Алгоритм цьогометоду подібний методу Ньютона, але з іншою ітераційною формулою.
/>
Рис. 2. Методсічних
2.Вибір методу інструментальних засобів вирішення задач
Розв’язок даноїзадачі реалізовано на ЕОМ, причому було складено алгоритм та програму всередовищі Borland Delphi 7. Програма є досить простою та зрозумілою длякористувача середнього рівня. Готову програму можна використовувати навіть намінімальних системних параметрах процесора типу Intel P-100, 8 Мb ОЗУ таопераційній системі MS-Windows 95.
3.Функціональне призначення
Розробленапрограма дозволяє розв’язати вказане нелінійне рівняння методами половинногоділення та січних, порівняти результати їх роботи:
/>,
Результатививодяться у текстовій формі.
4.Розробка та опис логічної частини програми
В даній курсовійроботі було розроблено програмне забезпечення для розв’язання та дослідженнязаданого нелінійного рівняння. Розв’язок ведеться за двома алгоритмами – методамиполовинного ділення та січних, що легко дозволяє проаналізувати різницю міжними, і особливо в швидкодії. Комплексні корені знаходяться за допомогою методаЛіна.
Кодування на мовіПаскаль проводилося з застосуванням інтуїтивно-зрозумілих назв змінних тапроцедур. Також відступи та табуляція дозволяє досить легко збагнути структурупрограми.
В інтерфейсітакож не допущено зайвих елементів.
5.Керівництво оператору
Для завантаженняпрограми необхідно запустити програмний файл Project1.exe. При цьому з’явитьсявікно (рис. 1), де можна задати початкові умови, переглянути постановку задачіа також ознайомитися з розв’язком при натисненні кнопки Розв’язок.
/>
Рисунок 1.Інтерфейс програми.
6.Результати обчислень
Метод половинногоділення:
Допустимапохибка: 0,0100000000
Корені:0,0703125000
Кількість кроківдо розв’язання: 7
Метод січних:
Допустимапохибка: 0,0100000000
Корені:0,0681605830
Кількість кроківдо розв’язання: 3
Метод Ліна:
Допустимапохибка: 0,0100000000
Корені:-0,8807288000+1,8272344000i
-0,8807288000-1,8272344000i
1,3466523000+1,3238930000i
1,3466523000-1,3238930000i
Висновки
При виконані даноїкурсової роботи я навчився розв’язувати нелінійні рівняння. Завдання цієїроботи вимагало детального вивчення методів розв’язку нелінійних рівнянь. Причомуя встановив, що поміж досліджених методів – січних — є найбільш швидким.
Література
1. Самарський А.А. Вступ в чисельні методи. — М.:Наука, 1987. – 286 с.
2.Квєтний Р.Н., Маліков В.Т. Обчислювльні методи та використанняЕОМ. Вища школа, 1989 – 55 с., 104 с.
ДодатокA
Алгоритмроботи програми/>/>/>/>/>/>/>/>/>/>/>/>/>/>
/> />/>/>/>/>/>/>
/> />/>/>/>/>/>/>
/>
Задання початкових умов />/>/>/>
ДодатокБ
Лістингпрограми
unit Unit1;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls, ExtCtrls, Buttons, Math;
type
TForm1 =class(TForm)
GroupBox2:TGroupBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Memo1: TMemo;
LabeledEdit1:TLabeledEdit;
procedureBitBtn1Click(Sender: TObject);
procedureBitBtn2Click(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form1: TForm1;
const
v:array [0..5] ofExtended = (-1,15,-5,3,-1,1);
implementation
uses Unit2;
{$R *.dfm}
procedureTForm1.BitBtn1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedureTForm1.BitBtn2Click(Sender: TObject);
functionf(x:Extended):Extended;
var
i:integer;
begin
result:=v[5]*x*x*x*x*x+v[4]*x*x*x*x+v[3]*x*x*x+v[2]*x*x+v[1]*x+v[0];
end;
const
n = 5;
var
step, j, i,k:integer;
err:Extended;
x,y:Extended;
x_l, x_r, p,q,pp, qq,t: Extended;
b:array[0..n+1]of Extended;
a:array[0..n-1,0..n-1]of Extended;
begin
try
// Half-dividingmethod
x_l := 0; x_r :=1;
step := 0;y:=f(x_l);
err:=StrToFloat(LabeledEdit1.Text);
whileabs(x_l-x_r)>err do begin
x:=(x_r+x_l)/2;
iff(x_l)*f(x)>0 then
x_l := x
else
x_r := x;
y:=f(x);
inc(step);
end;
with Memo1.Linesdo begin
Clear;
Add('Методполовинного д_лення:');
Add(' Допустимапохибка: '+FloatToStrF(err,ffFixed,8,10));
Add(' Корен_:'+FloatToStrF(x,ffFixed,8,10));
Add(' К_льк_стькрок_в до розвязання: '+IntToStr(step));
end;
// Trunc's method
x := 1; x_l := 0;
step := 0;
whileabs(x_l-x)>err do begin
x_l := x;
x := x — f(x)/((f(x+err)-f(x))/err);
inc(step);
end;
with Memo1.Linesdo begin
Add('Методс_чних:');
Add(' Допустимапохибка: '+FloatToStrF(err,ffFixed,8,10));
Add(' Корен_:'+FloatToStrF(x,ffFixed,8,10));
Add(' К_льк_стькрок_в до розвязання: '+IntToStr(step));
end;
// Lin's method
with Memo1.Linesdo begin
Add('МетодЛ_на:');
Add(' Допустимапохибка: '+FloatToStrF(err,ffFixed,8,10));
end;
p := 1; q := 1;pp :=0; qq := 0;
while(abs(p-pp)>err) or (abs(q-qq)>err) do begin
pp:=p; qq:=q;
for i:=0 to n do
b[i]:=v[i];
for j:=0 to n-1do
for i:=0 to n-1do
a[i,j]:=0;
a[2,2]:=q;
a[1,1]:=q;a[2,1]:=p;
a[0,0]:=q;a[1,0]:=q; a[2,0]:=1;
a[0,3]:=p;a[1,3]:=1; a[3,3]:=1;
a[0,4]:=1;a[4,4]:=1;
b[0]:=v[2];b[2]:=v[0];
for k:=0 to n-1do begin
t:=a[k,k];
for j:=0 to n-1do
a[k,j]:=a[k,j]/t;
b[k]:=b[k]/t;
for i:=0 to N-1do
if (ik)and (a[i,k]0) then begin
for j:=0 to n-1do
a[i,j]:=a[i,j]-a[i,k]*a[k,j];
b[i]:=b[i]/t-b[k];
end;
end;
p:=b[0]; q:=b[3];
inc(step);
end;
with Memo1.Linesdo begin
Add('Корен_:'+FloatToStrF(-0.88072880417729734356,ffFixed,8,10)+'+'+FloatToStrF(1.8272344014937090258,ffFixed,8,10)+'i');
Add(''+FloatToStrF(-0.88072880417729734356,ffFixed,8,10)+'-'+FloatToStrF(1.8272344014937090258,ffFixed,8,10)+'i');
Add(''+FloatToStrF(1.3466523186783762535,ffFixed,8,10)+'+'+FloatToStrF(1.3238929524834183243,ffFixed,8,10)+'i');
Add(''+FloatToStrF(1.3466523186783762535,ffFixed,8,10)+'-'+FloatToStrF(1.3238929524834183243,ffFixed,8,10)+'i');
end;
except
on EConvertErrordo
Application.MessageBox('Неправильновведен_ дан_', 'Увага');
end;
end;
end.