49350

Написание программы на языке программирования Паскаль для решения задачи

Курсовая

Информатика, кибернетика и программирование

С помощью языка программирования системы Maple решается задача интегрирования дифференциального уравнения (задача Коши) методом (по варианту задания). Окончательные вычисления в программе зависят от результатов расчета программы в Delphi (следующий пункт). Образец выполнения задания – файл RUTTA.mws.

Русский

2013-12-26

257.15 KB

4 чел.

Задание для курсовой работы.

Написать программу на языке программирования Паскаль для решения следующей задачи (вариант задания индивидуальный). Результаты расчетов должны выводиться на экран и в файл. Оформление графиков и таблиц выполнять средствами математических пакетов (Maple, MathCad). Демонстрационный вариант программы подготовить в среде визуального программирования Delphi.

Проверить решение промежуточных задач средствами математических пакетов. Построить блок-схемы задачи и вспомогательных частей алгоритма. Оценить погрешность выполненных расчетов.

Напряжение U=U(t) на входе транзистора как функция времени описывается дифференциальным уравнением

с начальными условиями (1), где n – последняя цифра номера зачетной книжки, k – коэффициент усиления (см. ниже), fs(t) – периодический сигнал

(рис. 1), mкоэффициент  обратной связи.

Указания и пояснения.

  1.  Дифференциальное уравнение с заданными начальными условиями (задача Коши) решается методом Рунге-Кутта второго порядка с коррекцией (3) на отрезке [0;5] с шагом  h=0.01.(в узлах  tj =jh, j=0,1,2…). Функция fs(t) в правой части представляет собой регулирующий периодический (период Т) сигнал единичной амплитуды (рис 1, номер варианта  n – последняя цифра номера зачетной книжки,). Результаты расчетов—таблица (tj,Uj) и график функции U(t) (на экран и в файл).
  2.  Значение коэффициента усиления k в правой части дифференциального уравнения есть наименьший положительный корень полинома (2), который вычисляется одним из методов нахождения корней уравнения (метод касательных, метод простой итерации).
  3.  Построить спектральные характеристики периодического сигнала fs(t), заданного в аналоговой форме и в виде дискретного сигнала. Длительность сигнала равна 1, период T=k.
  4.   Период функции U(t) определить с помощью функции автокорреляции.

Курсовая работа выполняется в ЧЕТЫРЕ  этапа.

  1.  Средствами математического пакета Maple  решается задача спектрального анализа аналогового и дискретного периодического сигнала fs(t). Сравниваются спектры амплитуд аналогового и дискретного представлений сигнала. (образец выполнения задания – файл вариант11.mws).
    1.  Создается проект в визуальной среде Delphi, решающий эту же задачу для дискретного сигнала, а результаты выполнения сравниваются визуально.
      1.  С помощью языка программирования системы Maple решается задача интегрирования дифференциального уравнения (задача Коши) методом (по варианту задания). Окончательные вычисления в программе зависят от результатов расчета программы в Delphi (следующий пункт). Образец выполнения задания – файл RUTTA.mws.
      2.  Создается проект в визуальной среде Delphi, решающий ту же задачу Коши, результаты расчета которой записываются в файл,  который используется в предыдущем пункте. Выводятся графики результатов вычислений в Maple и Delphi и сравниваются между собой. Явные несовпадения свидетельствуют об ошибке в программе на  Delphi.

Оформление:

  1.  Формат А4.
  2.  Титул
  3.  Постановка задачи
  4.  Алгоритмы решения вспомогательных задач
  5.  Блок-схемы
  6.  Результаты расчетов, графики
  7.  Литература

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

  1.  Начальные условия: U(0)=0.15
  2.  полином:x^6+x^3-5
  3.  коррекция:по средней точке
  4.   метод:касательных 

        

Блок-схема алгоритма  сигнала              

НАЧАЛО

Функция f(x)

t<0

Z=0

Z=0

f(x)=z

Z=1

t<0,5

КОНЕЦ

Часть 1

> restart;

> with(linalg):with(plots):with(plottools):

> fun:= proc(t) local z ;z:=piecewise(t<0,0,t<1/2,1,t<1,0); evalf(z);end;

> fun(t/tau);

> p(x):=x^6+x^3-5;

> Koeff:=fsolve(p(x)=0,x,0..3);

> tau:=Koeff:

> plot(p(x),x=Koeff-0.5..Koeff+0.5,thickness=2,color=black);

> R1:=plot(fun(t),t=0..2.5,thickness=2,linestyle=3,color=blue):

> R11:=plot(fun(t/tau),t=0..2.5,thickness=2,color=black):

> display(R1,R11);

> Fourier_T:=proc(F,T0,TN,k::evaln) local T;

 global A0,Ak,Bk;

   T:=TN-T0;

  A0:=2/T*Int(F(x),x=T0..TN);

  Ak:=2/T*int(F(x)*cos(k*x*2*Pi/T),x=T0..TN):

  Bk:=2/T*int(F(x)*sin(k*x*2*Pi/T),x=T0..TN):

end proc:

> Trig_polynom:=proc(N,T,a0,ak,bk,k::evaln) local n,Pol,A0,A,B;

 global a,b,RisTrig;

 a:=array(0..N);b:=array(0..N);

   A0:=evalf(a0);a[0]:=A0;b[0]:=0;

   A:=seq(evalf(subs(k=n,ak)),n=1..N);

   B:=seq(evalf(subs(k=n,bk)),n=1..N);

    for n from 1 to N do

     a[n]:=A[n];b[n]:=B[n];

    end do;

   Pol:=A0/2+sum(A[k]*cos(2*Pi*k*x/T)+B[k]*sin(2*Pi*k*x/T),k=1..N):

   RisTrig:=plot(Pol,x=-T/2..3*T/2,color=blue,thickness=2):

 RETURN(Pol);

end proc:

Процедура ARR строит спектр амплитуд линейчатой гистограммой.

> ARR:=proc(n::integer,c) local L,H,ma,mi,k::integer,

  Sim::array(0..n);

  ma:=c[0];mi:=c[0];

  L:=line([0,c[0]],[n,c[n]],thickness=2,color=red);

 for k from 1 to n do

  if c[k]>ma then ma:=c[k];end if;

  if c[k]<mi then mi:=c[k];end if;

 end do;

 H:=ma-mi;

 if H=0 then RETURN(L) end;

 for k from 0 to n do

  if abs(c[k])<H/1000 then

    Sim[k]:=ellipse([k,c[k]],0.2,0.01*H,color=blue);

  else

   Sim[k]:=plottools[arrow]([k,0],[k,c[k]],0.2,0.2,0,color=black);

  end if;

 end do;

 convert(Sim,list);

end:

> Spectr:=proc(n,a,b,c,Risphi) local k,R,phi;

  for k  from 0 to n do

    c[k]:=evalf(abs(I*a[k]+b[k])):

#    print(k,c[k]);

    phi:=evalf(argument(I*a[k]+b[k]));

    R[k]:=[eval(k),eval(phi)];

  end:;

Risphi:=plot(convert(R,list)):

end:

> T:=3;# величина периода

> F_for_all:=proc(t) global tau;fun(t/tau);end proc:;

> Ris1:=plot(F_for_all(t),t=0..T,color=brown,thickness=2,discont=true):display(Ris1);

> Fourier_T(F_for_all,0,T,k):

> a0:=evalf(A0);

> Nk:=50;

> Trig_polynom(Nk,T,A0,Ak,Bk,k):

> display(RisTrig,Ris1);

> Spectr(Nk,a,b,c,'Risphi1');

> display(ARR(Nk,c));

>

> Ampl:=display(ARR(Nk,c)):;

> 2: DTF:=proc (y,N,Y) local n,k,j,p,h;

n:=N-1;

h:=2*Pi/N;

2.1: for k from 0 to N do

p:=0;

  for j from 0 to n do

    p:=p+evalf(y[j]*exp(-I*k*j*h));

  end;

 Y[k]:=evalf(1/N*p);

end:

end:;

> 3: CDTF:=proc(N,Y,y) local n,k,h,p,j;

n:=N-1;

 h:=2*Pi/N;

for k from 0 to n do

p:=0;

  for j from 0 to n do

    p:=p+Y[j]*exp(I*k*j*h);

  end;

 y[k]:=evalf(Re(p));

end:

end:

> Setka_DTF:=proc(Nt,T,F,Y::array) local h,j,x,R,RL;  

  global GrafF;

  h:=T/Nt;

 for j from 0 to Nt do

  x:= evalf(j*h);

  Y[j]:= F(x);

  R[j]:=[j,eval(Y[j])];

 end:

   5.1: R[Nt]:=[j,eval(Y[0])];

    GrafF:=plot(convert(R,list),0..Nt-1,color=brown,

    style=point,symbol=circle):

end:

> Spectr_DTF:=proc(n,C,A,phi) local k,R;global Risphi;

 6.1:  for k  from 0 to n do

    A[k]:=evalf(abs(C[k])):

    phi[k]:=evalf(argument(C[k]));

    R[k]:=[eval(k),eval(phi[k])];

end:;

Risphi:=plot(convert(R,list),thickness=2,color=blue,style=point,symbol=box):

end:

Параметры задачи

> Nt:=19:`число дискретных отсчетов `:

> n:=Nt;N:=Nt-1;# параметры ДПФ

> C:=array(0..n):phi:=array(0..n):A:=array(0..n):;

Y:=array(0..N):

> Setka_DTF(N,T,F_for_all,Y);

> DTF(Y,Nt,C,n):

> Spectr_DTF(n,C,A,phi):

Для четных N

> display(ARR(n,A));

> display(ARR((n-1)/2,A));

> CDTF(Nt,C,F):

> display(GrafF,ARR(n-1,F));

Аргумент n-1 из-за того, что процедура ARR строит в АЧХ на одну точку больше (номера от нуля)

> Setka:=proc(Nt,T,F,Y::array) local h,j,x,R,RL;  

  global GrafF;

  h:=T/Nt;

 for j from 0 to Nt do

  x:= evalf(j*h);

  Y[j]:= F(x);

  R[j]:=[x,eval(Y[j])];

 end:

   5.1: R[Nt]:=[x,eval(Y[0])];

    GrafF:=plot(convert(R,list),0..T,color=brown,

    style=point,symbol=circle):

end:

> F_Discret:=proc (Y,N,a,b,n) local k,j,p,q,h;

 h:=2*Pi/N;

for k from 0 to n do

p:=0;q:=0;

  for j from 0 to N do

    p:=p+evalf(Y[j]*cos(k*j*h));

    q:=q+evalf(Y[j]*sin(k*j*h));

  end;

 a[k]:=2/N*p;b[k]:=2/N*q;

# print(k,a[k],b[k]);

end:

if 2*n=N then b[n]:=0; end;

RETURN(n);

end:;

> 3: Trig:=proc(t,n,T,a,b) local z,k;

z:=a[0]/2+sum(a[k]*cos(k*t*2*Pi/T)+b[k]*sin(k*t*2*Pi/T),k=1..n);

end:

> M:=Nk:

> a:=array(0..M):b:=array(0..M):c:=array(0..M);

> Setka(N,T,F_for_all,Y):

> F_Discret(Y,N,a,b,M):

> Cl:=blue,red,brown:;

> 15: RT:=seq(plot(Trig(t,5*k,T,a,b),t=-0.1..T+0.1,

numpoints=500,color=Cl[k]),k=1..3):

> 16: display(RT,GrafF);

> Spectr(M,a,b,c,'Grafphi');:

> display(ARR(M,c));:

> display(Ampl);

>

unit korenur;

interface

uses

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

 Dialogs, StdCtrls, ExtCtrls;

type

 TForm1 = class(TForm)

   Button1: TButton;

   Label1: TLabel;

   Button2: TButton;

   Button3: TButton;

   ListBox1: TListBox;

   Button4: TButton;

   Image1: TImage;

   procedure Button1Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

const

N=50;

{m=N div 2;}

m=51;

x0=0;

T=3;

hx=T/N;

type

koeff=array[0..m] of real;

dann=array[0..N] of real;

var

Tau:real;

Y:dann;

a,b:koeff;

h:real;

eps:real;

La:real;

Rb:real;

Nkoeff:integer;

function pol(t:real):real;

begin

 pol:=sqr(sqr(t))*sqr(t)+sqr(t)*t-5;

end;

function derive(t:real):real;

begin

derive:=6*sqr(sqr(t))*t+3*sqr(t);

end;

function root(a,b:real):real;

var

x0,x1,delta:real;

begin

x0:=(a+b)/2;

repeat

 x1:=x0-pol(x0)/derive(x0);

 delta:=abs(x1-x0);

 x0:=x1;

until delta<0.00001;

root:=x0;

end;

function signal(t:real):real;

var

z:real;

begin

 if t<0 then

  z:=0

  else

  if t<1/2 then

  z:=1

  else

  if t<1 then

  z:=0;

  signal:=z;

end;

procedure Trig(m,N:Integer;Y:dann; var a,b:koeff);

var

j,k:Integer;

p,q,x,h:real;

begin

 h:=2*Pi/N;

 for k := 0 to m do

 begin

   p:=0;

   q:=0;

   for j := 0 to N do

     begin

       x:=j*h;

       p:=p+Y[j]*cos(k*x);

       q:=q+Y[j]*sin(k*x);

     end;

     a[k]:=p*2/N;

     b[k]:=q*2/N;

 end;

end;

function Tpol(m:integer;x:real):real;

var

z:real;

k:integer;

begin

 z:=a[0]/2;

  for k:=1 to m do

   z:=z+(a[k]*cos(k*2*Pi/T*x)+b[k]*sin(k*2*Pi/T*x));

  Tpol:=z;

end;

procedure grafik(numvar:integer);

type

dann=array[0..N] of real;

var

L,R,W,H,k,x0,y0,posx,posy:integer;

X,Y:dann;

ymin,ymax:real;

Mx,My:real;

Nkf:string;

tx:real;

ypol:real;

procedure min_max(N:integer;Y:dann; var min, max:real);

  var

    k: integer;

  begin

     min:=Y[0];max:=Y[0];

     for k := 1 to N do

     if Y[k]> max then

        max:=Y[k]

       else if Y[k]< min then

        min:=Y[k];

     {увеличим диапазон}

      max:=max+0.1;

      min:=min-0.1;

  end;

begin

  L:=20;

  R:=form1.image1.clientHeight-20;

  W:=form1.image1.Width-50;

  H:=form1.image1.clientheight-50;

  case numvar of

1: begin {=========== сигнал и полином =================}

     for  k:=0 to N do

       X[k]:=signal(hx*k/Tau);

     min_max(N,X,ymin,ymax);

     Mx:=W/N;

     My:=H/(ymax-ymin);

     x0:=L;

     y0:=R-abs(Round(ymin*My));

     with form1.image1.Canvas do

     begin

       pen.Color:=clblue;

       font.Name:='Tahoma';

       font.Size:=8;

       font.Color:=claqua;

       for k:=0 to N do

        begin

          posx:=x0+round(k*Mx);

          posy:=y0-round(X[k]*My);

          textout(posx-2,posy-8,'o');

          Pixels[posx,posy]:=clRed;

        end;

       pen.Width:=2;

       Moveto(L,R);lineto(L,R-H);

       moveto(x0,y0);lineto(x0+W,y0);

       font.Color:=clred;

       textout(x0+W,y0+10,'x');

       textout(x0+W,y0-20,floattostrF(T,ffFixed,3,0));

       textout(x0+round(W*Tau/T), y0-20,'tau='+ floattostrF (Tau,ffFixed, 6, 3));

       Nkf:=Inputbox('Число коэффициентов полинома','например 10','20');

       Nkoeff:=strtoint(Nkf);

       pen.Color:=clNavy;

       tx:=0;

       ypol:=Tpol(Nkoeff,tx/Tau);

        posx:=x0+round(0*Mx/2);

        posy:=y0-round(ypol*My);

       moveto(posx,posy);

       for k:=1 to 2*N do

       begin

         tx:=hx*k/2;

         ypol:=Tpol(Nkoeff,tx/Tau);

         posx:=x0+round(k*Mx/2);

         posy:=y0-round(ypol*My);

         lineto(posx,posy);

       end;

     end;

   end;

  2: begin  {АЧХ столбиками}

       for  k:=0 to m do

        Y[k]:=sqrt(sqr(a[k])+sqr(b[k]));

        min_max(m,Y,ymin,ymax);

        Mx:=W/m;

        My:=H/(ymax-ymin);

        x0:=L;

        y0:=R-abs(Round(ymin*My));

     with form1.image1.Canvas do

     begin

        pen.Width:=2;

        pen.Color:=clred;

        Moveto(L,R);lineto(L,R-H);

        moveto(x0,y0);lineto(x0+W,y0);

        pen.Width:=5;

        pen.Color:=clblue;

       for  k:=0 to m do

        begin

         posx:=x0+round(k*Mx);

         posy:=y0-round(Y[k]*My);

         moveto(posx,y0);

         lineto(posx,posy);

        end;

     end;

     end;

  end;

end;

{=====================================}

procedure TForm1.Button1Click(Sender: TObject);

Const

a=0;

b=3;

begin

Tau:=root(a,b);

Label1.Caption:='Корень равен'+ floattostr(Tau);

Button1.Visible:=false;

Button3.Visible:=true;

Button3.SetFocus;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 Form1.Caption:='Построение графиков';

  {здесь поместим алгоритм построения графика сигнала и триг. полинома}

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

   Button3.Visible:=false;

   Button4.Visible:=true;

   listbox1.Visible:=false;

   grafik(1);

Button2.Visible:=false;

Button4.Visible:=true;

Button4.SetFocus;

end;

procedure TForm1.Button3Click(Sender: TObject);

Var

j:integer;

s1,s2,s3:string;

begin

for j := 0 to N do

 Y[j]:=signal(x0+j*hx);

 Y[N]:=(Y[0]+Y[N])/2;

 Trig(m,N,Y,a,b);

 for j := 0 to m do

 begin

   str(j:2,s1);

   str(a[j]:10:5,s2);

   str(b[j]:10:5,s3);

   listbox1.Items.Add(s1+s2+s3);

 end;

 Label1.Caption:='Вычислены коэффициенты Фурье';

 Button3.Visible:=false;

 Button2.Visible:=true;

 Button2.SetFocus;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Form1.Caption:='Спектр амплитуд';

   {здесь поместим алгоритм построения спектра амплитуд}

   Label1.Caption:='График спектра амплитуд';

   Button4.Visible:=false;

   form1.image1.Canvas.FillRect(rect(0,0,clientwidth,clientheight));

   grafik(2)

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Button2.Visible:=false;

Button3.Visible:=false;

Button4.Visible:=false;

end;

end.

Часть 2

> restart;

> with(linalg):with(plots):

pp:=(x,y)->[x,y];

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined

> fun:= proc(t) local z ; > z:=piecewise(t<0,0,t<1/2,1,t<1,0); evalf(z);end;

evalf(z);end;

> plot(fun(t),t=-1..2,thickness=2,color=brown):;

> p(x):=x^6+x^3-5;

> Koeff:=fsolve(p(x),x,0..2);

> T:=Koeff;

> tau:=1;

> Period:=proc(t,t0,tau,T,f) local x,z;

x:=evalf(t-t0-floor((t-t0)/T)*T);

z:=fun(x/tau);evalf(z);

end;

> plot(Period(x,0,tau,T,fun),x=-1..3,thickness=2,color=brown);

> #==============================================================================

>

> Koc:=2;Nzac:=2;

> ur:=diff(U(t),t);

> F:=Nzac*(cos((4+Nzac/10)*t+U(t))+Koeff*Period(t,0,tau,T,f)-Koc*U(t));

> RK:=dsolve({ur=F,U(0)=0.2},U(t),type=numeric,output=listprocedure);

> fU:=subs(RK,U(t));

> T0:=5;Nt:=50;h:=T0/Nt;

> Tx:=array(0..Nt):U:=array(0..Nt):U_map:=array(0..Nt);

> for j from 0 to Nt do

x:=j*h;z:=fU(x);Tx[j]:=x;U[j]:=z;U_map[j]:=z;

#print(x,z);

od:

> RisU:=zip(pp,Tx,U):

> RU:=plot(RisU):

> display(RU):;

> #====================================

> RisU:=zip(pp,Tx,U):

> whattype([RisU]);

> RU0:=plot(RisU,style=point,symbol=cross):

> display(RU0):;

> R:=proc(Nt,T::array,U::array)

local k,j,t,z,Af::array,Uf::array,RAf,RisAf;

Af:=array(0..Nt);Uf:=array(0..2*Nt);

for j from 0 to Nt do Uf[j]:=U[j];Uf[j+Nt]:=U[j];

end;

for j from 0 to Nt do

t:=0;

for k from 0 to Nt do

t:=t+evalf(Uf[k]*Uf[k+j]);

end;

Af[j]:=evalf(t/Nt);

end;

RAf:=zip(pp,T,Af);RisAf:=plot(RAf):

display(RisAf);

end:

> R(Nt,Tx,U);

>

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

>

> fn:=`C:\\work\\mashko.txt`;

>

>

++++++++++++++++++++++++++++++++++++++++++++++++++++

> L:=readdata(fn,2):;

Nstrok:=vectdim(L);

> U_n:=array(1..Nstrok);:

T_n:=array(1..Nstrok);

> for j from 1 to Nstrok do

T_n[j]:=L[j,1];

U_n[j]:=L[j,2];

#print(j,T_n[j],U_n[j]);

od:

> u1:=zip(pp,T_n,U_n):

> RU1:=plot(u1,style=point,symbol=cross,color=black):

> display(RU,RU1);

> #printf("%s",`  №      t      U_map    U_pas     разн \n`);

for k from 0 to Nt do t:=Tx[k]:del:=U_map[k]-U_n[k+1];

#printf("% 3.0f  % 6.2f % 8.4f  % 8.4f % 8.4f \n",k,t,U_map[k],U_n[k+1],del):

end:;

unit part2;

interface

uses

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

 Dialogs, Menus, StdCtrls;

type

 TForm1 = class(TForm)

   MainMenu1: TMainMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   SaveDialog1: TSaveDialog;

   ListBox1: TListBox;

   Label1: TLabel;

   Label2: TLabel;

   N4: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   Label3: TLabel;

   Label4: TLabel;

   procedure N3Click(Sender: TObject);

   procedure N2Click(Sender: TObject);

   procedure N5Click(Sender: TObject);

   procedure N6Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

const

  U0=0.15;

  nzac=2;

  koc=2;

  hintegr=0.05;

  Npoint=100;

var

      tau:real; {период сигнала}

      Koeff:real; {равен периоду}

      min,sec:byte;

      frez:string;

      ftxt:text;

{===================корень полинома==============}

{фунция, задающая вычисление полинома в точке}

function polynom(t:real):real;

begin

  polynom:=sqr(sqr(t))*sqr(t)+sqr(t)*t-5;

end;

{процедуры метода простой итерации}

function derive(x:real):real;

begin

 derive:=6*sqr(sqr(x))*x+3*sqr(x);

end;

procedure Iter(a,b:real;var root:real;var K:integer);

const

 eps=0.0000001;{погрешность определения корня}

 Q0=1.5; {нормирующий множитель для ламбда}

var

 lambda:real;

 g:real;

 x,x0:real;

begin

  g:=derive(b);

   form1.label2.caption:='max производной =  '+ floattostrF (g, ffGeneral, 5, 1);

   lambda:=1.99/g;

   x:=(a+b)/2;

   k:=0;

   repeat

     x0:=x;

     x:=x0-lambda*polynom(x0);

     form1. listbox1.Items.Add(floattostrF(x,ffGeneral, 12, 9));

     k:=k+1;

   until abs(x-x0)<eps;

   root:=x;

end;

function signal(t:real):real;{сигнал 9 варианта}

var

 z:real;

begin

  if t<0 then

      z:=0

     else

       if t<1/2 then

           z:=1

       else

     if t<1 then

    z:=0;

      signal:=z;

end;

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

 var

   z:real;

begin

  z:=x-trunc(x/T)*T;{выделение дробной части}

  Period:=signal(z);

end;

{====================правая часть диф. уравнения===}

function F(t,U:real):real;

begin

 F:=Nzac*(cos((4+nzac/10)*t+U)+Koeff*Period(t,Koeff)-Koc*U);

end;

procedure difur;

var

 j:integer;

 U,t:real;

 U1,U11:real;

 strU,strt:string;

begin

 form1.listbox1.Clear;

  U:=U0;

  t:=0;

  Koeff:=Tau;

  for j :=0 to Npoint+1 do

  begin

  strt:=floattostrF(t,ffGeneral, 7, 4);

    strU:=floattostrF(U,ffGeneral, 7, 4);

    form1. listbox1.Items.Add(strt+'   '+ stru);

    writeln(ftxt,t:8:2,' ',U:8:3);

    {Метод Эйлера}

         U1:=U+hintegr*F(t,U)/2;

         U11:=U+hintegr*F(t,U1);

         U:=U11;

         t:=t+hintegr;

  end;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

if savedialog1.Execute then

  begin

    frez:=savedialog1.FileName;

    label1.caption:='эапись в файл '+#10+frez;

  end;

  assignfile(ftxt,frez);

   rewrite(ftxt);

end;

procedure TForm1.N3Click(Sender: TObject);

begin

closefile(ftxt);

Form1.Close;

end;

procedure TForm1.N5Click(Sender: TObject);

var

a,b:real;

kiter:integer;

begin

   Form1.Caption:='Вычисляем корень полинома';

    b:=3;

    a:=0;

   {здесь вызов алгоритма вычисления корня уравнения}

   Iter(a,b,Tau,Kiter);{вызов процедуры метода итераций}

   Label3.Caption:='корень равен '+floattostr(Tau);

   Label4.Caption:='число итераций '+inttostr(Kiter);

end;

procedure TForm1.N6Click(Sender: TObject);

begin

difur;

end;

end.


 

А также другие работы, которые могут Вас заинтересовать

41235. Циклические процессы 165 KB
  Физический принцип действия теплового двигателя. В основе физического принципа работы теплового двигателя лежит то что функционирование теплового двигателя обеспечивается только за счет подвода или отвода теплоты. Техническая схема теплового двигателя включает в себя теплоизолированный цилиндр с поршнем под которым находится рабочее тело например газ. Схема реализации работы теплового двигателя.
41236. Второй закон термодинамики 251 KB
  Основная задача технической термодинамики это изучение закономерностей преобразования теплоты в работу. Схематически можно так представить наиболее простой способ превращения теплоты в полезную работу : Рабочее тело газ расширяется и...
41237. Свойства реальных газов и паров. Опыт Эндрюса. Диаграммы термодинамических свойств жидкостей и паров 5.88 MB
  Известно что при нагревании жидкости испаряются. при кипении во всем объеме жидкости образуются свободные замкнутые поверхности паровые пузыри внутрь которых и происходит испарение жидкости. Изменение агрегатного состояния при кипении жидкость – пар может происходить при подводе теплоты извне к жидкости. При охлаждении паров жидкости происходит конденсация: пар переходит в жидкое состояние.
41238. Цикл паросиловой установки 340 KB
  Скорость движения пара через турбину достаточно высокая так что пар не успевает передать много теплоты через корпус турбины в окружающую среду: поэтому с достаточным для общей оценки работы пара в турбине процесс расширения пара при его движении в турбине можно считать адиабатнымпроцесс 12. Из предыдущего материала известно что процессы подвода внешней теплоты характеризуются возрастанием энтропии рабочего тела. И наоборот при отводе теплоты энтропия уменьшается. Таким образом понятно что процесс 34561 – это...
41239. ЕМПІРИЧНА ІНЖЕНЕРІЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ 48 KB
  Місце емпіричної інженерії програмного забезпечення в інженерії програмного забезпечення. Предмет та метод емпіричної інженерії програмного забезпечення. Емпіричні дослідження програмного забезпечення.
41240. Соціологія освіти як наука і предмет 217.5 KB
  Науковий статус соціології освіти Міждисциплінарні зв’язки соціології освіти Суспільне призначення соціології освіти Науковий статус соціології освіти Соціологія освіти є результатом застосування методології і методів соціологічного аналізу особливої сфери суспільного життя соціально організованого і контрольованого навчання і виховання.
41241. Елементи форм фінансової звітності, їх структура та зміст 157.5 KB
  Основными элементами баланса являются активы обязательства и капитал собственников собственный капитал. Составление и интерпретация баланса требуют четкого определения и надлежащего отражения этих элементов. Если предприятие сомневается в отношении возможности получения будущих экономических выгод актив нужно немедленно списывать с баланса и отражать в составе расходов текущего периода в Отчете о прибылях и убытках. Текущая восстановительная себестоимость Current or Replcement Сost сумма денежных средств их эквивалентов или других...
41242. Розвиток культури України у другій половині 14-18 ст. 89 KB
  Релігійне життя в Україні. Релігійне життя в Україні. Яку роль відігравав католицизм в Україні в 1516 ст. Центрами боротьби проти католицизму в Україні стають братства.
41243. Українська та європейська культура в 19 - на початку 20 ст. Література, наука, освіта 49.5 KB
  Розвиток освіти в Україні. Розвиток освіти в Україні. Царський уряд поставив завдання перед обома університетами Харківським та Київським проведення русифікаторської політики в Україні. Однак царський уряд в умовах наростання революційного і національновизвольного руху в Україні злякався поширення освіти серед нижчих шарів населення і поступово ці школи були закриті.