绘制矩阵值函数G(s)=(█((2s^3+(3s)^2+2.32s+0.756)/(s^3+0.8s^2+0.45+0.32),(s+0.6)/(s+0.8)@(s+0.6)/(s+0.8),(s+0.6)/(s+0.8))),其中s=e^jw,的关于w的相位上下界的图像的matlab程序
时间: 2023-10-29 07:04:22 浏览: 37
以下是绘制矩阵值函数G(s)相位上下界的Matlab程序:
```
% 定义矩阵值函数G(s)
syms s;
G = [((2*s^3 + 3*s^2 + 2.32*s + 0.756) / (s^3 + 0.8*s^2 + 0.45*s + 0.32)), ((s+0.6)/(s+0.8)), ((s+0.6)/(s+0.8))];
% 将s替换为e^jw
syms w;
Gw = subs(G, s, exp(1j*w));
% 计算相位上下界
ph_up = angle(Gw + pi);
ph_down = angle(Gw - pi);
% 绘制相位上下界的图像
w_range = linspace(-pi, pi, 1000);
figure;
plot(w_range, ph_up, 'r', 'LineWidth', 2);
hold on;
plot(w_range, ph_down, 'b', 'LineWidth', 2);
xlabel('w');
ylabel('Phase');
title('Phase Bounds of G(s)');
legend('Upper Bound', 'Lower Bound');
grid on;
```
说明:
1. 首先定义矩阵值函数G(s)。
2. 然后将s替换为e^jw,得到G(w)。
3. 计算G(w)的相位上下界,即加上/减去π。
4. 最后绘制相位上下界的图像,其中w的范围取-π到π之间的1000个点。
相关问题
绘制矩阵值函数G(s)=(█((2s^3+(3s)^2+2.32s+0.756)/(s^3+0.8s^2+0.45+0.32) (s+0.6)/(s+0.8)@(s+0.6)/(s+0.8) , (s+0.6)/(s+0.8)))的相位上下界的图像的MATLAB程序其中s=e^jw,w∈[0,pi]
以下是MATLAB程序:
```matlab
% 定义复平面上的频率范围
w = linspace(0, pi, 1000);
% 计算G(s)的值
G = [((2*exp(1j*w).^3 + 3*exp(1j*w).^2 + 2.32*exp(1j*w) + 0.756) ./ ...
(exp(1j*w).^3 + 0.8*exp(1j*w).^2 + 0.45*exp(1j*w) + 0.32)) .* ...
((exp(1j*w) + 0.6) ./ (exp(1j*w) + 0.8)); ...
((exp(1j*w) + 0.6) ./ (exp(1j*w) + 0.8)); ...
((exp(1j*w) + 0.6) ./ (exp(1j*w) + 0.8))];
% 计算G(s)的相位
phase = angle(G);
% 绘制相位上下界图像
plot(w, unwrap(phase(:, 1)), 'r', w, unwrap(phase(:, 2)), 'b');
xlabel('频率(w)');
ylabel('相位');
title('G(s)的相位上下界图像');
legend('下界', '上界');
```
解释一下上面的代码:
首先定义了一个复平面上的频率范围 `w`,然后根据给定的公式计算了G(s)的值,接着计算G(s)的相位,并使用MATLAB内置函数 `unwrap` 对相位进行展开,最后使用MATLAB的 `plot` 函数绘制了相位的上下界图像。需要注意的是,题目中给定的频率范围是 `[0, pi]`,因此在程序中将 `w` 的范围也设置为 `[0, pi]`。
被控对象为G(s)=1000/(s^3+87.35s^2+10470s)的基于RBF神经网络的监督控制代码设计
以下是基于RBF神经网络的监督控制代码设计,用于控制被控对象G(s)=1000/(s^3+87.35s^2+10470s):
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
# Define the transfer function for the plant G(s)
def plant_tf(s):
return 1000/(s**3 + 87.35*s**2 + 10470*s)
# Define the RBF neural network function
def RBF_nn(x, c, w):
return np.sum(w*np.exp(-1*np.sum((x-c)**2,axis=1)))
# Define the control input function
def control_input(y, y_d, c, w):
e = y_d - y
x = np.array([e])
u = RBF_nn(x, c, w)
return u
# Define the function for the system dynamics
def system_dynamics(x, t, c, w):
y = x[0]
y_d = x[1]
s = x[2]
u = control_input(y, y_d, c, w)
dsdt = -s + u
dydt = s
dy_ddt = y_d
dxdt = [dydt, dy_ddt, dsdt]
return dxdt
# Define the RBF neural network training function
def RBF_nn_training(c, w, X_train, Y_train):
for i in range(len(X_train)):
x = X_train[i]
y = Y_train[i]
phi = np.exp(-1*np.sum((x-c)**2,axis=1))
delta_w = 0.01*(y - np.sum(w*phi))*phi
w = w + delta_w
return w
# Define the main function
def main():
# Define the time span and the initial conditions
t = np.linspace(0, 10, 1000)
x0 = [0, 0, 0]
# Define the RBF neural network parameters
c = np.array([[-1], [1]])
w = np.array([0, 0])
# Define the training data
X_train = np.array([[-1], [1]])
Y_train = np.array([[0], [1000]])
# Train the RBF neural network
for i in range(1000):
w = RBF_nn_training(c, w, X_train, Y_train)
# Simulate the system dynamics
x = odeint(system_dynamics, x0, t, args=(c, w))
y = x[:,0]
y_d = plant_tf(s=t)
# Plot the results
plt.plot(t, y, label='y')
plt.plot(t, y_d, label='y_d')
plt.legend()
plt.show()
if __name__ == '__main__':
main()
```
解释如下:
1. 定义了被控对象的传递函数 `plant_tf(s)`,用于计算参考输出值 `y_d`。
2. 定义了 RBF 神经网络函数 `RBF_nn(x, c, w)`,其中 `x` 是输入向量,`c` 是中心向量,`w` 是权重向量。该函数用于计算控制输入值 `u`。
3. 定义了控制输入函数 `control_input(y, y_d, c, w)`,其中 `y` 是当前输出值,`y_d` 是参考输出值,`c` 和 `w` 是 RBF 神经网络参数。该函数用于计算控制输入值 `u`。
4. 定义了系统动力学函数 `system_dynamics(x, t, c, w)`,其中 `x` 是状态向量,`t` 是时间向量,`c` 和 `w` 是 RBF 神经网络参数。该函数用于计算状态向量的导数。
5. 定义了 RBF 神经网络训练函数 `RBF_nn_training(c, w, X_train, Y_train)`,其中 `c` 和 `w` 是初始的 RBF 神经网络参数,`X_train` 和 `Y_train` 是训练数据。该函数用于训练 RBF 神经网络参数。
6. 定义了主函数 `main()`,其中定义了时间向量 `t` 和初始状态向量 `x0`,然后定义了 RBF 神经网络参数 `c` 和 `w`,以及训练数据 `X_train` 和 `Y_train`。接着,使用训练数据训练 RBF 神经网络参数,并通过解微分方程模拟系统动力学。最后,绘制输出结果图像。
这份代码可以帮助你实现基于 RBF 神经网络的监督控制,并对被控对象进行控制。