Міністерство освіти і науки України Івано-Франківський національний технічний університет нафти і газу
кафедра: ЕП і ЕО
Розрахункова робота №1
Тема “Методи розв’язання нелінійного скінченого рівняння
Виконав:
ст.гр. ЕТ-09-1
Терлецький Ю.О.
Перевірив:
Гаврилюк Р.Б.
м. Івано-Франківськ
2011 р.
На рисунку 1 зображено електричну схему, яка складається з джерела живлення e = 30 В, активного лінійного опору R = 3 Ом та нелінійного опору, який має задану вольтамперну характеристику . Необхідно знайти струм у такій елементарній схемі.
Запишемо на підставі другого закону Кірхгофа нелінійне рівняння
.
Рисунок 1 – Електрична схема
Підставивши в рівняння вхідні дані з умови задачі, одержимо
Зведемо подібні члени рівняння:
.
Розв’язання рівняння
Метод половинного ділення
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math, Grids, TeEngine, TeeFunci, Series, ExtCtrls,
TeeProcs, Chart;
type
TForm1 = class(TForm)
BtnExit: TButton; BtnClean: TButton; BtnPolDil: TButton; BtnHord: TButton; BtnNuton: TButton; BtnIteration: TButton; BtnLobach: TButton; EdtA0: TEdit; EdtA1: TEdit; EdtA2: TEdit; EdtB0: TEdit; EdtB1: TEdit; EdtB2: TEdit; LblA0: TLabel; LblA1: TLabel; LblA2: TLabel; LblB0: TLabel; LblB1: TLabel; LblB2: TLabel; LblKoef: TLabel; LblStep: TLabel; StrRezult: TStringGrid; LblRezult: TLabel; EdtERS: TEdit; LblERS: TLabel; EdtMaxNevjazka: TEdit; LblMaxNevjazka: TLabel; Edt1: TEdit; Edt2: TEdit; LblMegi: TLabel; Label1: TLabel;
procedure BtnExitClick(Sender: TObject);
procedure BtnCleanClick(Sender: TObject);
procedure BtnPolDilClick(Sender: TObject);
procedure BtnHordClick(Sender: TObject);
procedure BtnNutonClick(Sender: TObject);
procedure BtnLobachClick(Sender: TObject);
procedure BtnIterationClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BtnExitClick(Sender: TObject);
begin
close;
end;
procedure TForm1.BtnCleanClick(Sender: TObject);
begin
Edta0.Text:='';
Edta1.Text:='';
Edta2.Text:='';
Edtb0.Text:='';
Edtb1.Text:='';
Edtb2.Text:='';
EdtERS.Text:='';
end;
procedure TForm1.BtnPolDilClick(Sender: TObject);
var a0,a1,a2,n0,n1,n2,m1,m2,e,c,x1,x2,y1,y2,y3,Epsylon,Nevjazka,ERS:real;
i:integer;
begin
form1.StrRezult.RowCount:=1;
a0:=strToFloat(Edta0.Text);
a1:=strToFloat(Edta1.Text);
a2:=strToFloat(Edta2.Text);
n0:=strToFloat(Edtb0.Text);
n1:=strToFloat(Edtb1.Text);
n2:=strToFloat(Edtb2.Text);
ERS:=strToFloat(EdtERS.Text);
m1:=strToFloat(Edt1.Text);
m2:=strToFloat(Edt2.Text);
e:=strToFloat(EdtMaxNevjazka.Text);
form1.StrRezult.Cells[0,0]:='№';
form1.StrRezult.Cells[1,0]:='x1';
form1.StrRezult.Cells[2,0]:='x2';
form1.StrRezult.Cells[3,0]:='Нев"язка 1' ;
form1.StrRezult.Cells[4,0]:='Нев"язка 2' ;
form1.StrRezult.Cells[5,0]:='Похибка' ;
x1:=m1; x2:=m2; c:=0;
y1:=a0*power(x1,n0)+a1*power(x1,n1)+a2*power(x1,n2)+ERS;
y2:=a0*power(x2,n0)+a1*power(x2,n1)+a2*power(x2,n2)+ERS;
y3:=a0*power(c,n0)+a1*power(c,n1)+a2*power(c,n2)+ERS;
if abs(y1)<abs(y2) then
Nevjazka:=abs(y1)
else Nevjazka:=abs(y2);
i:=1;
Epsylon:=(abs(m1-m2))/2;
while (Nevjazka>=e) do
begin
c:=(x1+x2)/2;
y3:=a0*power(c,n0)+a1*power(c,n1)+a2*power(c,n2)+ERS;
if (y1*y3)<0 then
x2:=c;
else if (y2*y3)<0 then
x1:=c;
y1:=a0*power(x1,n0)+a1*power(x1,n1)+a2*power(x1,n2)+ERS;
y2:=a0*power(x2,n0)+a1*power(x2,n1)+a2*power(x2,n2)+ERS;
if abs(y1)<abs(y2) then
Nevjazka:=abs(y1)
else Nevjazka:=abs(y2);
Epsylon:=(abs(x1-x2))/2;
form1.StrRezult.RowCount:=form1.StrRezult.RowCount+1;
form1.StrRezult.Cells[0,i]:=intToStr(i);
form1.StrRezult.Cells[1,i]:=floatToStr(x1);
form1.StrRezult.Cells[2,i]:=floatToStr(x2);
form1.StrRezult.Cells[3,i]:=floatToStr(y1);
form1.StrRezult.Cells[4,i]:=floatToStr(y2);
form1.StrRezult.Cells[5,i]:=floatToStr(Epsylon);
inc(i);
end; end;