我需要将根绘制到覆盖单位圆的传递函数H(z)上,给出足够的空间来查看所有点。当它以zeros = [z0 z1 z2 ...],pole = [p0 p1 p2]的形式给出时,我能够从H(z)得到根。使用Matlab的根函数,我能够获得极点和零点位置。到目前为止,我的Matlab代码是
function zplot(b, a)
b_roots = roots(b);
a_roots = roots(a);
hold on
rectangle('Position',[-1 -1 2 2],'Curvature',[1 1]);
plot(b_roots,'x blue');
plot(a_roots,'o blue');
axis %need axis to be equal and +10percent of maximum value
hold off
end
到目前为止,我可以绘制根和单位圆,但我需要帮助调整轴,使它们彼此相等并且2)比最高值多10%。我不知道如何去做这个部分。我尝试制作变量lim_max = max(b_roots,a_roots),但它最终成为一个数组,并且不能在轴([ - lim_max lim_max -lim_max lim_max])函数中起作用。我需要在输入变化时将绘图缩放到+ 10%。
旁注(不是必需的):当我绘制它时,有没有办法让它看起来像一个圆圈,因为现在它最终看起来像椭圆形。我可以重新调整屏幕,这很好,但如果有一个简单的方法,我也想知道。
答案 0 :(得分:1)
设置axis equal
并计算最小值/最大值:
function zplot(b, a)
b_roots = roots(b);
a_roots = roots(a);
xlimits = [min(min([real(a_roots);real(b_roots)])), max(max([real(a_roots);real(b_roots)]))];
ylimits = [min(min([imag(a_roots);imag(b_roots)])), max(max([imag(a_roots);imag(b_roots)]))];
hold on
rectangle('Position',[-1 -1 2 2],'Curvature',[1 1]);
plot(b_roots,'x black');
plot(a_roots,'o blue');
axis equal;
xlim(1.1*xlimits);
ylim(1.1*ylimits);
hold off
end
答案 1 :(得分:0)
使用以下代码。这将1)找到x和y轴的最大总体限制2)设置这些限制彼此相等3)绘制这些限制+ 10%
b_roots = roots(b);
a_roots = roots(a);
x_min = min(min([real(a_roots);real(b_roots)]));
x_max = max(max([real(a_roots);real(b_roots)]));
y_min = min(min([imag(a_roots);imag(b_roots)]));
y_max = max(max([imag(a_roots);imag(b_roots)]));
%get the magnitude of the overall minimum value
min_lim = abs(min(x_min,y_min));
%abs may not be necessary
max_lim = abs(max(x_max,y_max));
%set high and low limits equal to each other from negative to positive
eq_limit = [-max(min_lim,max_lim),max(min_lim,max_lim)];
hold on
rectangle('Position',[-1 -1 2 2],'Curvature',[1 1]);
plot(b_roots,'x black');
plot(a_roots,'o blue');
axis equal;
xlim(1.1*eq_limit);
ylim(1.1*eq_limit);
hold off
感谢@ M.S。他们的回答和帮助。