有幸学习了控制的基础课程《线性系统》,自己才疏学浅学的很差,中间还走了很多的弯路,在查找资料的时候没有找到很好的中文学习资料,对于老师布置的作业有一点点自己感悟(实际上也不知道对与错,更新在这里跟大家交流)
第一次作业
题目
举例说明
1.初始状态会影响系统的输出
2.线性系统的输出由零输入响应和零状态响应组成
解答的思路
对于第一个问题和第二个问题的举例,我们采用的例子都是RC电路充放电模型,对于问题1采用两个初始状态不同的RC零状态响应,对比系统的输出来说明初始状态会影响系统的输出。对于问题2,我将某RC电路的零输入响应和零状态响应与全响应的输出进行了对比,验证了结论线性系统的输出由零输入响应和零状态响应组成。我在同一个Simulink文件中完成了这两个方面的验证。
系统的描述
| 图1 RC电路原理图 |
|–|–|
如图1所示电路包括直流电源和开关和电阻R和电容C串联相连,其中电源两端的电压大小为 U s ( t ) U_s(t) Us(t),电容两端的电压大小是 U c ( t ) U_c(t) Uc(t),电路中电流的大小是 I ( t ) I(t) I(t),已知 U c ( 0 ) = U o U_c(0)=U_o Uc(0)=Uo, t = 0 t=0 t=0的时候开关闭合。
零状态响应就是当
U
c
(
0
)
=
0
U_c(0)=0
Uc(0)=0,即初始电容未充电的情况下电路的响应。
零输入响应是
U
s
(
t
)
=
0
U_s(t)=0
Us(t)=0,即没有输入情况下电路的响应。
全响应就是
U
c
(
0
)
≠
0
&
U
s
(
t
)
≠
0
U_c(0)\neq0\&U_s(t)\neq0
Uc(0)=0&Us(t)=0 ,即初始电容充电且有输入的情况下电路的响应。
由电容的性质和基尔霍夫定理我们可以得到
R
C
d
U
c
d
t
+
U
c
=
U
s
RC\frac{{d{U_c}}}{{dt}} + {U_c} = {U_s}
RCdtdUc+Uc=Us
可以得到状态方程
U
c
∙
=
−
1
R
C
U
c
+
1
R
C
U
s
\mathop {{U_c}}\limits^ \bullet = - \frac{1}{{RC}}{U_c} + \frac{1}{{RC}}{U_s}
Uc∙=−RC1Uc+RC1Us
零输入响应 U s ( t ) = 0 {U_s}(t) = 0 Us(t)=0 ,解微分方程可以得到:
微分方程为:
R
C
d
U
c
d
t
+
U
c
=
0
RC\frac{{d{U_c}}}{{dt}} + {U_c} = 0
RCdtdUc+Uc=0
d
U
c
d
t
=
−
U
c
R
C
\frac{{d{U_c}}}{{dt}} = - \frac{{{U_c}}}{{RC}}
dtdUc=−RCUc
两边积分
∫
U
c
′
U
c
d
t
=
∫
−
1
R
C
d
t
\int {\frac{{{U_c}^\prime }}{{{U_c}}}} dt{\rm{ = }}\int {{\rm{ - }}\frac{{\rm{1}}}{{RC}}} dt
∫UcUc′dt=∫−RC1dt
ln
U
c
=
−
1
R
C
t
+
c
1
\ln {U_c} = - \frac{1}{{RC}}t + {c_1}
lnUc=−RC1t+c1
U
c
=
c
2
e
−
1
R
C
t
{U_c} = {c_2}{e^{ - \frac{1}{{RC}}t}}
Uc=c2e−RC1t
将初值
U
c
(
0
)
{U_c}(0)
Uc(0)代入,得到
U
c
=
U
c
(
0
)
e
−
1
R
C
t
{U_c} = {U_c}(0){e^{ - \frac{1}{{RC}}t}}
Uc=Uc(0)e−RC1t
零状态响应
U
c
(
0
)
=
0
{U_c}(0) = 0
Uc(0)=0,解微分方程:
U
c
=
U
s
−
U
s
e
−
t
R
C
{U_c} = {U_s} - {U_s}{e^{ - \frac{t}{{RC}}}}
Uc=Us−Use−RCt
全响应
U
c
=
U
s
+
(
U
c
(
0
)
−
U
s
)
e
−
1
R
C
t
{U_c} = {U_s} + ({U_c}(0) - {U_s}){e^{ - \frac{1}{{RC}}t}}
Uc=Us+(Uc(0)−Us)e−RC1t
从公式上,很容易验证不同的初始状态会有不同的响应,全响应是零状态响应和零输入响应的叠加。
计算
对于第一个问题,使用两个不同状态的零输入响应来验证初始状态影响系统的输出。取零输入
U
s
=
0
V
&
U
c
(
0
)
=
3
V
&
R
=
10000
Ω
&
C
=
1
0
−
6
F
{U_s} = 0V\& {U_c}(0) = 3V\& R = 10000\Omega \& C = {10^{ - 6}}F
Us=0V&Uc(0)=3V&R=10000Ω&C=10−6F 和
U
s
=
0
&
U
c
(
0
)
=
8
V
&
R
=
10000
Ω
&
C
=
1
0
−
6
F
{U_s} = 0\& {U_c}(0) = 8V\& R = 10000\Omega \& C = {10^{ - 6}}F
Us=0&Uc(0)=8V&R=10000Ω&C=10−6F进行对比,带入上面的公式可以得到
U
c
1
=
8
e
−
100
t
{U_{c1}} = 8{e^{ - 100t}}
Uc1=8e−100t
U
c
2
=
3
e
−
100
t
{U_{c2}} = 3{e^{ - 100t}}
Uc2=3e−100t
使用MATLAB可以画图得到:
| 图2 计算结果零输入响应不同的初始状态对比图 |
|–|–|
从图2中可以看出不同的初始状态系统的输出是不同的,验证了第一个问题。
仿真验证
在MATLAB的simulink里仿真,电路图如图3:
| 图3 模块仿真电路图 |
|–|–|
将上述电路封装成模块,给定不同的条件(本文中叙述的四种RC电路条件),在0s时给开关输入一个阶跃信号,即开关闭合,在电压和电流输出处接上示波器即可以观测电路输出信号
U
c
{U_c}
Uc的变化。整个电路图的设计如下图所示:
| 图4 完整的仿真图 |
|–|–|
将如图的RC电路封装成一个模块,给定取零输入
U
s
=
0
V
&
U
c
(
0
)
=
3
V
&
R
=
10000
Ω
&
C
=
1
0
−
6
F
{U_s} = 0V\& {U_c}(0) = 3V\& R = 10000\Omega \& C = {10^{ - 6}}F
Us=0V&Uc(0)=3V&R=10000Ω&C=10−6F和
U
s
=
0
&
U
c
(
0
)
=
8
V
&
R
=
10000
Ω
&
C
=
1
0
−
6
F
{U_s} = 0\& {U_c}(0) = 8V\& R = 10000\Omega \& C = {10^{ - 6}}F
Us=0&Uc(0)=8V&R=10000Ω&C=10−6F 可以得到仿真的结果如下:
| 图5 仿真结果零输入响应不同的初始状态对比图 |
|–|–|
对于第二个问题,使用一个零输入响应、一个零状态响应和一个全响应来验证线性系统的输出由零输入响应和零状态响应组成。
取零输入响应
U
s
=
0
V
&
U
c
(
0
)
=
3
V
&
R
=
10000
Ω
&
C
=
1
0
−
6
F
{U_s} = 0V\& {U_c}(0) = 3V\& R = 10000\Omega \& C = {10^{ - 6}}F
Us=0V&Uc(0)=3V&R=10000Ω&C=10−6F和零状态响应
U
s
=
10
V
&
U
c
(
0
)
=
0
V
&
R
=
10000
Ω
&
C
=
1
0
−
6
F
{U_s} = 10V\& {U_c}(0) = 0V\& R = 10000\Omega \& C = {10^{ - 6}}F
Us=10V&Uc(0)=0V&R=10000Ω&C=10−6F和全响应
U
s
=
10
V
&
U
c
(
0
)
=
3
V
&
R
=
10000
Ω
&
C
=
1
0
−
6
F
{U_s} = 10V\& {U_c}(0) = 3V\& R = 10000\Omega \& C = {10^{ - 6}}F
Us=10V&Uc(0)=3V&R=10000Ω&C=10−6F
可以得到
U
c
3
=
3
−
3
e
−
100
t
{U_{c3}} = {\rm{3}} - 3{e^{ - 100t}}
Uc3=3−3e−100t
U
c
4
=
10
−
10
e
−
100
t
{U_{c4}} = 10 - 10{e^{ - 100t}}
Uc4=10−10e−100t
U
c
5
=
10
−
7
e
−
100
t
{U_{c5}} = 10 - 7{e^{ - 100t}}
Uc5=10−7e−100t
使用MATLAB画图可以得到:
| 图6 计算结果零输入响应、零状态响应和全响应结果对比图 |
|–|–|
其中○表示的是零输入响应,虚线表示的是零状态响应,实线表示的是全响应观察计算结果的画图可以验证全响应是零状态响应和零输入响应的叠加。
仿真结果
U
c
{U_c}
Uc的示波器图:
| 图7 仿真结果零输入响应、零状态响应和全响应结果对比图 |
|–|–|
其中○表示的是零输入响应,虚线表示的是零状态响应,实线表示的是全响应。很容易从图中看出,全响应是零输入响应和零状态响应叠加的结果。
附录
计算结果画图的代码:
计算结果画图的代码:
计算结果画图的代码:
figure
x=linspace(0,0.1,100);
plot(x,8exp(-100x),‘b-.’,x,3exp(-100x),‘r’)
xlabel(‘t/s’)
ylabel(‘U_c/V’)
legend(‘U_c(0)=8V’,‘U_c(0)=3V’);
title(‘零输入响应不同状态的输出结果对比’);
figure
x=linspace(0,0.1,50);
plot(x,10-10exp(-100x),‘b-.’,x,3exp(-100x),‘-or’,x,10-7exp(-100x))
xlabel(‘t/s’)
ylabel(‘U_c/V’)
legend(‘U_s=10V,U_c(0)=0V’,‘U_s=0V U_c(0)=3V’,‘U_s=10V U_c(0)=3V’);
title(‘零输入响应 零状态响应和全响应的输出结果对比’);