From: <par...@us...> - 2012-06-09 09:29:40
|
Revision: 10610 http://octave.svn.sourceforge.net/octave/?rev=10610&view=rev Author: paramaniac Date: 2012-06-09 09:29:34 +0000 (Sat, 09 Jun 2012) Log Message: ----------- control: remove infinite poles, rename variable Modified Paths: -------------- trunk/octave-forge/main/control/inst/@lti/isstable.m trunk/octave-forge/main/control/inst/__is_stable__.m trunk/octave-forge/main/control/inst/isstabilizable.m Modified: trunk/octave-forge/main/control/inst/@lti/isstable.m =================================================================== --- trunk/octave-forge/main/control/inst/@lti/isstable.m 2012-06-09 09:02:40 UTC (rev 10609) +++ trunk/octave-forge/main/control/inst/@lti/isstable.m 2012-06-09 09:29:34 UTC (rev 10610) @@ -31,9 +31,9 @@ print_usage (); endif - eigw = pole (sys); + pol = pole (sys); ct = isct (sys); - bool = __is_stable__ (eigw, ct, tol); + bool = __is_stable__ (pol, ct, tol); -endfunction \ No newline at end of file +endfunction Modified: trunk/octave-forge/main/control/inst/__is_stable__.m =================================================================== --- trunk/octave-forge/main/control/inst/__is_stable__.m 2012-06-09 09:02:40 UTC (rev 10609) +++ trunk/octave-forge/main/control/inst/__is_stable__.m 2012-06-09 09:29:34 UTC (rev 10610) @@ -22,12 +22,12 @@ ## Created: December 2010 ## Version: 0.1 -function bool = __is_stable__ (eigw, ct = true, tol = 0) +function bool = __is_stable__ (pol, ct = true, tol = 0) if (ct) # continuous-time - bool = all (real (eigw) < -tol*(1 + abs (eigw))); + bool = all (real (pol) < -tol*(1 + abs (pol))); else # discrete-time - bool = all (abs (eigw) < 1 - tol); + bool = all (abs (pol) < 1 - tol); endif -endfunction \ No newline at end of file +endfunction Modified: trunk/octave-forge/main/control/inst/isstabilizable.m =================================================================== --- trunk/octave-forge/main/control/inst/isstabilizable.m 2012-06-09 09:02:40 UTC (rev 10609) +++ trunk/octave-forge/main/control/inst/isstabilizable.m 2012-06-09 09:29:34 UTC (rev 10610) @@ -1,4 +1,4 @@ -## Copyright (C) 2009, 2010 Lukas F. Reichlin +## Copyright (C) 2009, 2010, 2012 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -73,7 +73,7 @@ ## Author: Lukas Reichlin <luk...@gm...> ## Created: October 2009 -## Version: 0.3.1 +## Version: 0.4 function bool = isstabilizable (a, b = [], e = [], tol = [], dflg = 0) @@ -109,7 +109,7 @@ auncont = ac(uncont_idx, uncont_idx); ## calculate poles of uncontrollable part - eigw = eig (auncont); + pol = eig (auncont); else ## controllability staircase form - output matrix c has no influence [ac, ec, ~, ~, ~, ~, ncont] = sltg01hd (a, e, b, zeros (1, columns (a)), tol); @@ -120,10 +120,15 @@ euncont = ec(uncont_idx, uncont_idx); ## calculate poles of uncontrollable part - eigw = eig (auncont, euncont); + pol = eig (auncont, euncont); + + ## remove infinite poles + tolinf = norm ([auncont, euncont], 2); + idx = find (abs (pol) < tolinf/eps); + pol = pol(idx); endif ## check whether uncontrollable poles are stable - bool = __is_stable__ (eigw, ! dflg, tol); + bool = __is_stable__ (pol, ! dflg, tol); endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |