Автор работы: Пользователь скрыл имя, 04 Мая 2013 в 20:35, курсовая работа
Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Питоне организовывается в функции и классы, которые могут объединяться в модули (которые в свою очередь могут быть объединены в пакеты).
Программное обеспечение……………………………………………………………………………………………………3
Систематизация процесса контроля в условиях ограничений частичной упорядоченности……………………………………………………………………………………………………………………4
Теоретическая часть……………………………………………………………………………………………………..4
Практическая часть……………………………………………………………………………………………………….7
Выводы……………………………………………………………………………………………………………………….18
Определение количества повторных измерений контролируемых параметров оптимального по критерию максимума достоверности результатов……………………………….19
Теоретическая часть……………………………………………………………………………………………………19
Практическая часть…………………………………………………………………………………………………….20
Выводы……………………………………………………………………………………………………………………….24
Список используемой литературы………………………………………………………………………………………25
Найти:
Необходимо
рассчитать оптимальное количество
повторных измерений
Решение:
Работоспособность объекта характеризуется пятью параметрами, которые запишем в таблицу №7.
Таблица №7. Параметры, определяющие работоспособность объекта контроля
№ параметров |
ti(c) |
pi(1) | |||
1 2 3 4 5 |
±5,0 ±0,3 ±0,2 ±0,1 ±0,5 |
±2,00 ±0,03 ±0,06 ±0,05 ±0,1 |
0.4 0.1 0.3 0.5 0.2 |
30 15 50 20 5 |
0,99419 0,99893 0,99634 0,99110 0,99784 |
Для каждого параметра вычисляется значение Ψi (ni) по формуле:
Постоянно выбирается наибольшее значение Ψi (ni).
Для n1 все Ψi (n1) равны нулю.
На основании таблицы №6 получим следующие значения:
Наибольшим является , поэтому далее вычислим
Следующим наибольшим является , поэтому далее вычислим
Все следующие действия выполнялись с помощью программного алгоритма.
Результат представлен в таблице № 8.
Таблица № 8
ni |
Ψ1 (ni) |
N |
Ψ2 (ni) |
N |
Ψ3 (ni) |
N |
Ψ4 (ni) |
N |
Ψ5 (ni) |
N |
1 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
2 |
0.0000838 |
3 |
0.0000247 |
11 |
0.0000283 |
8 |
0.0002134 |
1 |
0.0001503 |
2 |
3 |
0.0000264 |
10 |
- |
- |
0.0000623 |
4 |
0.0000541 |
5 | ||
4 |
0.0000124 |
15 |
- |
- |
0.0000286 |
7 |
0.0000300 |
6 | ||
5 |
- |
- |
- |
0.0000211 |
12 |
0.0000280 |
9 | |||
6 |
- |
- |
- |
- |
0.0000120 |
16 |
0.0000160 |
13 | ||
7 |
- |
- |
- |
- |
- |
- |
0.0000160 |
14 |
Цифры в графе N таблица №8 означают, на каком номере этапа должно быть добавлено одно повторное измерение i-го параметра.
Для каждого этапа по формулам:
последовательно вычислим значения P(N) и T(N), которые впишем в таблицу №9.
Таблица №9
N |
n1 |
n2 |
n3 |
n4 |
n5 |
Р(N) |
T(N) |
1 |
1 |
1 |
1 |
2 |
1 |
0.98274 |
2 мин 20 сек |
2 |
1 |
1 |
1 |
2 |
2 |
0.98348 |
2 мин 25сек |
3 |
2 |
1 |
1 |
2 |
2 |
0.98595 |
2 мин 55сек |
4 |
2 |
1 |
1 |
3 |
2 |
0.98718 |
3 мин 15сек |
5 |
2 |
1 |
1 |
3 |
3 |
0.98745 |
3 мин 20сек |
6 |
2 |
1 |
1 |
3 |
4 |
0.98760 |
3 мин 25сек |
7 |
2 |
1 |
1 |
4 |
4 |
0.98816 |
3 мин 45сек |
8 |
2 |
1 |
2 |
4 |
4 |
0.98956 |
4 мин 35сек |
9 |
2 |
1 |
2 |
4 |
5 |
0.98970 |
4 мин 40сек |
10 |
3 |
1 |
2 |
4 |
5 |
0.99048 |
5 мин 10сек |
11 |
3 |
2 |
2 |
4 |
5 |
0.99085 |
5 мин 25сек |
12 |
3 |
2 |
2 |
5 |
5 |
0.99127 |
5 мин 45сек |
13 |
3 |
2 |
2 |
5 |
6 |
0.99135 |
5 мин 50сек |
14 |
3 |
2 |
2 |
5 |
7 |
0.99143 |
5 мин 55сек |
15 |
4 |
2 |
2 |
5 |
7 |
0.99180 |
6 мин 25сек |
16 |
4 |
2 |
2 |
6 |
7 |
0.99203 |
6 мин 45сек |
Таким образом, заданным ограничениям удовлетворяют по времени набор параметров, соответствующих строке 9, по достоверности – 16 в таблице №9.
Наряду
с ручным расчетом, решение задачи
реализовано с помощью
Результат работы программы:
$ python main2.py
N n Ψ max
1 2 4 0.00021340
2 2 5 0.00015032
3 2 1 0.00008382
4 3 4 0.00006229
5 3 5 0.00005408
6 4 5 0.00003003
7 4 4 0.00002860
8 2 3 0.00002830
9 5 5 0.00002803
10 3 1 0.00002642
11 2 2 0.00002469
12 5 4 0.00002106
13 6 5 0.00001601
14 7 5 0.00001601
15 4 1 0.00001236
16 6 4 0.00001203
N n1 n2 n3 n4 n5 P(N) T(N)
1 1 1 1 2 1 0.98274 2 мин 20сек
2 1 1 1 2 2 0.98348 2 мин 25сек
3 2 1 1 2 2 0.98595 2 мин 55сек
4 2 1 1 3 2 0.98718 3 мин 15сек
5 2 1 1 3 3 0.98745 3 мин 20сек
6 2 1 1 3 4 0.98760 3 мин 25сек
7 2 1 1 4 4 0.98816 3 мин 45сек
8 2 1 2 4 4 0.98956 4 мин 35сек
9 2 1 2 4 5 0.98970 4 мин 40сек
10 3 1 2 4 5 0.99048 5 мин 10сек
11 3 2 2 4 5 0.99085 5 мин 25сек
12 3 2 2 5 5 0.99127 5 мин 45сек
13 3 2 2 5 6 0.99135 5 мин 50сек
14 3 2 2 5 7 0.99143 5 мин 55сек
15 4 2 2 5 7 0.99180 6 мин 25сек
16 4 2 2 6 7 0.99203 6 мин 45сек
n Ψ1(ni) Ψ2(ni) Ψ3(ni) Ψ4(
1 --------- --------- ------
2 0.0000838 0.0000247 0.0000283 0.0002134 0.0001503
3 0.0000264 --------- --------- 0.0000623 0.0000541
4 0.0000124 --------- --------- 0.0000286 0.0000300
5 --------- --------- --------- 0.0000211 0.0000280
6 --------- --------- --------- 0.0000120 0.0000160
7 --------- --------- --------- --------- 0.0000160
Вывод
Спроектированная
таким образом система
Результаты ручного решения задачи идентичны результатам, полученным с помощью созданного программного алгоритма.
Список используемой литературы
Приложение 1
Листинг программы на языке Python 2.7
# -*- coding: utf-8 -*-
import sys
import copy
import matplotlib.pyplot as plt
import networkx as nx
solve_table = ''
S = 0
class Node:
"""Узел графа"""
def __init__(self, number, tau=0):
self.number = number # номер узла
self.tau = tau # вес узла
self.Toc = 0
self.childs = [] # узлы-потомки
self.childs_numbers = [] # номер узлов-потомков
self.parents = [] # узлы-родители
self.parents_numbers = [] # номера узлов-родителей
def set_child(self, child): # mass - это t между узлами
"""Добавить к узлу потомков"""
#TODO добавить проверку типа
self.childs.append(child) # добавляем потомка
self.childs_numbers.append(
child.set_parent(self) # добавляем потомку родителя
def del_childs(self):
self.childs = []
self.childs_numbers = []
def set_parent(self, parent):
"""Добавить к узлу родителя"""
#TODO добавить проверку типа
self.parents.append(parent) # Добавляем родителя
self.parents_numbers.append(
def display_graph(graph):
"""Выводит граф на экран"""
for node in graph:
sys.stdout.write(
"Number: " + str(node.number) + "\tTau: " + str(node.tau))
sys.stdout.write("\tParents:")
if len(node.parents):
for parent in node.parents:
sys.stdout.write("\t\t", parent.number)
else:
sys.stdout.write("\t\tNone")
sys.stdout.write("\tChilds:")
if len(node.childs):
for child in node.childs:
sys.stdout.write("\t\t", child.number)
else:
sys.stdout.write("\t\tNone")
def draw_graph(graph):
gr = nx.Graph()
for i in graph:
for j in i.childs:
gr.add_edge(str(i.number), str(j.number))
pos = nx.spring_layout(gr)
colors = range(20)
nx.draw(gr, pos, node_size=700, node_color='#A0CBE2', width=4,
edge_cmap=plt.cm.Blues, with_labels=True)
file_name = "graph.png"
plt.savefig(file_name) # save as png
sys.stdout.write('Рисунок ' + file_name + ' сохранен\n')
# plt.show() # display
def make_tree(graph):
"""Функция для построения дерева"""
tree = Node(0)
tree.set_parent(Node(0))
make_next_node(tree, graph)
return tree
def make_next_node(tree, graph):
"""Рекурсивная функция для вычисления потомков узла"""
possible_next_nodes = copy.copy(
graph) # с самого начала все узлы могут быть следующими
for i in tree.parents_numbers:
possible_next_nodes[i] = None # отсекаем уже использованные узлы
for possible_node in range(len(possible_next_nodes)
if possible_next_nodes[possible_
for parents_number in possible_next_nodes[possible_
if not parents_number in tree.parents_numbers: # если родитель узла еще не был в дереве, то мы этот узел пока использовать не можем
possible_next_nodes[possible_
break # если хотя бы одного родителя нет, то дальше и проверять не стоит
for possible_node in range(len(possible_next_nodes)
if possible_next_nodes[possible_
tree.set_child(Node(possible_
for child in tree.childs: # добавим каждому потомку родителей родителя
child.parents = copy.copy(tree.parents)
child.parents_numbers
= copy.copy(tree.parents_
child.set_parent(
Node(child.number)) # не забываем добавить самого себя
for child in tree.childs:
make_next_node(child, graph) # рекурсивно пробегаем по всем потомкам
def display_tree(tree, tab=0):
"""Функция вывода дерева"""
sys.stdout.write(tab * '\t' + str(tree.number) + '\n')
for i in tree.childs:
Информация о работе Технический контроль и диагностика систем ЛА