Применение численных методов

 

Министерство науки и образования  Российской Федерации.

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ  УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И  РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра сверхвысокочастотной и квантовой  радиотехники (СВЧиКР)

 

 

 

 

 

 

 

Применение численных методов

 

Пояснительная записка к курсовой работе по информатике

 

 

 

 

 

                                                                             Студента гр. 160

 Понамарева Н.В.


 

"_____"_________2011  г.

 

 

                                                                  Руководитель

                                                                                        Старший преподаватель

                                                                         кафедры СВЧиКР

П.А. Карпушин


 

 

"_____"_________2011  г.

 

 

2011г.

 

РЕФЕРАТ

Курсовая работа 33с., 17 рис., источников 5, прил.3.

Численные методы. Интерполяция методом Лагранжа. С++. QT. MATHCAD.

          Целью работы является  разработка  программы на языке С++ в   среде QT Creator, а так же в среде Mathcad 13.

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

В результате были разработаны две программы: одна в среде QT Creator  на языке C++, вторая – в Mathcad 13. В программах предусмотрена возможность изменения количества точек функции и шага между ними. Обе программы могут применяться для интерполирования функций методом Лагранжа.

Пояснительная записка  выполнена в текстовом редакторе  Microsoft Office Word 2007 и представлена в электронном и текстовом форматах.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"УТВЕРЖДАЮ"                                                                                                Зав.каф.СВЧиКР                                                                                            ________Шарангович С.Н.                                                                                               "____"____________2011г.

 

                                                            ЗАДАНИЕ

 

на курсовую работу по дисциплине "ИНФОРМАТИКА"

 

          студенту гр. _____________________________________________

                                                                   

  1. Тема работы: Применение численных методов
  2. Срок сдачи работы на кафедру: _____________
  3. Содержание работы и сроки выполнения её этапов:
    1. Изучение задания и рекомендованной литературы  – 1, 2-я недели.
    2. Разработка алгоритма решения задачи на языке С++ в среде

Eclipse QT Integration  и составление схемы  алгоритма  – 3 неделя.

    1. Написание и отладка программы на ПК     – 4, 5-я недели.
    2. Выполнение вычислений на ПК     –  6-я неделя.
    3. Оформление пояснительной  записки    – 9-я неделя.
  1. Рекомендованная литература:
    1. Прата С. Язык программирования C++. Лекции и упражнения. - Вильямс, 2006, - 1184 с.
    2. Шлее М. Qt4. Профессиональное программирование на C++. -  СПб.: БХВ -Петербург, 2007. — 880 с
    3. Мудров А.Е., Численные методы для ПЭВМ на языках Бейсик, Фортран  и Паскаль. - Томск : МП "РАСКО", 1991. - 272с.
    4. Чернышев А. А., Кирпиченко Л. И.. Работы студенческие учебные и выпускные квалификационные : ОС ТУСУР 6.1-97* : С изм.: окт. 1999 г., фев. 2002 г., март 2003 г.: Общие требования и правила оформления - Томск : ТУСУР, 2003. - 35 с.
  2. Дополнительную литературу студент ищет самостоятельно.
  3. Исходные данные:
    1. В прикладной программе проводится интерполяция функции:

 

заданной  в точках xi

где  i=0,1÷N;

N=3;

xi+1- xi=p/16;

    1. Интерполяцию провести методом Лагранжа
    2. Программа должна быть выполнена в среде QT Creator,а так же в среде Mathcad 13. В программе должно быть предусмотрено:
      • возможность изменения параметров N и xi+1- xi (от p/16 до 2p)
      • построение графика исходной функции, функции заданной в точках xi,и функции полученной в результате интерполяции.

 

  1. Состав  пояснительной записки:
    • Титульный лист.
    • Реферат.
    • Лист задания с подписью преподавателя.
    • Содержание.
    • Введение. Постановка задачи.
    • Описание алгоритма решения задачи и схема алгоритма.
    • Описание программы.
    • Интерпретация результатов и выводы по проделанной работе.
    • Список используемых источников.
    • Приложения. Распечатка программы. CD-диск с исполняемыми файлами программы, с листингом программы, и с текстом пояснительной записки.
  2. Отчетность по работе:
    • В ходе выполнения работы - отчетность по фактическому материалу в рабочей тетради (в соответствии со сроками выполнения основных  этапов, указанных в п.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 Интерполяционный метод Лагранжа

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

 

                                           (2.1)

 

Старшая степень  аргумента x в полиноме Лагранжа равна n, так как каждое произведение в формуле (2.1) содержит n сомножителей x – xi. В узлах x – xi выполняются условия Лагранжа, потому что в сумме (2.1) остается по одному слагаемому fi, остальные обращаются в нуль за счет нулевых сомножителей в произведениях.

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

Из  этого следует, что  применять  полином Лагранжа на практике удобно в тех случаях, когда интерполяционная функция вычисляется в сравнительно небольшом количестве точек x. В теории численных методов полином Лагранжа занимает важное место.

Использованы  данные источников [1] и [2].

 

 

 

 

 

 

 

 

 

3 Описание среды QT Creator

          Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Класс – это структура, которая может объединить несколько разнотипных переменных.

Qt является  полностью объектно-ориентированным,  легко расширяемым и поддерживающим  технику компонентного программирования. Qt Creator (ранее известная под кодовым названием Greenhouse) — кроссплатформенная свободная IDE для работы с фреймворком Qt, разработанная Trolltech (Nokia). Анонс проекта состоялся на Qt Developer Days в октябре 2008 года. Публичная бета-версия проекта была опубликована 30 октября 2008 года. Финальный релиз состоялся 3 марта 2009 года (вместе с выходом Qt 4.5)

Особенности:

-Сделана  специально для разработки на 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

Рисунок 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(QPaintEvent * )  // функция 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,170);  // прорисовка линии( оси координат)

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,x*70+25,166);

painter.drawText(x*70,180,QString::number(x/3.14)+"p");  // QString::number – перевод числа в строку}

for (x=-1;x<=1;x=x+0.25) //выполнение цикла, граница по оси Oy

{painter.drawLine(25,170-x*150,29,170-x*150); // прорисовка линии

painter.drawText(0,180-x*150,QString::number(x));  // прорисовка чисел строки}

a = (double*)malloc((N+1)*sizeof(double)); - // определение размерности массива

b = (double*)malloc((N+1)*sizeof(double)); - // операция 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+25-2.5,170-b[i]*150-2.5,5,5);  // прорисовка через точки };};

if (F[1] == 1)  // Оператор if приводит к тому, что программа

выполняет оператор или группу операторов, если проверочное условие истинно, и пропускает этот оператор или группу операторов, если условие ложь, то нет.

{for (x=0;x<H;x=x+0.1)

{painter.drawLine(x*70+25,170-interpol_x(x,a,b)*150,(x+0.1)*70+25,170-interpol_x(x+0.1,a,b)*150); - // прорисовка  интерполяции заданной функции};};

if (F[0] == 1) // если будет выполнятся это условие то будет выполнятся прорисовка самой функции sin(x)*cos(x)

{for (x=0;x<H;x=x+0.1)

{painter.drawLine(x*70+25,170-scx(x)*150,(x+0.1)*70+25,170-scx(x+0.1)*150);};};};

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 и построить график, необходимо:

  1. Запустить программу MathCAD;
  2. Ввести в рабочей области (рис 5.1) данное выражение и все необходимые параметры;
  3. Если вычисления необходимо проводить с заданной точностью, то установить её можно вручную, для этого в строке меню выбрать команду Tool, затем Worksheet Options. На экране появиться окно Worksheet Options, в нем в строке Convergence Tolerance(TOL) указать необходимую точность (рис. 5.1).
  4. Для вывода на экран полученных при расчете значений необходимо записать вычисляемую величину и поставить знак “=”, после нажать клавишу Enter, и на экран автоматически выведутся значения данной величины

                   

 

Рисунок 5.1 Ввод точности в программе MathCAD

 

  1. Чтобы построить график по полученным значениям, необходимо в  строке 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 (кубический).
Применение численных методов