Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2019 13:18:58

SplinterExpert
Зарегистрирован: 2019-03-14
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите дополнить алгоритм

Всем привет, ребят помогите с алгоритмом, есть алгоритм и текст программы, но преподавателю не достаточно такого алгоритма, он хочет более подробный, я уже всю голову сломал. Алгоритм прикреплю рисунком.

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

2.3 Листинг программы с комментариями
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
from math import *
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
class Window(QWidget):
def __init__(self, parent=None):
super().__init__()
self.setMinimumSize(400,420) # Минимальный размер окна
self.setMaximumSize(900,500) # Максимальный размер окна
self.t = # Температура
self.e = # Энергия соодурения
self.btn = QPushButton('Расчитать') # Кнопка Расчитать
self.buttonGraf = QPushButton('График') # Кнопка График
self.btn.clicked.connect(self.polinom) # Слушаю кнопку Расчитать
self.buttonGraf.clicked.connect(self.graf) # Слушаю кнопку График
self.tLabel = QLabel('Температура') # Лейбл Температура
self.eLabel = QLabel('Энергия соодурения') # Лейбл Энергия соодурения
self.decision = QLabel('')
self.tLine =
self.eLine =
foriinrange(len(self.t)): # Создание полей значений Температура и Энергия соодурения
tB = QDoubleSpinBox() # Поле Температура
e = QDoubleSpinBox() # Поле Энергия соодурения

tB.setDecimals(3) # Точность Температура 3 знака после запятой
e.setDecimals(3) # Точность Энергия соодурения 3 знака после запятой

e.setMinimum(-1000) # Минимальное значение Энергия соодурения
ifi> 0:
tB.setMinimum(self.t) # Минимальное значение Температура
else:
tB.setMinimum(-1000) # Минимальное значение Температура
e.setMaximum(1000) # Максимальное значение Энергия соодурения
if i < len(self.t) - 1:
tB.setMaximum(self.t) # Максимальное значение Температура
else:
tB.setMaximum(1000) # Максимальное значение Температура

tB.setValue(self.t) # Добавление начального значения X
e.setValue(self.e) # Добавление начального значения X

#stB.valueChanged.connect(self.changeT) # Слушаем поле Температура и при измении вызываем фукцию ограничения X
e.valueChanged.connect(self.changeE) # Слушаем поле Энергия соодурения и при измении вызываем фукцию ограничения X

self.tLine.append(tB) # Добавляем поле Температура в массив tLine
self.eLine.append(e) # Добавляем поле Энергия соодурения в массив eLine

self.d = [, , , , , , ] # Значение полинома
self.function = # Формулы полинома
self.fx = sp.linspace(self.t, self.t + 1, 100) # 100 точек на отрезке Температуры

self.viewport = QWidget()
self.viewport2 = QWidget()
self.scroll2 = QScrollArea(self)
self.scroll2.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)

self.initUI()

def initUI(self):
self.polinom() # Расчет полинома
self.decisionBox('1') # Вызов функции вывода решения для d(1)

gridBox1 = QGridLayout() # Сетка для окна, чтобы вставлять в нее элементы
gridBox1.setSpacing(10) # Отступы между элементами
gridBox1.addWidget(self.btn, 0, 2, 1, 4) # Добавление в сетку кнопки Расчитать
gridBox1.addWidget(self.buttonGraf, 1, 2, 1, 4) # Добавление в сетку кнопки График

gridScroll1 = QGridLayout()
gridScroll1.setSpacing(10)
gridScroll1.addWidget(self.tLabel, 0, 0) # Добавление в сетку лейбл Температура
gridScroll1.addWidget(self.eLabel, 0, 1) # Добавление в сетку лейбл Энергия соодурения
for i in range(len(self.tLine)):
gridScroll1.addWidget(self.tLine, i+1, 0) # Добавление в сетку поле Температура
gridScroll1.addWidget(self.eLine, i+1, 1) # Добавление в сетку поле Энергия соодурения

self.viewport.setGeometry(10,10,400,275)
self.viewport.setLayout(gridScroll1)
box = QVBoxLayout()
box.addItem(gridBox1) # Добавление блока в окно
box.addWidget(self.viewport)
frame = QFrame()
frame.setLayout(box) # Добавляем окно во вкладку 1

combo = QComboBox(self) # Выпадающий список
combo.addItems() # Значения в выпабающем списке (d1 - d7)
combo.activated.connect(self.decisionBox) # Слушаем измения значения в выпадающем списке

gridScroll2 = QGridLayout() # Сетка для окна, чтобы вставлять в нее элементы
gridScroll2.setSpacing(10) # Отступы между элементами
gridScroll2.addWidget(self.decision) # Добавляем решение в окно

self.viewport2.setLayout(gridScroll2)
self.scroll2.setWidget(self.viewport2)

box2 = QVBoxLayout()
box2.addWidget(combo)
box2.addWidget(self.scroll2)

group = QGroupBox()
group.setLayout(box2)

tab = QTabWidget() # Cтек с вкладками виджетов
tab.addTab(frame,“Условия”) # Добавляем вкладку Условия
tab.addTab(group,“Решение”) # Добавляем вкладку Решение

vbox = QVBoxLayout()
vbox.addWidget(tab)

self.setLayout(vbox) # Добавляем стек в окно программы
self.setWindowTitle('lab2') # Задаем название окна программы

gridBox2 = QGridLayout()

defchangeT(self): # Ограничение для полей Температуры и считывание их значений
for i in range(len(self.tLine)):
self.t = self.tLine.value() # Записываем значение Температуры в массив t
if i > 0:
self.tLine.setMinimum(self.tLine.value()) # Минимальное значение для Температуры
if i < len(self.tLine) - 1:
self.tLine.setMaximum(self.tLine.value()) # Максимальное значение для Температуры
defchangeE(self): # Считывание значений Энергиий соодурения
for i in range(len(self.eLine)):
self.e = self.eLine.value() # Записываем значение Энергиий соодурения в массив e
def decisionBox(self, test): # Вывод решения
s = self.function # Вставляем формулу d(test) //test - значение выбраное в выпадающем списке
fun = self.d # fun присвоим значение d(test) // fun - временная переменная // d(test) - массив занчений от 1 до 100
for i in range(len(fun)):
s += “\nd” + str(test) + “(” + str(i + 1) + “) = ” + str(fun) # Записываем d(i) в строку
self.decision.setText(s) # Записываем решение в окно
self.viewport2.adjustSize() # Обновляем размер окна с решением
def polinom(self):# Расчет полинома
for i in range(1, 8): fp, residuals, rank, sv, rcond = sp.polyfit(self.t, self.e, i, full=True) # Получаем полином
fu = sp.poly1d(fp) # Формула полинома d
fun = ‘'
forzinrange(len(fu), -1, -1): # Записываем формулу полинома в строку
if z < len(fu):
fun += ’ + ‘
else:
fun += ’d(%i) = '%z
fun += str(fu)
if z != 0:
fun += “* x^%i”%z
else:
fun += “\n”
self.function = fun # Записываем формулу(строку) в массив
self.d = fu(self.fx) # Записываем значение полинома в массив
def graf(self):
legend =
for i in range(len(self.d)):
plt.plot(self.fx, self.d, linewidth=2, alpha=0.5) # График d
legend.append(“d = %i”%(i+1)) # Текст d = i
plt.legend(legend, loc=“upper left”) # Добавляем подпись к графику
plt.scatter(self.t, self.e,alpha=1)
plt.grid()
plt.show()
if __name__ == ‘__main__’:
app = QApplication(sys.argv)
widget = Window()
widget.show()
sys.exit(app.exec_())

Прикреплённый файлы:
attachment алг №2.JPG (23,2 KБ)

Офлайн

#2 Март 14, 2019 14:45:16

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Помогите дополнить алгоритм

1) Листинг нужно помещать в специальный тег. Иначе он становится не читаемым.
2) Из твоего рисунка вообще не понятно что происходит. Например что означает действие "Получаю F(формулу d полинома)"? Наверное от тебя хотят что бы ты подробнее эти действия расписал.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version