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

Автор: Пользователь скрыл имя, 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 Кб (Скачать)

Результатом каждой из перечисленных функций  является вектор, содержащий значения вторых производных от интерполяционной кривой во всех точках, заданных в массиве  vx. Для того чтобы исходя из этого вектора построить кривую, нужно воспользоваться встроенной функцией interp(v,vx,vy,x), где vx и vy – массивы экспериментальных точек, v – массив, полученный как результат одной из трех функций, перечисленных выше, x- координата, в которой нужно вычислить значение интерполяционной кривой.

 

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

 

            

Рисунок 6.3 2D- интерполяция линейным сплайном

           

Рисунок 6.4 2D- интерполяция параболическим сплайном

             Заключение

  В курсовой работе я рассмотрела формулу полинома Лагранжа при помощи полученных знаний, из курса “Информатика”.  

    Основная цель данной курсовой работы - применение математических методов в информатике. Мною рассмотрена формула полинома Лагранжа.

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список  используемых источников

  1. С. Прата Язык программирования С++. Лекции и упражнения. – М: ДиаСофт. 2002-896 с.
  2. Мудров А.Е., Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. - Томск: МП «РАСКО». 1991 -272с.
  3. Описание MathCAD и ECLIPSE [электронный ресурс] - Режим доступа http://ru.wikipedia.org/wiki/
  4. www.allbest.ru[ электронный ресурс]
  5. http://cgui.ru/gui147.htm [ электронный ресурс]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                           Приложение А

(обязательное)

Листинг программы - интерполяция функции методом Лагранжа

 

#include "project.h"

#include "ui_project.h"

#include <QtGui/QWidget>

#include <QPainter>

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#include <conio.h>

#include<QDebug>

#include <phonon/AudioOutput>

#include <phonon/MediaObject>

project::project(QWidget *parent)

    : QWidget(parent), ui(new Ui::project)

{

    F[0]=0;

    F[1]=0;

    F[2]=0;

    //N=3;

    //H = 3.1415926/16;

    ui->setupUi(this);

}

project::~project()

{

    delete ui;

}

void project::paintEvent(QPaintEvent * )

{

    N = ui->spinBox->value();

    H = M_PI * ui->doubleSpinBox->value();

    QPainter painter(this);

    double x;

  int i;

  double *a, *b;

  painter.setPen(QPen(Qt::black, 3));

  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+M_PI/4)

  {

      painter.setPen(QPen(Qt::blue, 3));

      painter.drawLine(x*70+25,170,x*70+25,166);

        painter.setPen(QPen(Qt::green, 3));

    painter.drawText(x*70,180,QString::number(x/M_PI)+"p");

  }

  for (x=-1;x<=1;x=x+0.25)

  {

      painter.setPen(QPen(Qt::cyan , 3));

    painter.drawLine(25,170-x*150,29,170-x*150);

      painter.setPen(QPen(Qt::magenta, 3));

    painter.drawText(0,180-x*150,QString::number(x));

  }

  //printf ("Введите x: "); scanf ("%lf", &x);

  a = (double*)malloc((N+1)*sizeof(double));

  b = (double*)malloc((N+1)*sizeof(double));

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

    a[i]=H*(double)i/(double)N;

    b[i]=scx(a[i]);

  }

  if (F[2] == 1)

  {

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

    {

        painter.drawEllipse(a[i]*70+25-2.5,170-b[i]*150-2.5,5,5);

    };

  };

  if (F[1] == 1)

  {

    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)

  {

    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[])

{

int i,j;

double pro;

double s=0.0;

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

    {

        pro=1.0;

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

        {

           if(i!=j) pro=pro*(x-a[j])/(a[i]-a[j]);

        }

        s=s+pro*b[i];

    }

    return s;

}

double project::scx(double x)

{

    return cos(x)*sin(x);

};

void project::on_pushButton_1_clicked()

{

    F[0]=abs(1-F[0]);

    update();

}

void project::on_pushButton_2_clicked()

{

    F[1]=abs(1-F[1]);

    update();

}

void project::on_pushButton_3_clicked()

{

    F[2]=abs(1-F[2]);

    update();

                                               Приложение Б

                                                         (Обязательное)

  Блок схема метода Лагранжа

 


 

 


 

 



 

 

 

 

 


 


 

 









 



 

 

 

 


 

 

 


 



 




 











 





 




 

 




 







 




 

 




 






                                           Приложение В

(обязательное)

Листинг программы в MathCAD

 

 заданная функция

i:= 0.. 6

Задаем шаг для построения графика

Значение  каждой из 7 точек с шагом  π/16 будет высчитываться по формуле:

Найдем значение функции в каждой из 7точек по формуле:

Значение  данной функции и значение по заданной точке:

  ,  

Строим  график: зависимость функции f(x)  от х, затем задается зависимость функции f(x) и М от х и Хi , изобразим на графике

Рисунок В.1 -График функции

в 7 точках

 

 

 

      

Рисунок В.2 – Графики интерполяций


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