Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант 7. Кустышева. гр РЕ-01.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
423.42 Кб
Скачать

Индивидуальное задание № 7

1.Начальные условия: U(0)=0.25

2.Полином: x^5-7x-6

3.Коррекция: в средней точке

4.Метод поиска корня: Метод касательных

2.Листинг программы

unit kustysheva;

interface

uses

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

Dialogs, StdCtrls, Buttons;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

ListBox1: TListBox;

SaveDialog1: TSaveDialog;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

const

exp=0.000001;

x0=3;

U0=0.25;

h=0.1;

Nzach=7;

koc=1;

Npoint=50;

hinteg=5/Npoint;

Var

T:real;

U:array [0..Npoint+1] of real;

fname:string;

ft:text;

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

procedure kasat(t,eps:real; var koren:real);

begin

repeat

t:=t-(t*t*t*t*t-7*t-6)/(5*sqr(sqr(t))-7);

until abs (t*t*t*t*t-7*t-6) < eps;

koren:=t;

end;

//--------------------------------------------------------------------------------------------------------------

function signal(t:real):real;

Var

z:real;

begin

if t<0 then

z:=0

else if t<1/2 then z:=2*t

else if t<=1 then z:=2-2*t

else z:=0;

signal:=z;

end;

function Period(x,T:real):real;

begin

x:=x-trunc(x/T)*T;

Period:=signal(x);

end;

procedure grafik;

Var

k:integer;

x,y:real;

begin

T:=1.6;

Form1.ListBox1.Visible:=true;

Form1.ListBox1.Width:=520;

With Form1.listBox1.Canvas do

begin

moveTo(5,15);

for k := 0 to 100 do

begin

x:=k*0.05;

y:=Period(x,T)*100;

LineTo(5*k+5,115-round (y));

end;

end;

end;

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

function RHS (x,U:real):real;

begin

RHS:=Nzach*(cos((4+Nzach/10)*x+U)+T*Period(x,T)-koc*U);

end;

procedure difur;

Var

k:integer;

x,y:real;

begin

U[0]:=U0;

for k := 0 to Npoint do

begin

x:=k*hinteg;

y:=RHS(x,U[k]);

{коррекция метода Эйлера}

U[k+1]:= U[k]+hinteg*y;

Form1.ListBox1.Items.Add

(floattostrf(x,FFGeneral,6,2)+' '+floattostrf(U[k],ffFixed,10,4));

end;

end;

//=================================================================

procedure zapis;

Var

k:integer;

begin

Assignfile(ft,fname);

rewrite(ft);

for k := 0 to Npoint do

Writeln(ft,k*0.1:8:2,U[k]:10:4);

Closefile(ft);

end;

//--------------------------------------------------------------------------------------------------------

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Label1.Caption:='рисуем график сигнала' ;

grafik;

BitBtn1.Visible:=false;

BitBtn2.Visible:=true;

BitBtn2.SetFocus;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

Label1.Caption:='Решаем задачу Коши' ;

difur;

BitBtn2.Visible:=false;

BitBtn3.Visible:=true;

BitBtn3.SetFocus;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

Label1.Caption:='Записываем в файл' ;

if SaveDialog1.Execute then

Fname:=SaveDialog1.FileName;

Label1.Caption:='идет запись в файл'+fname;

zapis;

BitBtn3.Visible:=false;

BitBtn4.Visible:=true;

BitBtn4.SetFocus;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

Label1.Caption:='Рисуем спектр сигнала' ;

BitBtn4.Visible:=false;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.Caption:='находим корень';

kasat(x0,exp,T);

Label2.Caption:='корень='+floattostr(T);

Button1.Visible:=false;

BitBtn1.Visible:=true;

BitBtn1.SetFocus;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end;

end.