Разработка программы интерполяции табличной функции полиномом Чебышева

Понятие интерполяции, сферы использования. Рассмотрение методов интерполяции табличных функций одной переменной. Анализ математического пакета MathCad 2000i. Особенности математического описания задачи интерполяции табличной функции полиномом Чебышева.

Рубрика Экономико-математическое моделирование
Вид курсовая работа
Язык русский
Дата добавления 12.07.2012
Размер файла 699,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

"Разработка программы интерполяции табличной функции полиномом Чебышева"

интерполяция математический пакет

Введение

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

В первом разделе описывается математическая модель задачи, проанализированы литературные источники, рассмотрены расчетные формулы метода.

Во втором разделе описаны данные, необходимые для решения задачи, Описана схема программного модуля, на основе которой в дальнейшем написана программа.

В третьем разделе описана структура разрабатываемого пакета, типы используемых данных, разработан интерфейс программы.

В четвертом описаны тестирование программы в математическом пакете и тестирование готовой программы.

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

1.1 Общая характеристика задачи

Интерполяция - процесс получения значений функции Y=F(X), заданной в виде таблицы значений узлов (Xi,Yi) при i=1,…,n, на интервале между двумя соседними значениями узлов. При этом исходная функция приближенно описывается некоторой интерполяционной функцией вида Y=G(X), которая совпадает с заданной Y=F(X) в узловых точках.

Интерполяция используется для поиска значения Y, соответствующего заданному значению X, лежащему между узлами заданной таблицы функции (X1<X<Xn).

Используются следующие методы интерполяции табличных функций одной переменной:

1) линейная интерполяция;

2) квадратичная интерполяция;

3) интерполяция степенным рядом;

4) интерполяция сплайнами;

5) интерполяция полиномами (многочленами): Лагранжа, Ньютона, Гаусса, Стирлинга, Бесселя, Эрмита, Чебышева.

1.2 Анализ литературных источников

Интерполяция полиномами подробно описывается в [1]. В данной курсовой работе рассматривается интерполяция полиномом Чебышева. Он может применяется в случае таблиц с неравноотстоящими и равноотстоящими узлами. Согласно [1] является одним из самых употребительных методов интерполяции табличных функций.

1.3 Расчетные формулы метода

Метод интерполяции полиномом Чебышева описывается следующими соотношениями:

(1.1)

(1.2)

(1.3)

где cj коэффициенты полинома

Tj значения полинома Чебышева j-го порядка

n - количество значений узловых точек

j= 1,…,n

2. Разработка алгоритма решения задачи

2.1 Описание данных, используемых для решения задачи

При интерполяции табличной функции полиномом Чебышева исходными данными являются:

а) количество значений узловых точек n;

б) таблица значений исходной функции X и Y;

в) абсцисса искомой точки - xx;

Коэффициенты полинома Чебышева хранятся в переменной-массиве - C.

При организации текущих вычислений удобно использовать специальную матрицу А размером n*n.

2.2 Описание схемы программы

Схема алгоритма составлена в соответствии с математическим описанием курсовой работы и отображает последовательность операций в программе. Схемы алгоритма программы и работы приложения выполняются согласно ГОСТ 19.701-90.

Ввод данных производится с клавиатуры или из файла. Последовательно должны вводиться следующие переменные:

1) n - количество узловых точек;

2) X и Y абсциссы и ординаты узловых точек;

3) xx - абсцисса искомой точки;

Для интерполирования табличной функции согласно выражениям (1.1) - (1.3), предварительно должны определяться значения коэффициентов полинома Чебышева Сi. Результаты решения записываются в переменную y.

Результаты расчета выводятся на экран монитора с возможностью сохранения в файл. Схемы алгоритмов строятся на листе ВТ 80.00.000 Д1 графической части работы.

3. Кодирование программы

3.1 Описание структуры разработанного проекта

Согласно заданию программа курсовой работы разработана в среде визуального программирования C++Builder 6.0 и состоит из головной программы и модулей main, vvod, vyvod.

Количество форм - 3. В проекте используются следующие файлы: chebyshev.cpp, vvod.cpp, vvod.h, vyvod.cpp, vyvod.cpp и временные файлы.

3.2 Описание используемых типов данных

Все переменные должны объявляться с указанием имени и типа данных прежде, чем они могут быть использованы в программе.

В данной задаче использовались следующие типы данных:

1. массивы: X, Y, C, Z, A типа float;

2. переменные: xx, y, a, b, M, temp типа float;

3. переменные - счётчики циклов: i, j, k типа int;

4. файловая переменная: fr;

5. строковая переменная: Name;

Для преобразования данных, представленных типом AnsiString к типу float используется функция StrToFloat. Для обратного преобразования используется функция FloatToStr. Имена основных переменных в разработанной программе совпадают с описанными в разделах 1 и 2.

3.3 Проектирование интерфейса программы

Для ввода данных в программу и вывода результата используются компоненты визуального отображения информации класса Edit, StringGrid. Операции, выполняемые программой, происходят по нажатии на кнопки класса Button. Также используется MainMenu (для создания главного меню), OpenDialog (для чтения из файла) и SaveDialog (для сохранения в файл).

Формы приложения приведены ниже на рисунках 3.1-3.3. Главное меню состоит из следующих разделов Входные данные, Вывести таблицу значений, Справка, Выход.

Рисунок 3.1 - Основная форма.

Рисунок 3.2 - Форма ввода начальных данных и сохранения их в файл.

Рисунок 3.3 - Форма вывода результатов в таблицу.

4. Тестирование программы

Для тестирования программы использовался математический пакет MathCad 2000i.

Запуск приложения осуществляется в среде C++Builder или скомпилированного файла программы chebyshev.exe любым доступным способом (из Проводника Windows, командной строки Total Commander и др.). Размер ехе-файла составляет 36,5 КByte.

Тестирование проводилось на ЭВМ со следующими характеристиками:

- центральный процессор - Athlon 1800 MHz;

- оперативная память - 256Mb;

- видеоадаптер - NVIDIA GeForce4 Mx 440;

- монитор - SAMSUNG SyncMaster 755DFX;

- операционная система - Windows XP .

Результаты расчета приведены в Приложении В, при этом использовались следующие исходные данные:

1) количество узловых точек n=9;

2) таблица значений, (рис 3.2);

3) абсцисса искомой точки xx=4.7;

Время расчета составило менее 1 с.

Как видно из результатов тестирования в Приложении Б и Приложении В. Ошибка расчета менее 0,1%. Это означает, что схема алгоритма и текст программы написаны верно.

5. Разработка гипертекстового варианта документа работы

Гипертекстовый документ создан с использованием язык разметки гипертекста HTML. Это формат гипермедийных документов, использующихся в WWW для предоставления информации. На рисунке 5.1 представлен вид документа.

Рис.

Содержание документа в виде тегов:

<HTML>

<HEAD>

<TITLE>Интерполяция табличной функции полиномом Чебышева</TITLE>

<link href="webcreation.css" type=text/css rel=stylesheet>

</HEAD>

<STYLE type=text/css>BODY

{

SCROLLBAR-FACE-COLOR: #cc0000; SCROLLBAR-HIGHLIGHT-COLOR: #ffcc33; SCROLLBAR-SHADOW-COLOR: #ffcc33; SCROLLBAR-3DLIGHT-COLOR: #ffcc00; SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #000000; SCROLLBAR-DARKSHADOW-COLOR: #000000

}

</STYLE>

<BODY>

<TABLE bgcolor=#000000 border=3 width="100%" height="10%">

<TR>

<TD>

<font color=#ffffff size=+2>

<center>

<marquee height="30" width="610" loop="50" direction="down" scrollamount="1">Программа интерполяции табличной функции полиномом</marquee>

<br>

<marquee height="10" width="270" loop="50" behavior="alternate">

Чебышева

</marquee>

</center>

</font>

</TD>

</TR>

</TABLE>

<TABLE bgcolor=#000000 border=3 width="100%" height="80%" cellpadding="10">

<TR>

<TD>

<br><A href="1.Doc">Постановка задачи</A>

<br>

<br>

<A href="2.Doc">Разработка алгоритма

решения задачи</A>

<br>

<br>

<A href="3.Doc">Кодирование программы</A>

<br>

<br>

<A href="4.Doc">Тестирование программы</A>

<br>

<br>

<A href="5.Doc">Гипертекстовый вариант документа</A>

<br>

<br>

<A href="Maiakowski.exe">Программа в действии</A>

<br>

</TD>

<td>

<img src="1.jpg" width="300" height="300">

</td>

</TR>

</TABLE>

<SUB>Выполнил: ст. гр. АЭП-032 Ильющенко Ю. С.</SUB>

<SUB>Проверил: Корнеев А. П.</SUB>

</BODY>

</HTML>

Заключение

В результате выполнения курсовой работы было произведено математическое описание задачи интерполяции табличной функции полиномом Чебышева, разработана схема алгоритма и написана программа. Использована система программирования CBuilder 6.0.

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

Список использованных источников

1.Шуп Т. Прикладные численные методы в физике и технике: Пер. с английского./ С.Ю. Славянова под редакцией С.П. Ларкурьева. - М.: Высш. шк., 1991.- 252с.

2.Ракитин В.И., Первушин В.Е. Практическое руководство по методам вычислений с приложением программ для персональных компьютеров: Учебн. пособие. - М.: Высш. шк., 1998. - 393 с.

3.Вычислительная техника и программирование. Методические указания и задания к курсовой работе для студентов специальности Т11.02 «Автоматизированный электропривод». - Могилев: ММИ, 1997. - 23 с.

Приложение А

Твердая копия программы

Chebyshev.cpp

#include <vcl.h>

#pragma hdrstop

USERES("Chebyshev.res");

USEFORM("Main.cpp", Form1);

USEFORM("Vvod.cpp", Form2);

USEFORM("Vyvod.cpp", Form3);

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{ try

{ Application->Initialize();

Application->Title = "Интерполяция полиномом Чебышева";

Application->CreateForm(__classid(TForm1), &Form1);

Application->CreateForm(__classid(TForm2), &Form2);

Application->CreateForm(__classid(TForm3), &Form3);

Application->Run();

}

catch (Exception &exception)

{ Application->ShowException(&exception);

}

return 0;

}

Main.h

#ifndef MainH

#define MainH

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Menus.hpp>

#include <Dialogs.hpp>

class TForm1 : public TForm

{

__published: // IDE-managed Components

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *N3;

TMenuItem *N4;

TMenuItem *N5;

TMenuItem *N6;

TOpenDialog *OpenDialog1;

void __fastcall N4Click(TObject *Sender);

void __fastcall N3Click(TObject *Sender);

void __fastcall N5Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall N6Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

extern PACKAGE TForm1 *Form1;

#endif

Main.cpp

Приложение А Твердая копия программы

#include <vcl.h>

#include <stdio.h>

#pragma hdrstop

#include "Main.h"

#include "Vvod.h"

#include "Vyvod.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

extern int n;

extern float X[100], Y[100];

extern float a, b, xx;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::N4Click(TObject *Sender)

{Close();

}

void __fastcall TForm1::N3Click(TObject *Sender)

{ShowMessage("Программа интерполяция табличной функции полиномом Чебышева");

}

void __fastcall TForm1::N5Click(TObject *Sender)

{Form2->ShowModal();

}

void __fastcall TForm1::N2Click(TObject *Sender)

{Form3->ShowModal();

}

void __fastcall TForm1::N6Click(TObject *Sender)

{ FILE *fr;

char *Name;

if (OpenDialog1->Execute()) {

Name=OpenDialog1->FileName.c_str();

if((fr=fopen(Name,"r"))==NULL) ShowMessage("Невозможно открыть файл");

else {

fscanf(fr,"%d",&n);

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

fscanf(fr,"%f",&X[i]);

fscanf(fr,"%f",&Y[i]); }

fscanf(fr,"%f",&xx);

fclose(fr); }

} }

Vvod.h

#ifndef VvodH

#define VvodH

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Grids.hpp>

#include <Dialogs.hpp>

class TForm2 : public TForm

{

__published: // IDE-managed Components

TLabel *Label1;

TEdit *Edit1;

TButton *Button1;

TGroupBox *GroupBox1;

TStringGrid *StringGrid1;

TButton *Button2;

TButton *Button3;

TLabel *Label2;

TEdit *Edit2;

TSaveDialog *SaveDialog1;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm2(TComponent* Owner);

};

extern PACKAGE TForm2 *Form2;

#endif

Vvod.cpp

#include <vcl.h>

#include <stdio.h>

#pragma hdrstop

#include "Vvod.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

Приложение А Твердая копия программы

int n;

float X[100], Y[100];

float a, b, xx;

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm2::Button1Click(TObject *Sender)

{n=StrToInt(Edit1->Text);

if(n<3) return;

GroupBox1->Visible=true;

Button2->Visible=true; Button3->Visible=true;

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

StringGrid1->Cells[1][0]="Xi";

StringGrid1->Cells[2][0]="Yi";

StringGrid1->RowCount=n+1;

StringGrid1->Height=(n+1)*26;

if(StringGrid1->Height>250) {

StringGrid1->Height=250; StringGrid1->Width=218; }

for(int i=1; i<=n; i++)

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

StringGrid1->SetFocus();

}

void __fastcall TForm2::Button2Click(TObject *Sender)

{ int i;

for(i=1; i<=n; i++)

X[i-1]=StrToFloat(StringGrid1->Cells[1][i]);

for(i=1; i<=n; i++)

Y[i-1]=StrToFloat(StringGrid1->Cells[2][i]);

Приложение А Твердая копия программы

a=b=X[0];

for(i=0; i<n; i++) {

if(X[i]<a) a=X[i];

if(X[i]>b) b=X[i]; }

xx=StrToFloat(Edit2->Text);

if(xx>a && xx<b) Form2->Close();

else ShowMessage("Искомая точка лежит вне исследуемого отрезка");

}

void __fastcall TForm2::Button3Click(TObject *Sender)

{ FILE *fr;

int i;

char *Name;

if (SaveDialog1->Execute()) {

Name=SaveDialog1->FileName.c_str();

if((fr=fopen(Name,"w"))==NULL) ShowMessage("Невозможно создать файл");

else {

fprintf(fr,"%d\n",n);

for(i=1; i<=n; i++)

X[i-1]=StrToFloat(StringGrid1->Cells[1][i]);

for(i=1; i<=n; i++)

Y[i-1]=StrToFloat(StringGrid1->Cells[2][i]);

for(i=0; i<n; i++)

fprintf(fr,"%5.3f %5.3f\n",X[i],Y[i]);

xx=StrToFloat(Edit2->Text);

fprintf(fr,"%5.3f",xx);

fclose(fr); }

}

}

Vyvod.h

#ifndef VyvodH

#define VyvodH

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

class TForm3 : public TForm

{

__published: // IDE-managed Components

TLabel *Label1;

TEdit *Edit1;

TLabel *Label2;

TEdit *Edit2;

TButton *Button1;

TButton *Button2;

void __fastcall FormShow(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm3(TComponent* Owner);

};

extern PACKAGE TForm3 *Form3;

#endif

Vyvod.cpp

#include <vcl.h>

Приложение А Твердая копия программы

#include <stdio.h>

#include <math.h>

#pragma hdrstop

#include "Vyvod.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

extern int n;

extern float X[100], Y[100];

extern float a, b, xx;

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm3::FormShow(TObject *Sender)

{ int i,j,k;

float M,y=0,temp;

float** A = new float*[n];

for (i=0; i<n; i++)

A[i] = new float[n];

for (i=0; i<n; i++)

for (j=0; j<n; j++)

if(X[i]==0 && j==0) A[i][j]=1;

else A[i][j] = pow(X[i],j);

float* Z = new float[n];

for (i=0; i<n; i++)

Z[i] = Y[i];

for(j=0; j<n-1; j++)

for(i=n-1; i>j; i--)

Приложение А Твердая копия программы

if (A[i][j] > 1.0E-30 || A[i][j] < -1.0E-30) {

temp = A[i-1][j] / A[i][j];

for (k=j; k<n; k++)

A[i][k] = A[i][k]*temp-A[i-1][k];

Z[i]= Z[i]*temp-Z[i-1]; }

float* C = new float[n];

for(i=n-1; i>=0; i--){

if(A[i][i]==0)

ShowMessage("Решения нет");

M=0;

for(j=i+1;j<n;j++)

M+=A[i][j]*C[j];

C[i]=(Z[i]-M)/A[i][i];

}

for(i=0; i<n; i++)

y+=C[i]*pow(xx,i);

Edit1->Text=FloatToStr(xx).SetLength(8) ;

Edit2->Text=FloatToStr(y) ;

delete [] C;

}

void __fastcall TForm3::Button2Click(TObject *Sender)

{Close();

}

Приложение Б

Результаты тестирования программы

Рисунок ПБ1 - График расчёта

Приложение В

Тестирование данных в математическом пакете

Приложение Г

Акт приёмки программы

Разработанная, в ходе выполнения курсового проекта, программа по численному интегрированию обыкновенного дифференциального уравнения явным методом Рунге-Кутта четвертого порядка точности работоспособна и соответствует требованиям задания.

Размещено на Allbest.ru


Подобные документы

  • Построение графиков положения, скорости и ускорения звеньев манипулятора в обобщенной системе координат. Визуализация движения робота в декартовой системе координат. Планирование траектории в обобщенных координатах методом сплайн-интерполяции Лагранжа.

    курсовая работа [745,8 K], добавлен 30.09.2013

  • Общая постановка задачи линейного программирования (ЛП). Приведение задачи ЛП к стандартной форме. Теоремы двойственности и их использование в задачах ЛП. Транспортная задача и её решение методом потенциалов. Интерполирование табличных функций.

    курсовая работа [337,1 K], добавлен 31.03.2014

  • Построение математической модели и решение задачи математического программирования в средах MathCad и MS Excel. Решение систем с произвольными векторами свободных коэффициентов. Определение вектора невязки. Минимизация и максимизация целевой функции.

    отчет по практике [323,5 K], добавлен 01.10.2013

  • Описание конкретной экономической ситуации и исходных числовых данных. Конструирование числовых моделей Л.П. в аналитической и табличной формах. Решение параметрических задач Л.П., построение табличных зависимостей экономических показателей, общий анализ.

    задача [499,5 K], добавлен 11.07.2010

  • Построение модели планирования производства. Использование инструментального средства "Поиск решения" для решения задачи линейного программирования. Решение оптимальной задачи, с использованием методов математического анализа и возможностей MathCad.

    лабораторная работа [517,1 K], добавлен 05.02.2014

  • Элементы математического анализа: производная, определенный интеграл и ряды. Арифметические операции и функции комплексной переменной. Основные понятия и определения теории вероятности, статистики и комбинаторики. Законы распределения вероятностей.

    методичка [2,9 M], добавлен 05.07.2010

  • Дифференциальное уравнение движения груза. Определение значений функций движения. Исследование влияния частоты колебаний на движение груза с помощью пакета MathConnex. Функции, необходимые для численного решения дифференциальных уравнений в MathCAD.

    курсовая работа [247,7 K], добавлен 25.10.2012

  • Открытие и историческое развитие методов математического моделирования, их практическое применение в современной экономике. Использование экономико-математического моделирования на всей уровнях управления по мере внедрения информационных технологий.

    контрольная работа [22,4 K], добавлен 10.06.2009

  • Понятие задач оптимизации, которые сводятся к нахождению экстремума целевой функции. Функции линейного программирования – наиболее широко применяющегося математического средства решения экономических задач. Пример решения задачи о раскрое материала.

    контрольная работа [60,3 K], добавлен 17.02.2012

  • Применение математических методов в решении экономических задач. Понятие производственной функции, изокванты, взаимозаменяемость ресурсов. Определение малоэластичных, среднеэластичных и высокоэластичных товаров. Принципы оптимального управления запасами.

    контрольная работа [83,3 K], добавлен 13.03.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.