рефераты рефераты
 

Главная

Разделы

Новости

О сайте

Контакты

 
рефераты

Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Бизнес-план
Биология
Бухучет управленчучет
Водоснабжение водоотведение
Военная кафедра
География и геология
Геодезия
Государственное регулирование и налогообложение
Гражданское право
Гражданское процессуальное право
Животные
Жилищное право
Иностранные языки и языкознание
История и исторические личности
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Медицина
Международное и Римское право
Уголовное право уголовный процесс
Трудовое право
Журналистика
Химия
География
Иностранные языки
Без категории
Физкультура и спорт
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Радиоэлектроника
Религия и мифология
Риторика
Социология
Статистика
Страхование
Строительство
Схемотехника
История
Компьютеры ЭВМ
Культурология
Сельское лесное хозяйство и землепользование
Социальная работа
Социология и обществознание

рефераты
рефераты

НАУЧНАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Построение кубического сплайна функции

Построение кубического сплайна функции

ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ

ПО ВЫСШЕМУ И СРЕДНЕСПЕЦИАЛЬНОМУ ОБРАЗОВАНИЮ

КРАСНОЯРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Практическое задание

по компьютерной алгебре

тема: построение

кубического сплайна функции

Выполнил:

студент 2 курса ФИВТ

группы 27-4

Попов А.В.

Проверила:

Быкова Е.Г.

1998 г.

План:

1) вывод расчётных формул;

2) текст программы;

3) тестирование.

Текст программы.

#include

#include

#include

#include

#include

#include "mat_vec.h" // классы для работы с матрицами и векторами

#include "progonka.h" // решение системы ур-ний (для 3-х диагональных

матриц)

#include "funct.h" // второстепеннные функции программы (рисование и

т.д.)

// "корень" программы

void spline (float step, int dop, int n, double* &x,double* &y,double*

&x1,double* &y1) {

int k = 0;

matrica Sp(n, n-1);

for (int i = 1; i 1) Sp(i,i-1) = 1;

}

float *tmp;

progonka(Sp, tmp); // решение системы уравнений методом прогонки

// (см. файл "progonka.h")

vector a(n),b(n+1),c(n),d(n); // вычисление коэф-тов многочленов

b(1) = 0;

b(n+1) = 0;

for(int index = 0; index < n-1; index++)

b(index+2) = tmp[index];

delete [] tmp;

for (i = 1; i > n;

cout > dop;

cout > step;

dop++;

double *x,*y, *x1,*y1;

initial(x,y,x1,y1,n,dop);

int i = 0; while (i < (n+1)) { // расчёт первоначальных значений функции

x[i] = (i-n/2)*(step);

y[i] = cos(x[i])*pow(x[i],2);

i++;

}

spline (step, dop, n, x,y,x1,y1);

init(); interface(n, dop,x,y,x1,y1);

delete x,y,x1,y1;

closegraph();

}

#ifndef __FUNCT_H

#define __FUNCT_H

#include

// инициализация графики

void init() {

int D,M; D = DETECT; M = 5;

initgraph(&D,&M,"");

}

// рисование графика функции и сплайна

void paint(int Fx,int Fy,int key,int n, int dop, double* &x,double*

&y,double* &x1,double* &y1) {

int i = 0, a, b;

a = getmaxx()/2; b = getmaxy()/2;

setfillstyle(0,0); bar(0,0,a*2+1,b*2+1); setcolor(5);

if ((key == 1) || (key == 3))

while ( i < n ) {

line(x[i]*Fx + a, -y[i]*Fy + b, x[i+1]*Fx + a, -y[i+1]*Fy + b);

i = i++;

}

if ((key == 2) || ( key == 3)) {

i = 0;

setcolor(3);

while ( i < n*dop ) {

line(x1[i]*Fx + a, -y1[i]*Fy + b, x1[i+1]*Fx + a, -y1[i+1]*Fy + b);

i = i++;

}

}

setcolor(10); line(getmaxx()/2,0,getmaxx()/2,getmaxy());

line(0,getmaxy()/2,getmaxx(),getmaxy()/2);

}

// функция для приближения (удаления) и масштабирования по осям графиков

void interface(int n, int dop, double* &x, double* &y,double* &x1, double*

&y1) {

int c=16, z=16;

char key='0';

while (key != 27) {

if (key == 75) c = c+4;

if (key == 72) z = z+4;

if (key == 77) c = c-4;

if (key == 80) z = z-4;

if (key == 45) { z = z-4; c = c-4; }

if (key == 61) { z = z+4; c = c+4; }

if (c < 0) c = 0;

if (z < 0) z = 0;

if (key == 's') paint(c,z,2,n,dop,x,y,x1,y1);

else if (key == 'f') paint(c,z,1,n,dop,x,y,x1,y1);

else paint(c,z,3,n,dop,x,y,x1,y1);

key = getch();

}

}

// Инициализация динамических массивов

void initial (double* &x,double* &y,double* &x1,double* &y1, int n, int

dop) {

x = new double [n+1];

y = new double[n+1];

for (int i = 0 ; i < (n+1);i++) {

y[i] = 0;

x[i] = 0; }

x1 = new double[n*dop+1];

y1 = new double[n*dop+1];

for ( i = 0 ; i < (n*dop+1);i++) {

x1[i] = 0;

y1[i] = 0; }

}

#endif

#ifndef __MAT_VEC_H

#define __MAT_VEC_H

#include

#include

// класс матриц

class matrica {

public:

const int Column, String; //кол-во столбцов и строк матрицы

matrica(int column, int string);

~matrica();

private:

float **WW;

matrica(const matrica& rhs);

matrica& operator=(const matrica& rhs);

public:

float& operator()(int i, int j);

friend ostream& operator>(istream& in, const matrica& matr);

};

// конструктор

matrica :: matrica(int column, int string) : Column(column), String(string)

{

WW = new float*[string];

if(!WW) {

cout 0) && (i 0) && (j >(istream& in, matrica& WW) {

for(int i = 1; i > WW(i, j);

return in;

}

// класс векторов

class vector {

public:

vector(int column);

~vector();

const int Column; // кол-во элементов вектора

private:

float *vect;

vector(const vector& rhs);

vector& operator=(const vector& rhs);

public:

float& operator()(int i);

friend ostream& operator>(istream& in, const vector& vec);

};

// кнструктор vector

vector :: vector(int column) : Column(column) {

vect = new float[column];

if(!vect) {

cout 0) && (i >(istream& in, vector& vec) {

for(int i = 1; i > vec(i);

return in;

}

#endif

#ifndef __PROGONKA_H

#define __PROGONKA_H

#include "mat_vec.h"

int progonka(matrica &mat, float* &x) {

x = new float[mat.String];

if(!x)

return 0;

int i, y = mat.Column, n = mat.String; vector h(n), d(n);

d(1) = - mat(1, 2) / mat(1, 1);

h(1) = mat(1, y) / mat(1, 1);

for(i = 2; i = 1; i--)

x[i - 1] = d(i) * x[i] + h(i);

return 1;

}

#endif

Тестирование:

Зеленым цветом – график функции [pic] построенный в пределе от –5 до

5, с шагом = 1.

Красным цветом – график сплайна, полученный при интерполировании

исходного графика, причём дополнительно построено всего 3 точки на каждом

интервале.

рефераты
© РЕФЕРАТЫ, 2012

рефераты