From: <par...@us...> - 2011-07-19 07:28:31
|
Revision: 8386 http://octave.svn.sourceforge.net/octave/?rev=8386&view=rev Author: paramaniac Date: 2011-07-19 07:28:25 +0000 (Tue, 19 Jul 2011) Log Message: ----------- control: draft code for frd models display routine Modified Paths: -------------- trunk/octave-forge/main/control/devel/@frd/display.m Added Paths: ----------- trunk/octave-forge/main/control/devel/frd_display.m Modified: trunk/octave-forge/main/control/devel/@frd/display.m =================================================================== --- trunk/octave-forge/main/control/devel/@frd/display.m 2011-07-18 22:34:37 UTC (rev 8385) +++ trunk/octave-forge/main/control/devel/@frd/display.m 2011-07-19 07:28:25 UTC (rev 8386) @@ -1,4 +1,4 @@ -## Copyright (C) 2010 Lukas F. Reichlin +## Copyright (C) 2010, 2011 Lukas F. Reichlin ## ## This file is part of LTI Syncope. ## @@ -24,6 +24,7 @@ function display (sys) + sysname = inputname (1); [inname, outname, tsam] = __lti_data__ (sys.lti); [inname, m] = __labels__ (inname, "u"); @@ -31,19 +32,76 @@ disp (""); - disp (["Frequency response """, inputname(1), """ from input "]); + for i = 1 : m + disp (["Frequency response \"", sysname, "\" from input \"", inname{i}, "\" to output ..."]); + __disp_resp__ (sys.H(:,i,:), sys.w, outname); + endfor - sys.H - sys.w - display (sys.lti); # display sampling time if (tsam == -2) disp ("Static gain."); elseif (tsam == 0) - disp ("Continuous-time model."); + disp ("Continuous-time frequency response."); else - disp ("Discrete-time model."); + disp ("Discrete-time frequency response."); endif endfunction + + +function __disp_freq__ () + +endfunction + + +function __disp_resp__ (H, w, outname) + + len = rows (w); + + % Hier kommt H, wie bei ss nur soviele Ausgänge pro Zeile anzeigen wie terminal size + % H kann auch komplex sein --> zwei Kolonnen + + H = mat2cell (H, ones (1, rows (H)), 1, len)(:); + H = cellfun (@__resp2str__, H, outname, "uniformoutput", false) + +endfunction + + +% Noch nicht in Betrieb, kann in display selbst aufgerufen werden, dann nur einmal aufrufen +% und Resultat immer wieder übergeben +function str = __freq2str__ (w, title = "w [rad/s]") + + len = rows (w); + str = __vec2str__ (w); + line = repmat ("-", 1, max (columns (str), columns (title))); + str = strvcat (title, line, str); + space = repmat (" ", len+2, 1); + str = [space, str]; + +endfunction + + +% Für Cellfun +function str = __resp2str__ (H, outname) + + len = length (H); + str = __vec2str__ (H); + line = repmat ("-", 1, max (columns (str), columns (outname))); + str = strvcat (outname, line, str); + space = repmat (" ", len+2, 1); + str = [space, str]; + % Noch für complex ergänzen +endfunction + + +function col = __vec2str__ (vec, str) + + vec = num2cell (vec(:)); + col = cellfun (@(x) sprintf ("%.4f", x), vec, "uniformoutput", false); + col = strjust (char (col), "right"); + if (nargin > 1) + col = [col, repmat(str, length (vec), 1)]; + endif + +endfunction Added: trunk/octave-forge/main/control/devel/frd_display.m =================================================================== --- trunk/octave-forge/main/control/devel/frd_display.m (rev 0) +++ trunk/octave-forge/main/control/devel/frd_display.m 2011-07-19 07:28:25 UTC (rev 8386) @@ -0,0 +1,10 @@ +page_screen_output (0) + +%sys = Boeing707; +%sys = frd (sys) + +%sys6 = frd ([1, 2; 3, 4], logspace (-1, 1, 10)) + +sys = Boeing707; +w = logspace (-1, 1, 10); +sys = frd (sys, w) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |