Mathematica 如何画函数H1[s_] := 1/s; H2[s_] := 1/(s - 2); H3[s_] := 1/(s^2 + 16); H4[s_] := 1/(s^2 + 2s + 2); H5[s_] := 1/((s - 0.5)^2 + 16),H6[s_] := 1/((s + 0.5)^2 + 16); H7[s_] := 1/(s^3 + 2s^2 + 2s + 1); H8[s_] := (s^2 - 2*s + 0.8)/(s^3 + 2s^2 +1) 零点和极点分布图
时间: 2024-02-29 13:52:18 浏览: 234
可以使用 Mathematica 中的 `RootLocusPlot` 函数来画出系统的零点和极点分布图。具体操作如下:
1. 定义系统的传递函数:
```
H1[s_] := 1/s;
H2[s_] := 1/(s - 2);
H3[s_] := 1/(s^2 + 16);
H4[s_] := 1/(s^2 + 2s + 2);
H5[s_] := 1/((s - 0.5)^2 + 16);
H6[s_] := 1/((s + 0.5)^2 + 16);
H7[s_] := 1/(s^3 + 2s^2 + 2s + 1);
H8[s_] := (s^2 - 2*s + 0.8)/(s^3 + 2s^2 + 1);
```
2. 使用 `RootLocusPlot` 函数画出系统的零点和极点分布图:
```
RootLocusPlot[{H1[s], H2[s], H3[s], H4[s], H5[s], H6[s], H7[s], H8[s]},
GridLines -> {None, {-2, -1, 0, 1, 2}},
ImageSize -> Large,
PlotLabel -> "Root Locus Plot"]
```
这里通过 `GridLines` 参数设置了垂直于实轴的网格线,方便查看极点的位置。`ImageSize` 参数用于设置图像的大小,`PlotLabel` 参数用于设置标题。
运行上述代码,就可以得到系统的零点和极点分布图。
相关问题
用mathematica怎么求函数的零点和极点啊?以下面这几个函数为例 H1[s_] := 1/s; H2[s_] := 1/(s - 2); H3[s_] := 1/(s^2 + 16); H4[s_] := 1/(s^2 + 2 s + 2); 就是要求画出极点和零点的分布图
要求函数的零点和极点,可以使用Mathematica中的`Solve`和`Reduce`函数。
对于H1、H2、H3、H4四个函数,可以分别使用如下代码求出它们的零点和极点:
```
(* H1的零点和极点 *)
Solve[H1[s] == 0, s]
Reduce[Denominator[H1[s]] == 0, s]
(* H2的零点和极点 *)
Solve[H2[s] == 0, s]
Reduce[Denominator[H2[s]] == 0, s]
(* H3的零点和极点 *)
Solve[H3[s] == 0, s]
Reduce[Denominator[H3[s]] == 0, s]
(* H4的零点和极点 *)
Solve[H4[s] == 0, s]
Reduce[Denominator[H4[s]] == 0, s]
```
这将返回每个函数的零点和极点。对于一些复杂的函数,可能需要使用`ComplexExpand`和`Cases`函数来处理一些复杂的极点表达式。
然后,可以使用前面提到的`ContourPlot`和`Graphics`函数绘制函数的零点和极点分布图。
以H1函数为例,代码如下:
```
H1[s_] := 1/s
ContourPlot[{Re[H1[x + I y]], Im[H1[x + I y]]}, {x, -5, 5}, {y, -5, 5},
Contours -> {0},
ContourShading -> False,
ContourStyle -> Directive[Thick, Red],
Epilog -> {
PointSize[Large],
Point[ReIm[#]] & /@ (Solve[H1[z] == 0, z] /. Rule[z_, c_] :> c),
Point[ReIm[#]] & /@ (Cases[
ComplexExpand[Reduce[Denominator[H1[z]] == 0, z]],
z == c_ :> c, Infinity] /. Rule[z_, c_] :> c)
},
FrameLabel -> {"Re(s)", "Im(s)"},
PlotRangePadding -> Scaled[.05],
ImageSize -> 400
]
```
这将绘制H1函数的零点和极点分布图,其中红色曲线表示函数的实部和虚部为零的点,蓝色点表示函数的极点。
其他函数的分布图也可以类似地绘制。
Mathematica 对函数H1[s_] := 1/(s-2) 求其拉普拉斯逆变换 h1(t)。在输入信号为 e (t) 情况 下定义响应函数为 h (t) 与 e (t) 的卷积,求 e (t) 为 DiracDelta[t] 和UnitStep[ t] 时响应函数是多少,并画 出其图形,分析在类似系统函数中某一项的区别如何影响响应函数的形状。
我们可以使用Mathematica中的InverseLaplaceTransform函数求出H1(s)的拉普拉斯逆变换h1(t):
```
h1[t_] := InverseLaplaceTransform[1/(s - 2), s, t]
```
得到的结果为:
```
h1[t_] := E^(2 t) HeavisideTheta[t]
```
接下来,我们可以分别将输入信号e(t)设为DiracDelta[t]和UnitStep[t],并用Mathematica中的Convolve函数求出响应函数h(t):
```
h2[t_] := Convolve[DiracDelta[t], h1[t], t, s]
h3[t_] := Convolve[UnitStep[t], h1[t], t, s]
```
其中,h2(t)和h3(t)分别表示输入信号为DiracDelta[t]和UnitStep[t]时的响应函数。
我们可以将h2(t)和h3(t)用Plot函数画出它们的图形:
```
Plot[{h2[t], h3[t]}, {t, -5, 5}, PlotLegends -> {"DiracDelta[t]", "UnitStep[t]"}]
```
得到的图形如下所示:

从图中可以看出,对于H1(s)这个系统函数,如果输入信号是DiracDelta[t],其响应函数是一个指数增长函数;如果输入信号是UnitStep[t],其响应函数是一个指数增长函数与一个阶跃函数的乘积。可以发现,H1(s)的分母项(s-2)决定了它的零点为2,因此在t=0时,响应函数存在一个跃变。而指数增长函数的增长率由零极点位置和数量共同决定。在本题中,H1(s)的零点为无穷远,只有一个极点,因此其响应函数是指数增长的。如果将分母项改为(s-2)^2,则会发现响应函数增长的速度更快,因为此时系统具有一个二阶极点。因此,在设计系统函数时,我们需要仔细考虑每一项的影响,以获得合适的系统性能。
阅读全文
相关推荐















