Применение численных методов
Министерство науки и
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра сверхвысокочастотной и квантовой радиотехники (СВЧиКР)
Применение численных методов
Пояснительная записка к курсовой работе по информатике
Понамарева Н.В.
"_____"_________2011 г.
П.А. Карпушин
"_____"_________2011 г.
2011г.
РЕФЕРАТ
Курсовая работа 33с., 17 рис., источников 5, прил.3.
Численные методы. Интерполяция методом Лагранжа. С++. QT. MATHCAD.
Целью работы является разработка программы на языке С++ в среде QT Creator, а так же в среде Mathcad 13.
В процессе работы проводилось исследование алгоритма интерполяции методом Лагранжа, а также изучение средств реализации программ в средах QT и Mathcad.
В результате были разработаны две программы: одна в среде QT Creator на языке C++, вторая – в Mathcad 13. В программах предусмотрена возможность изменения количества точек функции и шага между ними. Обе программы могут применяться для интерполирования функций методом Лагранжа.
Пояснительная записка
выполнена в текстовом
"УТВЕРЖДАЮ"
на курсовую работу по дисциплине "ИНФОРМАТИКА"
студенту гр. ______________________________
- Тема работы: Применение численных методов
- Срок сдачи работы на кафедру: _____________
- Содержание работы и сроки выполнения её этапов:
- Изучение задания и рекомендованной литературы – 1, 2-я недели.
- Разработка алгоритма решения задачи на языке С++ в среде
Eclipse QT Integration и составление схемы алгоритма – 3 неделя.
- Написание и отладка программы на ПК – 4, 5-я недели.
- Выполнение вычислений на ПК – 6-я неделя.
- Оформление пояснительной записки – 9-я неделя.
- Рекомендованная литература:
- Прата С. Язык программирования C++. Лекции и упражнения. - Вильямс, 2006, - 1184 с.
- Шлее М. Qt4. Профессиональное программирование на C++. - СПб.: БХВ -Петербург, 2007. — 880 с
- Мудров А.Е., Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. - Томск : МП "РАСКО", 1991. - 272с.
- Чернышев А. А., Кирпиченко Л. И.. Работы студенческие учебные и выпускные квалификационные : ОС ТУСУР 6.1-97* : С изм.: окт. 1999 г., фев. 2002 г., март 2003 г.: Общие требования и правила оформления - Томск : ТУСУР, 2003. - 35 с.
- Дополнительную литературу студент ищет самостоятельно.
- Исходные данные:
- В прикладной программе проводится интерполяция функции:
заданной в точках xi
где i=0,1÷N;
N=3;
xi+1- xi=p/16;
- Интерполяцию провести методом Лагранжа
- Программа должна быть выполнена в среде QT Creator,а так же в среде Mathcad 13. В программе должно быть предусмотрено:
- возможность изменения параметров N и xi+1- xi (от p/16 до 2p)
- построение графика исходной функции, функции заданной в точках xi,и функции полученной в результате интерполяции.
- Состав пояснительной записки:
- Титульный лист.
- Реферат.
- Лист задания с подписью преподавателя.
- Содержание.
- Введение. Постановка задачи.
- Описание алгоритма решения задачи и схема алгоритма.
- Описание программы.
- Интерпретация результатов и выводы по проделанной работе.
- Список используемых источников.
- Приложения. Распечатка программы. CD-диск с исполняемыми файлами программы, с листингом программы, и с текстом пояснительной записки.
- Отчетность по работе:
- В ходе выполнения работы - отчетность по фактическому материалу в рабочей тетради (в соответствии со сроками выполнения основных этапов, указанных в п.3).
- Результаты выполнения работы излагаются в пояснительной записке, содержание которой в обязательном порядке отвечает требованиям п.9.
- При представлении пояснительной записки демонстрируется работа программы. Текст программы и ее описание передаются в виде файлов в процессе защиты пояснительной записки.
Дата выдачи задания "___"__________2011
Оглавление
Введение: 6
1 Постановка задачи 7
2 Интерполяционный метод Лагранжа 8
3 Описание среды QT Creator 9
4 Описание программы 14
5 Математический пакет MathCAD 18
6 Алгоритм решения задачи в MathCAD 22
Заключение 25
Список используемых источников 26
Приложение А (листинг программы- интерполяция методом Лагранжа) 27
Приложение Б (Блок схема метода Лагранжа) 29
Приложение В (Листинг программы в MathCAD ) 31
CD –диск
Листинг проекта презентации Microsoft office PowerPoint
Пояснительная записка Microsoft Word
Графический материал на отдельных листах
Введение:
В задании курсовой работы необходимо произвести интерполяцию заданной функции методом Лагранжа, программа должна быть выполнена в среде QT Creator , а так же в среде Mathcad 13.
Основными целями работы является выполнение программы и составление пояснительной записки с приложениями языке С++, при помощи полученных знаний по курсу «информатика», а так же приобретение навыков работы в MathCad 13.
В программе должно быть предусмотрено построение графика исходной функции, а так же функции полученной в результате интерполяции.
При выполнении работы использовались QT Creator, MathCad 13.
Пояснительная записка к курсовой работе выполнена в текстовом редакторе Microsoft Word 2007.
1 Постановка задачи
В соответствии
с заданием необходимо разработать
алгоритм решения задачи на языке С++ в
среде Qt Creator и составить схему алгоритма
решения задачи
интерполяционным методом Лагранжа так же проверить в среде MathCad 13.
Прикладная программа должна содержать:
- возможность изменения параметров N(количество точек) и xi+1- xi (от p/16 до 2p);
- построение графика исходной функции, функции заданной в точках xi, и функции полученной в результате интерполяции.
Для реализации алгоритмов на языке программирования необходимо уметь работать с типами переменных и констант, циклами, функциями, выводом на экран и записью в файлы информации, математическими функциями. Для решения уравнения в среде MathCad13 нужно уметь работать с математическими действиями, вводить данные из файла, строить графики, работать с элементами матриц.
По образовательному стандарту ТУСУРа оформить пояснительную записку, которая должна содержать обязательные приложения (блок схему метода Лагранжа, 2 листинга программы в среде QT Creator и в MathCad13), а так же презентацию данного метода.
2 Интерполяционный метод Лагранжа
Существует несколько методов интерполяции результатов измерений. Различаются они в основном выбором интерполяционной формулы. Выбор зависит от конкретных условий. В данной курсовой работе интерполяционной формулой служит интерполяционный многочлен Лагранжа, приведённый ниже:
Старшая степень аргумента x в полиноме Лагранжа равна n, так как каждое произведение в формуле (2.1) содержит n сомножителей x – xi. В узлах x – xi выполняются условия Лагранжа, потому что в сумме (2.1) остается по одному слагаемому fi, остальные обращаются в нуль за счет нулевых сомножителей в произведениях.
Преимущество
полинома Лагранжа, в отличие от
канонического
Из
этого следует, что применять
полином Лагранжа на практике удобно
в тех случаях, когда интерполяционная
функция вычисляется в
Использованы данные источников [1] и [2].
3 Описание среды QT Creator
Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Класс – это структура, которая может объединить несколько разнотипных переменных.
Qt является
полностью объектно-
Особенности:
-Сделана специально для разработки на Qt.
-Встроенные редактор форм (Qt Designer) и справочная система (Qt Assistant).
-Контекстно-зависимая система помощи.
-Расширяема плагинами.
-Имеется графический фронтенд для GDB.
-Поддержка отладки с помощью CDB.
-Для создания проектов используется qmake (планируется поддержка Makefile и тестируется поддержка CMake).
-Обобщённая
подсветка синтаксиса, поддерживается
большое количество языков
-Возможность
редактировать этапы сборки
-Поддержка разработки на языках C/C++/QML.
QML-дизайнер.
-Возможность разработки под Symbian и Maemo с отладкой в симуляторе или на устройстве.
На рисунках 3.1-3.8 показан алгоритм запуска(создания) нового С++ проекта в QT Creator:
Запускаем QT Creator при помощи двойного щелчка левой кнопки мыши по ярлыку
Рисунок 3.1 Знак программы (ярлык)
Открывается диалоговое окно рис. 3.2, нажимаем на кнопку - создать новый проект.
1*-кнопка создания нового
Рисунок 3.2 диалоговое окно №1
Далее открывается диалоговое окно под номером два рис.3.3, выбираем нужное нам приложение.
Рисунок 3.3 диалоговое окно №2
Далее мы переходим в окно расположения и создания нового имени проекта рис 3.4, затем нажимаем кнопку далее.
Рисунок 3.4 диалоговое окно №3
Нажимаем кнопку далее
Рисунок 3.5 профили Qt
В следующем окне задаем имена: класса, заголовочного файла. Затем нажимаем кнопку далее, рис.3.6.
Рисунок 3.6 информационное окно
Затем мы видим итоговое окно рис. 3.7
Рисунок3.7
После щелчка по кнопке завершить попадаем в окно редактора нового проекта рис.3.8
4 Описание программы
Приступая к разработке программы, мы должны четко поставить задачу, которую должны реализовать. Первое что мы делаем, это запускаем новый проект, затем рассматриваем сам метод Лагранжа. Далее мы разрабатываем код, который производит вычисления по заданной формуле.
{int i, j; // создание 2 целых чисел, объявление переменных
double pro, s = 0.0; // объявление дробной переменной
for (i=0; i<=N; i++)
{pro = 1;
/* вычисление ф-ии Лагранжа */
for(j=0;j<=N;j++)
if(i!=j) pro*(x-a[j])/(a[i]-a[j]);
s=s+pro*b[i];}
return s; - // оператор возврата return;
Связь между функциями осуществляется через аргументы, возвращаемые значения и глобальные переменные. Передача одного-единственного значения из вызванной функции в вызывавшую происходит с помощью оператора возврата.}
double project::scx(double x) - // задание функции cos(x)*sin(x)
{return cos(x)*sin(x); - // оператор возврата значения функции в заданной точке х};
После выполнения основной части мы подключаем необходимые нам библиотеки.
#include "programma.h"
#include "ui_programma.h"
#include <QWidget>// библиотека кнопок, рисования
#include <QtGui> // библиотека визуальной части Qt
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <phonon/AudioOutput>
#include <phonon/MediaObject>// библиотеки аудио объектов
Основная задача директивы #include подключать заголовочные файлы. Когда в нашей программе нужно использовать математическую библиотеку, пишем: #include <math.h>. Директива #include <stdio.h> содержит средства поддержки операций стандартного ввода-вывода:
- main( ) – имя основной программы, оно всегда присутствует и всегда одинаково. В программе на языке C++ в скобках стояло бы слово void;
- void перед словом main служит признаком того, что программа не возвращает конкретного значения;
- { } – скобки, ограничивающие тело программы;
Что бы приступить ко второй половине не менее важной, чем первая, мы переходим в окно дизайнера в QT Creator, где создаем необходимый вид диалогового окна, в котором будет выводиться непосредственно сам график функции. Затем возвращаемся в окно редактора и прописываем(прорисовываем) через QWidget необходимые нам границы графика и задаем шаг и количество точек на графике.
project::project(QWidget *parent)
: QWidget(parent), ui(new Ui::project) // выполняется при запуске программы
{F[0]=0;
F[1]=0;
F[2]=0;
//N=3; - // количество точек
//H = 3.1415926/0.5; // шаг
ui->setupUi(this); // загрузка визуальной части}
// происходит объявление
project::~project()
{delete ui;}
void project::paintEvent(
{N = ui->spinBox->value(); - // N присваивается из визуальной части spinbox и присваивается значение
H = 3.1415926 * ui->doubleSpinBox->value();
Так же в данной части работы мы зададим оси, присвоим цвет каждой линии при помощи QPainter.
QPainter painter(this); - // активация рисования на окне
double x; // переменные типа double - числа с плавающей точкой.
int i; // переменные типа int - целые числа.
double *a, *b; - // создаются 2 массива (а,b). Массив – некоторое количество данных имеющих один и тот же тип.
painter.setPen(QPen(Qt::black, 3));//задание цвета линии, использован источник [5].
painter.drawLine(0,170,600,
painter.setPen(QPen(Qt::red, 3));//задание цвета линии
painter.drawLine(25,10,25,330)
for (x=0;x<=H;x=x+3.14/4) // выполнение цикла граница по Ох
{painter.drawLine(x*70+25,170,
painter.drawText(x*70,180,
for (x=-1;x<=1;x=x+0.25) //выполнение цикла, граница по оси Oy
{painter.drawLine(25,170-x*
painter.drawText(0,180-x*150,
a = (double*)malloc((N+1)*sizeof(
b = (double*)malloc((N+1)*sizeof(
for (i=0; i<=N; i++)
{a[i]=H*(double)i/N; // значение по х
b[i]=scx(a[i]); // значение функции в этих точках}
Затем задаем цикл for где задаются значения по х и по у данной функции
if (F[2] == 1) // Оператор if приводит к тому, что программа
выполняет оператор или группу операторов, если проверочное условие истинно, и пропускает этот оператор или группу операторов, если условие ложь, то нет.
{for (i=0;i<=N;i++) // Структура цикла For.
for (инициализация цикла; условие продолжения цикла; обновление переменной цикла)
{тело цикла}
Инициализация цикла выполняется
только один раз. Как правило, это
выражение применяется для
Условие продолжения цикла определяет, следует ли завершить выполнение цикла. Как правило, это выражение является выражением сравнения.
Обновление переменной цикла происходит в конце цикла после выполнения его тела. Обычно это приводит к увеличению или уменьшению значения переменной цикла на величину, которая называется шагом цикла.
{painter.drawEllipse(a[i]*70+
if (F[1] == 1) // Оператор if приводит к тому, что программа
выполняет оператор или группу операторов, если проверочное условие истинно, и пропускает этот оператор или группу операторов, если условие ложь, то нет.
{for (x=0;x<H;x=x+0.1)
{painter.drawLine(x*70+25,170-
if (F[0] == 1) // если будет выполнятся это условие то будет выполнятся прорисовка самой функции sin(x)*cos(x)
{for (x=0;x<H;x=x+0.1)
{painter.drawLine(x*70+25,170-
double project::interpol_x(double x,double a[], double b[]) // функция интерполяции и вычисление ее по методу Лагранжа
Результат программы – график. Рис.4.1
Рисунок 4.1 итоговый вывод графика
5 Математический пакет MathCAD
Mathcad — программа для выполнения и документации инженерных и научных расчётов. Появившись в 1986 году для платформы MS - DOS, Mathcad впервые среди программ подобного рода использовал наборную математическую нотацию, совмещённую с автоматической системой вычислений. Кроме того, впервые было реализовано автоматическое вычисление и проверка единиц измерения. Основные возможности Mathcad:
-Решение дифференциальных уравнений различными численными методами;
-Построение двух- и трёхмерных графиков функций;
-Использование греческого алфавита как в уравнениях, так и в тексте;
-Выполнение вычислений в
-Выполнение операций с вектора
-Символьное решение систем уравнений;
-Аппроксимация кривых;
-Выполнение подпрограмм;
-Поиск корней многочленов и функций;
-Проведение статистических расчётов и работа с распределением вероятностей;
-Поиск собственных чисел и векторов;
-Вычисления с единицами измерения;
-Интеграция с САПР системами, использование результатов вычислений в качестве управляющих параметров.
В программе MathCAD мы построим график интерполяции заданной функции.
Интерполяцией называют заполнение отрезками кривых промежутков между заданными точками по тому или иному закону. Для проведения интерполяции в первую очередь должна быть задана экспериментальная зависимость в виде набора точек на плоскости. Для этого должны быть заданы два одномерных массива (вектора) – vx и vy, содержащие соответственно значения координат x и y каждой точки. При этом важно, чтобы значения в векторе vx были заданы в порядке возрастания.
Использованы данные источников [3] и [4]
Для того чтобы произвести вычисления в программе MathCAD и построить график, необходимо:
- Запустить программу MathCAD;
- Ввести в рабочей области (рис 5.1) данное выражение и все необходимые параметры;
- Если вычисления необходимо проводить с заданной точностью, то установить её можно вручную, для этого в строке меню выбрать команду Tool, затем Worksheet Options. На экране появиться окно Worksheet Options, в нем в строке Convergence Tolerance(TOL) указать необходимую точность (рис. 5.1).
- Для вывода на экран полученных при расчете значений необходимо записать вычисляемую величину и поставить знак “=”, после нажать клавишу Enter, и на экран автоматически выведутся значения данной величины
Рисунок 5.1 Ввод точности в программе MathCAD
- Чтобы построить график по полученным значениям, необходимо в строке Math(рис. 5.2,), щелкнуть на значок с изображением графика, появиться окно Graph в котором нужно выбрать требующийся вид графика, затем ввести все необходимые значения, после чего график будет автоматически выведен на экран.
1 - Панель инструментов
2 - Рабочая область
Рисунок 5.2 Рабочее окно MathCAD
Чтобы начать работу с MathCAD, необходимо на панели быстрого доступа выбрать меню File выбрать вкладку New, как показано на рисунке (5.3).
Рисунок 5.3 Меню File
Далее появится окно выбора типа создаваемого проекта.
Рисунок 5.4 Окно создания нового проекта
Создается проект.
6 Алгоритм решения задачи в MathCAD
Интерполяцией называют заполнение отрезками кривых промежутков между заданными точками по тому или иному закону. Для проведения интерполяции в первую очередь должна быть задана экспериментальная зависимость в виде набора точек на плоскости. Для этого должны быть заданы два одномерных массива (вектора) – vx и vy, содержащие соответственно значения координат x и y каждой точки. При этом важно, чтобы значения в векторе vx были заданы в порядке возрастания.
Простейшим вариантом интерполяции является линейная интерполяция. Она заключается в простом соединении точек между собой отрезками прямых. Для реализации такой интерполяции в MathCad существует встроенная функция linterp(vx,vy,x) , где vx vy – уже известные векторы, содержащие координаты последовательности точек, x – координата точки, в которой нужно вычислить значение интерполирующей функции
Рисунок 6.1 Линейная интерполяция
Из всех видов интерполяции наиболее часто используется интерполяция, где экспериментальные точки попарно соединяются отрезками полиномов. Чаще всего для этого выбирают полиномы третьей степени(поэтому такая кривая и называется кубическим сплайном). Для того чтобы найти коэффициенты этих полиномов, очевидно, недостаточно того условия, что кривая должна проходить через экспериментальные точки. Поэтому на сплайн накладываются дополнительные условия сшивки – первая и вторая производные слева и справа от каждой экспериментальной точки должны быть равны между собой. Но и после этого количество условий остается на два меньше, чем количество неизвестных коэффициентов. Дополнительные два условия должны быть наложены в начальной и конечной экспериментальных точках, поскольку в них нет условий сшивки. Эти условия можно выбрать по-разному. В MathCad существуют три различных функции для построения кубических сплайнов с различными дополнительными условиями.
- lspline(vx,vy) – в начальной и конечной точках накладывается условие линейности, т.е. вторая производная от функции равна нулю. Первая буква в названии функции – l , означает linear (линейный).
- pspline(vx,vy) – на первом и последнем интервале кривая является параболой, т.е. полиномиальный коэффициент при x3 равен нулю. Буква p означает parabolic (параболический).
- cspline(vx,vy) – полиномиальные коэффициенты при x3 на первых двух интервалах равны между собой точно так же, как на последних двух интервалах. Буква c означает cubic (кубический).