dyu(k)=sign((yout3(k)-y_1)/(u(k)-u_1+0.0000001));
时间: 2024-05-28 15:11:12 浏览: 100
这是一个MATLAB代码,其中包含一个函数dyu,该函数的输入是一个变量k,输出是一个值,其计算公式为:
dyu(k) = sign((yout3(k) - y_1) / (u(k) - u_1 + 0.0000001))
其中,yout3(k)和u(k)是在k时刻测量到的输出和输入信号,y_1和u_1是之前时刻的输出和输入信号,+0.0000001是为了避免除数为0的情况而加的一个极小值。函数的作用是计算输入信号的变化率对输出信号的影响符号。
相关问题
已知线性定常系统的传递函数为 (Y(s))/(U(s))=1/(s(s+1)(s+2)),试确定系统的状态反馈矩阵F,要求系统的极点配置在s_1=-6;s_2,3=-6±j,并绘制极点配置前后系统的状态变量图。
首先,我们需要将传递函数转化为状态空间模型。设系统的状态向量为x=[x1 x2 x3],则系统的状态空间模型为:
dx/dt = Ax + Bu
y = Cx + Du
其中,A、B、C、D分别为系统的状态矩阵、输入矩阵、输出矩阵和直接传递矩阵,它们可以通过传递函数求解得到。
传递函数可以表示为:
Y(s)/U(s) = 1/(s(s+1)(s+2))
= A/(s-s1) + B/(s-s2) + C/(s+1) + D/(s+2)
其中,s1=-6,s2=-6±j3为所要求的极点。
通过分式分解,可以求得A、B、C、D的值:
A = -1/12
B = -1/4 + j*sqrt(3)/12
C = -1/4 - j*sqrt(3)/12
D = 1/2
将A、B、C、D代入状态空间模型中,得到:
dx/dt = [[0 1 0],[-2 0 2],[-1 -3 -2]]x + [[0],[0],[1]]u
y = [1 0 0]x
为了使系统的极点配置在s1=-6;s2,3=-6±j,需要设计状态反馈矩阵F。由于A矩阵是3阶的,因此需要选择一个3维的列向量F=[f1 f2 f3],使得A-BF的特征值为所要求的极点。
根据极点配置的要求,可得:
det(sI-A+BF) = (s+6)^2*(s+6-j3)*(s+6+j3)
det([-s -1 0; 2 -s-2 -2; 1 -3 -2-s] + [f1;f2;f3]*[0 0 1]) = (s+6)^2*(s+6-j3)*(s+6+j3)
通过解方程,可以求得F的值:
F = [18 -24 -7]
将F代入状态空间模型中,得到:
dx/dt = [[0 1 0],[-2 0 2],[-1 -3 -2]]x + [[0],[0],[1]]u - [[18],[-24],[-7]]y
y = [1 0 0]x
接下来,我们可以绘制极点配置前后系统的状态变量图。这里只绘制了状态变量x1和x2。
极点配置前:
![Before Pole Placement](https://i.imgur.com/8eLvg9c.png)
极点配置后:
![After Pole Placement](https://i.imgur.com/8dYu4tq.png)
可以看到,极点配置后系统的状态响应更加快速,且没有过冲。
self.table_frame2 = tk.Frame(self.result_text2) self.table_frame2.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) table_scroll_y2 = ttk.Scrollbar(self.table_frame2, orient=tk.VERTICAL) table_scroll_y2.pack(side=tk.RIGHT, fill=tk.Y) table_scroll_x2 = ttk.Scrollbar(self.table_frame2, orient=tk.HORIZONTAL) table_scroll_x2.pack(side=tk.BOTTOM, fill=tk.X) # 显示第二个表格 header = next(self.data_sheet.iter_rows(min_row=1, max_row=1, values_only=True)) print(header) # 创建表格 table2 = ttk.Treeview(self.table_frame2, columns=header, show='headings', yscrollcommand=table_scroll_y2.set, xscrollcommand=table_scroll_x2.set) table2.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) table_scroll_y2.config(command=table2.yview) table_scroll_x2.config(command=table2.xview) # 设置表格列的标题和宽度 for col in header: table2.heading(col, text=col) table2.column(col, width=80, anchor="center") # 显示第二个表格的内容 for row in self.data_sheet.iter_rows(min_row=2, values_only=True): row_values = [str(cell) if cell is not None else "" for cell in row] if all(not bool(cell) for cell in row_values): continue table2.insert("", tk.END, values=row_values) for i in range(2): dyu = self.duibi()
这段代码展示了第二个表格,它首先创建了一个表格 Frame 和滚动条,然后读取 Excel 表格的第一行作为表格的标题,创建一个 Treeview 对象作为表格,设置表格的列标题和宽度,最后按行读取 Excel 表格的数据并插入到表格中展示出来。接下来它循环了两次调用了一个名为 `duibi()` 的函数。
阅读全文