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

Автор: Пользователь скрыл имя, 09 Мая 2012 в 16:56, курсовая работа

Краткое описание

В задании курсовой работы необходимо произвести интерполяцию заданной функции методом Лагранжа, программа должна быть выполнена в среде QT Creator , а так же в среде Mathcad 13. Основными целями работы является выполнение программы и составление пояснительной записки с приложениями языке С++, при помощи полученных знаний по курсу «информатика», а так же приобретение навыков работы в MathCad 13.

Оглавление

Введение
1 Постановка задачи
2 Интерполяционный метод Лагранжа
3 Описание среды QT Creator
4 Описание программы
5 Математический пакет MathCAD
6 Алгоритм решения задачи в MathCAD
Заключение
Список используемых источников
Приложение А (листинг программы- интерполяция методом Лагранжа)
Приложение Б (Блок схема метода Лагранжа)
Приложение В (Листинг программы в MathCAD )

Файлы: 1 файл

Пример.docx

— 982.54 Кб (Скачать)

 

Рисунок 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 (кубический).

Информация о работе Применение численных методов