why margin() give positive phase & gain margin for unstable plant

7 次查看(过去 30 天)
Hello,
I m trying to write a piece of code that traces a pre-defined complex plane as a disturbance for given plant. Then I tried to check stability of each point in space by using margin() function.
However, I noticed that margin() is giving positive gain&phase margins for even unstable plants. I could not understand the reason behind it. Here is my test case;
s = tf('s');
G = 1/((s+3)*(s-2));
margin(G);
step(G);
G_cl = feedback(G,1);
step(G_cl);
I also checked closed loop tf, but it was also unstable.
  1 个评论
Ömer Faruk Arslan
Ömer Faruk Arslan 2022-1-24
编辑:Ömer Faruk Arslan 2022-1-24
In addition to this, I will be very appreciated for your advices for stability tests available with complex numbers. ( To define generic disturbance case, I am using f = a+b*1i as disturbance.)

请先登录,再进行评论。

采纳的回答

Paul
Paul 2022-1-24
I don't think margin() first verifies that the closed loop system is stable. It just applies the gain and phase criteria to the input its given. As always, one needs to (or at least should) verify that the closed loop system is stable before computing stability margins. The allmargin() function can do this, but it doesn't make a bode plot.
s = tf('s');
G = 1/((s+3)*(s-2));
allmargin(G)
ans = struct with fields:
GainMargin: [6 Inf] GMFrequency: [0 Inf] PhaseMargin: [1×0 double] PMFrequency: [1×0 double] DelayMargin: [1×0 double] DMFrequency: [1×0 double] Stable: 0
Note that the last field, 'Stable', indicates that the closed loop system is unstable, which means the GainMargin and PhaseMargin don't take on their usual meaning. Also, the GainMargin is given in absolute gain, not dB.
  4 个评论
Ömer Faruk Arslan
Ömer Faruk Arslan 2022-1-25
Exactly like that. Assume that we have plant G = 1/(s^2+4s+4) and we have f = a+b*1i; where a & b are traced in cartesian space like a =[-5:5] & b =[-2:2].
In this case we have open loop TF as "G*f" but it has complex coefficients. Most of the matlab function don't support complex numbers in stability check? ( I see that bode(G*f) can work, but I want to traced whole space, not one by one with eye check)
Paul
Paul 2022-1-25
Still would like some more clarifiication.
We have a plant G(s) with real coefficients.
We have a feedback gain, f, that is a complex, with open loop transfer function f*G(s).
Is the goal to find all of the values of f that make the closed loop transfer function H(s) = f*G(s)/(1 + f*G(s)) unstable?
Or is the goal to find the smallest (in some sense) f that makes the closed loop unstable?

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Dynamic System Models 的更多信息

产品


版本

R2015b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by