Блок-схемы алгоритмов расчёта.
3.1 Метод бисекции.
[a, b] – интервал поиска корня, E – точность, K – корень, n – число итераций. 3.2 Метод хорд.
[a, b] – интервал поиска корня, E – точность, K – корень, n – число итераций. 3.3 Метод простой итерации.
[a, b] – интервал поиска корня, E – точность, K – начальное приближение, корень, n – число итераций. 3.4 Метод Ньютона.
[a, b] – интервал поиска корня, E – точность, K – начальное приближение, корень, n – число итераций. 3.5 Алгоритм Горнера.
у - многочлен вида . 3.6 Решение квадратного уравнения путём нахождения дискриминанта.
Для уравнения вида , где a1,b1,c1 – коэффициенты, D – дискриминант. Таблица идентификаторов.
Листинг программы. unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, ExtCtrls, Unit2, ComCtrls, Grids, MPlayer, Tlhelp32, jpeg, Menus, dwinlock;
type TForm1 = class(TForm) Button5: TButton; Panel5: TPanel; Label26: TLabel; Memo1: TMemo; Button6: TButton; Button7: TButton; Panel6: TPanel; Label27: TLabel; Label28: TLabel; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; Label4: TLabel; ComboBox1: TComboBox; Label5: TLabel; MaskEdit1: TMaskEdit; Label21: TLabel; Label15: TLabel; MaskEdit4: TMaskEdit; Label19: TLabel; MaskEdit2: TMaskEdit; Label6: TLabel; MaskEdit3: TMaskEdit; Label20: TLabel; Label14: TLabel; Button2: TButton; Label3: TLabel; Label1: TLabel; Label8: TLabel;
Label9: TLabel; MaskEdit5: TMaskEdit; Label10: TLabel; MaskEdit6: TMaskEdit; Label12: TLabel; MaskEdit7: TMaskEdit; Button1: TButton; Label13: TLabel; Label16: TLabel; MaskEdit8: TMaskEdit; Label17: TLabel; MaskEdit9: TMaskEdit; Label18: TLabel; MaskEdit10: TMaskEdit; Button3: TButton; Label22: TLabel; Label23: TLabel; MaskEdit11: TMaskEdit; Label24: TLabel; MaskEdit12: TMaskEdit; Label25: TLabel; MaskEdit13: TMaskEdit; Button4: TButton; Panel1: TPanel; Label2: TLabel; Label29: TLabel; Label30: TLabel; Label31: TLabel; Panel2: TPanel; Label32: TLabel; Label33: TLabel; Label34: TLabel; Label35: TLabel; Label36: TLabel; Panel3: TPanel; Label37: TLabel; Label38: TLabel; Label39: TLabel; Panel4: TPanel; Label40: TLabel; Label41: TLabel; Label42: TLabel; Label43: TLabel; Label44: TLabel; Memo2: TMemo; Memo3: TMemo; Memo4: TMemo; Memo5: TMemo; Button8: TButton; StringGrid1: TStringGrid; Memo6: TMemo; Timer1: TTimer; Panel7: TPanel; Image1: TImage; Image3: TImage; Image4: TImage; MediaPlayer1: TMediaPlayer; Timer2: TTimer; Image2: TImage; Timer3: TTimer; Timer4: TTimer; Panel8: TPanel; Memo7: TMemo; dWinLock1: TdWinLock; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure MaskEdit5Exit(Sender: TObject); procedure MaskEdit6Exit(Sender: TObject); procedure MaskEdit7Exit(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure MaskEdit11Change(Sender: TObject); procedure MaskEdit12Change(Sender: TObject); procedure MaskEdit13Change(Sender: TObject); procedure MaskEdit2Exit(Sender: TObject); procedure MaskEdit3Exit(Sender: TObject); procedure MaskEdit1Exit(Sender: TObject); procedure Button8Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure Timer3Timer(Sender: TObject); procedure Timer4Timer(Sender: TObject); procedure N1Click(Sender: TObject); procedure Memo7Change(Sender: TObject); procedure N2Click(Sender: TObject); private { Private declarations } public
{ Public declarations } end;
var Form1: TForm1; K,a,b,E:real; m,aa,bb,cc:real; p,g,c:real; TA,TB,Tkv:real; i,n:integer; Xnach,Ynach:integer; implementation
{$R *.dfm} //Процедура изменения разрешения на 1024х768 procedure TForm1.FormCreate(Sender: TObject); var dm: TDevMode; x,y:word; begin Xnach:=screen.Width; Ynach:=screen.Height; x:=1024; y:=768; ZeroMemory(@dm,sizeof(TDevMode)); dm.dmSize:= sizeof(TDevMode); dm.dmPelsWidth:=x; dm.dmPelsHeight:=y; dm.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT; ChangeDisplaySettings(dm,0);
{Включение таймеров заставки} panel7.Align:=alClient; image1.Align:=alClient; image1.Center:=true; i:=2; mediaPlayer1.Play; Timer1.Enabled:=true; Timer2.Enabled:=true;
Timer3.Enabled:=true; Timer4.Enabled:=true; end;
//Функция преобразование пробелов полей ввода в нули Function probeliVnyli(pr:string):string; var ipr:integer; begin for ipr:=1 to length(pr) do if pr[ipr]=' ' then pr[ipr]:='0'; probeliVnyli:=pr; end;
//Нахождение коэффициента m procedure TForm1.Button1Click(Sender: TObject); var m1,m2:real; label 2; begin
if aa=0 then begin MessageDLG('Введите коэф a1 уравнения!',MTWarning,[mbOK],0); MaskEdit5.SetFocus; goto 2; end;
aa:=strTOfloat(probeliVnyli(MaskEdit5.Text)); bb:=strTOfloat(probeliVnyli(MaskEdit6.Text)); cc:=strTOfloat(probeliVnyli(MaskEdit7.Text));
label33.Caption:='a1='+floatTOstr(cc); label34.Caption:='b1='+floatTOstr(cc); label35.Caption:='c1='+floatTOstr(cc);
m1:=(-bb-sqrt(bb*bb-4*aa*cc))/(2*aa); m2:=(-bb+sqrt(bb*bb-4*aa*cc))/(2*aa);
if abs(m2)>abs(m1) then m:=m1 else m:=m2; if E=0 then E:=0.00001; m:=round(m/E)*E; label36.Caption:='m='+floatTOstr(m); 2: end;
//Ввод значений коэффициентов p, g, c procedure TForm1.Button3Click(Sender: TObject); begin p:=strTOfloat(probeliVnyli(MaskEdit8.Text)); g:=cos(strTOfloat(probeliVnyli(copy(MaskEdit9.Text,5,2)))*Pi/180); c:=sin(strTOfloat(probeliVnyli(copy(MaskEdit10.Text,5,2)))*Pi/180);
label37.Caption:='p='+floatTOstr(round(p*100000)/100000); label38.Caption:='g='+floatTOstr(round(g*100000)/100000); label39.Caption:='c='+floatTOstr(round(c*100000)/100000); end;
//Расчёт коэффициента K procedure TForm1.Button2Click(Sender: TObject); var a,b:real; n,i:integer; korn:boolean; ll,ln:real; label 2;
Function F(x:real):real; begin F:=sin(x/2)/cos(x/2)-cos(x/2)/sin(x/2)+x; end;
Function D(z:real):real; begin D:=arctan(2/z); end;
Function T(q:real):real; begin T:=1+2/(sin(q)*sin(q)); end;
begin a:=strTOfloat(probeliVnyli(MaskEdit2.Text)); b:=strTOfloat(probeliVnyli(MaskEdit3.Text)); n:=strTOint(probeliVnyli(MaskEdit1.Text)); E:=1;
//Проверка коэф L ln:=strTOfloat(probeliVnyli(MaskEdit4.Text)); label31.Caption:='L='+floatTOstr(ln); a:=strTOfloat(probeliVnyli(MaskEdit2.Text)); b:=strTOfloat(probeliVnyli(MaskEdit3.Text)); if (ln<a) or (ln>b) then begin MessageDLG('Неверно выбрано начальное приближение!',MTWarning,[mbOK],0); MaskEdit4.SetFocus; goto 2; end; if ln=0 then begin MessageDLG('Введите начальное приближение!',MTWarning,[mbOK],0); MaskEdit4.SetFocus; goto 2; end;
if Combobox1.ItemIndex=2 then begin ll:=1/(1+(4/(ln*ln))); if abs(ll)>=1 then begin MessageDLG('Неверно выбрано начальное приближение!',MTWarning,[mbOK],0); MaskEdit4.SetFocus; goto 2; end; end;
ln:=strTOfloat(probeliVnyli(MaskEdit4.Text)); ll:=0; if Combobox1.ItemIndex=3 then begin ll:=(-4)*(sin(ln/2)/cos(ln/2)-cos(ln/2)/sin(ln/2)+ln)*cos(ln); ll:=ll/(sin(ln)*sin(ln)*sin(ln)); if ll<=0 then begin MessageDLG('Неверно выбрано начальное приближение!',MTWarning,[mbOK],0); MaskEdit4.SetFocus; goto 2; end; end;
For i:=1 to n do E:=E/10;
if (a=0) or (b=0) then begin MessageDLG('Введите предполагаемый промежуток нахождения корня!',MTWarning,[mbOK],0); korn:=true; MaskEdit3.SetFocus; goto 2; end; korn:=false; if F(a)*F(b)>0 then begin MessageDLG('Данный промежуток не содержит корней!',MTWarning,[mbOK],0); korn:=true; MaskEdit3.SetFocus; goto 2; end;
// ~ Метод бисекции if ComboBox1.ItemIndex=0 then begin a:=strTOfloat(probeliVnyli(MaskEdit2.Text)); b:=strTOfloat(probeliVnyli(MaskEdit3.Text)); n:=0; While abs(a-b)>E do begin K:=(a+b)/2; n:=n+1; if F(a)*F(K)<0 then b:=K else a:=K; end; end;
// ~ Метод Хорд if ComboBox1.ItemIndex=1 then begin n:=0; a:=strTOfloat(probeliVnyli(MaskEdit2.Text)); b:=strTOfloat(probeliVnyli(MaskEdit3.Text)); if F(a)<0 then begin k:=a; While abs(F(k))>E do begin n:=n+1; k:=k-(F(k)*(b-k))/(F(b)-F(k)); end; end
else begin k:=b; While abs(F(k))>E do begin n:=n+1; k:=k-(F(k)*(k-a))/(F(a)-F(k)); end; end; end;
// ~ Метод простой Итерации if ComboBox1.ItemIndex=2 then begin a:=strTOfloat(probeliVnyli(MaskEdit2.Text)); b:=strTOfloat(probeliVnyli(MaskEdit3.Text)); k:=strTOfloat(probeliVnyli(MaskEdit4.Text)); n:=0; While abs(F(k))>E do begin n:=n+1; k:=D(k); end; end;
// ~ Метод Ньютона if ComboBox1.ItemIndex=3 then begin n:=0; a:=strTOfloat(probeliVnyli(MaskEdit2.Text)); b:=strTOfloat(probeliVnyli(MaskEdit3.Text)); k:=strTOfloat(probeliVnyli(MaskEdit4.Text)); While abs(F(k))>E do begin n:=n+1; k:=k-F(k)/T(k); end; end; if korn=true then begin k:=0; n:=0; end; Label14.Caption:='n= '+floatTOstr(n); n:=strTOint(probeliVnyli(MaskEdit1.Text)); E:=1; For i:=1 to n do E:=E/10; k:=round(k/E)*E;
label30.Caption:=Label14.Caption; label32.Caption:='K='+floatTOstr(K); 2: end;
//Действия на изменение способа вычисления коэф К procedure TForm1.ComboBox1Change(Sender: TObject); begin if Combobox1.ItemIndex=0 then begin Label15.Visible:=False; MaskEdit4.Visible:=False; Memo2.Visible:=true; Memo3.Visible:=false; Memo4.Visible:=false; Memo5.Visible:=false; end; if Combobox1.ItemIndex=1 then begin Label15.Visible:=False; MaskEdit4.Visible:=False; Memo3.Visible:=true; Memo2.Visible:=false; Memo4.Visible:=false; Memo5.Visible:=false; end; if Combobox1.ItemIndex=2 then begin Label15.Visible:=True; MaskEdit4.Visible:=True; MaskEdit4.Clear; MaskEdit4.SetFocus; Memo4.Visible:=true; Memo2.Visible:=false; Memo3.Visible:=false; Memo5.Visible:=false; end; if Combobox1.ItemIndex=3 then begin Label15.Visible:=True; MaskEdit4.Visible:=True; MaskEdit4.Clear; MaskEdit4.SetFocus; Memo5.Visible:=true; Memo2.Visible:=false; Memo3.Visible:=false; Memo4.Visible:=false; end; end;
//Ввод значений отрезков времени procedure TForm1.Button4Click(Sender: TObject); begin MaskEdit12Change(form1); MaskEdit13Change(form1); TA:=strTOfloat(probeliVnyli(MaskEdit11.Text)); TB:=strTOfloat(probeliVnyli(MaskEdit12.Text)); TKV:=strTOfloat(probeliVnyli(MaskEdit13.Text)); end;
//Проверка разрешениия перехода к построению графика procedure TForm1.Button5Click(Sender: TObject); begin Button5.Enabled:=true; if (k=0) and (m=0) and (p=0) and (g=0) and (c=0) or (TB=0) or (TKV=0) then begin MessageDLG('Проверьте значения коэффициентов!',MTWarning,[mbOK],0); end else Form2.Visible:=true; end;
//Проверка существования корней квадратного уравнения procedure TForm1.MaskEdit5Exit(Sender: TObject); begin aa:=strTOfloat(probeliVnyli(MaskEdit5.Text)); bb:=strTOfloat(probeliVnyli(MaskEdit6.Text));
cc:=strTOfloat(probeliVnyli(MaskEdit7.Text)); if (bb*bb-4*aa*cc)<0 then begin MessageDLG('Проверьте коэффициенты: уравнение не имеет решения!',mtError,[mbOK],0); Button1.Enabled:=false; end else Button1.Enabled:=true; label33.Caption:='a1='+floatTOstr(aa); end; procedure TForm1.MaskEdit6Exit(Sender: TObject); begin aa:=strTOfloat(probeliVnyli(MaskEdit5.Text)); bb:=strTOfloat(probeliVnyli(MaskEdit6.Text)); cc:=strTOfloat(probeliVnyli(MaskEdit7.Text)); if (bb*bb-4*aa*cc)<0 then begin MessageDLG('Проверьте коэффициенты: уравнение не имеет решения!',mtError,[mbOK],0); Button1.Enabled:=false; end else Button1.Enabled:=true; label34.Caption:='b1='+floatTOstr(bb); end; procedure TForm1.MaskEdit7Exit(Sender: TObject); begin aa:=strTOfloat(probeliVnyli(MaskEdit5.Text)); bb:=strTOfloat(probeliVnyli(MaskEdit6.Text)); cc:=strTOfloat(probeliVnyli(MaskEdit7.Text)); if (bb*bb-4*aa*cc)<0 then begin MessageDLG('Проверьте коэффициенты: уравнение не имеет решения!',mtError,[mbOK],0); Button1.Enabled:=false; end else Button1.Enabled:=true; label35.Caption:='c1='+floatTOstr(cc); end;
//Скрыть-восстановить область условий procedure TForm1.Button6Click(Sender: TObject); begin Panel5.Top:=707; button6.Visible:=false; Button7.Visible:=true; end; procedure TForm1.Button7Click(Sender: TObject); begin Panel5.Top:=609; button6.Visible:=true; Button7.Visible:=false; end;
//Проверка заданных промежутков времени procedure TForm1.MaskEdit11Change(Sender: TObject); var TTA:real; begin TTA:=strTOfloat(probeliVnyli(MaskEdit11.Text)); if TTA<0 then begin MessageDLG('Начальный момент времени T не может быть меньше нуля!',mtError,[mbOK],0); maskEdit11.SetFocus; end; label40.Caption:='T='+floatTOstr(TTA); end;
procedure TForm1.MaskEdit12Change(Sender: TObject); var TTA,TTB:real; begin TTA:=strTOfloat(probeliVnyli(MaskEdit11.Text)); TTB:=strTOfloat(probeliVnyli(MaskEdit12.Text)); if (TTB<0) or (TTB<=TTA) then begin MessageDLG('Конечный момент времени T` не может быть меньше начального T!',mtError,[mbOK],0); maskEdit12.SetFocus; end; label41.Caption:='T='+floatTOstr(TTB); end;
procedure TForm1.MaskEdit13Change(Sender: TObject); var TTB,TTKV:real; begin TTB:=strTOfloat(probeliVnyli(MaskEdit12.Text)); TTKV:=strTOfloat(probeliVnyli(MaskEdit13.Text)); if TTKV=0 then begin MessageDLG('Проверьте значение времени квантования tкв',mtError,[mbOK],0); maskEdit13.SetFocus; end; if TTKV>TTB then begin MessageDLG('Проверьте значение времени квантования tкв',mtError,[mbOK],0); maskEdit13.SetFocus; end; label42.Caption:='tкв='+floatTOstr(TTKV); end;
//Перенос значений на панель расчётных данных procedure TForm1.MaskEdit2Exit(Sender: TObject); begin a:=strTOfloat(probeliVnyli(MaskEdit2.Text)); label2.Caption:='a='+floatTOstr(a); end; procedure TForm1.MaskEdit3Exit(Sender: TObject); begin b:=strTOfloat(probeliVnyli(MaskEdit3.Text)); label29.Caption:='b='+floatTOstr(b); end; procedure TForm1.MaskEdit1Exit(Sender: TObject); begin label44.Caption:='-'+MaskEdit1.Text; label43.Caption:='E=10'; end;
//Построение таблицы сравнения методов нахождения коэф К procedure TForm1.Button8Click(Sender: TObject); var gn,gk:string; begin StringGrid1.Visible:=true; StringGrid1.Cells[0,0]:='Методы\значения'; StringGrid1.Cells[0,1]:='Метод Бисекции'; StringGrid1.Cells[0,2]:='Метод Ходр'; StringGrid1.Cells[0,3]:='Метод пр. Итерации'; StringGrid1.Cells[0,4]:='Метод Ньютона'; StringGrid1.Cells[1,0]:='K'; StringGrid1.Cells[2,0]:='n'; i:=combobox1.ItemIndex; gn:=label30.Caption; gK:=label32.Caption; combobox1.ItemIndex:=0; Button2.Click; stringGrid1.Cells[1,1]:=floatTOstr(K); StringGrid1.Cells[2,1]:=label30.Caption; combobox1.ItemIndex:=1; Button2.Click; stringGrid1.Cells[1,2]:=floatTOstr(K); StringGrid1.Cells[2,2]:=label30.Caption; combobox1.ItemIndex:=2; Button2.Click; stringGrid1.Cells[1,3]:=floatTOstr(K);
StringGrid1.Cells[2,3]:=label30.Caption; combobox1.ItemIndex:=3; Button2.Click; stringGrid1.Cells[1,4]:=floatTOstr(K); StringGrid1.Cells[2,4]:=label30.Caption; combobox1.ItemIndex:=i; Label30.Caption:=gn; label32.Caption:=gK; end;
//Действия на срабатывание событий таймеров заставки procedure TForm1.Timer1Timer(Sender: TObject); begin image1.Visible:=false; image2.Visible:=true; image2.Align:=alClient; image2.Center:=true; Timer1.Enabled:=false; end; procedure TForm1.Timer2Timer(Sender: TObject); begin image2.Visible:=false; image3.Visible:=true; image3.Align:=alClient; image3.Center:=true; timer2.Enabled:=false; end; procedure TForm1.Timer3Timer(Sender: TObject); begin image3.Visible:=false; image4.Visible:=true; image4.Align:=alClient; image4.Center:=true; Timer3.Enabled:=False; end; procedure TForm1.Timer4Timer(Sender: TObject); begin Timer2.Enabled:=false; image4.Visible:=false; panel7.Visible:=false; mediaPlayer1.Stop; Timer4.Enabled:=false; end;
procedure TForm1.N1Click(Sender: TObject); begin panel8.Visible:=true; end; procedure TForm1.Memo7Change(Sender: TObject); begin Panel8.Visible:=false; end;
procedure TForm1.N2Click(Sender: TObject); var dm: TDevMode; begin ZeroMemory(@dm,sizeof(TDevMode)); dm.dmSize:= sizeof(TDevMode); dm.dmPelsWidth:=xnach; dm.dmPelsHeight:=ynach; dm.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT; ChangeDisplaySettings(dm,0); Application.Terminate; end;
end.
unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, dwinlock;
type TForm2 = class(TForm) PaintBox1: TPaintBox; Panel1: TPanel; Button1: TButton; Label1: TLabel; Label2: TLabel; Timer1: TTimer; Label3: TLabel; Label4: TLabel; RadioGroup1: TRadioGroup; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Timer2: TTimer; dWinLock1: TdWinLock; Button2: TButton; procedure Button1Click(Sender: TObject); procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure PaintBox1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form2: TForm2;
implementation uses unit1; var YF,YMAX:real; x,y,i:integer; shX,shY:real; t:real; A:array[1..3] of real;
{$R *.dfm}
//Функция вычисления y по алгоритму Горнера Function F(z:real):real; var h:real; i:integer; begin h:=p; For i:=1 to 3 do h:=h*z+A[i]; F:=abs(h); end;
//Вывод текущих координат на панель procedure TForm2.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var q:real; begin q:=F(TB); label1.Caption:='t='+floatTOstr((X-30)*TB/920); label2.Caption:='Y='+floatTOstr(q*(550-Y)/480); label3.Caption:='XX='+intTOstr(X); label4.Caption:='YY='+intTOstr(Y); end;
//Прорисовка осей procedure TForm2.PaintBox1Click(Sender: TObject); begin PaintBox1.Canvas.Pen.Color:=clCream; paintbox1.Canvas.Rectangle(0,0,1024,640);
//Координатные оси и стрелки x:=30; y:=550; PaintBox1.Color:=clBlack; PaintBox1.Canvas.Pen.Width:=2; PaintBox1.Canvas.MoveTo(x,y+10); PaintBox1.Canvas.LineTo(x,20); PaintBox1.Canvas.LineTo(x-5,45); PaintBox1.Canvas.MoveTo(x,20); PaintBox1.Canvas.LineTo(x+5,45); PaintBox1.Canvas.TextOut(1004,570,'T');
PaintBox1.Canvas.MoveTo(x-5,y); PaintBox1.Canvas.LineTo(1010,y); PaintBox1.Canvas.LineTo(985,y-5); PaintBox1.Canvas.MoveTo(1010,y); PaintBox1.Canvas.LineTo(985,y+5); PaintBox1.Canvas.TextOut(7,14,'Y');
//Коэффициент преобразования по оси Х shX:=(950-30)/TB;
t:=Tkv; While t<TB do begin y:=550; x:=30+round(t*shX); PaintBox1.Canvas.TextOut(x-8,y+10,floatTOstr(t)); PaintBox1.Canvas.MoveTo(x,y-3); PaintBox1.Canvas.LineTo(x,y+3); t:=t+Tkv; end; PaintBox1.Canvas.TextOut(950,y+10,floatTOstr(TB)); PaintBox1.Canvas.MoveTo(950,y-3); PaintBox1.Canvas.LineTo(950,y+3);
//Вычисление YMAX и коэффициента преобразования по оси Y A[1]:=g; A[2]:=c; A[3]:=k-m; t:=0; Ymax:=0; While t<=TB do begin yF:=F(t); if yF>Ymax then YMAX:=yF; t:=t+TKV; end; t:=TB; yF:=F(t); if yF>Ymax then YMAX:=yF; shY:=(550-70)/YMAX;
//Метки по оси Y x:=30; For i:=1 to 10 do begin y:=round(550-i*(550-70)/10); PaintBox1.Canvas.MoveTo(x-3,y); PaintBox1.Canvas.LineTo(x+3,y); PaintBox1.Canvas.TextOut(x-27,y,intTOstr(round(YMAX*i/10))); end; end;
//Реакция на нажатие кнопки "Построение" procedure TForm2.Button1Click(Sender: TObject); begin paintBox1Click(form2);
paintBox1.Canvas.Pen.Color:=clRed;
//Начальные условия для таймера машинного времени if RadioButton2.Checked=true then begin t:=TA; i:=0; yF:=F(t); x:=round(shX*t); y:=round(shY*YF); PaintBox1.Canvas.MoveTo(30+x,550-y); i:=1; Timer1.Enabled:=true; end;
//Начальные условия для таймера реального времени if RadioButton1.Checked=true then begin t:=TA; yF:=F(t); x:=round(shX*t); y:=round(shY*YF); PaintBox1.Canvas.MoveTo(30+x,550-y); Timer2.Enabled:=true; end; end;
//Включаем таймер машинного времени procedure TForm2.Timer1Timer(Sender: TObject); begin t:=t+TKV; if t>TB then begin Timer1.Enabled:=False; t:=TB; YF:=F(t); x:=round(shX*t); y:=round(shY*yF); PaintBox1.Canvas.LineTo(30+x,550-y); end; YF:=F(t); x:=round(shX*t); y:=round(shY*yF); PaintBox1.Canvas.LineTo(30+x,550-y); end;
//Включаем таймер реального времени procedure TForm2.Timer2Timer(Sender: TObject); begin t:=t+0.01; if t>(TB) then Timer2.Enabled:=False; YF:=F(t); x:=round(shX*t); y:=round(shY*yF); PaintBox1.Canvas.LineTo(30+x,550-y); end;
//Выключение таймеров procedure TForm2.RadioButton1Click(Sender: TObject); begin t:=0; Timer1.Enabled:=false; Timer2.Enabled:=false; PaintBox1.Canvas.MoveTo(30,550); PaintBox1Click(form2); end;
procedure TForm2.Button2Click(Sender: TObject); begin Timer1.Enabled:=false; Timer2.Enabled:=false; form2.Visible:=false; end; end. Результаты расчёта. 6.1 Коэффициент K. Как было сказано выше, коэффициент K уравнения рассчитывался четырьмя методами. Так, по результатам этих расчётов имеем следующие значения (при точности вычислений и начальном приближении для метода простой итерации и метода Ньютона :
Как показывают расчёты данный коэффициент наиболее целесообразно рассчитывать методом Ньютона или методом хорд. Построим диаграмму, отображающую эффективность вычислений: по оси ординат откладывается величина, равная: .
Коэффициент m. Коэффициент m рассчитывался как наибольший по модулю корень уравнения , которое решалось через дискриминант. В результате решения уравнения получили два корня: и . Следовательно m= -0,5. График функции.
После расчёта всех коэффициентов можно приступить к непосредственно построению графика функции.
, где , , , m= -0,5, K =1,07687, t=0..17.
· Лекции по курсу “Информатика” Тарасевич Л.А.
· “Учебный курс Delphi 7” Бобровский С.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|