Автор: Пользователь скрыл имя, 25 Октября 2015 в 21:44, курсовая работа
Задание для курсовой работы:
Написать программу на языке программирования Паскаль для решения следующей задачи (вариант задания индивидуальный). Результаты расчетов должны выводиться на экран и в файл. Оформление графиков и таблиц выполнять средствами математических пакетов (Maple, MathCad). Демонстрационный вариант программы подготовить в среде визуального программирования Delphi.
Проверить решение промежуточных задач средствами математических пакетов. Построить блок-схемы задачи и вспомогательных частей алгоритма. Оценить погрешность выполненных расчетов.
Button2.Visible:=false;
Button3.Visible:=true;
Button3.SetFocus;
Button4.Visible:=false;
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;
Button4.Visible:=true;
Button4.SetFocus;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.Caption:='Построение графиков';
{здесь поместим алгоритм
Label1.Caption:='графики
Button4.Visible:=false;
Button5.Visible:=true;
Button5.SetFocus;
Label2.Visible:=false;
{Label3.Visible:=false;
Label4.Visible:=false;}
listbox1.Visible:=false;
grafik(1); { 1 - сигнал точками, полином - линией}
Label1.Caption:='графики сигнала и полинома';
Button4.Visible:=false
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Form1.Caption:='Спектр амплитуд';
{здесь поместим алгоритм построения спектра амплитуд}
Label1.Caption:='График
Button5.Visible:=false;
form1.image1.Canvas.FillRect(
grafik(2);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button2.Visible:=true;
Button3.Visible:=false;
Button4.Visible:=false;
Button5.Visible:=false;
end;
end.
Часть 2.
> restart;
> with(linalg):with(plots):
pp:=(x,y)->[x,y];
> fun:= proc(t)
local z ;z:=piecewise(t<0,0,t<1/2,2*t,
> plot(fun(t),t=-1..2,thickness=
> p(x):=x^4-x^3-3;
> 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)*
z:=fun(x/tau);evalf(z);
end;
> plot(Period(x,0,tau,T,fun),x=-
> #=============================
>
> Koc:=0.2;Nzac:=5;
> ur:=diff(U(t),t);
> F:=Nzac*(cos((4+Nzac/10)*t+U(
RK:=dsolve({ur=F,U(0)=0.15},U(
> fU:=subs(RK,U(t));
> T0:=5;Nt:=50;h:=T0/Nt;
> Tx:=array(0..Nt):U:=array(0..
> for j from 0 to Nt do
x:=j*h;z:=fU(x);Tx[j]:=x;U[j]:
#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,
> display(RU0):;
Определение периода с помощью функции автокорреляции
> R:=proc(Nt,T::array,U::array)
local k,j,t,z,Af::array,Uf::array,
Af:=array(0..Nt);Uf:=array(0..
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(
display(RisAf);
end:
> R(Nt,Tx,U);
>
++++++++++++++++++++++++++++++
>
> fn:=`D:\\work\\Астраханский.
>
>
++++++++++++++++++++++++++++++
> 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:
> Ru1:=zip(pp,T_n,U_n):
> RU1:=plot(u1,style=point,
> 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+
#printf("%
3.0f % 6.2f % 8.4f % 8.4f % 8.4f \n",k,t,U_map[k],U_n[k+1],del)
end:;
unit final;
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;
Label1: TLabel;
Label2: TLabel;
ListBox1: TListBox;
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.2;
nzac=5;
koc=0.2;
hintegr=0.1;
Npoint=80;
var
tau:real; {период сигнала}
Koeff:real; {равен периоду}
min,sec:byte;
frez:string;
ftxt:text;
{===================корень
{фунция, задающая вычисление полинома в точке}
function polynom(t:real):real;
begin
polynom:=sqr(sqr(t))-sqr(t)*t-
end;
{процедуры метода простой
function derive(x:real):real;
begin
derive:=4*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(
k:=k+1;
until abs(x-x0)<eps;
root:=x;
end;
function signal(t:real):real;{сигнал 11-го варианта}
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:=1
else 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*
end;
procedure difur;
var
j:integer;
U,t:real;
U1: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);
U:=U1;
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
Form1.Close;
Closefile(ftxt);
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:='число
end;
procedure TForm1.N6Click(Sender: TObject);
begin
difur;
end;
end.