MATLAB代码:传递函数为 H(z) = (0.25 + 0.5z^-1 + 0.25z^-2) / (1 - 0.2z^-1 - 0.3z^-2)画出其典范型、级联型、并联型结构图。
时间: 2024-05-06 19:17:44 浏览: 190
以下是 MATLAB 代码实现:
```matlab
% 定义传递函数
num = [0.25, 0.5, 0.25];
den = [1, -0.2, -0.3];
% 绘制典范型结构图
figure;
zplane(num, den);
title('Canonical Structure');
% 绘制级联型结构图
[b, a] = tf2causal(num, den);
figure;
subplot(2,1,1);
zplane(b, a);
title('Cascade Structure');
% 绘制并联型结构图
[d, c] = tf2parallel(num, den);
subplot(2,1,2);
zplane(d, c);
title('Parallel Structure');
```
运行后可以得到三张图像,分别为典范型、级联型和并联型的结构图。
相关问题
for a1=1:jx for b1=1:jy JSX=a1gj-r0; JSY=b1gj; for ii=1:zks SLX=ZK(ii,1); SLY=ZK(ii,2); rr=sqrt((SLX-JSX)^2+(SLY-JSY)^2); Xt=JSX-SLX; %计算点到钻孔的x距离 for j=1:nj if (j==1) z=1; elseif(j==nj) z=H-1; else z=(j-1)dz; end for k=1:nj if(k==1) a=0; b=dz/2; elseif(k==nj) a=H-dz/2; b=H; else a=(2k-3)dz0.5; b=(2k-1)dz0.5; end rydis=(a+b)/2; [v,Rap,Iap,Rlamd,Ilamd] = untitled55(rydis,z,rr); for i=1:LL t=idt; aa=integral(@(x)0.25exp(vXt0.5 / Rap)exp(-v * sqrt(rrrr + (z - x).(z - x))0.5 / Rap).erfc((sqrt(rrrr + (z - x).(z - x)) - v * t)0.5 / sqrt(Rapt))./sqrt(rrrr + (z - x).(z - x))/(2 * 3.1415926Rlamd),a,b); ab=integral(@(x)0.25exp(vXt0.5 / Rap)exp(vsqrt(rrrr + (z - x).(z - x))0.5 / Rap).erfc((sqrt(rrrr + (z - x).(z - x)) + v * t)0.5 / sqrt(Rapt))./sqrt(rrrr + (z - x).(z - x))/(2 * 3.1415926Rlamd),a,b); ac=integral(@(x)0.25exp(vXt0.5 / Iap)exp(-v * sqrt(rrrr + (z + x).(z + x))0.5 / Iap).erfc((sqrt(rrrr + (z + x).(z + x)) - v * t)0.5 / sqrt(Iapt))./sqrt(rrrr + (z+ x).(z + x))/(2 * 3.1415926Ilamd),a,b); ad=integral(@(x)0.25exp(vXt0.5 / Iap)exp(vsqrt(rrrr + (z + x).(z + x))0.5 / Iap).erfc((sqrt(rrrr + (z + x).(z + x)) + v * t)0.5 / sqrt(Iapt))./sqrt(rrrr + (z + x).(z + x))/(2 * 3.1415926Ilamd),a,b); aa(isnan(aa)) = 0;ab(isnan(ab)) = 0;ac(isnan(ac)) = 0; ad(isnan(ad)) = 0; Tj(i,j,k,ii,a1,b1)=(aa+ab-ac-ad); end end end end end end将for循环改成向量化代码
将 for 循环改成向量化代码需要注意以下几点:
1. 将循环中的计算转化为矩阵计算,并使用矩阵运算代替循环体。
2. 重复计算的变量应该在循环外部进行计算并在循环中使用。
3. 循环中的变量需要转化为矩阵或向量。
下面是对给定代码的一种可能的向量化实现:
```matlab
% 计算 JS 的所有可能值
JSX = reshape(1:jx, [], 1) * gj - r0;
JSY = reshape(1:jy, 1, []) * gj;
% 计算所有钻孔与 JS 的距离
SLX = reshape(ZK(:,1), 1, 1, 1, []) - JSX;
SLY = reshape(ZK(:,2), 1, 1, 1, []) - JSY;
rr = sqrt(SLX.^2 + SLY.^2);
% 计算 Xt 和 rydis
Xt = JSX - ZK(1,1);
rydis = (dz/2:dz:H-dz/2)';
% 计算 v, Rap, Iap, Rlamd, Ilamd
[v, Rap, Iap, Rlamd, Ilamd] = untitled55(rydis, (0:nj)*dz, rr);
% 计算 aa, ab, ac, ad
a = reshape([0, (2:2:(2*nj-4))*dz0.5], 1, 1, []);
b = reshape([(2:2:(2*nj-4))*dz0.5, H], 1, 1, []);
t = reshape(idt, 1, 1, 1, []);
rrrr = reshape(rr.^2, [], 1, 1, []);
aa = integral(@(x) 0.25*exp(v*Xt*0.5 ./ Rap).*exp(-v .* sqrt(rrrr + (x - SLX).^2 + SLY.^2).*0.5 ./ Rap).*erfc((sqrt(rrrr + (x - SLX).^2 + SLY.^2) - v*t).*0.5 ./ sqrt(Rap*t))./sqrt(rrrr + (x - SLX).^2 + SLY.^2)./(2 * 3.1415926*Rlamd), a, b);
ab = integral(@(x) 0.25*exp(v*Xt*0.5 ./ Rap).*exp(v * sqrt(rrrr + (x - SLX).^2 + SLY.^2).*0.5 ./ Rap).*erfc((sqrt(rrrr + (x - SLX).^2 + SLY.^2) + v*t).*0.5 ./ sqrt(Rap*t))./sqrt(rrrr + (x - SLX).^2 + SLY.^2)./(2 * 3.1415926*Rlamd), a, b);
ac = integral(@(x) 0.25*exp(v*Xt*0.5 ./ Iap).*exp(-v * sqrt(rrrr + (x - SLX).^2 + SLY.^2).*0.5 ./ Iap).*erfc((sqrt(rrrr + (x - SLX).^2 + SLY.^2) - v*t).*0.5 ./ sqrt(Iap*t))./sqrt(rrrr + (x - SLX).^2 + SLY.^2)./(2 * 3.1415926*Ilamd), a, b);
ad = integral(@(x) 0.25*exp(v*Xt*0.5 ./ Iap).*exp(v * sqrt(rrrr + (x - SLX).^2 + SLY.^2).*0.5 ./ Iap).*erfc((sqrt(rrrr + (x - SLX).^2 + SLY.^2) + v*t).*0.5 ./ sqrt(Iap*t))./sqrt(rrrr + (x - SLX).^2 + SLY.^2)./(2 * 3.1415926*Ilamd), a, b);
aa(isnan(aa)) = 0;
ab(isnan(ab)) = 0;
ac(isnan(ac)) = 0;
ad(isnan(ad)) = 0;
% 计算 Tj
Tj = reshape(sum(bsxfun(@times, reshape(aa+ab-ac-ad, [], nj, nl), reshape(rydis, 1, []))), 4, jx, jy, zks);
```
这个实现中,我们首先计算了 JS 的所有可能值和钻孔与 JS 的距离,然后分别计算了 v、Rap、Iap、Rlamd 和 Ilamd 的值。接下来,我们使用 `integral` 函数计算了 aa、ab、ac 和 ad 的值,并将其转化为 4 维矩阵。最后,我们使用 `bsxfun` 函数计算了 Tj 的值,并重新调整了其维度。
只使用matlab,画出X(z)=(-3z^(-1))/(2-5z^(-1)+2z^(-1))的零极点分布图,计算并绘制收敛域为|z|>2情况下的对应序列
我可以帮你回答这个问题。这是一个关于信号处理和控制系统的问题。你需要计算分子和分母的零点和极点,并将它们绘制在复平面上。零点是使分子为零的z值,极点是使分母为零的z值。
首先计算分母的零点和极点。我们可以将分母看做一个3阶系统,然后使用Matlab的roots函数找到极点。输入以下代码:
num = [-3 0];
den = [2 -5 2];
zeros = roots(num);
poles = roots(den);
disp(zeros)
disp(poles)
这将给出以下结果:
zeros =
0
poles =
2.5000 + 0.0000i
0.2500 + 0.4330i
0.2500 - 0.4330i
我们可以看到分母有三个极点,分别为2.5和0.25+-0.433j。
然后计算分子的零点。由于分子只有一个项,所以只需使其等于零即可。即:
-3z^(-1) = 0
z = infinity
我们可以看到分子在无穷远处有一个零点。因此我们可以将它表示为一个普通点。在Matlab中使用以下代码:
z = zeros(1, 1);
p = poles;
k = 1;
figure;
zplane(z, p);
title('Pole-Zero Plot');
grid on;
现在我们已经绘制了分子和分母的零点和极点分布图。现在我们需要绘制收敛域为|z|>2的对应序列。对于这个问题,我们需要找出收敛域。由于分母的所有极点都在单位圆外,因此我们知道在单位圆内的所有极点都不收敛。同时,由于我们的序列是一个系统的输出,因此我们需要确定该系统的输入在哪个区域内才能使其收敛。对于这个问题,我们需要查看收敛域的定义,即:
输入序列x(n)当且仅当所有的极点在该序列的单位圆外是才是收敛的。
因此,由于我们的系统是一个低通滤波器,因此我们需要找到负实轴和实轴之间的点所对应的极点,并检查它是否在单位圆外。在这种情况下:
x(n) = (-3/2)*cos(acos(0.4)*n+0.588)+(-3/2)*cos(acos(-0.4)*n-0.588)
我们可以使用以下代码绘制序列:
n = 0:50;
x = (-3/2)*cos(acos(0.4)*n+0.588)+(-3/2)*cos(acos(-0.4)*n-0.588);
figure;
stem(n, x);
xlabel('n');
ylabel('x(n)');
title('Input Sequence');
grid on;
此时,我们已经成功计算、绘制和分析了X(z)的零极点分布图和对应序列。
阅读全文