- •В.П. Кондратьев языки программирования
- •210700 «Инфокоммуникационные технологии и системы связи»
- •Содержание
- •Пояснительная записка
- •Перечень практических занятий
- •Практическая работа 1 Структуры языка программированиия Pascal
- •Практическая работа 2 Структуры языка программированиия Pascal
- •Практическая работа 3 Визуальная среда разработки программ delphi
- •Практическая работа 4 Визуальная среда разработки программ delphi
- •Практическая работа 5 Основные алгоритмы обработки данных.
- •Практическая работа 6 Методы вычислений.
- •Практическая работа 7 Визуальное программирование
- •Практическая работа 8 Пакет математических вычислений maple.
- •Практическая работа 9 Пакет математических вычислений maple.
- •Литература
Практическая работа 6 Методы вычислений.
Реализация алгоритмов вычислительной математики на языках программирования в визуальной среде DELPHI. Метод наименьших квадратов. Гармонический анализ
Цель работы:
Изучение методов обработки экспериментальных данных
Ознакомиться с численными алгоритмами метода наименьших квадратов, с ортогональными на дискретной сетке узлов системами функций (тригонометрический базис). Реализовать алгоритмы построения тригонометрических полиномов для аппроксимации периодических на произвольном отрезке дискретных сигналов.
Применить учебную программу построения коэффициентов тригонометрического полинома для аппроксимации периодических сигналов, заданных на дискретных сетках периода [0..T]. Построить график полученного решения.
Построить графики спектральных характеристик сигнала, используя процедуры построения графиков предыдущей лабораторной работы.
Образец выполнения задания:
Пусть функция f(t) задана на равномерной сетке отрезка [x0,x0 + T] и продолжена периодическим образом на всю ось. Следовательно, ее можно представить в виде тригонометрического полинома (как частичной суммы ряда Фурье), приближенно представляющего функцию:
Коэффициенты полинома вычисляются по формулам:
где h = T / N, xj = x0+j h, yj = f( xj), ( j=1..N) – значения функции на равномерной сетке. Для учета периодичности наложим на функцию дополнительно условие yN=(y0 + yN )/2.
Установим на форму компоненты, как на рисунке
Назначим событию OnClick кнопки Button1 операторы вычисления коэффициентов и опишем переменные и процедуры в разделе implementation как в приведенном ниже модуле (шрифт – жирный курсив). Сохраним проект в отдельной папке и отладив на конкретной функции f(x)=x, заданной на отрезке [-, ], применим эту программу для вычисления коэффициентов функций (по вариантам—индивидуально), затем используя предыдущую лабораторную работу, добавим к программе построение графика АЧХ, то есть величин коэффициентов в зависимости от их номеров.
unit trig;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
N=50; {число узлов}
T=2*Pi; {период}
x0=-Pi;
h=T/N; {шаг сетки}
m=20;{число коэффициентов}
type
koeff=array[0..m] of real;
dann=array[0..N] of real;
var
Y:dann;
a,b:koeff;
function f(t:real):real;
begin
f:=t;
end;
procedure Trig(m,N:integer;Y:dann;var a,b:koeff);
var
j,k:integer;
p,q:real;
x:real;
begin
for k:=0 to m do
begin
p:=0;q:=0;
for j:=1 to N do
begin
x:=x0+j*h;
p:=p+Y[j]*cos(2*Pi*x*k/T);
q:=q+Y[j]*sin(2*Pi*x*k/T);
end;
a[k]:=p*2/N;
b[k]:=q*2/N;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
j:integer;
s1,s2,s3:string;
begin
for j:=0 to N do
Y[j]:=f(x0+j*h);
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]:8:4,s2);
str(b[j]:8:4,s3);
listbox1.Items.Add(s1+s2+s3);
end;
end;
end.
