Студопедия — Постановка задачи
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Постановка задачи






 

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

 

Задача:

Рассматривается функция F(t), представляющая собой периодический (период 2π) сигнал единичной амплитуды длительности T. Значение величины T есть наименьший положительный корень полинома (таблица 1- по вариантам), который вычисляется любым из известных методов нахождения корней уравнений.

1. Программу, реализующую вычисление корня Т, написать на языке программирования Pascal ABC. Для построенного сигнала вычислить по формулам Бесселя коэффициенты конечной суммы Фурье и записать их в файл.

2. С помощью языка программирования математического пакета Maple вычислить для аналогового сигнала своего варианта коэффициенты конечной суммы Фурье (аппроксимирующего тригонометрического полинома) в аналитической форме, построить графики исходного сигнала, тригонометрического полинома для нескольких степеней, а также графики спектров амплитуд дискретного (с коэффициентами из файла, вычисленными на Паскале) и аналогового сигнала.

 

 

Структура отчета

 

1. Формат А4.

2. Титул

3. Постановка задачи

4. Алгоритмы решения вспомогательных задач

5. Блок-схемы

6. Общая структура программы на языке программирования

7. Результаты расчетов, графики

8. Литература

 

Варианты заданий

 

Таблица 1. Варианты полиномов (номер варианта определяется по последней цифре студенческого билета)

№ варианта Полином
  x^5-8*x-1
  x^5-3*x-3
  2*x^4-x^3-8
  x^6-4*x^4-2
  x^6-4*x^4-3
  x^6-3*x^3-2
  x^5-7*x-14
  x^5-x^3-1
  x^5-2*x^3-4
  x^6-3*x^4-5

 

Текст программы на Pascal

 

unit Pomogaev_Krasheninnikov;

 

interface

 

uses

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

Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

Label1: TLabel;

ListBox1: TListBox;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

SaveDialog1: TSaveDialog;

procedure Button4Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}//=====================================================

const eps=0.001; x0=4; n=32; m=50; h=2*pi/n;

var T:real; fn:string; ft:text;

a,b:array[0..m]of real;

 

function polynom(x:real):real;

begin

polynom:=x*x*x*x*x-7*x-14;

end;

 

function deriv(x:real):real;

begin

deriv:=5*sqr(sqr(x))-7;

end;

 

procedure Koren(x0,eps:real;var root:real);

var x:real;

begin repeat x:=x0-polynom(x0)/deriv(x0);

x0:=x;

until abs(polynom(x))<eps;

root:=x;

end;

 

procedure ZAPIS;

var k:integer;

begin

for k:= 0 to m do

writeln (ft,k:3,a[k]:12:3,b[k]:16:4);

Closefile(ft);

end;

 

 

function signal(x:real):real;

begin

signal:=0;

if x <T then signal:=1;

end;

 

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

procedure Fourier;

var k,j:integer;

x,h,p,q:real;

s1,s2,s3:string;

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+signal(x)*cos(k*x);

q:=q+signal(x)*sin(k*x);

end;

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

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

str(k:4,s1); str(a[k]:10:3,s2); str(b[k]:8:4,s3);

Form1.ListBox1.Items.Add(s1+s2+s3);

end;

end;

 

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

procedure TForm1.Button1Click(Sender: TObject);

begin

Koren(x0,eps,T);

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

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

Label1.Caption:='Коэффициент фурье';

Fourier

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

if SaveDialog1.Execute then

begin

fn:=SaveDialog1.FileName;

Label1.Caption:='Pomogaev_Krasheninikov'+fn;

Assignfile(ft,fn);rewrite(ft);

ZAPIS;

end;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

close;

end;

end.

 

 

Результаты вычислений

 

0 0.625 0.0000

1 0.336 0.4098

2 -0.058 0.2903

3 -0.037 0.0198

4 0.107 0.0442

5 0.038 0.1244

6 -0.024 0.0358

7 0.054 -0.0054

8 0.063 0.0625

9 -0.004 0.0447

10 0.024 -0.0160

11 0.067 0.0202

12 0.018 0.0442

13 0.006 -0.0112

14 0.058 -0.0115

15 0.040 0.0331

16 0.000 0.0000

17 0.040 -0.0331

18 0.058 0.0115

19 0.006 0.0112

20 0.018 -0.0442

21 0.067 -0.0202

22 0.024 0.0160

23 -0.004 -0.0447

24 0.062 -0.0625

25 0.054 0.0054

26 -0.024 -0.0358

27 0.038 -0.1244

28 0.107 -0.0442

29 -0.037 -0.0198

30 -0.058 -0.2903

31 0.336 -0.4098

32 0.625 -0.0000

33 0.336 0.4098

34 -0.058 0.2903

35 -0.037 0.0198

36 0.107 0.0442

37 0.038 0.1244

38 -0.024 0.0358

39 0.054 -0.0054

40 0.063 0.0625

41 -0.004 0.0447

42 0.024 -0.0160

43 0.067 0.0202

44 0.018 0.0442

45 0.006 -0.0112

46 0.058 -0.0115

47 0.040 0.0331

48 0.000 0.0000

49 0.040 -0.0331

50 0.058 0.0115

 

Форма

 

 

 

 

Работающая программа

 

 

 

Решение задачи средствами Maple

Программа построения АЧХ для периодической функции, заданной аналитически на периоде

 

> restart;with(plots):;with(plottools):;

> N:=51;

> P:=x^5-7*x-14; #полином

> T:=fsolve(P,x=0..3);

N - число гармоник

> plot(P,x=T-0.5..T+0.5,thickness=2,color=blue);

> f:=proc(t) local z;

z:=piecewise(t<0,0,t<T,1,0);end:

> plot(f(x),x=-1..2*Pi,color=blue,thickness=2,discont=true);

>

Коэффициенты ряда Фурье вычисляются в аналитической форме

(если функция F(t) допускает вычисление первообразной) по формулам

Интегрирование выполняется по любому отрезку длины периода

>

> a0:=1/Pi*Int(f(t),t=-Pi..Pi):value(%);

>

> ak:=1/Pi*Int(f(t)*cos(k*t),t=-Pi..Pi):value(%);

> bk:=1/Pi*Int(f(t)*sin(k*t),t=-Pi..Pi):;value(%);

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

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

>

Аппроксимация функции конечной суммой ряда Фурье есть тригонометрический полином

степени n.

> Trig:=proc(t,n) local z,k;global a0,A,B;

z:=a0/2+sum(A[k]*cos(k*t)+B[k]*sin(k*t),k=1..n);

end;

>

>

>

>

> plot(Trig(x,10),x=-2*Pi..2*Pi,numpoints=1000);

>

>

>

>

Совместный график

> ris1:=plot(Trig(x,20),x=-2*Pi..2*Pi,numpoints=1000):

> ris2:=plot(f(x),x=-Pi..Pi,thickness=3,color=blue):

> display(ris1,ris2);

> col:=[brown,black,green];

> Ris:=seq(plot(Trig(x,3*n),x=-2*Pi..2*Pi,numpoints=100,color=col[n]),n=1..3):

> display(Ris,ris2);

>

>

График спектра амплитуд

> k:='k';c:=array(0..N);num:=array(0..N);

> c[0]:=evalf(abs(a0),3);

num[0]:=0;

> for k from 1 to N do

c[k]:=evalf(abs(A[k]+I*B[k]),3):

num[k]:=k;

#print(k,num[k],c[k]);

end:;

>

> Risc:=zip((x,y)->[x,y],num,c):

> arr:=array(0..N);

> for i from 0 to N do

arr[i]:=arrow([i,0],[i,c[i]],0.2,0.2,0,color=black);

end:;

> Ar:=convert(arr,list):;

> Rsym:=plot(Risc,style=point,symbol=circle,symbolsize=20,color=blue,title=`спектр амплитуд`):

> display(Ar,Rsym);

Чтение коэффициентов Фурье, вычисленных программой на Паскале

 

> fn:=`d:\\Koeff`;

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

> with(linalg):

> Nkoef:=vectdim(L);

> j:='j';

> for j from 1 to Nkoef do

c[j-1]:=evalf(sqrt(L[j,2]^2+L[j,3]^2),4);

#print(j,c[j-1]);

end:

> for i from 0 to Nkoef do

arr[i]:=arrow([i,0],[i,c[i]],0.2,0.2,0,color=blue);

end:;

> Ardiskr:=convert(arr,list):;

> Rlin:=plot(Risc,thickness=2,color=brown,title=`сравнение спектров амплитуд`):

> display(Ardiskr,Rlin,Ar,Rsym);

>

>

>

>

 

 







Дата добавления: 2015-09-19; просмотров: 531. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

САНИТАРНО-МИКРОБИОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ ВОДЫ, ВОЗДУХА И ПОЧВЫ Цель занятия.Ознакомить студентов с основными методами и показателями...

Меры безопасности при обращении с оружием и боеприпасами 64. Получение (сдача) оружия и боеприпасов для проведения стрельб осуществляется в установленном порядке[1]. 65. Безопасность при проведении стрельб обеспечивается...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

Приложение Г: Особенности заполнение справки формы ву-45   После выполнения полного опробования тормозов, а так же после сокращенного, если предварительно на станции было произведено полное опробование тормозов состава от стационарной установки с автоматической регистрацией параметров или без...

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия