Как передать данные из функции для визуализации графиков

Как передать данные из функции samovirav в ax1f1 и ax1f2 для визуализации графиков?

ax1f1 должен строить график по переменным x_points, y_points,
а ax1f2 должен строить два графика по переменным x_points, h(x_points) и x , y.

from PyQt5 import QtCore, QtGui, QtWidgets, uic
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import (
    FigureCanvasQTAgg as FigureCanvas,
    NavigationToolbar2QT as NavigationToolbar)
from PyQt5.Qt import *
from PyQt5.QtWidgets import QLabel , QLineEdit
from scipy import integrate
from control.matlab import *
import control
import numpy as np
from scipy import interpolate
import scipy.optimize as opt

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1400, 900)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        MainWindow.setMinimumSize(QtCore.QSize(1400, 900))
        MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setHorizontalSpacing(7)
        self.gridLayout.setVerticalSpacing(0)
        self.gridLayout.setObjectName("gridLayout")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
        self.label_3.setSizePolicy(sizePolicy)
        self.label_3.setMinimumSize(QtCore.QSize(0, 35))
        self.label_3.setMaximumSize(QtCore.QSize(16777215, 35))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        font.setKerning(False)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.label_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.label_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.groupBox_3.setFont(font)
        self.groupBox_3.setObjectName("groupBox_3")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_3)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.mplwindow = QtWidgets.QWidget(self.groupBox_3)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.mplwindow.sizePolicy().hasHeightForWidth())
        self.mplwindow.setSizePolicy(sizePolicy)
        self.mplwindow.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.mplwindow.setObjectName("mplwindow")
        self.mplvl = QtWidgets.QVBoxLayout(self.mplwindow)
        self.mplvl.setObjectName("mplvl")
        self.verticalLayout_4.addWidget(self.mplwindow)
        self.horizontalLayout_3.addWidget(self.groupBox_3)
        self.mplfigs = QtWidgets.QListWidget(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(100)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.mplfigs.sizePolicy().hasHeightForWidth())
        self.mplfigs.setSizePolicy(sizePolicy)
        self.mplfigs.setMinimumSize(QtCore.QSize(0, 0))
        self.mplfigs.setMaximumSize(QtCore.QSize(200, 400))
        self.mplfigs.setObjectName("mplfigs")
        self.horizontalLayout_3.addWidget(self.mplfigs)
        self.gridLayout.addLayout(self.horizontalLayout_3, 4, 0, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        font.setKerning(False)
        self.label_4.setFont(font)
        self.label_4.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.label_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.label_4.setFrameShadow(QtWidgets.QFrame.Raised)
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 1, 1, 1, 1)
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setContentsMargins(-1, 5, -1, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.groupBox.setFont(font)
        self.groupBox.setInputMethodHints(QtCore.Qt.ImhNone)
        self.groupBox.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.groupBox.setFlat(False)
        self.groupBox.setCheckable(False)
        self.groupBox.setChecked(False)
        self.groupBox.setObjectName("groupBox")

        #self.groupBox.setStyleSheet ( "background-color: #e6c4c0;" )

        self.formLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.formLayoutWidget.setGeometry(QtCore.QRect(10, 50, 311, 151))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout_2.setContentsMargins(0, 0, 0, 0)
        self.formLayout_2.setHorizontalSpacing(6)
        self.formLayout_2.setVerticalSpacing(12)
        self.formLayout_2.setObjectName("formLayout_2")
        self.Label = QtWidgets.QLabel(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.Label.sizePolicy().hasHeightForWidth())
        self.Label.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label.setFont(font)
        self.Label.setObjectName("Label")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.Label)
        self.DoubleSpinBox = QtWidgets.QDoubleSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.DoubleSpinBox.sizePolicy().hasHeightForWidth())
        self.DoubleSpinBox.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.DoubleSpinBox.setFont(font)
        self.DoubleSpinBox.setObjectName("DoubleSpinBox")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.DoubleSpinBox)
        self.Label_2 = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label_2.setFont(font)
        self.Label_2.setObjectName("Label_2")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.Label_2)
        self.DoubleSpinBox_2 = QtWidgets.QDoubleSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.DoubleSpinBox_2.sizePolicy().hasHeightForWidth())
        self.DoubleSpinBox_2.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.DoubleSpinBox_2.setFont(font)
        self.DoubleSpinBox_2.setObjectName("DoubleSpinBox_2")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.DoubleSpinBox_2)
        self.Label_3 = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label_3.setFont(font)
        self.Label_3.setObjectName("Label_3")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.Label_3)
        self.DoubleSpinBox_3 = QtWidgets.QDoubleSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.DoubleSpinBox_3.sizePolicy().hasHeightForWidth())
        self.DoubleSpinBox_3.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.DoubleSpinBox_3.setFont(font)
        self.DoubleSpinBox_3.setMinimum(0.0)
        self.DoubleSpinBox_3.setObjectName("DoubleSpinBox_3")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.DoubleSpinBox_3)
        self.Label_4 = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label_4.setFont(font)
        self.Label_4.setObjectName("Label_4")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.Label_4)
        self.SpinBox = QtWidgets.QSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.SpinBox.sizePolicy().hasHeightForWidth())
        self.SpinBox.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.SpinBox.setFont(font)
        self.SpinBox.setObjectName("SpinBox")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.SpinBox)
        self.gridLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 210, 311, 201))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setVerticalSpacing(10)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
        self.label.setObjectName("label")
        self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_2.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
        self.label_2.setObjectName("label_2")
        self.gridLayout_2.addWidget(self.label_2, 0, 1, 1, 1)

        # +++ -------->  vvvvvvvvvvvvvvvvvvvvvvvvv <----------------------------------------
        scroll = QScrollArea ( self.groupBox )  # +++
        scroll.setGeometry ( QtCore.QRect ( 10 , 215 , 311 , 200 ) )  # +++
        scroll.setWidgetResizable ( True )  # +++
        scroll.setWidget ( self.gridLayoutWidget )

        self.horizontalLayout_4.addWidget(self.groupBox)
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.groupBox_2.setFont(font)
        self.groupBox_2.setFlat(False)
        self.groupBox_2.setObjectName("groupBox_2")
        self.layoutWidget = QtWidgets.QWidget(self.groupBox_2)
        self.layoutWidget.setGeometry(QtCore.QRect(20, 50, 273, 153))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(16)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.rB1 = QtWidgets.QRadioButton(self.layoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        self.rB1.setFont(font)
        self.rB1.setObjectName("rB1")
        self.verticalLayout_2.addWidget(self.rB1)
        self.rB2 = QtWidgets.QRadioButton(self.layoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        self.rB2.setFont(font)
        self.rB2.setObjectName("rB2")
        self.verticalLayout_2.addWidget(self.rB2)
        self.rB3 = QtWidgets.QRadioButton(self.layoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        self.rB3.setFont(font)
        self.rB3.setObjectName("rB3")
        self.verticalLayout_2.addWidget(self.rB3)
        self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget)
        self.pushButton_2.setEnabled(True)
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        font.setKerning(False)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout_2.addWidget(self.pushButton_2)
        self.horizontalLayout_4.addWidget(self.groupBox_2)
        self.gridLayout.addLayout(self.horizontalLayout_4, 2, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1400, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_3.setText(_translate("MainWindow", "Идентификация объекта"))
        self.groupBox_3.setTitle(_translate("MainWindow", "Кривая разгона"))
        self.label_4.setText(_translate("MainWindow", "Расчет настроек регулятора"))
        self.groupBox.setTitle(_translate("MainWindow", "Ввод кривой разгона"))
        self.Label.setText(_translate("MainWindow", "Входное воздействие:"))
        self.Label_2.setText(_translate("MainWindow", "Величина запаздывания:"))
        self.Label_3.setText(_translate("MainWindow", "Шаг"))
        self.Label_4.setText(_translate("MainWindow", "Количество точек:"))
        self.label.setText(_translate("MainWindow", "Время"))
        self.label_2.setText(_translate("MainWindow", "Выход"))
        self.groupBox_2.setTitle(_translate("MainWindow", "Тип разгоной характеристики"))
        self.rB1.setText(_translate("MainWindow", "Объект с самовыравниванием"))
        self.rB2.setText(_translate("MainWindow", "Объект без самовыравнивания"))
        self.rB3.setText(_translate("MainWindow", "Колебательный"))
        self.pushButton_2.setText(_translate("MainWindow", "Расчет коэффициентов"))

class MainWindow ( QtWidgets.QMainWindow , Ui_MainWindow ) :
    def __init__(self) :
        super ().__init__ ()
        self.setupUi ( self )
        self.fig_dict = {}

        self.mplfigs.itemClicked.connect(self.changefig)

        fig = Figure()
        self.addmpl(fig)

    # +++  vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def samovirav(self) :
        x_points = [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16]
        y_points = [0 , 0 , 0.125 , 0.3 , 0.45 , 0.55 , 0.65 , 0.725 , 0.8 , 0.85 , 0.89 , 0.91 , 0.95 , 0.96 , 0.975 ,0.985 , 1]

        def h(i) :
            tck = interpolate.splrep ( x_points , y_points )
            return interpolate.splev ( i , tck )

        def Rosenbrock(a) :
            f = tf ( 1 , [a[0] , 1] );
            g = tf ( 1 , [a[1] , 1] );
            d = tf ( 1 , [a[2] , 1] );
            w = f * g * d
            #   %% Generating transfer function of Pade approx :
            T_delay = 1
            n_pade = 5
            (num_pade , den_pade) = control.pade ( T_delay , n_pade )
            H_pade = control.tf ( num_pade , den_pade )
            W = control.series ( H_pade , w )

            T = np.arange ( 0 , 17 , 1 )
            y , x = step ( W , T )

            d = (h ( T ) - y) ** 2;

            y_int = integrate.simps ( d , T , axis=-1 , even='avg' )
            return y_int

        n = 3
        a0 = np.zeros ( n , dtype=float )  # Вектор с двумя элементами типа float
        # Начальная точка поиска минимума функции
        a0[0] = 1
        a0[1] = 1
        a0[2] = 1
        xtol = 1.0e-9  # Точность поиска экстремума
        # Находим минимум функции
        res = opt.minimize ( Rosenbrock , a0 , method='Nelder-Mead' , options={'xtol' : xtol , 'disp' : True} )

        c = (res.x)
        f = tf ( 1 , [c[0] , 1] );
        g = tf ( 1 , [c[1] , 1] );
        d = tf ( 1 , [c[2] , 1] );
        w = f * g * d
        #   %% Generating transfer function of Pade approx :
        T_delay = 1
        n_pade = 5
        (num_pade , den_pade) = control.pade ( T_delay , n_pade )
        H_pade = control.tf ( num_pade , den_pade )
        W = control.series ( H_pade , w )

        T = np.arange ( 0 , 17 , 1 )
        y , x = step ( W , T )

        print ( (res.fun) , (res.x) )
        #plt.plot ( x_points , h ( x_points ) , 'o-r' , x , y , "b" )
        #plt.grid ( True )
        #plt.show ()

    def changefig(self, item):
        text = item.text()
        self.rmmpl()
        self.addmpl(self.fig_dict[text])

    def addfig(self, name, fig):
        self.fig_dict[name] = fig
        self.mplfigs.addItem(name)

    def addmpl(self, fig):
        self.canvas = FigureCanvas(fig)
        self.mplvl.addWidget(self.canvas)
        self.canvas.draw()
        self.toolbar = NavigationToolbar(self.canvas,
                self.mplwindow, coordinates=True)
        self.mplvl.addWidget(self.toolbar)

    def rmmpl(self,):
        self.mplvl.removeWidget(self.canvas)
        self.canvas.close()
        self.mplvl.removeWidget(self.toolbar)
        self.toolbar.close()



if __name__ == "__main__":
    import sys

    fig1 = Figure()
    ax1f1 = fig1.add_subplot(111)
    ax1f1.grid ( True )
    #ax1f1.plot ( x_points , y_points, 'or')

    fig2 = Figure()
    ax1f2 = fig2.add_subplot(111)
    ax1f2.grid ( True )
    #ax1f2.plot ( x_points , h ( x_points ) , 'o-r' , x , y , "b" )

    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow()
    main.addfig('Заданная КР', fig1)
    main.addfig('Аппроксимированная', fig2)
    main.show()
    sys.exit(app.exec_())

    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

я никак не смотрел в сторону оптимизации вашего примера.

я не знаю что делает ваша функция samovirav()
Результаты работы функции возвращаются через return

Почитайте комментарии в тексте кода и попробуйте.

from PyQt5 import QtCore, QtGui, QtWidgets, uic
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import (
    FigureCanvasQTAgg as FigureCanvas,
    NavigationToolbar2QT as NavigationToolbar)
import matplotlib.pyplot as plt
from PyQt5.Qt import *
from PyQt5.QtWidgets import QLabel , QLineEdit
from scipy import integrate
from control.matlab import *
import control
import numpy as np
from scipy import interpolate
import scipy.optimize as opt


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1400, 900)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        MainWindow.setMinimumSize(QtCore.QSize(1400, 900))
        MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setHorizontalSpacing(7)
        self.gridLayout.setVerticalSpacing(0)
        self.gridLayout.setObjectName("gridLayout")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
        self.label_3.setSizePolicy(sizePolicy)
        self.label_3.setMinimumSize(QtCore.QSize(0, 35))
        self.label_3.setMaximumSize(QtCore.QSize(16777215, 35))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        font.setKerning(False)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.label_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.label_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.groupBox_3.setFont(font)
        self.groupBox_3.setObjectName("groupBox_3")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_3)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.mplwindow = QtWidgets.QWidget(self.groupBox_3)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.mplwindow.sizePolicy().hasHeightForWidth())
        self.mplwindow.setSizePolicy(sizePolicy)
        self.mplwindow.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.mplwindow.setObjectName("mplwindow")
        self.mplvl = QtWidgets.QVBoxLayout(self.mplwindow)
        self.mplvl.setObjectName("mplvl")
        self.verticalLayout_4.addWidget(self.mplwindow)
        self.horizontalLayout_3.addWidget(self.groupBox_3)
        self.mplfigs = QtWidgets.QListWidget(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(100)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.mplfigs.sizePolicy().hasHeightForWidth())
        self.mplfigs.setSizePolicy(sizePolicy)
        self.mplfigs.setMinimumSize(QtCore.QSize(0, 0))
        self.mplfigs.setMaximumSize(QtCore.QSize(200, 400))
        self.mplfigs.setObjectName("mplfigs")
        self.horizontalLayout_3.addWidget(self.mplfigs)
        self.gridLayout.addLayout(self.horizontalLayout_3, 4, 0, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        font.setKerning(False)
        self.label_4.setFont(font)
        self.label_4.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.label_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.label_4.setFrameShadow(QtWidgets.QFrame.Raised)
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 1, 1, 1, 1)
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setContentsMargins(-1, 5, -1, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        self.groupBox.setFont(font)
        self.groupBox.setInputMethodHints(QtCore.Qt.ImhNone)
        self.groupBox.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.groupBox.setFlat(False)
        self.groupBox.setCheckable(False)
        self.groupBox.setChecked(False)
        self.groupBox.setObjectName("groupBox")
        #self.groupBox.setStyleSheet ( "background-color: #e6c4c0;" )
        self.formLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.formLayoutWidget.setGeometry(QtCore.QRect(10, 50, 311, 151))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout_2.setContentsMargins(0, 0, 0, 0)
        self.formLayout_2.setHorizontalSpacing(6)
        self.formLayout_2.setVerticalSpacing(12)
        self.formLayout_2.setObjectName("formLayout_2")
        self.Label = QtWidgets.QLabel(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.Label.sizePolicy().hasHeightForWidth())
        self.Label.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label.setFont(font)
        self.Label.setObjectName("Label")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.Label)
        self.DoubleSpinBox = QtWidgets.QDoubleSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.DoubleSpinBox.sizePolicy().hasHeightForWidth())
        self.DoubleSpinBox.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.DoubleSpinBox.setFont(font)
        self.DoubleSpinBox.setObjectName("DoubleSpinBox")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.DoubleSpinBox)
        self.Label_2 = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label_2.setFont(font)
        self.Label_2.setObjectName("Label_2")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.Label_2)
        self.DoubleSpinBox_2 = QtWidgets.QDoubleSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.DoubleSpinBox_2.sizePolicy().hasHeightForWidth())
        self.DoubleSpinBox_2.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.DoubleSpinBox_2.setFont(font)
        self.DoubleSpinBox_2.setObjectName("DoubleSpinBox_2")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.DoubleSpinBox_2)
        self.Label_3 = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label_3.setFont(font)
        self.Label_3.setObjectName("Label_3")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.Label_3)
        self.DoubleSpinBox_3 = QtWidgets.QDoubleSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.DoubleSpinBox_3.sizePolicy().hasHeightForWidth())
        self.DoubleSpinBox_3.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.DoubleSpinBox_3.setFont(font)
        self.DoubleSpinBox_3.setMinimum(0.0)
        self.DoubleSpinBox_3.setObjectName("DoubleSpinBox_3")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.DoubleSpinBox_3)
        self.Label_4 = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.Label_4.setFont(font)
        self.Label_4.setObjectName("Label_4")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.Label_4)
        self.SpinBox = QtWidgets.QSpinBox(self.formLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.SpinBox.sizePolicy().hasHeightForWidth())
        self.SpinBox.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.SpinBox.setFont(font)
        self.SpinBox.setObjectName("SpinBox")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.SpinBox)
        self.gridLayoutWidget = QtWidgets.QWidget(self.groupBox)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 210, 311, 201))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setVerticalSpacing(10)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
        self.label.setObjectName("label")
        self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_2.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
        self.label_2.setObjectName("label_2")
        self.gridLayout_2.addWidget(self.label_2, 0, 1, 1, 1)

        scroll = QScrollArea(self.groupBox )
        scroll.setGeometry ( QtCore.QRect ( 10 , 215 , 311 , 200 ) )
        scroll.setWidgetResizable ( True )  # +++
        scroll.setWidget ( self.gridLayoutWidget )

        self.horizontalLayout_4.addWidget(self.groupBox)
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.groupBox_2.setFont(font)
        self.groupBox_2.setFlat(False)
        self.groupBox_2.setObjectName("groupBox_2")
        self.layoutWidget = QtWidgets.QWidget(self.groupBox_2)
        self.layoutWidget.setGeometry(QtCore.QRect(20, 50, 273, 153))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(16)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.rB1 = QtWidgets.QRadioButton(self.layoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        self.rB1.setFont(font)
        self.rB1.setObjectName("rB1")
        self.verticalLayout_2.addWidget(self.rB1)
        self.rB2 = QtWidgets.QRadioButton(self.layoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        self.rB2.setFont(font)
        self.rB2.setObjectName("rB2")
        self.verticalLayout_2.addWidget(self.rB2)
        self.rB3 = QtWidgets.QRadioButton(self.layoutWidget)
        font = QtGui.QFont()
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        self.rB3.setFont(font)
        self.rB3.setObjectName("rB3")
        self.verticalLayout_2.addWidget(self.rB3)
        self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget)
        self.pushButton_2.setEnabled(True)
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(False)
        font.setUnderline(True)
        font.setWeight(50)
        font.setKerning(False)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout_2.addWidget(self.pushButton_2)
        self.horizontalLayout_4.addWidget(self.groupBox_2)
        self.gridLayout.addLayout(self.horizontalLayout_4, 2, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1400, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_3.setText(_translate("MainWindow", "Идентификация объекта"))
        self.groupBox_3.setTitle(_translate("MainWindow", "Кривая разгона"))
        self.label_4.setText(_translate("MainWindow", "Расчет настроек регулятора"))
        self.groupBox.setTitle(_translate("MainWindow", "Ввод кривой разгона"))
        self.Label.setText(_translate("MainWindow", "Входное воздействие:"))
        self.Label_2.setText(_translate("MainWindow", "Величина запаздывания:"))
        self.Label_3.setText(_translate("MainWindow", "Шаг"))
        self.Label_4.setText(_translate("MainWindow", "Количество точек:"))
        self.label.setText(_translate("MainWindow", "Время"))
        self.label_2.setText(_translate("MainWindow", "Выход"))
        self.groupBox_2.setTitle(_translate("MainWindow", "Тип разгоной характеристики"))
        self.rB1.setText(_translate("MainWindow", "Объект с самовыравниванием"))
        self.rB2.setText(_translate("MainWindow", "Объект без самовыравнивания"))
        self.rB3.setText(_translate("MainWindow", "Колебательный"))
        self.pushButton_2.setText(_translate("MainWindow", "Расчет коэффициентов"))


class MainWindow ( QtWidgets.QMainWindow , Ui_MainWindow ) :
    def __init__(self) :
        super ().__init__ ()
        self.setupUi ( self )
        self.fig_dict = {}
        
        self.mplfigs.itemClicked.connect(self.changefig)
        fig = Figure()
        self.addmpl(fig)
# +++  vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv      
        self.fig1 = Figure()
        self.ax1f1 = self.fig1.add_subplot(111)
        self.ax1f1.grid ( True )
        #ax1f1.plot ( x_points , y_points, 'or')

        self.fig2 = Figure()
        self.ax1f2 = self.fig2.add_subplot(111)
        self.ax1f2.grid ( True )
        #ax1f2.plot ( x_points , h ( x_points ) , 'o-r' , x , y , "b" )        
        
        self.addfig('Заданная КР', self.fig1)
        self.addfig('Аппроксимированная', self.fig2)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^         

    def samovirav(self) :
        x_points = [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 
                    10 , 11 , 12 , 13 , 14 , 15 , 16]
        y_points = [0 , 0 , 0.125 , 0.3 , 0.45 , 0.55 , 0.65 , 0.725 , 0.8 , 
                    0.85 , 0.89 , 0.91 , 0.95 , 0.96 , 0.975 ,0.985 , 1]

        self.tck = None                                                      # +++ 
        
        def h(i) :
            self.tck = interpolate.splrep (x_points, y_points )
            return interpolate.splev(i, self.tck)

        def Rosenbrock(a) :
            f = tf ( 1 , [a[0] , 1] );
            g = tf ( 1 , [a[1] , 1] );
            d = tf ( 1 , [a[2] , 1] );
            w = f * g * d
            #   %% Generating transfer function of Pade approx :
            T_delay = 1
            n_pade = 5
            (num_pade , den_pade) = control.pade ( T_delay , n_pade )
            H_pade = control.tf ( num_pade , den_pade )
            W = control.series ( H_pade , w )

            T = np.arange(0, 17, 1)
            y , x = step(W, T)

            d = (h(T) - y) ** 2;

            y_int = integrate.simps(d, T, axis=-1, even='avg')

            app.processEvents()                                                      # +++ 
            return y_int

        n = 3
        # Вектор с двумя элементами типа float
        a0 = np.zeros ( n , dtype=float )  
        # Начальная точка поиска минимума функции
        a0[0] = 1
        a0[1] = 1
        a0[2] = 1
        xtol = 1.0e-9  # Точность поиска экстремума
        # Находим минимум функции
        res = opt.minimize( 
            Rosenbrock, 
            a0, 
            method='Nelder-Mead', 
            options={'xtol': xtol, 'disp': True} 
        )

        c = (res.x)
        f = tf(1, [c[0], 1]);
        g = tf(1, [c[1], 1]);
        d = tf(1, [c[2], 1]);
        w = f * g * d
        #   %% Generating transfer function of Pade approx :
        T_delay = 1
        n_pade = 5
        (num_pade , den_pade) = control.pade(T_delay, n_pade)
        H_pade = control.tf(num_pade, den_pade)
        W = control.series(H_pade, w)

        T = np.arange(0, 17, 1)
        y, x = step(W, T)

        #plt.plot ( x_points , h( x_points ) , 'o-r' , x , y , "b" )
        #plt.grid ( True )
        #plt.show ()
        
        # верните результаты работы функции, которые вам нужны 
        return x_points, y_points, res, d, self.tck, x, y              # !!! ----->>>
        #      ^^^^^^^^  ^^^^^^^^  ^^^  ^  ^^^^^^^^  ^  ^                !!! ----->>> 

    def changefig(self, item):
        self.add_Movie()       # +++ какая-то заставка, пока идут расчеты
    
        text = item.text()
#        self.rmmpl()
#        self.addmpl(self.fig_dict[text])

      # vvvvvvvv  vvvvvvvv  vvv  v  vvv  v  v    <<<----- результаты работы функции
        x_points, y_points, res, d, tck, x, y = self.samovirav()        # !!! вызов ф. samovirav()
        #         
        print(f'x_points: vvvvvvvvvv \n{x_points}')    # Проверьте что я вернул из ф. samovirav()
        print(f'\ny_points: vvvvvvvvvv \n{y_points}')  # Уберите ненужное 
        print(f'\nres: vvvvvvvvvv \n{res}')            # чего не хватает добавьте
        print(f'\nd: vvvvvvvvvv \n{d}')                #
        print(f'\ntck: vvvvvvvvvv \n{tck}')            #
        print(f'\nx: vvvvvvvvvv \n{x}')                #
        print(f'\ny: vvvvvvvvvv \n{y}')                #

        if item.text() == 'Заданная КР':
            self.ax1f1.plot(x_points, y_points, 'or')
        elif item.text() == 'Аппроксимированная':
        
# ax1f2.plot(x_points , h(x_points) , 'o-r' , x , y , "b" ) 
# я не знаю что такое  'h(x_points)', посмотрите результаты работы функции
# которые я вернул. может оно ('h(x_points)') там есть,
# если нет, то его надо добавить.
# Поэтому график ниже мои фантазии.    
            self.ax1f2.plot(y_points, x_points, 'o-r' , x , y , "b" )

        self.rmmpl()                                                        # +++ 
        self.addmpl(self.fig_dict[text])                                    # +++ 
        self.movie.stop()                                                   # +++ 
        self.label.close()                                                  # +++ 
            
    def addfig(self, name, fig):
        self.fig_dict[name] = fig
        self.mplfigs.addItem(name)

    def addmpl(self, fig):
        self.canvas = FigureCanvas(fig)
        self.mplvl.addWidget(self.canvas)
        self.canvas.draw()
        self.toolbar = NavigationToolbar(self.canvas,
                self.mplwindow, coordinates=True)
        self.mplvl.addWidget(self.toolbar)

    def rmmpl(self,):
        self.mplvl.removeWidget(self.canvas)
        self.canvas.close()
        self.mplvl.removeWidget(self.toolbar)
        self.toolbar.close()

# +++ какая-то заставка, пока идут расчеты
    def add_Movie(self):
        self.label = QtWidgets.QLabel()
        self.label.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
        self.label.setWindowFlags(
            self.windowFlags() | 
            QtCore.Qt.FramelessWindowHint | 
            QtCore.Qt.WindowStaysOnTopHint
        )        
        self.label.setText('Ожидайте заавершения операции')
        self.movie = QtGui.QMovie('loading.gif')              # !!! установите свою гифку
        self.label.setMovie(self.movie)        
        self.movie.start()
        self.label.show()
        

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())    

введите сюда описание изображения

→ Ссылка