Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_ВМ_2010.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
2.55 Mб
Скачать

Лабораторная работа 2

ТРИГОНОМЕТРИЧЕСКАЯ ИНТЕРПОЛЯЦИЯ

Задание. 1. Найти интерполяционный тригонометрический многочлен для функции, заданной в точках , где , значениями:

2.0; -0.06; -1.9; -3.4; -4.9; -4.8; -4.0; -2.7; -1.1; 0.95; 3.0; 5.0; 6.7; 8.1; 8.8; 8.9; 8.5; 7.47; 5.94; 4.06; 2.43.

2. По найденному многочлену построить график и нанести на графике значения функции.

  1. Создайте новый проект командой Файл/Новый/Приложение.

  2. Сохраните файлы модуля и проекта командой Файл/Сохранить все под именами LR2 и PR_LR2. Для этого удобно использовать соответствующую быструю кнопку (Сохранить все). В последующих сеансах работы сохраненный проект можно открыть командой Файл/Открыть проект (или Повторно открыть). Теперь перейдем к проектированию приложения - переносам на форму необходимых компонентов и заданию их свойствам значений, а в обработчиках событий – размещению кодов соответствующих алгоритмов. (Рекомендуется нажимать кнопку Сохранить все по окончании работы с каждым компонентом.) В результате проектирования получим форму, представленную на рис.2.1.

  3. Выделите форму, щелкнув на ней левой кнопкой мыши, и в свойство Caption (надпись) впишите ТРИГОНОМЕТРИЧЕСКАЯ ИНТЕРПОЛЯЦИЯ.

  4. В верхней части формы, по центру, поместите кнопку Button1 (страница Стандарт), для которой установите свойство Font – жирный, размер 10, а в свойство Caption впишите ИСХОДНЫЕ ДАННЫЕ.

  5. Под кнопкой разместите компонент StringGrid1 (страница Дополнительно). Установите следующие значения свойств компонента StringGrid1: ColCount – 22, DefaultColWidth -28, FixedCols – 1, FixedRows – 0, Font – черный, обычный, размер 8, RowCount – 3. Раскрыв свойство Options, установите значение подсвойства goEditingtrue, что даст возможность редактировать содержимое таблицы в StringGrid1.

  6. Ниже, по центру, поместите кнопку Button2 (страница Стандарт), для которой установите свойство Font – жирный, размер 10, а в свойство Caption впишите КОЭФФИЦИЕНТЫ ИНТЕРПОЛЯЦИОННОГО МНОГОЧЛЕНА.

рис.2.1

рис.2.2

рис.2.3

  1. Под кнопкой Button2 разместите компонент StringGrid2 (страница Дополнительно). Установите следующие значения свойств компонента StringGrid1: ColCount – 12, DefaultColWidth - 48, FixedCols – 1, FixedRows – 0, Font – черный, обычный, размер 8, RowCount – 3.

  2. Ниже компонента StringGrid2, по центру, поместите кнопку Button3 (страница Стандарт), для которой установите свойство Font – жирный, размер 10, а в свойство Caption впишите ПОСТРОЕНИЕ ГРАФИКОВ.

  3. В нижнюю часть формы поместите компонент Chart1 (страница Additional). Зададим свойства компонента. Щелкните правой кнопкой мыши на компоненте Chart1 и в появившемся меню выберите Edit Chart…. На экране появится окно Редактора Диаграмм (Editing Chart1) с открытой страницей Chart, которая имеет несколько закладок. На закладке Panel, нажав кнопку Panel Color, выберите белый цвет. На закладке Series щелкните на кнопке Add - добавить серию. В появившемся окне выберите тип графика – Point и выключите индикатор 3D. После щелчка на OK снова появится окно Editing Chart1. Перейдите на закладку Titles. В окне редактирования, которое в данный момент соответствует Title – заголовку графика, сотрите TChart и напишите (шрифт Font - черный, жирный, размер 10) ТАБЛИЧНАЯ И РАСЧЕТНАЯ ЗАВИСИМОСТИ. Цвет фона Back Color.. установите белый. В выпадающем списке от окна редактирования Title перейдите в окно редактирования Foot и напишите тем же шрифтом аргумент X. В группе кнопок Alignment нажмите кнопку Right. Цвет фона Back Color.. также установите белый. Перейдите на закладку Axis для задания координатных характеристик осей. Оставьте в группе Axis нажатой кнопку Left и включенным индикатор Automatic. Затем нажмите в группе Axis кнопку Bottom и выключите индикатор Automatic. Нажмите среднюю кнопку Changeи в окне Value редактора Minimum Bottom Axis впишите число 0. Аналогичные действия выполните с верхней кнопкой Change, но впишите число 6. И, нажав нижнюю кнопку Change, в окно Increment: занесите 0,6. Перейдите на закладку Series, кнопкой Addдобавьте график Line при выключенном индикаторе 3D . Выделив Series 1, кнопкой Title… вызовите Change Series Title, где дайте заголовок первому графику – исходные данные. Действуя подобным образом, т.е. выделив Series 2, дайте заголовок второму графику – интерполяционный многочлен. На вкладке Legend нажмите кнопку Top. Перейдите со страницы Chart на страницу Series. Здесь на закладке Format задают параметры линий графиков. Требуемый график (исходные данные, интерполяционный многочлен) выбирается из выпадающего списка. Для графика исходные данные установите размеры прямоугольника: Width=2, Height=2, а нажав кнопку Border, задайте толщину линии графика Width=1, и цвет линии графика Color - черный. Для графика интерполяционный многочлен в группе Line через кнопку Borderустанавливается толщина (Width=2) линии графика, и через кнопку Color - цвет линии графика – черный. Выключите индикатор Color Each.

  4. Файл LR2.cpp с обработчиками щелчков на кнопках имеет вид:

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

#include <vcl.h>

#pragma hdrstop

#include "LR2.h"

#include<math.h>

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

double x[21],a[11],b[11];

double y[21]={2.0,-0.06,-1.9,-3.4,-4.9,-4.8,-4.0,-2.7,-1.1,0.95,

3.0,5.0,6.7,8.1,8.8,8.9,8.5,7.47,5.94,4.06,2.43};

void __fastcall TForm1::Button1Click(TObject *Sender)

{

StringGrid1->Cells[0][0]="i";

StringGrid1->Cells[0][1]="x[i]";

StringGrid1->Cells[0][2]="y[i]";

for(int i=0;i<21;i++){

StringGrid1->Cells[i+1][0]=IntToStr(i);

x[i]=2*M_PI*i/21;

StringGrid1->Cells[i+1][1]=FloatToStrF(x[i],ffFixed,2,2);

StringGrid1->Cells[i+1][2]=FloatToStrF(y[i],ffFixed,2,2);}

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

for(int k=0;k<=10;k++){

StringGrid2->Cells[0][0]="k";

StringGrid2->Cells[0][1]="a[k]";

StringGrid2->Cells[0][2]="b[k]";

StringGrid2->Cells[k+1][0]=IntToStr(k);

a[k]=b[k]=0;

for(int i=0;i<21;i++){

a[k]+=StrToFloat(StringGrid1->Cells[i+1][2])*cos(k*x[i]);

b[k]+=StrToFloat(StringGrid1->Cells[i+1][2])*sin(k*x[i]);}

a[k]/=21;

StringGrid2->Cells[k+1][1]=FloatToStrF(a[k],ffFixed,5,5);

b[k]/=21;

StringGrid2->Cells[k+1][2]=FloatToStrF(b[k],ffFixed,5,5);}

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Series1->Clear();

Series2->Clear();

for(int i=0;i<21;i++){

Series1->AddXY(x[i],StrToFloat(StringGrid1->Cells[i+1][2]),"",clBlack); }

for(float x=0;x<2*M_PI;x+=0.001){

float p=a[0];

for(int k=1;k<11;k++)

p+=2*(a[k]*cos(k*x)+b[k]*sin(k*x));

Series2->AddXY(x,p,"",clBlack);}

}

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

  1. Запустим приложение на выполнение, нажав быстрые кнопки Сохранить все и Запуск. После щелчков на кнопках ИСХОДНЫЕ ДАННЫЕ, КОЭФФИЦИЕНТЫ ИНТЕРПОЛЯЦИОННОГО МНОГОЧЛЕНА, ПОСТРОЕНИЕ ГРАФИКОВ получим результаты выполнения задания (рис.2.2).

  2. Воспользуемся тем, что таблица ИСХОДНЫЕ ДАННЫЕ позволяет редактировать значения y[i]. Изменив одно из значений, после щелчков на кнопках КОЭФФИЦИЕНТЫ ИНТЕРПОЛЯЦИОННОГО МНОГОЧЛЕНА, ПОСТРОЕНИЕ ГРАФИКОВ, получим результаты (рис.2.3), которые также показывают выполнение основного требования интерполяции – в узлах интерполяции расчетные значения интерполяционного многочлена совпадают с исходными значениями таблично заданной функции.

  3. Для возврата к первоначальным исходным данным достаточно щелкнуть на кнопке ИСХОДНЫЕ ДАННЫЕ.

  4. Для завершения работы щелкните на кнопке формы “Закрыть” и выйдите из среды Builder.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]