Finding intersection of rlocus branch and a line at an angle
51 次查看(过去 30 天)
显示 更早的评论
I have the same question as: How to find the intersection a root locus plot and a line with specific angle? - MATLAB Answers - MATLAB Central (mathworks.com)
but the solution posed in the answer https://www.mathworks.com/matlabcentral/answers/1442099-how-to-find-the-intersection-a-root-locus-plot-and-a-line-with-specific-angle#answer_775729 does not seem to work in my use case.
Modified code to suit my use case:
clf
s=tf('s');
GH=(s+8)/((s+6)*(s+3)*(s+10));
rlocus(GH)
% Get handle to red line
ax = gca();
curveLine = findobj(ax, 'Type','Line','Color', 'r', 'Marker','none');
% Find intersection of the angle from x-axis at
% origin (0,0)
ang = -62.87; % deg from negative x-axis into quadrant 3
xLine = [0, ax.XLim(1)];
yLine = [0, tand(-ang)*xLine(2)];
[x0,y0,~,~] = intersections(curveLine.XData, curveLine.YData, xLine, yLine);
% Plot the lines and intersection
hold(ax,'on')
plot(ax, curveLine.XData, curveLine.YData, 'k--', 'LineWidth', 2)
plot(ax, xLine, yLine, 'k--', 'LineWidth', 2)
% remove (0,0) intersection and label intersection
isNot0 = x0~=0 & y0~=0;
plot(ax, x0(isNot0), y0(isNot0), 'mo','MarkerSize', 12)
text(ax, x0(isNot0)*2, y0(isNot0), ...
sprintf('(%.3f, %.3f)',x0(isNot0), y0(isNot0)), ...
'HorizontalAlignment', 'right')
Expected results:
The correct answer for an angle: +-62.87 is
-5.415+-j10.57
The issue that I am getting is the code outputs 2 different sets of intersections instead of 1 x,y group. I suspect that this is because it has a "phantom" intersection.
Answer I got (-5.415, -2.750)(-10.569, -11.710)
Expected (-5.415, -10.569)
Bonus points for outputting K :p
0 个评论
回答(1 个)
Paul
2023-4-26
One way would be to use the output arguments from rlocus to get the closed loop pole locations and the associated gain.
Here's the root locus plot.
s=tf('s');
GH=(s+8)/((s+6)*(s+3)*(s+10));
rlocus(GH),sgrid
Get closed loop pole locations and associated gains.
[r,k] = rlocus(GH);
Compute the angles from the -x-axis of the pole locations.
angles = 180/pi*atan2(imag(r),-real(r));
At this point, I'll leave the rest to you to figure out the value of the gain k that corresponds to the desired angle. A couple of things to keep in mind. Some problems might have no value of k that satisfies the criteria and others might have more than one, so you'll have to consider all possbilities. The other is that rlocus does not gurantee (at least I don't think it does) that each column of r is a continous branch of the root locus (though I do think rlocus tries very hard to make that so). So there's a possbility that two or more columns of r can jump from one branch to another, and if that happens at the critical point where the angle is what you're looking for there will be complications.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Classical Control Design 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!