Визуализация результатов статистической обработки экспериментальных данных

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ГОУВПО

Уфимский государственный авиационный технический университет

Кафедра Информатики

Тема курсовой работы:

«Визуализация результатов статистической обработки экспериментальных данных»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по «Информатика»

Уфа 2012 г

Оглавление

Введение

Теоретическая часть

Создание формы приложения

Пример работы с программой

Визуализация и аппроксимация данных в электронной таблице

Вывод

Код программы

Введение

Целью настоящей работы является разработка программы для визуализации результатов статистической обработки экспериментальных данных. В ходе работы должен быть построен график визуализирующей зависимость температуры физического объекта от времени, регистрируемой тремя датчика на протяжении фиксированного промежутка времени. Исходные данные передаются на обработку из одного файла. Результаты исследования должны сохраняться в текстовом файле. Так же была создана электронная таблица, которая визуализирует данные и аппроксимирует их полиномиальной функцией 3-го порядка.

программа визуализация статистическая данный

Теоретическая часть

Аппроксимация — научный метод, состоящий в замене одних объектов другими. В том или ином смысле близкимик исходным. Но более простыми. Под аппроксимацией в математике обычно подразумевают описание некоторой, чаще не явно заданной, зависимости или совокупности представяющих ее данных с помощью другой, более простой или более единообразной зависимости. Часто данные представляются в виде отдельных точек, координаты которых задаются таблицей данных. Эти точки называются узловыми. В этом случае аппроксимацие является процесс подбора эмпеирической формулы. Значение которой возможно мало отличались бы от опытных дынных. Построенная функция может не проходить через заданные точки.

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

Создание формы приложения

Для создания приложения средствами Visual Basic открываем среду разработки Microsoft Visual Basic 6. 0, перед нами появляется диалоговое окно «Новый проект», выбираем вкладку Новый -> Standard. exe. (Рисунок 1):

Рисунок 1.

При щелчке на кнопке Oткрыть загружается базовая форма, служащая начальной точкой для всех операций с программой, форма Form1. Присвоим свойству Caption формы Form1 значение «Программа».

После этого на новой форме располагаем нужные нам элементы для решения задачи и создания приложения. Интерфейс формы показан на рис. 2, значение свойств, отличающихся от стандартных в таблице 1.

Рисунок 2. Главная форма

Создадим меню для приложения. Для этого в меню Tools выполним команду Menu Editor. В появившемся диалоговом окне напишем названия пунктов меню и названия процедур, которые будут запускаться при выполнении команд меню. Редактор меню с введёнными именами представлен на рисунке (рис. 3).

Рисунок 3. Меню главной формы

В приложении имеются, кроме вышеописанной формы, ещё три формы, которые создаются с помощью меню Project, команды Add Form; frmViborfile (служит для выбора и открытия нужного файла), frmObr (служит для обработки данных), frmGrafick (в ней показан график зависимости температуры от времени), frmAbout (в ней рассказывается о программе и её авторе) Формы показаны ниже на Рис. 4, 5, 6,7:

Рисунок 4. frmViborfile

Рисунок 5. frmObr

Рисунок 6. frmGrafick

Рисунок 7. frmAbout

Пример работы программы

Открытие файлов:

В контекстном меню, во вкладке «Файл», находится раздел «Открыть», выбираем этот раздел.

Рисунок 8. Файл> Открыть

Открывается окно «Обзор».

Рисунок 9. Окно «Обзор» в работе

Первым делом, выбираем нужный нам диск, потом находим каталог хранения нужного файла, затем выбираем этот файл и нажимаем на кнопку «Открыть».

Вывод массивов:

Рисунок 10.

Обработка массивов:

В контекстном меню, во вкладке «Данные», наводим на раздел «Обработать».

Рисунок 11. Данные> Обработать

Открывается окно «Обработка данных», на котором содержится максимальное и минимальное значение показаний каждого датчика и моменты времени, в которое было зафиксировано данное показание; Максимальное отклонение от среднего; количество показаний, значения которых отклоняются от среднего на 8%.

Рисунок 12. Обработанные данные

Сохранение отсортированных данных:

На форме обработки данных, выбираем сохранить. Файл записывается туда же откуда был считан первоначальный файл и ему автоматически присваивается название data1. txt

Работа с графиками

Построим график изменения температуры физического объекта в зависимости от времени. Для этого в контекстном меню, во вкладке «Данные», выбираем раздел «Показать график».

Рисунок 12. Данные> Показать график

Строятся графики:

Рисунок 13. График

Завершение работы с программой

Открываем окно «Файл», выбираем пункт «Выйти»

Рисунок 14. Файл> Выйти

После этого появляется диалоговое окно «Выход?»

Рисунок 15. Диалоговое окно

Выбираем да и программа заканчивает свою работу

Выводы

Среда разработки Visual Basic 6.0 позволяет эффективно и быстро обрабатывать и визуализировать результаты.

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

Программа позволяет выполнять визуализацию исходных данных.

Визуализация данных из файла data1. txt

Microsoft Office — Excel позволяет импортировать данные из файла. (Рис. 16)

Рисунок. 16 Импортирование данных.

Результаты визуализации данных из файла data1. txt представлены ниже.

Рисунок17. Визуализация средних арифметических показаний датчиков в каждый момент времени

Рисунок18. Визуализация минимальных показаний датчиков в каждый момент времени

Аппроксимация данных в MSExel

Импортируем данные из файла data. txt в электронную таблицу. Затем на панели инструментов выбираем пункт «Вставка» > «График»

Рисунок19. Вставка> График

После чего на получившихся графиках правой кнопкой мыши вызываем контекстное меню, выбираем «Добавить линию тренда»

Рисунок20. Добавить линию тренда

Выбираем параметры линии тренда Полиномиальная 3-го порядка

Рисунок21. Параметры линии тренда

Так для каждого графика и получаем аппроксимация экспериментальных данных полиномиальной функцией 3-го порядка.

Рисунок22. Результат аппроксимации

Программный код

Public Pokaz1() As String

Public Pokaz2() As String

Public Pokaz3() As String

frmGlavnaya

Private Sub Exit_Click ()

If MsgBox («Уверенны?», vbYesNo, «Выход?») = vbYes Then

Unload Me

Set frmGlavnaya = Nothing

Else

Cancel = 1

End If

End Sub

Private Sub file_open_Click ()

frmViborfile. Show

End Sub

Private Sub graf_Click ()

frmGrafick. Show

End Sub

Private Sub obr_Click ()

frmObr. Show

End Sub

Private Sub prog_Click ()

frmAbout. Show

End Sub

frmViborfile

Private Sub DirList_change ()

FilList. Path = DirList. Path

End Sub

Private Sub DrvList_Change ()

On Error GoTo DriveHandler

DirList. Path = DrvList. Drive

Exit Sub

DriveHandler:

DrvList. Drive = DirList. Path

Exit Sub

End Sub

Private Sub Open_Click ()

Dim arr () As String

Dim FileNo As Integer, c As Integer, i As Integer

c = 0

FileNo = FreeFile

Open FilList. Path + «» + FilList. FileName For Input As #FileNo

Do Until EOF (FileNo)

c = c + 1 'определяем размерность массива'

ReDim Preserve arr (c)

Line Input #FileNo, arr© 'считываем файл в массив'

Loop

Pokaz1 = Split (arr (1), «,») 'записываем 1 датчик'

For i = 0 To UBound (Pokaz1)

frmGlavnaya. Pokaz1. Print Pokaz1(i)

Next i

Pokaz2 = Split (arr (2), «,») 'записываем 2 датчик'

For i = 0 To UBound (Pokaz2)

frmGlavnaya. Pokaz2. Print Pokaz2(i)

Next i

Pokaz3 = Split (arr (3), «,»)

For i = 0 To UBound (Pokaz3)

frmGlavnaya. Pokaz3. Print Pokaz3(i) 'записываем 3 датчик'

Next i

frmViborfile. Hide

End Sub

Private Sub Otmena_Click ()

frmViborfile. Hide

End Sub

frmObr

For i = 0 To UBound (Pokaz3)

If Pokaz3(i) < min3 Then

min3 = Pokaz3(i)

End If

If Pokaz3(i) > max3 Then

max3 = Pokaz3(i)

End If

Next i 'нашли min3 и max3'

If max1 > max2 Then 'ищем обсалютный максимум'

ObsMax = max1

Else

ObsMax = max2

End If

If ObsMax < max3 Then

ObsMax = max3 'нашли обсалютный максимум'

End If

If min1 < min2 Then 'обсалютный минимум'

ObsMin = min1

Else

ObsMin = min2

End If

If ObsMin > min3 Then

ObsMin = min3 'нашли его'

End If

If Abs (ObsMax — srArif) > Abs (ObsMin — srArif) Then 'ищем max отклонение'

MaxOtkl = Abs (ObsMax — srArif)

Else

MaxOtkl = Abs (ObsMin — srArif)

frmObr. List2. AddItem Format (MaxOtkl, «##. ## C») 'нашли максимальное отклонение от среднего'

End If

Dim s As Integer

Procent = srArif / 100 * 8 'нашли 8 процентов от средней температуры'

s = 0 'счетчик'

For i = 0 To UBound (Pokaz1)

TempProcent = Int (srArif) — Pokaz1(i) 'считаем'

If Abs (Int (TempProcent)) = Int (Procent) Then '… '

s = s + 1

End If

Next i

For i = 0 To UBound (Pokaz2) 'считаем для второго датчика'

TempProcent = Int (srArif) — Pokaz2(i)

If Abs (Int (TempProcent)) = Int (Procent) Then

s = s + 1

End If

Next i

For i = 0 To UBound (Pokaz3)

TempProcent = Int (srArif) — Pokaz3(i) 'и для третьего'

If Abs (Int (TempProcent)) = Int (Procent) Then

s = s + 1

End If

Next i

frmObr. List3. AddItem s 'и вывели'

End Sub

Private Sub saveFile_Click ()

Dim MyFile As Integer

MyFile = FreeFile

p = App. Path & «» & «Data1» & «. txt»

Open p For Output As #MyFile

Do

For i = 0 To UBound (Pokaz1)

k = i

s = Val ((Pokaz1(k)) + Val (Pokaz2(k)) + Val (Pokaz3(k))) / 3

k = k — 1

Print #MyFile, (Format (s, «#. ##»)) 'выгружаем среднюю температуру'

Next i

Loop Until k >= 0

For i = 0 To UBound (Pokaz1)

If Pokaz1(i) > Pokaz2(i) Then

A = Pokaz2(i)

Else

A = Pokaz1(i)

End If

If A > Pokaz3(i) Then

B = Pokaz3(i)

Else

B = A

End If

Print #MyFile, (Format (B, «##»)) 'выгружаем минимумы'

Next i

If MsgBox («Данные записаны», vbYes, ««) = vbYes Then

Unload Me

End If

End Sub

Private Sub Find1_Click ()

Dim max1 As Integer, min1 As Integer

Dim i As Integer

k1 = 0: min1 = Pokaz1(0)

k2 = 0: max1 = Pokaz1(0)

For i = 0 To UBound (Pokaz1)

If Pokaz1(i) < min1 Then

k1 = i: min1 = Pokaz1(i) 'определяем минимум и номер элемента'

End If

If Pokaz1(i) > max1 Then

k2 = i: max1 = Pokaz1(i) 'определяем максимум и номер элемента'

End If

Next i

frmObr. max1. AddItem max1

frmObr. min1. AddItem min1

Dim MinMax1 As Integer, HourMax1 As Integer

Dim TempMin As Integer, TempHour As Integer

Dim Temp As String

MinMax1 = 7 'начальное значение минуты'

HourMax1 = 10 'начальное значение часы'

Temp = 18 * k2 / 60 'колдунство'

Temp = Temp + «» + «,» 'добавляем пробел'

TempTime = Split (Temp, «,») 'разделяем на часы и минуты'

For i = 0 To UBound (TempTime)

TempHour = TempTime (0) 'записываем часы — 0 элемент'

If TempTime (1) = «» Then 'если 1 элементы — пробел'

TempMin = 0 'значит минут нет'

Else 'иначе'

TempMin = TempTime (1) 'минуты это 1 элемент'

End If

Next i

HourMax1 = HourMax1 + TempHour 'записываем часы'

MinMax1 = MinMax1 + 6 * TempMin 'записываем минуты'

If MinMax1 > 60 Then 'Цикл на случай'

HourMax1 = HourMax1 + 1 'если минут больше'

MinMaz1 = MinMax1 — 60 'чем 60'

End If

frmObr. HourMax1. AddItem HourMax1 'выводим часы'

frmObr. MinMax1. AddItem MinMax1 'выводим минуты'

Dim MinMin1 As Integer, HourMin1 As Integer

MinMin1 = 7 'ну и для минимума'

HourMin1 = 10 'и остальных 2 датчиков'

Temp = 18 * k1 / 60 'тоже самое'

Temp = Temp + «» + «,»

TempTime = Split (Temp, «,»)

For i = 0 To UBound (TempTime)

TempHour = TempTime (0)

If TempTime (1) = «» Then

TempMin = 0

Else

TempMin = TempTime (1)

End If

Next i

HourMin1 = HourMin1 + TempHour

MinMin1 = MinMin1 + 6 * TempMin

If MinMin1 > 60 Then

HourMin1 = HourMin1 + 1

MinMin1 = MinMin1 — 60

End If

frmObr. HourMin1. AddItem HourMin1

frmObr. MinMin1. AddItem MinMin1

End Sub

Private Sub find2_Click ()

Dim max2 As Integer, min2 As Integer

k1 = 0: min2 = Pokaz2(0)

k2 = 0: max2 = Pokaz2(0)

For i = 0 To UBound (Pokaz2)

If Pokaz2(i) < min2 Then

k1 = i: min2 = Pokaz2(i)

End If

If Pokaz2(i) > max2 Then

k2 = i: max2 = Pokaz2(i)

End If

Next i

frmObr. max2. AddItem max2

frmObr. min2. AddItem min2

Dim MinMax2 As Integer, HourMax2 As Integer

Dim Temp As String

MinMax2 = 7

HourMax2 = 10

Temp = 18 * k2 / 60

Temp = Temp + «» + «,»

TempTime = Split (Temp, «,»)

For i = 0 To UBound (TempTime)

TempHour = TempTime (0)

If TempTime (1) = «» Then

TempMin = 0

Else

TempMin = TempTime (1)

End If

Next i

HourMax2 = HourMax2 + TempHour

MinMax2 = MinMax2 + 6 * TempMin

If MinMax2 > 60 Then

HourMax2 = HourMax2 + 1

MinMax2 = MinMax2 — 60

End If

frmObr. HourMax2. AddItem HourMax2

frmObr. MinMax2. AddItem MinMax2

Dim MinMin2 As Integer, HourMin2 As Integer

MinMin2 = 7

HourMin2 = 10

Temp = 18 * k1 / 60

Temp = Temp + «» + «,»

TempTime = Split (Temp, «,»)

For i = 0 To UBound (TempTime)

TempHour = TempTime (0)

If TempTime (1) = «» Then

TempMin = 0

Else

TempMin = TempTime (1)

End If

Next i

HourMin2 = HourMin2 + TempHour

MinMin2 = MinMin2 + 6 * TempMin

If MinMin2 > 60 Then

HourMin2 = HourMin2 + 1

MinMin2 = MinMin2 — 60

End If

frmObr. HourMin2. AddItem HourMin2

frmObr. MinMin2. AddItem MinMin2

End Sub

Private Sub find3_Click ()

Dim max3 As Integer, min3 As Integer

k1 = 0: min3 = Pokaz3(0)

k2 = 0: max3 = Pokaz3(0)

For i = 0 To UBound (Pokaz3)

If Pokaz3(i) < min3 Then

k1 = i: min3 = Pokaz3(i)

End If

If Pokaz3(i) > max3 Then

k2 = i: max3 = Pokaz3(i)

End If

Next i

frmObr. max3. AddItem max3

frmObr. min3. AddItem min3

Dim MinMax3 As Integer, HourMax3 As Integer

Dim Temp As String

MinMax3 = 7

HourMax3 = 10

Temp = 18 * k2 / 60

Temp = Temp + «» + «,»

TempTime = Split (Temp, «,»)

For i = 0 To UBound (TempTime)

TempHour = TempTime (0)

If TempTime (1) = «» Then

TempMin = 0

Else

TempMin = TempTime (1)

End If

Next i

HourMax3 = HourMax3 + TempHour

MinMax3 = MinMax3 + 6 * TempMin

If MinMax3 > 60 Then

HourMax3 = HourMax3 + 1

MinMax3 = MinMax3 — 60

End If

frmObr. HourMax3. AddItem HourMax3

frmObr. MinMax3. AddItem MinMax3

Dim MinMin3 As Integer, HourMin3 As Integer

MinMin3 = 7

HourMin3 = 10

Temp = 18 * k1 / 60

Temp = Temp + «» + «,»

TempTime = Split (Temp, «,»)

For i = 0 To UBound (TempTime)

TempHour = TempTime (0)

If TempTime (1) = «» Then

TempMin = 0

Else

TempMin = TempTime (1)

End If

Next i

HourMin3 = HourMin3 + TempHour

MinMin3 = MinMin3 + 6 * TempMin

If MinMin3 > 60 Then

HourMin3 = HourMin3 + 1

MinMin3 = MinMin3 — 60

End If

frmObr. HourMin3. AddItem HourMin3

frmObr. MinMin3. AddItem MinMin3

End Sub

frmGrafick

Private Sub Command1_Click ()

Picture1. Cls

Picture1. Scale (-3, 62)-(90, -8)

Picture1. Line (0, 0)-(80, 0)

Picture1. Line (80, 0)-(78, 2)

Picture1. Line (80, 0)-(78, -2)

For d = 0 To 75 Step 5

Picture1. PSet (d, 0)

Picture1. Print d

Next d

Picture1. Line (0, 0)-(0, 52)

Picture1. Line (0, 52)-(2, 50)

Picture1. Line (0, 52)-(-2, 50)

For d = 0 To 50 Step 5

Picture1. PSet (0, d)

Picture1. Print d

Next d

For Y = 5 To 80 Step 5

Picture1. Line (Y, 0)-(Y, 80), & H8000000B

Next Y

For X = 5 To 50 Step 5

Picture1. Line (0, X)-(80, X), & H8000000B

Next X

t = 0

For i = 0 To 13

Picture1. Line (t, Pokaz1(i))-(t + 5, Pokaz1(i + 1)), & HFF0000

t = t + 5

Next i

t = 0

For i = 0 To 13

Picture1. Line (t, Pokaz2(i))-(t + 5, Pokaz2(i + 1)), & H8E682

t = t + 5

Next i

t = 0

For i = 0 To 13

Picture1. Line (t, Pokaz3(i))-(t + 5, Pokaz3(i + 1)), & H1508E6

t = t + 5

Next i

End Sub

ПоказатьСвернуть
Заполнить форму текущей работой