Автор: Пользователь скрыл имя, 09 Мая 2012 в 16:56, курсовая работа
В задании курсовой работы необходимо произвести интерполяцию заданной функции методом Лагранжа, программа должна быть выполнена в среде QT Creator , а так же в среде Mathcad 13. Основными целями работы является выполнение программы и составление пояснительной записки с приложениями языке С++, при помощи полученных знаний по курсу «информатика», а так же приобретение навыков работы в MathCad 13.
Введение
1 Постановка задачи
2 Интерполяционный метод Лагранжа
3 Описание среды QT Creator
4 Описание программы
5 Математический пакет MathCAD
6 Алгоритм решения задачи в MathCAD
Заключение
Список используемых источников
Приложение А (листинг программы- интерполяция методом Лагранжа)
Приложение Б (Блок схема метода Лагранжа)
Приложение В (Листинг программы в MathCAD )
Рисунок 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> содержит средства поддержки операций стандартного ввода-вывода:
Что бы приступить ко второй половине не менее важной, чем первая, мы переходим в окно дизайнера в 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 и построить график, необходимо:
Рисунок 5.1 Ввод точности в программе MathCAD
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 существуют три различных функции для построения кубических сплайнов с различными дополнительными условиями.