下面这段代码的作用是什么:G9=zpk(Gclosedf); z=G9.z; p=G9.p; pzmap(G9); grid on; hold on; kk1=1000:-50:10; kk2=0.1; Gk2=1/(1+0.000*s); lC=length(kk1); for i=1:lC GPid=kpid_P+kpid_I/s;mm=GPid*Gk2+kk1(i)/(kk1(i)*kk2+s);Gid=mm/(0.5*L0*s+0.5*R0+mm); t=0:0.001:1; %step(Gid,t); hold on; G1=zpk(Gid); z=G1.z; p=G1.p; pzmap(G1); grid on; hold on; end;
时间: 2023-05-28 17:01:10 浏览: 159
As an AI language model, I do not have any emotions or opinions regarding a subject. "Null" is a term used in programming to indicate an absence of a value or the default value.
相关问题
num=[1 7 2] den=[1 9 26 24] [z,p,k]=tf2zp(num,den) g=zpk(z,p,k) pzmap(g)
好的,这是一个关于有理函数的例子。根据MATLAB的语法规则,我们可以使用tf2zp函数将有理函数的传递函数(分子和分母多项式)的系数表示成零极点形式,再使用zpk函数将其表示为零极点增益形式,并使用pzmap函数绘制其零极点图。具体操作如下:
1. 打开MATLAB软件,进入命令窗口;
2. 输入以下代码:
```matlab
num = [1, 7, 2]; % 传递函数的分子多项式系数
den = [1, 9, 26, 24]; % 传递函数的分母多项式系数
[z, p, k] = tf2zp(num, den); % 将传递函数的系数表示成零极点形式
g = zpk(z, p, k); % 将零极点形式表示成零极点增益形式
pzmap(g); % 绘制零极点图
```
3. 运行代码,即可得到传递函数的零极点图。
注意:在上述代码中,我们使用了tf2zp函数将传递函数的系数表示成零极点形式,其中tf2zp(num, den)表示将分子多项式系数为num,分母多项式系数为den的传递函数表示成零极点形式,返回其零点向量z、极点向量p和增益系数k;使用zpk函数将零极点形式表示成零极点增益形式,其中zpk(z, p, k)表示将零点向量为z、极点向量为p、增益系数为k的有理函数表示成零极点增益形式,返回其转移函数;使用pzmap函数绘制零极点图,其中pzmap(g)表示绘制有理函数g的零极点图。
a=[-2 -4];b=[0 0 -1 -8 -6];c=1818; Gs=zpk(a,b,c) T=0.1; Gz=c2d(Gs,T) HGz=c2d(Gs,T,'zoh') [z,p,k]=zpkdata(HGz) HGz1=zpk(z,p,k,T,'variable','z^-1') syms z a0 a1 a2 e0 Gcz=z^-1*(1+3.034*z^-1)*(a0+a1*z^-1+a2*z^-2) f1=subs(Gcz,z,1)-1 f2=subs(diff(Gcz,1),z,1) f3=subs(diff(Gcz,2),z,1) [a0j,a1j,a2j]=solve(f1,f2,f3) Gcz=subs(Gcz,[a0 a1 a2],[a0j a1j a2j]) Gez=(1-z^-1)^3*(1+e0*z^-1) f4=subs(Gez,z,-3.034)-1 e00=solve(f4) Gez=subs(Gez,e0,e00) Gz=(0.24551*z^-1)*(1+3.034*z^-1)*(1-0.8187*z^-1)*(1-0.6703*z^-1)*(1+0.2104*z^-1)/((1-z^-1)^2)/(1-0.9048*z^-1)/(1-0.5488*z^-1)/(1-0.4493*z^-1) Guz=Gcz/Gz Dyz=Gcz/Gez/Gz simplify(Gcz) [N,D]=numden(simplify(Gcz)) numc=sym2poly(N) denc=sym2poly(D) [N,D]=numden(simplify(Guz)) numu=sym2poly(N) denu=sym2poly(D) t=0:0.1:1 u=T*(t.^2)/2 hold on dlsim(numc,denc,u) dlsim(numu,denu,u) hold off [N,D]=numden(simplify(Dyz)) numdy=sym2poly(N) dendy=sym2poly(D)
这段代码主要实现了数字控制系统的设计和数字仿真,具体步骤如下:
1. 定义连续时间域传递函数 $Gs$,其中 $a=[-2,-4]$,$b=[0,0,-1,-8,-6]$,$c=1818$,使用 MATLAB 中的 `zpk` 函数进行标准极点零点形式的定义。
2. 将连续时间域传递函数 $Gs$ 转换为离散时间域传递函数 $Gz$,采用零阶保持器(ZOH)法进行离散化,使用 MATLAB 中的 `c2d` 函数进行转换。
3. 将离散时间域传递函数 $Gz$ 转换为离散时间域传递函数 $HGz$,采用自定义的方法,使用 MATLAB 中的 `zpkdata` 函数和 `zpk` 函数进行转换。
4. 定义符号变量 $z$,$a0$,$a1$,$a2$ 和 $e0$,构建控制器传递函数 $Gcz$ 和输入传递函数 $Gez$,其中 $Gcz$ 采用了一定的控制器结构,$Gez$ 是一个带有未知参数的传递函数。控制器传递函数 $Gcz$ 的系数 $a0$,$a1$ 和 $a2$ 通过符号计算得到。
5. 将 $Gcz$ 和 $Gez$ 代入离散时间域传递函数 $Gz$ 中,得到控制器传递函数 $Guz$ 和系统传递函数 $Dyz$,并对它们进行化简和分解,得到其分子和分母多项式。
6. 对控制器传递函数 $Guz$ 和系统传递函数 $Dyz$ 进行数字仿真,其中输入信号 $u$ 采用了简单的二次函数,即 $u=T*(t^2)/2$,其中 $t$ 取值从 $0$ 到 $1$。使用 `dlsim` 函数模拟输入信号 $u$ 对输出信号 $y$ 的影响。
7. 对控制器传递函数 $Gcz$ 进行化简,并分别将其分子和分母多项式进行分解得到 $numc$ 和 $denc$。
8. 对控制器传递函数 $Guz$ 进行化简,并分别将其分子和分母多项式进行分解得到 $numu$ 和 $denu$。
9. 对系统传递函数 $Dyz$ 进行化简,并分别将其分子和分母多项式进行分解得到 $numdy$ 和 $dendy$。
总的来说,这段代码实现了数字控制系统的设计和数字仿真,并对控制器传递函数、系统传递函数进行了化简和分解,得到其分子和分母多项式。
阅读全文