Построение графика регрессии

Разработка программы построения графика экспериментальных точек и полинома регрессии второй степени в среде Turbo Pascal. Блок-схемы алгоритмов используемых процедур. Листинг программы. Составление вектора свободных членов и матрицы коэффициентов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.11.2013
Размер файла 46,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Построение графика регрессии

1. Анализ задания на курсовую работу

В данном случае необходимо решить задачу: разработать программу построения графика экспериментальных точек и полинома регрессии второй степени. Для расчета полинома необходимо применить уравнение полинома второй степени:

,

где а0, а1, а2 - коэффициенты полинома.

Чтобы рассчитать коэффициенты полинома нужно составить систему линейных уравнений, а затем её решить. Для решения системы применим метод Зейделя:

,

где , cj - элемент матрицы коэффициентов

, bk - элемент вектора свободных членов.

Эту задачу можно выполнить в выбранной среде программирования Turbo Pascal. Данный язык позволяет реализовать ряд математических, тригонометрических функций.

При написании программы используются функции стандартных модулей CTR, GRAPH и встроенные процедуры OutТextXY, STR, языка TURBO PASCAL. В данной курсовой работе график будет строиться в декартовой системе координат.

2. Описание программы

2.1 Описание структуры программы

Данная программа состоит из процедур Koef, Vector, Matrix, Ozifr, Tochki, Polinom и функции, предназначенных для реализации поставленных целей.

Рассмотрим подробнее:

Работа программы начинается с процедуры Vector, которая составляет вектор свободных членов. В цикле от i:=1 до Nd и во вложенном в него цикле от k:=1 до m по формуле:

Sum:=Sum+exp (Ln(x[k])*(i-1))*y[k]

путем обращения к элементам массива данных происходит вычисление i-ого элемента вектора свободных членов.

Далее вызывается процедура Matrix. Она состоит из ряда циклов: от i:=1 до Nd и во вложенных в него циклах от j:=1 до Nd, k:=1 до m составляется матрица коэффициентов.

Расчет элементов матрицы производится по формуле:

Sum:=Sum+exp (Ln(x[k])*(i+j-2)).

Затем программа обращается к процедуре Koef, где решается система линейных уравнений, составленная на основе вычисленной матрицы коэффициентов в процедуре Matrix и вектора свободных членов, составленного в процедуре Vector, по методу Зейделя. Корни этой системы будут коэффициентами полинома. После решения системы на экран выводятся коэффициенты полинома и фраза: «Нажмите клавишу Enter». Для продолжения программы необходимо нажать клавишу «Enter». Следом рассчитывается дополнительные значения х, чтобы график полинома был плавной линией.

Инициализируется графический драйвер VGA и режим VGAHI. Далее определяется максимальное значение переменных MaхX, MaхY c помощью встроенных функций GetMaxX, GetMaxY. Следом определяется расстояние между линиями сетки по оси ОХ, ОY:

Rx:=(MaxX-L-P)/(Lin-1);

Ry:=(MaxY-V-N)/(Lin-1);

потом рассчитывается шаг значений х, у по оси ОХ, ОY

Spx:=(x[m] - x[1])/(Lin-1);

Spy:=(y[3] - y[1])/(Lin-1).

Затем происходит вывод подписей осей. Устанавливается цвет линий сетки серым SetColor(Lightgray). В цикле от i:=1 до Lin идет построение линий координатной сетки путём проведения линий.

Line (Round(L+Rx*(i-1)), MaxY-N, Round (L+Rx*(i-1)), V); Line (L, Round (MaxY-N-Ry*(i-1)), MaxX-P, Round (MaxY-N-Ry*(i-1))).

Затем вызывается процедура Ozifr, которая производит оцифровку осей. С помощью встроенной процедуры Str выражение

х[1]+Spx*(i-1)

преобразуется в строковый тип и получившиеся значения присваиваются переменной ss. Далее выравнивается текст, центрируется по горизонтали и вертикали. Затем выводится переменная ss с помощью встроенной процедуры OutTextXY в точку

(L+Round (Rx*(i-1)), MaxY-N+Tx).

Следом идет выравнивание текста для выводимых значений y. Текст выравнивается вправо относительно горизонтали и центрируется по вертикали. Затем выражение

y[1]+Spy*(i-1):3:1, ss

преобразуется с помощью процедуры Str в строковый тип, и получившиеся значения присваиваются переменной ss. Потом значение ss выводятся в точке

(L-Tx, MaxY-N-Round (Ry*(i-1)))

с помощью встроенной процедуры OutTextXY.

Затем происходит расчет коэффициентов связывающих значение x, y с координатами xx, yy

Zx:=(MaxX-L-P)/(x[m] - x[1]);

Zy:=(MaxY-V-N)/(y[3] - y[1]).

программа полином регрессия pascal

Далее вызывается процедура Tochki. В цикле от j:=1 до m происходит построение графика экспериментальных точек. Координаты точек вычисляются по формулам

xx[j]:=L+Round((x[j] - x[1])*Zx);

yy[j]:=MaxY-N-Round((y[j] - y[1])*Zy),

после по рассчитанным координатам проводится окружность с центром в точке (xx[j], yy[j]) и радиусом три пикселя. Потом идет процедура Polinom. В цикле от i:=1 до t происходит расчет точек для построения графика полинома по формулам

xx[i]:=L+Round((xx1 [i] - xx1 [1])*Zx);

yy[i]:=MaxY-N-Round((f (xx1 [i], a0, a1, a2) - y[1])*Zy),

где f - функция полинома регрессии второй степени, в неё передаются следующие параметры:

xx1 [i] - точки по которым происходит построение,

a0, a1, a2 - коэффициенты полинома.

Затем проверяется условие

If i=1 Then MoveTo (xx[i], yy[i]) Else LineTo (xx[i], yy[i]),

это означает, что если i=1 графический указатель перемещается в точку с координатами (xx[j], yy[j]), иначе проводится линия из текущего положения графического указателя в точку с координатами (xx[i], yy[i]). Затем ожидается нажатие клавиши «Enter» и завершение работы программы.

2.2 Описание работы программы

После запуска программы осуществляется инициализация графического режима.

Затем вызываются процедуры Vector и Matrix, в которых происходит составление вектора свободных членов и матрицы коэффициентов системы линейных уравнений.

Далее решение системы линейных уравнений, нахождение коэффициентов полинома в процедуре Koef.

Потом вывод коэффициентов полинома, инструкция к выводу графика на экран монитора и ожидание нажатие клавиши «Enter».

Расчёт дополнительных значений х для построения графика полиномиальной регрессии второй степени.

После расчета происходит инициализация графического режима с разрешением 640?480 пикселей, 16 цветов.

Затем расчёты расстояния между линиями сетки по оси OX и OY и шага значений х по оси OX и значений y по OY.

Потом вывод подписей осей и построение линий сетки.

Далее идет процедура Ozifr, в которой происходит оцифровка осей ОХ и OY, причем по оси ОХ будут откладываться значения х, а по оси OY значения у.

Рассчитываются коэффициенты связывающие значения х, у с координатами.

Затем построение графика точек экспериментальных данных и потом построение графика линии полинома регрессии, с помощью процедур Tochki и Polinom. Ожидание нажатие клавиши «Enter».

3. Блок-схемы алгоритмов

3.1 Блок-схема функции f

3.2 Блок-схема алгоритма процедуры Koef

3.3 Блок-схема процедуры Ozifr

3.4 Блок-схема процедуры Vector

3.5 Блок-схема процедуры Matrix

3.6 Блок-схема процедуры Tochki

3.7 Блок-схема процедуры Polinom

3.8 Блок-схема алгоритма основной программы

4. Листинг программы

Program POLINOM;

Uses CRT, GRAPH;

Const

e=0.00001; {погрешность вычислений}

m=9; {количество значений x, y в таблице данных}

Nd=3; {порядок системы линейных уравнений}

t=60; {количество точек для полинома регрессии}

P=40; {отступ сетки справа, [pix]}

L=50; {отступ сетки слева, [pix]}

N=50; {отступ сетки снизу, [pix]}

V=50; {отступ сетки сверху, [pix]}

Lin=6; {число линий в сетке}

Ndp=20; {отступ для надписи, [pix]}

Tx=10; {отступ для текста, [pix]}

x:array [1..m] of extended=

(100,200,200,300,300,400,500,600,600); {табличные значения х}

y:array [1..m] of extended=

(8. 1,15. 3,16. 2,18. 5,17,13. 5,12. 3,11. 1,10.5);

{табличные значения у}

X1:array [1..Nd] of extended=(0,0,0); {начальные приближения корней системы}

VAR

b, {вектор свободных членов}

X2, {последующее значение корней системы}

Sum1: array [1..Nd] of extended; {сумма}

A:array [1..Nd, 1..Nd] of extended;

{матрица коэффициентов системы линейных уравнений}

xx, yy:array [1..t] of integer; {координаты x, y для

построения графиков}

xx1:array [1..t] of extended; {новые значения координаты х}

k, i, j, d:integer; {индексы переменных}

Sum, Sum2, {суммы}

h, {шаг изменения х}

a0, a1, a2: extended; {коэффициенты полинома}

GrDriver, {графический драйвер}

GrMode:integer; {графический режим}

MaxX, MaxY:integer; {максимальное и минимальное значение

координаты X, Y, [pix]}

Rx, Ry:extended; {расстояния между линиями сетки по оси X, Y, [pix]}

Spx, {шаг значений х по оси 0Х}

Spy:extended; {шаг значений y по оси 0Y}

ss:string; {строковая переменная}

Zx, Zy:extended; {коэффициенты для перехода в гр. режим}

{*********************** полином 2 степени ************************}

Function f (x, a0, a1, a2:extended): extended;

Begin

f:=a0+a1*x+a2*sqr(x);

End;

{***************вычисление вектора свободных членов ***************}

Procedure Vector;

Begin

For i:=1 to Nd do

Begin

Sum:=0;

For k:=1 to m do

Begin

Sum:=Sum+exp (Ln(x[k])*(i-1))*y[k];

End;

b[i]:=Sum;

End;

End;

{**************** вычисление матрицы коэффициентов ***************}

Procedure Matrix;

Begin

For i:=1 to Nd do

For j:=1 to Nd do

Begin

Sum:=0;

For k:=1 to m do

Begin

Sum:=Sum+exp (Ln(x[k])*(i+j-2));

End;

A [i, j]:=Sum;

End;

End;

{****************вычисление коэффициентов полинома ***************}

Procedure Koef;

Begin

Repeat

d:=0;

For i:=1 to Nd do

Begin

Sum:=0;

For k:=i to Nd do

Begin

Sum:=Sum+A [i, k]*X1 [k];

End;

Sum2:=0;

For k:=1 to i-1 do

Begin

Sum2:=Sum2+A [i, k]*X2 [k];

End;

Sum1 [i]:=Sum+Sum2-B[i];

X2 [i]:=X1 [i] - Sum1 [i]/A [i, i];

If Abs (X2 [i] - X1 [i])>E

Then d:=1;

X1 [i]:=X2 [i];

End;

Until d=0;

End;

{************************ оцифровка осей *************************}

Procedure Ozifr;

Begin

SetColor(White);

For i:=1 to Lin do

Begin

Str (x[1]+Spx*(i-1):3:1, ss);

SetTextJustify (CenterText, CenterText); {выравнивание

текста}

OutTextXY (L+Round (Rx*(i-1)), MaxY-N+Tx, ss);

SetTextJustify (RightText, CenterText); {выравнивание

текста}

Str (y[1]+Spy*(i-1):3:1, ss);

OuttextXY (L-Tx, MaxY-N-Round (Ry*(i-1)), ss);

End;

End;

{*************** построение экспериментальных точек ***************}

Procedure Tochki;

Begin

SetColor(Green);

For j:=1 to m d

Begin

xx[j]:=L+Round((x[j] - x[1])*Zx);

yy[j]:=MaxY-N-Round((y[j] - y[1])*Zy);

Circle (xx[j], yy[j], 3)

End;

End;

{****************** построение полинома регрессии *****************}

Procedure Polinom;

Begin

SetColor(Red);

For i:=1 to t do

Begin

xx[i]:=L+Round((xx1 [i] - xx1 [1])*Zx);

yy[i]:=MaxY-N-Round((f (xx1 [i], a0, a1, a2) - y[1])*Zy);

If i=1 Then MoveTo (xx[i], yy[i])

Else LineTo (xx[i], yy[i]);

End;

End;

{***********************Основная программа***********************}

Begin;

Clrscr;

Vector;

Matrix;

Koef;

Writeln (' Kоэффициенты полинома: ');

For i:=1 to Nd do

Writeln ('a', i-1,'=', x1 [i]:3:10);

Writeln (' Нажмите клавишу Enter');

a0:=x1 [1]; a1:=x1 [2]; a2:=x1 [3];

Readln;

{*************** вычисление шага и увеличение числа х ***************}

h:=(x[m] - x[1])/(t-1);

For i:=1 to t do

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

{****************** инициализация гр. режима **********************}

GrDriver:=VGA;

GrMode:=VGAHi;

InitGraph (GrDriver, GrMode, '');

{****************************************************************}

MaxX:=GetMaxX;

MaxY:=GetMaxY;

Rx:=(MaxX-L-P)/(Lin-1); {расстояние между лин. сетки}

Ry:=(MaxY-V-N)/(Lin-1);

Spx:=(x[m] - x[1])/(Lin-1); {шаг коорд. x, y по осям оx, оy}

Spy:=(y[4] - y[1])/(Lin-1);

{***************** подпись осей и название графика *****************}

OutTextXY (MaxX-P, MaxY-N+Ndp-5,'x');

OutTextXY (L-23, V-Ndp+5,'y');

SetTextJustify (CenterText, TopText); {выравнивание текста}

{********************* построение линий сетки *********************}

SetColor(Lightgray);

For i:=1 to Lin do

Begin

Line (Round(L+Rx*(i-1)), MaxY-N, Round (L+Rx*(i-1)), V);

Line (L, Round (MaxY-N-Ry*(i-1)), MaxX-P, Round (MaxY-N-Ry*(i-1)));

End;

{*********************переход в граф. режим ***********************}

Ozifr;

Zx:=(MaxX-L-P)/(x[m] - x[1]);

Zy:=(MaxY-V-N)/(y[3] - y[1]);

Tochki;

Polinom;

Readln;

End.

Размещено на Allbest.ru


Подобные документы

  • Методика разработки, практической апробации программы в среде Turbo Pascal по построению графика прямой линии регрессии. Формирование блок-схемы данной программы, ее листинг. Построение графика с помощью математических формул и графического модуля Graph.

    контрольная работа [46,2 K], добавлен 22.07.2011

  • История создания и развитие языка программирования Pascal, его версии. Особенности и порядок построения графика функции на языке Turbo Pascal с использованием декартовой системы координат. Блок схема алгоритма процедур, листинг и тестирование программы.

    курсовая работа [102,7 K], добавлен 23.12.2011

  • Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.

    курсовая работа [446,0 K], добавлен 19.06.2014

  • GetMatrDop как процедура определяет значение элемента транспонированной матрицы дополнений. Знакомство с этапами разработки в среде Turbo Pascal программы сортировки элементов, находящихся на главной диагонали матрицы. Особенности тестирования программы.

    курсовая работа [780,4 K], добавлен 20.11.2014

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

    курсовая работа [1,5 M], добавлен 21.11.2013

  • Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.

    курсовая работа [115,5 K], добавлен 22.05.2010

  • Программирование на алгоритмическом языке Turbo Pascal на примере разработки алгоритма и программы расчета временной функции. Выбор, обоснование методов решения. Схемы алгоритмов основной программы и подпрограмм. Распечатка исходных и вычисленных величин.

    реферат [154,8 K], добавлен 15.03.2012

  • Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.

    курсовая работа [1,5 M], добавлен 17.03.2014

  • Разработка алгоритма поставленной задачи по обработке числовой информации в среде Turbo Pascal 7.0 с базовым языком программирования Pascal, отладка программы, реализующей разработанный алгоритм. Описание структуры программы, ее вспомогательных процедур.

    курсовая работа [668,0 K], добавлен 25.02.2010

  • Построение интерполяционного полинома Ньютона по значениям функции в узлах согласно методу Лагранжа. Составление алгоритмов решения задачи, их реализация на программном уровне на языке Turbo Pascal. Представление результатов работы программы Polinom.

    курсовая работа [667,9 K], добавлен 01.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.