ReferatWorld.ru
» » » Построение кубического сплайна функции
Вернуться назад

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

Построение

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

План:

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

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

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

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

#include <iostream.h>

#include <fstream.h>

#include <conio.h>

#include <math.h>

#include <dos.h>

#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 <= (n-1); i++) {

Sp(i,n) = 3*(y[i-1] - 2*y[i] + y[i+1])/pow(step,2);

Sp(i,i) = 4;

if (i < (n-1)) Sp(i,i+1) = 1;

if (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; i++)

{

d(i) = y[i-1];

a(i) = (b(i+1)- b(i))/(-3*step);

c(i) = (y[i] - d(i) - pow(step,2)*b(i) + pow(step,3)*a(i) )/(-step);

}

i=0;

//построение графика сплайна при помощи полученный коэф-тов (см. выше)

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

for (int j=0; j < dop; j++)

{

x1[k] = x[i] + j*step / (dop);

y1[k] = pow((x[i]-x1[k]),3)*a(i+1)

+ pow((x[i]-x1[k]),2)*b(i+1) + (x[i]-x1[k])*c(i+1)+d(i+1);

k++;

}

x1[n*dop] = x[n];

y1[n*dop] = y[n];

}

void main() {

int n,dop; double step;

cout << "Введите количество интервалов: "; cin >> n;

cout << "Введите количество доп. т. на интервале: "; cin >> dop;

cout << "Введите шаг интервала: "; cin >> 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 <graphics.h>

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

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 <stdlib.h>

#include <iostream.h>

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

class matrica {

public:

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

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать
Рефераты по математике Построение кубического сплайна функции План: 1) вывод расчётных формул; 2) текст программы; 3) тестирование. Текст программы.
Оценок: 1000 (Средняя 5 из 5)

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

© 2017 - 2022 ReferatWorld.ru