1. ホーム
  2. matlab

[解決済み] 減衰比一定の直線と根元の軌跡との交点を求めるためのrlocfindの代替プログラム(Matlab

2022-02-14 22:46:25

質問

根軌跡が減衰比一定の直線と交差する点でのゲインを求めるには、rlocfind関数を使用できますが、ユーザが手動で点を選択し、Matlabが根軌跡上でその選択に最も近い点を見つける必要があります。手動で選択することなく、正確な交点を見つける方法はないでしょうか?

h = tf([2 5 1],[1 2 3]);
rlocus(h)         
z = 0.707; sgrid(z,0)
k = rlocfind(h)  

正しいゲイン値が1より大きい場合、rlocfindを使用せずにゲインの値を求めることはできますか?例えば、以下の伝達関数では、ゲイン値は23.4であるべきです。

h = tf(1,poly([-2 -4 -6]))
 
minfun = @(k) (0.75 - tf2dampingratio(h, k))^2;
gain = fminbnd(minfun, 0, 1)  % 0.1970

rlocus(h)         % Root locus
ylim([-3 3])
z = 0.75; sgrid(z,0)
K = rlocfind(h)

function dampingratio = tf2dampingratio(h, k)
  [num, den] = tfdata(h); 
  poles = roots(den{:} + k * num{:});
  dampingratio = cos(pi - angle(poles(1))) 
end

解決方法は?

それを直接行えるMATLABの関数を知りません。しかし、私たちのために計算を行う小さな関数を書くことができます。根軌跡とは、ある利得で負帰還をかけたときに、系の極がどのように動くかをプロットしたものであることが分かっています(MATLABの ドキュメント ). また、減衰比は極が負の実軸となす角の余弦です(図版は ウィキペディア ).

h = tf([2 5 1],[1 2 3]);
minfun = @(k) (0.707 - tf2dampingratio(h, k))^2;
gain = fminbnd(minfun, 0, 1); % 0.1970

function dampingratio = tf2dampingratio(h, k)
  [num, den] = tfdata(h);
  poles = roots(den{:} + k * num{:});
  dampingratio = cos(pi - angle(poles(1)));
end