You can subscribe to this list here.
2001 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}
(10) 
_{Aug}
(5) 
_{Sep}
(3) 
_{Oct}
(41) 
_{Nov}
(41) 
_{Dec}
(33) 

2002 
_{Jan}
(75) 
_{Feb}
(10) 
_{Mar}
(170) 
_{Apr}
(174) 
_{May}
(66) 
_{Jun}
(11) 
_{Jul}
(10) 
_{Aug}
(44) 
_{Sep}
(73) 
_{Oct}
(28) 
_{Nov}
(139) 
_{Dec}
(52) 
2003 
_{Jan}
(35) 
_{Feb}
(93) 
_{Mar}
(62) 
_{Apr}
(10) 
_{May}
(55) 
_{Jun}
(70) 
_{Jul}
(37) 
_{Aug}
(16) 
_{Sep}
(56) 
_{Oct}
(31) 
_{Nov}
(57) 
_{Dec}
(83) 
2004 
_{Jan}
(85) 
_{Feb}
(67) 
_{Mar}
(27) 
_{Apr}
(37) 
_{May}
(75) 
_{Jun}
(85) 
_{Jul}
(160) 
_{Aug}
(68) 
_{Sep}
(104) 
_{Oct}
(25) 
_{Nov}
(39) 
_{Dec}
(23) 
2005 
_{Jan}
(10) 
_{Feb}
(45) 
_{Mar}
(43) 
_{Apr}
(19) 
_{May}
(108) 
_{Jun}
(31) 
_{Jul}
(41) 
_{Aug}
(23) 
_{Sep}
(65) 
_{Oct}
(58) 
_{Nov}
(44) 
_{Dec}
(54) 
2006 
_{Jan}
(96) 
_{Feb}
(27) 
_{Mar}
(69) 
_{Apr}
(59) 
_{May}
(67) 
_{Jun}
(35) 
_{Jul}
(13) 
_{Aug}
(461) 
_{Sep}
(160) 
_{Oct}
(399) 
_{Nov}
(32) 
_{Dec}
(72) 
2007 
_{Jan}
(316) 
_{Feb}
(305) 
_{Mar}
(318) 
_{Apr}
(54) 
_{May}
(194) 
_{Jun}
(173) 
_{Jul}
(282) 
_{Aug}
(91) 
_{Sep}
(227) 
_{Oct}
(365) 
_{Nov}
(168) 
_{Dec}
(18) 
2008 
_{Jan}
(71) 
_{Feb}
(111) 
_{Mar}
(155) 
_{Apr}
(173) 
_{May}
(70) 
_{Jun}
(67) 
_{Jul}
(55) 
_{Aug}
(83) 
_{Sep}
(32) 
_{Oct}
(68) 
_{Nov}
(80) 
_{Dec}
(29) 
2009 
_{Jan}
(46) 
_{Feb}
(18) 
_{Mar}
(95) 
_{Apr}
(76) 
_{May}
(140) 
_{Jun}
(98) 
_{Jul}
(84) 
_{Aug}
(123) 
_{Sep}
(94) 
_{Oct}
(131) 
_{Nov}
(142) 
_{Dec}
(125) 
2010 
_{Jan}
(128) 
_{Feb}
(158) 
_{Mar}
(172) 
_{Apr}
(134) 
_{May}
(94) 
_{Jun}
(84) 
_{Jul}
(32) 
_{Aug}
(127) 
_{Sep}
(167) 
_{Oct}
(109) 
_{Nov}
(69) 
_{Dec}
(78) 
2011 
_{Jan}
(39) 
_{Feb}
(58) 
_{Mar}
(52) 
_{Apr}
(47) 
_{May}
(56) 
_{Jun}
(76) 
_{Jul}
(55) 
_{Aug}
(54) 
_{Sep}
(165) 
_{Oct}
(255) 
_{Nov}
(328) 
_{Dec}
(263) 
2012 
_{Jan}
(82) 
_{Feb}
(147) 
_{Mar}
(400) 
_{Apr}
(216) 
_{May}
(209) 
_{Jun}
(160) 
_{Jul}
(86) 
_{Aug}
(141) 
_{Sep}
(156) 
_{Oct}
(6) 
_{Nov}

_{Dec}

S  M  T  W  T  F  S 







1
(5) 
2
(4) 
3
(13) 
4
(5) 
5
(10) 
6
(18) 
7
(9) 
8
(2) 
9
(11) 
10
(3) 
11
(4) 
12
(3) 
13
(11) 
14
(3) 
15
(3) 
16
(6) 
17
(12) 
18
(15) 
19
(11) 
20
(5) 
21
(42) 
22
(3) 
23
(1) 
24
(7) 
25
(9) 
26
(6) 
27
(21) 
28

29

30

31
(13) 





From: <paramaniac@us...>  20111015 19:22:31

Revision: 8751 http://octave.svn.sourceforge.net/octave/?rev=8751&view=rev Author: paramaniac Date: 20111015 19:22:25 +0000 (Sat, 15 Oct 2011) Log Message:  control: set ignore property *.oct Property Changed:  trunk/octaveforge/extra/controldevel/src/ Property changes on: trunk/octaveforge/extra/controldevel/src ___________________________________________________________________ Added: svn:ignore + *.oct This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. 
From: <paramaniac@us...>  20111015 19:04:24

Revision: 8750 http://octave.svn.sourceforge.net/octave/?rev=8750&view=rev Author: paramaniac Date: 20111015 19:04:14 +0000 (Sat, 15 Oct 2011) Log Message:  control: move identification and reduction draft code to extra/controldevel which serves as a developer's playground Added Paths:  trunk/octaveforge/extra/controldevel/ trunk/octaveforge/extra/controldevel/COPYING trunk/octaveforge/extra/controldevel/INFO trunk/octaveforge/extra/controldevel/Makefile trunk/octaveforge/extra/controldevel/devel/ trunk/octaveforge/extra/controldevel/devel/makefile_slconred.m trunk/octaveforge/extra/controldevel/devel/makefile_slmodred.m trunk/octaveforge/extra/controldevel/devel/test_ab09jd.m trunk/octaveforge/extra/controldevel/doc/ trunk/octaveforge/extra/controldevel/inst/ trunk/octaveforge/extra/controldevel/inst/@iddata/ trunk/octaveforge/extra/controldevel/inst/__iddata_dim__.m trunk/octaveforge/extra/controldevel/src/ trunk/octaveforge/extra/controldevel/src/AB04MD.f trunk/octaveforge/extra/controldevel/src/AB05PD.f trunk/octaveforge/extra/controldevel/src/AB05QD.f trunk/octaveforge/extra/controldevel/src/AB07MD.f trunk/octaveforge/extra/controldevel/src/AB07ND.f trunk/octaveforge/extra/controldevel/src/AB08MD.f trunk/octaveforge/extra/controldevel/src/AB08NX.f trunk/octaveforge/extra/controldevel/src/AB09AD.f trunk/octaveforge/extra/controldevel/src/AB09AX.f trunk/octaveforge/extra/controldevel/src/AB09BD.f trunk/octaveforge/extra/controldevel/src/AB09BX.f trunk/octaveforge/extra/controldevel/src/AB09CX.f trunk/octaveforge/extra/controldevel/src/AB09DD.f trunk/octaveforge/extra/controldevel/src/AB09HD.f trunk/octaveforge/extra/controldevel/src/AB09HY.f trunk/octaveforge/extra/controldevel/src/AB09ID.f trunk/octaveforge/extra/controldevel/src/AB09IX.f trunk/octaveforge/extra/controldevel/src/AB09IY.f trunk/octaveforge/extra/controldevel/src/AB09JD.f trunk/octaveforge/extra/controldevel/src/AB09JV.f trunk/octaveforge/extra/controldevel/src/AB09JW.f trunk/octaveforge/extra/controldevel/src/AB09JX.f trunk/octaveforge/extra/controldevel/src/AG07BD.f trunk/octaveforge/extra/controldevel/src/MA02AD.f trunk/octaveforge/extra/controldevel/src/MA02BD.f trunk/octaveforge/extra/controldevel/src/MA02DD.f trunk/octaveforge/extra/controldevel/src/MA02GD.f trunk/octaveforge/extra/controldevel/src/MB01PD.f trunk/octaveforge/extra/controldevel/src/MB01QD.f trunk/octaveforge/extra/controldevel/src/MB01SD.f trunk/octaveforge/extra/controldevel/src/MB01WD.f trunk/octaveforge/extra/controldevel/src/MB01YD.f trunk/octaveforge/extra/controldevel/src/MB01ZD.f trunk/octaveforge/extra/controldevel/src/MB02UD.f trunk/octaveforge/extra/controldevel/src/MB03OY.f trunk/octaveforge/extra/controldevel/src/MB03PY.f trunk/octaveforge/extra/controldevel/src/MB03QD.f trunk/octaveforge/extra/controldevel/src/MB03QX.f trunk/octaveforge/extra/controldevel/src/MB03QY.f trunk/octaveforge/extra/controldevel/src/MB03UD.f trunk/octaveforge/extra/controldevel/src/MB04ND.f trunk/octaveforge/extra/controldevel/src/MB04NY.f trunk/octaveforge/extra/controldevel/src/MB04OD.f trunk/octaveforge/extra/controldevel/src/MB04OX.f trunk/octaveforge/extra/controldevel/src/MB04OY.f trunk/octaveforge/extra/controldevel/src/SB01FY.f trunk/octaveforge/extra/controldevel/src/SB02MD.f trunk/octaveforge/extra/controldevel/src/SB02MR.f trunk/octaveforge/extra/controldevel/src/SB02MS.f trunk/octaveforge/extra/controldevel/src/SB02MU.f trunk/octaveforge/extra/controldevel/src/SB02MV.f trunk/octaveforge/extra/controldevel/src/SB02MW.f trunk/octaveforge/extra/controldevel/src/SB03OD.f trunk/octaveforge/extra/controldevel/src/SB03OR.f trunk/octaveforge/extra/controldevel/src/SB03OT.f trunk/octaveforge/extra/controldevel/src/SB03OU.f trunk/octaveforge/extra/controldevel/src/SB03OV.f trunk/octaveforge/extra/controldevel/src/SB03OY.f trunk/octaveforge/extra/controldevel/src/SB04PX.f trunk/octaveforge/extra/controldevel/src/SB04PY.f trunk/octaveforge/extra/controldevel/src/SB08CD.f trunk/octaveforge/extra/controldevel/src/SB08DD.f trunk/octaveforge/extra/controldevel/src/SB08GD.f trunk/octaveforge/extra/controldevel/src/SB08HD.f trunk/octaveforge/extra/controldevel/src/SB16AD.f trunk/octaveforge/extra/controldevel/src/SB16AY.f trunk/octaveforge/extra/controldevel/src/SB16BD.f trunk/octaveforge/extra/controldevel/src/SB16CD.f trunk/octaveforge/extra/controldevel/src/SB16CY.f trunk/octaveforge/extra/controldevel/src/TB01ID.f trunk/octaveforge/extra/controldevel/src/TB01KD.f trunk/octaveforge/extra/controldevel/src/TB01LD.f trunk/octaveforge/extra/controldevel/src/TB01PD.f trunk/octaveforge/extra/controldevel/src/TB01UD.f trunk/octaveforge/extra/controldevel/src/TB01WD.f trunk/octaveforge/extra/controldevel/src/TB01XD.f trunk/octaveforge/extra/controldevel/src/common.cc trunk/octaveforge/extra/controldevel/src/delctg.f trunk/octaveforge/extra/controldevel/src/select.f trunk/octaveforge/extra/controldevel/src/slab09jd.cc Removed Paths:  trunk/octaveforge/main/control/devel/@iddata/ trunk/octaveforge/main/control/devel/__iddata_dim__.m trunk/octaveforge/main/control/devel/slred/slconred/AB05PD.f trunk/octaveforge/main/control/devel/slred/slconred/AB05QD.f trunk/octaveforge/main/control/devel/slred/slconred/AB07ND.f trunk/octaveforge/main/control/devel/slred/slconred/AB09AD.f trunk/octaveforge/main/control/devel/slred/slconred/AB09AX.f trunk/octaveforge/main/control/devel/slred/slconred/AB09BD.f trunk/octaveforge/main/control/devel/slred/slconred/AB09BX.f trunk/octaveforge/main/control/devel/slred/slconred/AB09DD.f trunk/octaveforge/main/control/devel/slred/slconred/AB09IX.f trunk/octaveforge/main/control/devel/slred/slconred/MA02AD.f trunk/octaveforge/main/control/devel/slred/slconred/MA02DD.f trunk/octaveforge/main/control/devel/slred/slconred/MA02GD.f trunk/octaveforge/main/control/devel/slred/slconred/MB01SD.f trunk/octaveforge/main/control/devel/slred/slconred/MB01WD.f trunk/octaveforge/main/control/devel/slred/slconred/MB01YD.f trunk/octaveforge/main/control/devel/slred/slconred/MB01ZD.f trunk/octaveforge/main/control/devel/slred/slconred/MB02UD.f trunk/octaveforge/main/control/devel/slred/slconred/MB03QD.f trunk/octaveforge/main/control/devel/slred/slconred/MB03QX.f trunk/octaveforge/main/control/devel/slred/slconred/MB03QY.f trunk/octaveforge/main/control/devel/slred/slconred/MB03UD.f trunk/octaveforge/main/control/devel/slred/slconred/MB04ND.f trunk/octaveforge/main/control/devel/slred/slconred/MB04NY.f trunk/octaveforge/main/control/devel/slred/slconred/MB04OD.f trunk/octaveforge/main/control/devel/slred/slconred/MB04OY.f trunk/octaveforge/main/control/devel/slred/slconred/SB03OD.f trunk/octaveforge/main/control/devel/slred/slconred/SB03OR.f trunk/octaveforge/main/control/devel/slred/slconred/SB03OT.f trunk/octaveforge/main/control/devel/slred/slconred/SB03OU.f trunk/octaveforge/main/control/devel/slred/slconred/SB03OV.f trunk/octaveforge/main/control/devel/slred/slconred/SB03OY.f trunk/octaveforge/main/control/devel/slred/slconred/SB04PX.f trunk/octaveforge/main/control/devel/slred/slconred/SB08GD.f trunk/octaveforge/main/control/devel/slred/slconred/SB08HD.f trunk/octaveforge/main/control/devel/slred/slconred/SB16AD.f trunk/octaveforge/main/control/devel/slred/slconred/SB16AY.f trunk/octaveforge/main/control/devel/slred/slconred/SB16BD.f trunk/octaveforge/main/control/devel/slred/slconred/SB16CD.f trunk/octaveforge/main/control/devel/slred/slconred/SB16CY.f trunk/octaveforge/main/control/devel/slred/slconred/TB01ID.f trunk/octaveforge/main/control/devel/slred/slconred/TB01KD.f trunk/octaveforge/main/control/devel/slred/slconred/TB01LD.f trunk/octaveforge/main/control/devel/slred/slconred/TB01WD.f trunk/octaveforge/main/control/devel/slred/slconred/makefile_slconred.m trunk/octaveforge/main/control/devel/slred/slconred/select.f trunk/octaveforge/main/control/devel/slred/slmodred/AB04MD.f trunk/octaveforge/main/control/devel/slred/slmodred/AB07MD.f trunk/octaveforge/main/control/devel/slred/slmodred/AB07ND.f trunk/octaveforge/main/control/devel/slred/slmodred/AB08MD.f trunk/octaveforge/main/control/devel/slred/slmodred/AB08NX.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09AX.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09CX.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09DD.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09HD.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09HY.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09ID.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09IX.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09IY.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09JD.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09JV.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09JW.f trunk/octaveforge/main/control/devel/slred/slmodred/AB09JX.f trunk/octaveforge/main/control/devel/slred/slmodred/AG07BD.f trunk/octaveforge/main/control/devel/slred/slmodred/MA02AD.f trunk/octaveforge/main/control/devel/slred/slmodred/MA02BD.f trunk/octaveforge/main/control/devel/slred/slmodred/MA02DD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB01PD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB01QD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB01SD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB01WD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB01YD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB01ZD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB03OY.f trunk/octaveforge/main/control/devel/slred/slmodred/MB03PY.f trunk/octaveforge/main/control/devel/slred/slmodred/MB03QD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB03QX.f trunk/octaveforge/main/control/devel/slred/slmodred/MB03QY.f trunk/octaveforge/main/control/devel/slred/slmodred/MB03UD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB04ND.f trunk/octaveforge/main/control/devel/slred/slmodred/MB04NY.f trunk/octaveforge/main/control/devel/slred/slmodred/MB04OD.f trunk/octaveforge/main/control/devel/slred/slmodred/MB04OX.f trunk/octaveforge/main/control/devel/slred/slmodred/MB04OY.f trunk/octaveforge/main/control/devel/slred/slmodred/SB01FY.f trunk/octaveforge/main/control/devel/slred/slmodred/SB02MD.f trunk/octaveforge/main/control/devel/slred/slmodred/SB02MR.f trunk/octaveforge/main/control/devel/slred/slmodred/SB02MS.f trunk/octaveforge/main/control/devel/slred/slmodred/SB02MU.f trunk/octaveforge/main/control/devel/slred/slmodred/SB02MV.f trunk/octaveforge/main/control/devel/slred/slmodred/SB02MW.f trunk/octaveforge/main/control/devel/slred/slmodred/SB03OR.f trunk/octaveforge/main/control/devel/slred/slmodred/SB03OT.f trunk/octaveforge/main/control/devel/slred/slmodred/SB03OU.f trunk/octaveforge/main/control/devel/slred/slmodred/SB03OV.f trunk/octaveforge/main/control/devel/slred/slmodred/SB03OY.f trunk/octaveforge/main/control/devel/slred/slmodred/SB04PX.f trunk/octaveforge/main/control/devel/slred/slmodred/SB04PY.f trunk/octaveforge/main/control/devel/slred/slmodred/SB08CD.f trunk/octaveforge/main/control/devel/slred/slmodred/SB08DD.f trunk/octaveforge/main/control/devel/slred/slmodred/TB01ID.f trunk/octaveforge/main/control/devel/slred/slmodred/TB01KD.f trunk/octaveforge/main/control/devel/slred/slmodred/TB01LD.f trunk/octaveforge/main/control/devel/slred/slmodred/TB01PD.f trunk/octaveforge/main/control/devel/slred/slmodred/TB01UD.f trunk/octaveforge/main/control/devel/slred/slmodred/TB01WD.f trunk/octaveforge/main/control/devel/slred/slmodred/TB01XD.f trunk/octaveforge/main/control/devel/slred/slmodred/common.cc trunk/octaveforge/main/control/devel/slred/slmodred/delctg.f trunk/octaveforge/main/control/devel/slred/slmodred/makefile_slmodred.m trunk/octaveforge/main/control/devel/slred/slmodred/select.f trunk/octaveforge/main/control/devel/slred/slmodred/slab09jd.cc trunk/octaveforge/main/control/devel/slred/slmodred/test_ab09jd.m Added: trunk/octaveforge/extra/controldevel/COPYING ===================================================================  trunk/octaveforge/extra/controldevel/COPYING (rev 0) +++ trunk/octaveforge/extra/controldevel/COPYING 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>; + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a programto make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on generalpurpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program nonfree. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyrightlike laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any nonsource +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or generalpurpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From AntiCircumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +nonpermissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying NonSource Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machinereadable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peertopeer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or nonconsumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other nonpermissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or nonpermissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peertopeer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a crossclaim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a nonexclusive, worldwide, royaltyfree +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the nonexercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>;. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>;. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/whynotlgpl.html>;. Added: trunk/octaveforge/extra/controldevel/INFO ===================================================================  trunk/octaveforge/extra/controldevel/INFO (rev 0) +++ trunk/octaveforge/extra/controldevel/INFO 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,3 @@ +This package is just a playground for the author. +All its code will be included in the control package +once it's ready for a release. \ No newline at end of file Added: trunk/octaveforge/extra/controldevel/Makefile ===================================================================  trunk/octaveforge/extra/controldevel/Makefile (rev 0) +++ trunk/octaveforge/extra/controldevel/Makefile 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,16 @@ +sinclude ../../Makeconf + +PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard inst/*) +SUBDIRS = doc/ + +.PHONY: $(SUBDIRS) + +prepkg:: + @for _dir in $(SUBDIRS); do \ + $(MAKE) C $$_dir all; \ + done + +clean: + @for _dir in $(SUBDIRS); do \ + $(MAKE) C $$_dir $(MAKECMDGOALS); \ + done Copied: trunk/octaveforge/extra/controldevel/devel/makefile_slconred.m (from rev 8749, trunk/octaveforge/main/control/devel/slred/slconred/makefile_slconred.m) ===================================================================  trunk/octaveforge/extra/controldevel/devel/makefile_slconred.m (rev 0) +++ trunk/octaveforge/extra/controldevel/devel/makefile_slconred.m 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,26 @@ +homedir = pwd (); +develdir = fileparts (which ("makefile_slconred")); +srcdir = [develdir, "/../src"]; +cd (srcdir); + +mkoctfile SB16AD.f TB01ID.f SB16AY.f TB01KD.f AB09IX.f \ + MB04OD.f MB01WD.f SB03OD.f MB03UD.f AB05PD.f \ + AB09DD.f AB07ND.f TB01LD.f AB05QD.f SB03OU.f \ + MA02AD.f MB03QX.f select.f MB01YD.f MB01ZD.f \ + SB03OT.f MB04OY.f MB03QD.f MB04ND.f MB03QY.f \ + SB03OR.f SB03OY.f SB04PX.f MB04NY.f SB03OV.f + +mkoctfile SB16BD.f AB09AD.f AB09BD.f SB08GD.f SB08HD.f \ + TB01ID.f AB09AX.f MA02GD.f AB09BX.f TB01WD.f \ + MA02DD.f MB03UD.f select.f AB09DD.f SB03OU.f \ + MA02AD.f SB03OT.f MB04ND.f MB04OD.f SB03OR.f \ + SB03OY.f SB04PX.f MB04NY.f MB04OY.f SB03OV.f + +mkoctfile SB16CD.f SB16CY.f AB09IX.f SB03OD.f MB02UD.f \ + AB09DD.f MA02AD.f MB03UD.f select.f SB03OU.f \ + MB01SD.f SB03OT.f MB04ND.f MB04OD.f SB03OR.f \ + SB03OY.f SB04PX.f MB04NY.f MB04OY.f SB03OV.f + +system ("rm *.o"); +cd (homedir); + Copied: trunk/octaveforge/extra/controldevel/devel/makefile_slmodred.m (from rev 8749, trunk/octaveforge/main/control/devel/slred/slmodred/makefile_slmodred.m) ===================================================================  trunk/octaveforge/extra/controldevel/devel/makefile_slmodred.m (rev 0) +++ trunk/octaveforge/extra/controldevel/devel/makefile_slmodred.m 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,35 @@ +homedir = pwd (); +develdir = fileparts (which ("makefile_slmodred")); +srcdir = [develdir, "/../src"]; +cd (srcdir); + +mkoctfile AB09ID.f TB01PD.f SB08DD.f TB01ID.f TB01KD.f \ + AB09IX.f AB09IY.f SB08CD.f MB04ND.f TB01XD.f \ + MB04OD.f MB01WD.f MB03UD.f AB07MD.f SB01FY.f \ + AB09DD.f TB01LD.f SB03OU.f TB01UD.f MA02AD.f \ + MA02BD.f MB03OY.f MB03QX.f MB01PD.f select.f \ + MB01YD.f MB04NY.f MB01ZD.f SB03OT.f MB04OX.f \ + MB04OY.f MB03QD.f SB03OY.f MB03QY.f MB01QD.f \ + SB03OR.f SB03OV.f SB04PX.f + +mkoctfile "Wl,framework" "Wl,vecLib" \ + slab09jd.cc \ + AB09JD.f TB01ID.f TB01KD.f AB07ND.f AB09JV.f \ + AB09JW.f AB09CX.f AG07BD.f AB08MD.f AB04MD.f \ + TB01LD.f delctg.f SB04PY.f AB09AX.f AB08NX.f \ + MB01SD.f AB09JX.f MA02AD.f TB01WD.f MB03OY.f \ + MB03PY.f MA02DD.f MB03UD.f MB03QX.f select.f \ + SB04PX.f SB03OU.f MB03QD.f MB03QY.f SB03OT.f \ + MB04ND.f MB04OD.f SB03OR.f SB03OY.f MB04NY.f \ + MB04OY.f SB03OV.f + +mkoctfile AB09HD.f TB01ID.f AB04MD.f TB01KD.f AB09HY.f \ + AB09IX.f MB03UD.f SB02MD.f AB09DD.f TB01LD.f \ + SB03OU.f MA02AD.f MB03QX.f select.f SB03OT.f \ + SB02MR.f SB02MS.f MB03QD.f SB02MU.f SB02MV.f \ + SB02MW.f MB04ND.f MB04OD.f MB03QY.f SB03OR.f \ + SB03OY.f SB04PX.f MB04NY.f MB04OY.f SB03OV.f + +system ("rm *.o"); +cd (homedir); + Copied: trunk/octaveforge/extra/controldevel/devel/test_ab09jd.m (from rev 8749, trunk/octaveforge/main/control/devel/slred/slmodred/test_ab09jd.m) ===================================================================  trunk/octaveforge/extra/controldevel/devel/test_ab09jd.m (rev 0) +++ trunk/octaveforge/extra/controldevel/devel/test_ab09jd.m 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,55 @@ +% AB09JD EXAMPLE PROGRAM DATA (Continuous system) +% 6 1 1 2 0 0 0.0 1.E1 1.E14 V N I C S A + +a = [ 3.8637 7.4641 9.1416 7.4641 3.8637 1.0000 + 1.0000, 0 0 0 0 0 + 0 1.0000 0 0 0 0 + 0 0 1.0000 0 0 0 + 0 0 0 1.0000 0 0 + 0 0 0 0 1.0000 0 ]; + +b = [ 1 + 0 + 0 + 0 + 0 + 0 ]; + +c = [ 0 0 0 0 0 1 ]; + +d = [ 0 ]; + +av = [ 0.2000 1.0000 + 1.0000 0 ]; + +bv = [ 1 + 0 ]; + +cv = [ 1.8000 0 ]; + +dv = [ 1 ]; + + +[ar, br, cr, dr] = slab09jd (a, b, c, d, av, bv, cv, dv, [], [], [], [], 0, 0.0, \ + 1, 0, 2, 0, 0, 1, \ + 1e1, 1e14) + +%{ + The reduced state dynamics matrix Ar is + 0.2391 0.3072 1.1630 1.1967 + 2.9709 0.2391 2.6270 3.1027 + 0.0000 0.0000 0.5137 1.2842 + 0.0000 0.0000 0.1519 0.5137 + + The reduced input/state matrix Br is + 1.0497 + 3.7052 + 0.8223 + 0.7435 + + The reduced state/output matrix Cr is + 0.4466 0.0143 0.4780 0.2013 + + The reduced input/output matrix Dr is + 0.0219 +%} Copied: trunk/octaveforge/extra/controldevel/inst/__iddata_dim__.m (from rev 8749, trunk/octaveforge/main/control/devel/__iddata_dim__.m) ===================================================================  trunk/octaveforge/extra/controldevel/inst/__iddata_dim__.m (rev 0) +++ trunk/octaveforge/extra/controldevel/inst/__iddata_dim__.m 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,26 @@ +## Author: Lukas Reichlin <lukas.reichlin@...> +## Created: October 2011 +## Version: 0.1 + +function [p, m] = __iddata_dim__ (y, u) + + if (! is_real_matrix (y, u)) + error ("iddata: inputs and outputs must be real"); + endif + + [ly, p] = size (y); + [lu, m] = size (u); + + if (ly != lu) + error ("iddata: matrices ""y"" and ""u"" must have the same number of samples (rows)"); + endif + + if (ly < p) + warning ("iddata: more outputs than samples  matrice ""y"" should probably be transposed"); + endif + + if (lu < m) + warning ("iddata: more inputs than samples  matrice ""u"" should probably be transposed"); + endif + +endfunction \ No newline at end of file Added: trunk/octaveforge/extra/controldevel/src/AB04MD.f ===================================================================  trunk/octaveforge/extra/controldevel/src/AB04MD.f (rev 0) +++ trunk/octaveforge/extra/controldevel/src/AB04MD.f 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,345 @@ + SUBROUTINE AB04MD( TYPE, N, M, P, ALPHA, BETA, A, LDA, B, LDB, C, + $ LDC, D, LDD, IWORK, DWORK, LDWORK, INFO ) +C +C SLICOT RELEASE 5.0. +C +C Copyright (c) 20022009 NICONET e.V. +C +C This program is free software: you can redistribute it and/or +C modify it under the terms of the GNU General Public License as +C published by the Free Software Foundation, either version 2 of +C the License, or (at your option) any later version. +C +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. +C +C You should have received a copy of the GNU General Public License +C along with this program. If not, see +C <http://www.gnu.org/licenses/>;. +C +C PURPOSE +C +C To perform a transformation on the parameters (A,B,C,D) of a +C system, which is equivalent to a bilinear transformation of the +C corresponding transfer function matrix. +C +C ARGUMENTS +C +C Mode Parameters +C +C TYPE CHARACTER*1 +C Indicates the type of the original system and the +C transformation to be performed as follows: +C = 'D': discretetime > continuoustime; +C = 'C': continuoustime > discretetime. +C +C Input/Output Parameters +C +C N (input) INTEGER +C The order of the state matrix A. N >= 0. +C +C M (input) INTEGER +C The number of system inputs. M >= 0. +C +C P (input) INTEGER +C The number of system outputs. P >= 0. +C +C ALPHA, (input) DOUBLE PRECISION +C BETA Parameters specifying the bilinear transformation. +C Recommended values for stable systems: ALPHA = 1, +C BETA = 1. ALPHA <> 0, BETA <> 0. +C +C A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +C On entry, the leading NbyN part of this array must +C contain the state matrix A of the original system. +C On exit, the leading NbyN part of this array contains +C _ +C the state matrix A of the transformed system. +C +C LDA INTEGER +C The leading dimension of array A. LDA >= MAX(1,N). +C +C B (input/output) DOUBLE PRECISION array, dimension (LDB,M) +C On entry, the leading NbyM part of this array must +C contain the input matrix B of the original system. +C On exit, the leading NbyM part of this array contains +C _ +C the input matrix B of the transformed system. +C +C LDB INTEGER +C The leading dimension of array B. LDB >= MAX(1,N). +C +C C (input/output) DOUBLE PRECISION array, dimension (LDC,N) +C On entry, the leading PbyN part of this array must +C contain the output matrix C of the original system. +C On exit, the leading PbyN part of this array contains +C _ +C the output matrix C of the transformed system. +C +C LDC INTEGER +C The leading dimension of array C. LDC >= MAX(1,P). +C +C D (input/output) DOUBLE PRECISION array, dimension (LDD,M) +C On entry, the leading PbyM part of this array must +C contain the input/output matrix D for the original system. +C On exit, the leading PbyM part of this array contains +C _ +C the input/output matrix D of the transformed system. +C +C LDD INTEGER +C The leading dimension of array D. LDD >= MAX(1,P). +C +C Workspace +C +C IWORK INTEGER array, dimension (N) +C +C DWORK DOUBLE PRECISION array, dimension (LDWORK) +C On exit, if INFO = 0, DWORK(1) returns the optimal value +C of LDWORK. +C +C LDWORK INTEGER +C The length of the array DWORK. LDWORK >= MAX(1,N). +C For optimum performance LDWORK >= MAX(1,N*NB), where NB +C is the optimal blocksize. +C +C Error Indicator +C +C INFO INTEGER +C = 0: successful exit; +C < 0: if INFO = i, the ith argument had an illegal +C value; +C = 1: if the matrix (ALPHA*I + A) is exactly singular; +C = 2: if the matrix (BETA*I  A) is exactly singular. +C +C METHOD +C +C The parameters of the discretetime system are transformed into +C the parameters of the continuoustime system (TYPE = 'D'), or +C viceversa (TYPE = 'C') by the transformation: +C +C 1. Discrete > continuous +C _ 1 +C A = beta*(alpha*I + A) * (A  alpha*I) +C _ 1 +C B = sqrt(2*alpha*beta) * (alpha*I + A) * B +C _ 1 +C C = sqrt(2*alpha*beta) * C * (alpha*I + A) +C _ 1 +C D = D  C * (alpha*I + A) * B +C +C which is equivalent to the bilinear transformation +C +C z  alpha +C z > s = beta  . +C z + alpha +C +C of one transfer matrix onto the other. +C +C 2. Continuous > discrete +C _ 1 +C A = alpha*(beta*I  A) * (beta*I + A) +C _ 1 +C B = sqrt(2*alpha*beta) * (beta*I  A) * B +C _ 1 +C C = sqrt(2*alpha*beta) * C * (beta*I  A) +C _ 1 +C D = D + C * (beta*I  A) * B +C +C which is equivalent to the bilinear transformation +C +C beta + s +C s > z = alpha  . +C beta  s +C +C of one transfer matrix onto the other. +C +C REFERENCES +C +C [1] AlSaggaf, U.M. and Franklin, G.F. +C Model reduction via balanced realizations: a extension and +C frequency weighting techniques. +C IEEE Trans. Autom. Contr., AC33, pp. 687692, 1988. +C +C NUMERICAL ASPECTS +C 3 +C The time taken is approximately proportional to N . +C The accuracy depends mainly on the condition number of the matrix +C to be inverted. +C +C CONTRIBUTORS +C +C Release 3.0: V. Sima, Katholieke Univ. Leuven, Belgium, and +C A. Varga, German Aerospace Research Establishment, +C Oberpfaffenhofen, Germany, Nov. 1996. +C Supersedes Release 2.0 routine AB04AD by W. van der Linden, and +C A.J. Geurts, Technische Hogeschool Eindhoven, Holland. +C +C REVISIONS +C +C  +C +C KEYWORDS +C +C Bilinear transformation, continuoustime system, discretetime +C system, statespace model. +C +C ****************************************************************** +C +C .. Parameters .. + DOUBLE PRECISION ZERO, ONE, TWO + PARAMETER ( ZERO=0.0D0, ONE=1.0D0, TWO=2.0D0 ) +C .. Scalar Arguments .. + CHARACTER TYPE + INTEGER INFO, LDA, LDB, LDC, LDD, LDWORK, M, N, P + DOUBLE PRECISION ALPHA, BETA +C .. Array Arguments .. + INTEGER IWORK(*) + DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*), DWORK(*) +C .. Local Scalars .. + LOGICAL LTYPE + INTEGER I, IP + DOUBLE PRECISION AB2, PALPHA, PBETA, SQRAB2 +C .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +C .. External Subroutines .. + EXTERNAL DGEMM, DGETRF, DGETRS, DGETRI, DLASCL, DSCAL, + $ DSWAP, XERBLA +C .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SIGN, SQRT +C .. Executable Statements .. +C + INFO = 0 + LTYPE = LSAME( TYPE, 'D' ) +C +C Test the input scalar arguments. +C + IF( .NOT.LTYPE .AND. .NOT.LSAME( TYPE, 'C' ) ) THEN + INFO = 1 + ELSE IF( N.LT.0 ) THEN + INFO = 2 + ELSE IF( M.LT.0 ) THEN + INFO = 3 + ELSE IF( P.LT.0 ) THEN + INFO = 4 + ELSE IF( ALPHA.EQ.ZERO ) THEN + INFO = 5 + ELSE IF( BETA.EQ.ZERO ) THEN + INFO = 6 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = 8 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = 10 + ELSE IF( LDC.LT.MAX( 1, P ) ) THEN + INFO = 12 + ELSE IF( LDD.LT.MAX( 1, P ) ) THEN + INFO = 14 + ELSE IF( LDWORK.LT.MAX( 1, N ) ) THEN + INFO = 17 + END IF +C + IF ( INFO.NE.0 ) THEN +C +C Error return. +C + CALL XERBLA( 'AB04MD', INFO ) + RETURN + END IF +C +C Quick return if possible. +C + IF ( MAX( N, M, P ).EQ.0 ) + $ RETURN +C +C (Note: Comments in the code beginning "Workspace:" describe the +C minimal amount of real workspace needed at that point in the +C code, as well as the preferred amount for good performance. +C NB refers to the optimal block size for the immediately +C following subroutine, as returned by ILAENV.) +C + IF (LTYPE) THEN +C +C Discretetime to continuoustime with (ALPHA, BETA). +C + PALPHA = ALPHA + PBETA = BETA + ELSE +C +C Continuoustime to discretetime with (ALPHA, BETA) is +C equivalent with discretetime to continuoustime with +C (BETA, ALPHA), if B and C change the sign. +C + PALPHA = BETA + PBETA = ALPHA + END IF +C + AB2 = PALPHA*PBETA*TWO + SQRAB2 = SIGN( SQRT( ABS( AB2 ) ), PALPHA ) +C 1 +C Compute (alpha*I + A) . +C + DO 10 I = 1, N + A(I,I) = A(I,I) + PALPHA + 10 CONTINUE +C + CALL DGETRF( N, N, A, LDA, IWORK, INFO ) +C + IF (INFO.NE.0) THEN +C +C Error return. +C + IF (LTYPE) THEN + INFO = 1 + ELSE + INFO = 2 + END IF + RETURN + END IF +C 1 +C Compute (alpha*I+A) *B. +C + CALL DGETRS( 'No transpose', N, M, A, LDA, IWORK, B, LDB, INFO ) +C 1 +C Compute D  C*(alpha*I+A) *B. +C + CALL DGEMM( 'No transpose', 'No transpose', P, M, N, ONE, C, + $ LDC, B, LDB, ONE, D, LDD ) +C +C Scale B by sqrt(2*alpha*beta). +C + CALL DLASCL( 'General', 0, 0, ONE, SQRAB2, N, M, B, LDB, INFO ) +C 1 +C Compute sqrt(2*alpha*beta)*C*(alpha*I + A) . +C + CALL DTRSM( 'Right', 'Upper', 'No transpose', 'Nonunit', P, N, + $ SQRAB2, A, LDA, C, LDC ) +C + CALL DTRSM( 'Right', 'Lower', 'No transpose', 'Unit', P, N, ONE, + $ A, LDA, C, LDC ) +C +C Apply column interchanges to the solution matrix. +C + DO 20 I = N1, 1, 1 + IP = IWORK(I) + IF ( IP.NE.I ) + $ CALL DSWAP( P, C(1,I), 1, C(1,IP), 1 ) + 20 CONTINUE +C 1 +C Compute beta*(alpha*I + A) *(A  alpha*I) as +C 1 +C beta*I  2*alpha*beta*(alpha*I + A) . +C +C Workspace: need N; prefer N*NB. +C + CALL DGETRI( N, A, LDA, IWORK, DWORK, LDWORK, INFO ) +C + DO 30 I = 1, N + CALL DSCAL(N, AB2, A(1,I), 1) + A(I,I) = A(I,I) + PBETA + 30 CONTINUE +C + RETURN +C *** Last line of AB04MD *** + END Copied: trunk/octaveforge/extra/controldevel/src/AB05PD.f (from rev 8749, trunk/octaveforge/main/control/devel/slred/slconred/AB05PD.f) ===================================================================  trunk/octaveforge/extra/controldevel/src/AB05PD.f (rev 0) +++ trunk/octaveforge/extra/controldevel/src/AB05PD.f 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,385 @@ + SUBROUTINE AB05PD( OVER, N1, M, P, N2, ALPHA, A1, LDA1, B1, LDB1, + $ C1, LDC1, D1, LDD1, A2, LDA2, B2, LDB2, C2, + $ LDC2, D2, LDD2, N, A, LDA, B, LDB, C, LDC, D, + $ LDD, INFO) +C +C SLICOT RELEASE 5.0. +C +C Copyright (c) 20022009 NICONET e.V. +C +C This program is free software: you can redistribute it and/or +C modify it under the terms of the GNU General Public License as +C published by the Free Software Foundation, either version 2 of +C the License, or (at your option) any later version. +C +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. +C +C You should have received a copy of the GNU General Public License +C along with this program. If not, see +C <http://www.gnu.org/licenses/>;. +C +C PURPOSE +C +C To compute the statespace model G = (A,B,C,D) corresponding to +C the sum G = G1 + alpha*G2, where G1 = (A1,B1,C1,D1) and +C G2 = (A2,B2,C2,D2). G, G1, and G2 are the transferfunction +C matrices of the corresponding statespace models. +C +C ARGUMENTS +C +C Mode Parameters +C +C OVER CHARACTER*1 +C Indicates whether the user wishes to overlap pairs of +C arrays, as follows: +C = 'N': Do not overlap; +C = 'O': Overlap pairs of arrays: A1 and A, B1 and B, +C C1 and C, and D1 and D, i.e. the same name is +C effectively used for each pair (for all pairs) +C in the routine call. In this case, setting +C LDA1 = LDA, LDB1 = LDB, LDC1 = LDC, and LDD1 = LDD +C will give maximum efficiency. +C +C Input/Output Parameters +C +C N1 (input) INTEGER +C The number of state variables in the first system, i.e. +C the order of the matrix A1, the number of rows of B1 and +C the number of columns of C1. N1 >= 0. +C +C M (input) INTEGER +C The number of input variables of the two systems, i.e. the +C number of columns of matrices B1, D1, B2 and D2. M >= 0. +C +C P (input) INTEGER +C The number of output variables of the two systems, i.e. +C the number of rows of matrices C1, D1, C2 and D2. P >= 0. +C +C N2 (input) INTEGER +C The number of state variables in the second system, i.e. +C the order of the matrix A2, the number of rows of B2 and +C the number of columns of C2. N2 >= 0. +C +C ALPHA (input) DOUBLE PRECISION +C The coefficient multiplying G2. +C +C A1 (input) DOUBLE PRECISION array, dimension (LDA1,N1) +C The leading N1byN1 part of this array must contain the +C state transition matrix A1 for the first system. +C +C LDA1 INTEGER +C The leading dimension of array A1. LDA1 >= MAX(1,N1). +C +C B1 (input) DOUBLE PRECISION array, dimension (LDB1,M) +C The leading N1byM part of this array must contain the +C input/state matrix B1 for the first system. +C +C LDB1 INTEGER +C The leading dimension of array B1. LDB1 >= MAX(1,N1). +C +C C1 (input) DOUBLE PRECISION array, dimension (LDC1,N1) +C The leading PbyN1 part of this array must contain the +C state/output matrix C1 for the first system. +C +C LDC1 INTEGER +C The leading dimension of array C1. +C LDC1 >= MAX(1,P) if N1 > 0. +C LDC1 >= 1 if N1 = 0. +C +C D1 (input) DOUBLE PRECISION array, dimension (LDD1,M) +C The leading PbyM part of this array must contain the +C input/output matrix D1 for the first system. +C +C LDD1 INTEGER +C The leading dimension of array D1. LDD1 >= MAX(1,P). +C +C A2 (input) DOUBLE PRECISION array, dimension (LDA2,N2) +C The leading N2byN2 part of this array must contain the +C state transition matrix A2 for the second system. +C +C LDA2 INTEGER +C The leading dimension of array A2. LDA2 >= MAX(1,N2). +C +C B2 (input) DOUBLE PRECISION array, dimension (LDB2,M) +C The leading N2byM part of this array must contain the +C input/state matrix B2 for the second system. +C +C LDB2 INTEGER +C The leading dimension of array B2. LDB2 >= MAX(1,N2). +C +C C2 (input) DOUBLE PRECISION array, dimension (LDC2,N2) +C The leading PbyN2 part of this array must contain the +C state/output matrix C2 for the second system. +C +C LDC2 INTEGER +C The leading dimension of array C2. +C LDC2 >= MAX(1,P) if N2 > 0. +C LDC2 >= 1 if N2 = 0. +C +C D2 (input) DOUBLE PRECISION array, dimension (LDD2,M) +C The leading PbyM part of this array must contain the +C input/output matrix D2 for the second system. +C +C LDD2 INTEGER +C The leading dimension of array D2. LDD2 >= MAX(1,P). +C +C N (output) INTEGER +C The number of state variables (N1 + N2) in the resulting +C system, i.e. the order of the matrix A, the number of rows +C of B and the number of columns of C. +C +C A (output) DOUBLE PRECISION array, dimension (LDA,N1+N2) +C The leading NbyN part of this array contains the state +C transition matrix A for the resulting system. +C The array A can overlap A1 if OVER = 'O'. +C +C LDA INTEGER +C The leading dimension of array A. LDA >= MAX(1,N1+N2). +C +C B (output) DOUBLE PRECISION array, dimension (LDB,M) +C The leading NbyM part of this array contains the +C input/state matrix B for the resulting system. +C The array B can overlap B1 if OVER = 'O'. +C +C LDB INTEGER +C The leading dimension of array B. LDB >= MAX(1,N1+N2). +C +C C (output) DOUBLE PRECISION array, dimension (LDC,N1+N2) +C The leading PbyN part of this array contains the +C state/output matrix C for the resulting system. +C The array C can overlap C1 if OVER = 'O'. +C +C LDC INTEGER +C The leading dimension of array C. +C LDC >= MAX(1,P) if N1+N2 > 0. +C LDC >= 1 if N1+N2 = 0. +C +C D (output) DOUBLE PRECISION array, dimension (LDD,M) +C The leading PbyM part of this array contains the +C input/output matrix D for the resulting system. +C The array D can overlap D1 if OVER = 'O'. +C +C LDD INTEGER +C The leading dimension of array D. LDD >= MAX(1,P). +C +C Error Indicator +C +C INFO INTEGER +C = 0: successful exit; +C < 0: if INFO = i, the ith argument had an illegal +C value. +C +C METHOD +C +C The matrices of the resulting systems are determined as: +C +C ( A1 0 ) ( B1 ) +C A = ( ) , B = ( ) , +C ( 0 A2 ) ( B2 ) +C +C C = ( C1 alpha*C2 ) , D = D1 + alpha*D2 . +C +C REFERENCES +C +C None +C +C NUMERICAL ASPECTS +C +C None +C +C CONTRIBUTORS +C +C A. Varga, German Aerospace Research Establishment, +C Oberpfaffenhofen, Germany, and V. Sima, Katholieke Univ. Leuven, +C Belgium, Nov. 1996. +C +C REVISIONS +C +C V. Sima, Research Institute for Informatics, Bucharest, July 2003, +C Feb. 2004. +C +C KEYWORDS +C +C Multivariable system, statespace model, statespace +C representation. +C +C ****************************************************************** +C +C .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO=0.0D0, ONE = 1.0D0 ) +C .. Scalar Arguments .. + CHARACTER OVER + INTEGER INFO, LDA, LDA1, LDA2, LDB, LDB1, LDB2, LDC, + $ LDC1, LDC2, LDD, LDD1, LDD2, M, N, N1, N2, P + DOUBLE PRECISION ALPHA +C .. Array Arguments .. + DOUBLE PRECISION A(LDA,*), A1(LDA1,*), A2(LDA2,*), B(LDB,*), + $ B1(LDB1,*), B2(LDB2,*), C(LDC,*), C1(LDC1,*), + $ C2(LDC2,*), D(LDD,*), D1(LDD1,*), D2(LDD2,*) +C .. Local Scalars .. + LOGICAL LOVER + INTEGER I, J, N1P1 +C .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +C .. External Subroutines .. + EXTERNAL DAXPY, DLACPY, DLASCL, DLASET, XERBLA +C .. Intrinsic Functions .. + INTRINSIC MAX, MIN +C .. Executable Statements .. +C + LOVER = LSAME( OVER, 'O' ) + N = N1 + N2 + INFO = 0 +C +C Test the input scalar arguments. +C + IF( .NOT.LOVER .AND. .NOT.LSAME( OVER, 'N' ) ) THEN + INFO = 1 + ELSE IF( N1.LT.0 ) THEN + INFO = 2 + ELSE IF( M.LT.0 ) THEN + INFO = 3 + ELSE IF( P.LT.0 ) THEN + INFO = 4 + ELSE IF( N2.LT.0 ) THEN + INFO = 5 + ELSE IF( LDA1.LT.MAX( 1, N1 ) ) THEN + INFO = 8 + ELSE IF( LDB1.LT.MAX( 1, N1 ) ) THEN + INFO = 10 + ELSE IF( ( N1.GT.0 .AND. LDC1.LT.MAX( 1, P ) ) .OR. + $ ( N1.EQ.0 .AND. LDC1.LT.1 ) ) THEN + INFO = 12 + ELSE IF( LDD1.LT.MAX( 1, P ) ) THEN + INFO = 14 + ELSE IF( LDA2.LT.MAX( 1, N2 ) ) THEN + INFO = 16 + ELSE IF( LDB2.LT.MAX( 1, N2 ) ) THEN + INFO = 18 + ELSE IF( ( N2.GT.0 .AND. LDC2.LT.MAX( 1, P ) ) .OR. + $ ( N2.EQ.0 .AND. LDC2.LT.1 ) ) THEN + INFO = 20 + ELSE IF( LDD2.LT.MAX( 1, P ) ) THEN + INFO = 22 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = 25 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = 27 + ELSE IF( ( N.GT.0 .AND. LDC.LT.MAX( 1, P ) ) .OR. + $ ( N.EQ.0 .AND. LDC.LT.1 ) ) THEN + INFO = 29 + ELSE IF( LDD.LT.MAX( 1, P ) ) THEN + INFO = 31 + END IF +C + IF ( INFO.NE.0 ) THEN +C +C Error return. +C + CALL XERBLA( 'AB05PD', INFO ) + RETURN + END IF +C +C Quick return if possible. +C + IF ( MAX( N, MIN( M, P ) ).EQ.0 ) + $ RETURN +C + N1P1 = N1 + 1 +C +C ( A1 0 ) +C Construct A = ( ) . +C ( 0 A2 ) +C + IF ( LOVER .AND. LDA1.LE.LDA ) THEN + IF ( LDA1.LT.LDA ) THEN +C + DO 20 J = N1, 1, 1 + DO 10 I = N1, 1, 1 + A(I,J) = A1(I,J) + 10 CONTINUE + 20 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', N1, N1, A1, LDA1, A, LDA ) + END IF +C + IF ( N2.GT.0 ) THEN + CALL DLASET( 'F', N1, N2, ZERO, ZERO, A(1,N1P1), LDA ) + CALL DLASET( 'F', N2, N1, ZERO, ZERO, A(N1P1,1), LDA ) + CALL DLACPY( 'F', N2, N2, A2, LDA2, A(N1P1,N1P1), LDA ) + END IF +C +C ( B1 ) +C Construct B = ( ) . +C ( B2 ) +C + IF ( LOVER .AND. LDB1.LE.LDB ) THEN + IF ( LDB1.LT.LDB ) THEN +C + DO 40 J = M, 1, 1 + DO 30 I = N1, 1, 1 + B(I,J) = B1(I,J) + 30 CONTINUE + 40 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', N1, M, B1, LDB1, B, LDB ) + END IF +C + IF ( N2.GT.0 ) + $ CALL DLACPY( 'F', N2, M, B2, LDB2, B(N1P1,1), LDB ) +C +C Construct C = ( C1 alpha*C2 ) . +C + IF ( LOVER .AND. LDC1.LE.LDC ) THEN + IF ( LDC1.LT.LDC ) THEN +C + DO 60 J = N1, 1, 1 + DO 50 I = P, 1, 1 + C(I,J) = C1(I,J) + 50 CONTINUE + 60 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', P, N1, C1, LDC1, C, LDC ) + END IF +C + IF ( N2.GT.0 ) THEN + CALL DLACPY( 'F', P, N2, C2, LDC2, C(1,N1P1), LDC ) + IF ( ALPHA.NE.ONE ) + $ CALL DLASCL( 'G', 0, 0, ONE, ALPHA, P, N2, C(1,N1P1), LDC, + $ INFO ) + END IF +C +C Construct D = D1 + alpha*D2 . +C + IF ( LOVER .AND. LDD1.LE.LDD ) THEN + IF ( LDD1.LT.LDD ) THEN +C + DO 80 J = M, 1, 1 + DO 70 I = P, 1, 1 + D(I,J) = D1(I,J) + 70 CONTINUE + 80 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', P, M, D1, LDD1, D, LDD ) + END IF +C + DO 90 J = 1, M + CALL DAXPY( P, ALPHA, D2(1,J), 1, D(1,J), 1 ) + 90 CONTINUE +C + RETURN +C *** Last line of AB05PD *** + END Copied: trunk/octaveforge/extra/controldevel/src/AB05QD.f (from rev 8749, trunk/octaveforge/main/control/devel/slred/slconred/AB05QD.f) ===================================================================  trunk/octaveforge/extra/controldevel/src/AB05QD.f (rev 0) +++ trunk/octaveforge/extra/controldevel/src/AB05QD.f 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,419 @@ + SUBROUTINE AB05QD( OVER, N1, M1, P1, N2, M2, P2, A1, LDA1, B1, + $ LDB1, C1, LDC1, D1, LDD1, A2, LDA2, B2, LDB2, + $ C2, LDC2, D2, LDD2, N, M, P, A, LDA, B, LDB, + $ C, LDC, D, LDD, INFO ) +C +C SLICOT RELEASE 5.0. +C +C Copyright (c) 20022009 NICONET e.V. +C +C This program is free software: you can redistribute it and/or +C modify it under the terms of the GNU General Public License as +C published by the Free Software Foundation, either version 2 of +C the License, or (at your option) any later version. +C +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. +C +C You should have received a copy of the GNU General Public License +C along with this program. If not, see +C <http://www.gnu.org/licenses/>;. +C +C PURPOSE +C +C To append two systems G1 and G2 in statespace form together. +C If G1 = (A1,B1,C1,D1) and G2 = (A2,B2,C2,D2) are the statespace +C models of the given two systems having the transferfunction +C matrices G1 and G2, respectively, this subroutine constructs the +C statespace model G = (A,B,C,D) which corresponds to the +C transferfunction matrix +C +C ( G1 0 ) +C G = ( ) +C ( 0 G2 ) +C +C ARGUMENTS +C +C Mode Parameters +C +C OVER CHARACTER*1 +C Indicates whether the user wishes to overlap pairs of +C arrays, as follows: +C = 'N': Do not overlap; +C = 'O': Overlap pairs of arrays: A1 and A, B1 and B, +C C1 and C, and D1 and D, i.e. the same name is +C effectively used for each pair (for all pairs) +C in the routine call. In this case, setting +C LDA1 = LDA, LDB1 = LDB, LDC1 = LDC, and LDD1 = LDD +C will give maximum efficiency. +C +C Input/Output Parameters +C +C N1 (input) INTEGER +C The number of state variables in the first system, i.e. +C the order of the matrix A1, the number of rows of B1 and +C the number of columns of C1. N1 >= 0. +C +C M1 (input) INTEGER +C The number of input variables in the first system, i.e. +C the number of columns of matrices B1 and D1. M1 >= 0. +C +C P1 (input) INTEGER +C The number of output variables in the first system, i.e. +C the number of rows of matrices C1 and D1. P1 >= 0. +C +C N2 (input) INTEGER +C The number of state variables in the second system, i.e. +C the order of the matrix A2, the number of rows of B2 and +C the number of columns of C2. N2 >= 0. +C +C M2 (input) INTEGER +C The number of input variables in the second system, i.e. +C the number of columns of matrices B2 and D2. M2 >= 0. +C +C P2 (input) INTEGER +C The number of output variables in the second system, i.e. +C the number of rows of matrices C2 and D2. P2 >= 0. +C +C A1 (input) DOUBLE PRECISION array, dimension (LDA1,N1) +C The leading N1byN1 part of this array must contain the +C state transition matrix A1 for the first system. +C +C LDA1 INTEGER +C The leading dimension of array A1. LDA1 >= MAX(1,N1). +C +C B1 (input) DOUBLE PRECISION array, dimension (LDB1,M1) +C The leading N1byM1 part of this array must contain the +C input/state matrix B1 for the first system. +C +C LDB1 INTEGER +C The leading dimension of array B1. LDB1 >= MAX(1,N1). +C +C C1 (input) DOUBLE PRECISION array, dimension (LDC1,N1) +C The leading P1byN1 part of this array must contain the +C state/output matrix C1 for the first system. +C +C LDC1 INTEGER +C The leading dimension of array C1. +C LDC1 >= MAX(1,P1) if N1 > 0. +C LDC1 >= 1 if N1 = 0. +C +C D1 (input) DOUBLE PRECISION array, dimension (LDD1,M1) +C The leading P1byM1 part of this array must contain the +C input/output matrix D1 for the first system. +C +C LDD1 INTEGER +C The leading dimension of array D1. LDD1 >= MAX(1,P1). +C +C A2 (input) DOUBLE PRECISION array, dimension (LDA2,N2) +C The leading N2byN2 part of this array must contain the +C state transition matrix A2 for the second system. +C +C LDA2 INTEGER +C The leading dimension of array A2. LDA2 >= MAX(1,N2). +C +C B2 (input) DOUBLE PRECISION array, dimension (LDB2,M2) +C The leading N2byM2 part of this array must contain the +C input/state matrix B2 for the second system. +C +C LDB2 INTEGER +C The leading dimension of array B2. LDB2 >= MAX(1,N2). +C +C C2 (input) DOUBLE PRECISION array, dimension (LDC2,N2) +C The leading P2byN2 part of this array must contain the +C state/output matrix C2 for the second system. +C +C LDC2 INTEGER +C The leading dimension of array C2. +C LDC2 >= MAX(1,P2) if N2 > 0. +C LDC2 >= 1 if N2 = 0. +C +C D2 (input) DOUBLE PRECISION array, dimension (LDD2,M2) +C The leading P2byM2 part of this array must contain the +C input/output matrix D2 for the second system. +C +C LDD2 INTEGER +C The leading dimension of array D2. LDD2 >= MAX(1,P2). +C +C N (output) INTEGER +C The number of state variables (N1 + N2) in the resulting +C system, i.e. the order of the matrix A, the number of rows +C of B and the number of columns of C. +C +C M (output) INTEGER +C The number of input variables (M1 + M2) in the resulting +C system, i.e. the number of columns of B and D. +C +C P (output) INTEGER +C The number of output variables (P1 + P2) of the resulting +C system, i.e. the number of rows of C and D. +C +C A (output) DOUBLE PRECISION array, dimension (LDA,N1+N2) +C The leading NbyN part of this array contains the state +C transition matrix A for the resulting system. +C The array A can overlap A1 if OVER = 'O'. +C +C LDA INTEGER +C The leading dimension of array A. LDA >= MAX(1,N1+N2). +C +C B (output) DOUBLE PRECISION array, dimension (LDB,M1+M2) +C The leading NbyM part of this array contains the +C input/state matrix B for the resulting system. +C The array B can overlap B1 if OVER = 'O'. +C +C LDB INTEGER +C The leading dimension of array B. LDB >= MAX(1,N1+N2). +C +C C (output) DOUBLE PRECISION array, dimension (LDC,N1+N2) +C The leading PbyN part of this array contains the +C state/output matrix C for the resulting system. +C The array C can overlap C1 if OVER = 'O'. +C +C LDC INTEGER +C The leading dimension of array C. +C LDC >= MAX(1,P1+P2) if N1+N2 > 0. +C LDC >= 1 if N1+N2 = 0. +C +C D (output) DOUBLE PRECISION array, dimension (LDD,M1+M2) +C The leading PbyM part of this array contains the +C input/output matrix D for the resulting system. +C The array D can overlap D1 if OVER = 'O'. +C +C LDD INTEGER +C The leading dimension of array D. LDD >= MAX(1,P1+P2). +C +C Error Indicator +C +C INFO INTEGER +C = 0: successful exit; +C < 0: if INFO = i, the ith argument had an illegal +C value. +C +C METHOD +C +C The matrices of the resulting systems are determined as: +C +C ( A1 0 ) ( B1 0 ) +C A = ( ) , B = ( ) , +C ( 0 A2 ) ( 0 B2 ) +C +C ( C1 0 ) ( D1 0 ) +C C = ( ) , D = ( ) . +C ( 0 C2 ) ( 0 D2 ) +C +C REFERENCES +C +C None +C +C CONTRIBUTORS +C +C A. Varga, German Aerospace Research Establishment, +C Oberpfaffenhofen, Germany, and V. Sima, Katholieke Univ. Leuven, +C Belgium, Nov. 1996. +C +C REVISIONS +C +C V. Sima, Research Institute for Informatics, Bucharest, Feb. 2004. +C +C KEYWORDS +C +C Multivariable system, statespace model, statespace +C representation. +C +C ****************************************************************** +C +C .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO=0.0D0 ) +C .. Scalar Arguments .. + CHARACTER OVER + INTEGER INFO, LDA, LDA1, LDA2, LDB, LDB1, LDB2, LDC, + $ LDC1, LDC2, LDD, LDD1, LDD2, M, M1, M2, N, N1, + $ N2, P, P1, P2 +C .. Array Arguments .. + DOUBLE PRECISION A(LDA,*), A1(LDA1,*), A2(LDA2,*), B(LDB,*), + $ B1(LDB1,*), B2(LDB2,*), C(LDC,*), C1(LDC1,*), + $ C2(LDC2,*), D(LDD,*), D1(LDD1,*), D2(LDD2,*) +C .. Local Scalars .. + LOGICAL LOVER + INTEGER I, J +C .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +C .. External Subroutines .. + EXTERNAL DLACPY, DLASET, XERBLA +C .. Intrinsic Functions .. + INTRINSIC MAX, MIN +C .. Executable Statements .. +C + LOVER = LSAME( OVER, 'O' ) + N = N1 + N2 + M = M1 + M2 + P = P1 + P2 + INFO = 0 +C +C Test the input scalar arguments. +C + IF( .NOT.LOVER .AND. .NOT.LSAME( OVER, 'N' ) ) THEN + INFO = 1 + ELSE IF( N1.LT.0 ) THEN + INFO = 2 + ELSE IF( M1.LT.0 ) THEN + INFO = 3 + ELSE IF( P1.LT.0 ) THEN + INFO = 4 + ELSE IF( N2.LT.0 ) THEN + INFO = 5 + ELSE IF( M2.LT.0 ) THEN + INFO = 6 + ELSE IF( P2.LT.0 ) THEN + INFO = 7 + ELSE IF( LDA1.LT.MAX( 1, N1 ) ) THEN + INFO = 9 + ELSE IF( LDB1.LT.MAX( 1, N1 ) ) THEN + INFO = 11 + ELSE IF( ( N1.GT.0 .AND. LDC1.LT.MAX( 1, P1 ) ) .OR. + $ ( N1.EQ.0 .AND. LDC1.LT.1 ) ) THEN + INFO = 13 + ELSE IF( LDD1.LT.MAX( 1, P1 ) ) THEN + INFO = 15 + ELSE IF( LDA2.LT.MAX( 1, N2 ) ) THEN + INFO = 17 + ELSE IF( LDB2.LT.MAX( 1, N2 ) ) THEN + INFO = 19 + ELSE IF( ( N2.GT.0 .AND. LDC2.LT.MAX( 1, P2 ) ) .OR. + $ ( N2.EQ.0 .AND. LDC2.LT.1 ) ) THEN + INFO = 21 + ELSE IF( LDD2.LT.MAX( 1, P2 ) ) THEN + INFO = 23 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = 28 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = 30 + ELSE IF( ( N.GT.0 .AND. LDC.LT.MAX( 1, P ) ) .OR. + $ ( N.EQ.0 .AND. LDC.LT.1 ) ) THEN + INFO = 32 + ELSE IF( LDD.LT.MAX( 1, P ) ) THEN + INFO = 34 + END IF +C + IF ( INFO.NE.0 ) THEN +C +C Error return. +C + CALL XERBLA( 'AB05QD', INFO ) + RETURN + END IF +C +C Quick return if possible. +C + IF ( MAX( N, MIN( M, P ) ).EQ.0 ) + $ RETURN +C ( A1 0 ) +C Construct A = ( ) . +C ( 0 A2 ) +C + IF ( LOVER .AND. LDA1.LE.LDA ) THEN + IF ( LDA1.LT.LDA ) THEN +C + DO 20 J = N1, 1, 1 + DO 10 I = N1, 1, 1 + A(I,J) = A1(I,J) + 10 CONTINUE + 20 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', N1, N1, A1, LDA1, A, LDA ) + END IF +C + IF ( N2.GT.0 ) THEN + CALL DLASET( 'F', N1, N2, ZERO, ZERO, A(1,N1+1), LDA ) + CALL DLASET( 'F', N2, N1, ZERO, ZERO, A(N1+1,1), LDA ) + CALL DLACPY( 'F', N2, N2, A2, LDA2, A(N1+1,N1+1), LDA ) + END IF +C +C ( B1 0 ) +C Construct B = ( ) . +C ( 0 B2 ) +C + IF ( LOVER .AND. LDB1.LE.LDB ) THEN + IF ( LDB1.LT.LDB ) THEN +C + DO 40 J = M1, 1, 1 + DO 30 I = N1, 1, 1 + B(I,J) = B1(I,J) + 30 CONTINUE + 40 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', N1, M1, B1, LDB1, B, LDB ) + END IF +C + IF ( M2.GT.0 ) + $ CALL DLASET( 'F', N1, M2, ZERO, ZERO, B(1,M1+1), LDB ) + IF ( N2.GT.0 ) THEN + CALL DLASET( 'F', N2, M1, ZERO, ZERO, B(N1+1,1), LDB ) + IF ( M2.GT.0 ) + $ CALL DLACPY( 'F', N2, M2, B2, LDB2, B(N1+1,M1+1), LDB ) + END IF +C +C ( C1 0 ) +C Construct C = ( ) . +C ( 0 C2 ) +C + IF ( LOVER .AND. LDC1.LE.LDC ) THEN + IF ( LDC1.LT.LDC ) THEN +C + DO 60 J = N1, 1, 1 + DO 50 I = P1, 1, 1 + C(I,J) = C1(I,J) + 50 CONTINUE + 60 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', P1, N1, C1, LDC1, C, LDC ) + END IF +C + IF ( N2.GT.0 ) + $ CALL DLASET( 'F', P1, N2, ZERO, ZERO, C(1,N1+1), LDC ) + IF ( P2.GT.0 ) THEN + IF ( N1.GT.0 ) + $ CALL DLASET( 'F', P2, N1, ZERO, ZERO, C(P1+1,1), LDC ) + IF ( N2.GT.0 ) + $ CALL DLACPY( 'F', P2, N2, C2, LDC2, C(P1+1,N1+1), LDC ) + END IF +C +C ( D1 0 ) +C Construct D = ( ) . +C ( 0 D2 ) +C + IF ( LOVER .AND. LDD1.LE.LDD ) THEN + IF ( LDD1.LT.LDD ) THEN +C + DO 80 J = M1, 1, 1 + DO 70 I = P1, 1, 1 + D(I,J) = D1(I,J) + 70 CONTINUE + 80 CONTINUE +C + END IF + ELSE + CALL DLACPY( 'F', P1, M1, D1, LDD1, D, LDD ) + END IF +C + IF ( M2.GT.0 ) + $ CALL DLASET( 'F', P1, M2, ZERO, ZERO, D(1,M1+1), LDD ) + IF ( P2.GT.0 ) THEN + CALL DLASET( 'F', P2, M1, ZERO, ZERO, D(P1+1,1), LDD ) + IF ( M2.GT.0 ) + $ CALL DLACPY( 'F', P2, M2, D2, LDD2, D(P1+1,M1+1), LDD ) + END IF +C + RETURN +C *** Last line of AB05QD *** + END Added: trunk/octaveforge/extra/controldevel/src/AB07MD.f ===================================================================  trunk/octaveforge/extra/controldevel/src/AB07MD.f (rev 0) +++ trunk/octaveforge/extra/controldevel/src/AB07MD.f 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,224 @@ + SUBROUTINE AB07MD( JOBD, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD, + $ INFO ) +C +C SLICOT RELEASE 5.0. +C +C Copyright (c) 20022009 NICONET e.V. +C +C This program is free software: you can redistribute it and/or +C modify it under the terms of the GNU General Public License as +C published by the Free Software Foundation, either version 2 of +C the License, or (at your option) any later version. +C +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. +C +C You should have received a copy of the GNU General Public License +C along with this program. If not, see +C <http://www.gnu.org/licenses/>;. +C +C PURPOSE +C +C To find the dual of a given statespace representation. +C +C ARGUMENTS +C +C Mode Parameters +C +C JOBD CHARACTER*1 +C Specifies whether or not a nonzero matrix D appears in +C the given state space model: +C = 'D': D is present; +C = 'Z': D is assumed a zero matrix. +C +C Input/Output Parameters +C +C N (input) INTEGER +C The order of the statespace representation. N >= 0. +C +C M (input) INTEGER +C The number of system inputs. M >= 0. +C +C P (input) INTEGER +C The number of system outputs. P >= 0. +C +C A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +C On entry, the leading NbyN part of this array must +C contain the original state dynamics matrix A. +C On exit, the leading NbyN part of this array contains +C the dual state dynamics matrix A'. +C +C LDA INTEGER +C The leading dimension of array A. LDA >= MAX(1,N). +C +C B (input/output) DOUBLE PRECISION array, dimension +C (LDB,MAX(M,P)) +C On entry, the leading NbyM part of this array must +C contain the original input/state matrix B. +C On exit, the leading NbyP part of this array contains +C the dual input/state matrix C'. +C +C LDB INTEGER +C The leading dimension of array B. LDB >= MAX(1,N). +C +C C (input/output) DOUBLE PRECISION array, dimension (LDC,N) +C On entry, the leading PbyN part of this array must +C contain the original state/output matrix C. +C On exit, the leading MbyN part of this array contains +C the dual state/output matrix B'. +C +C LDC INTEGER +C The leading dimension of array C. +C LDC >= MAX(1,M,P) if N > 0. +C LDC >= 1 if N = 0. +C +C D (input/output) DOUBLE PRECISION array, dimension +C (LDD,MAX(M,P)) +C On entry, if JOBD = 'D', the leading PbyM part of this +C array must contain the original direct transmission +C matrix D. +C On exit, if JOBD = 'D', the leading MbyP part of this +C array contains the dual direct transmission matrix D'. +C The array D is not referenced if JOBD = 'Z'. +C +C LDD INTEGER +C The leading dimension of array D. +C LDD >= MAX(1,M,P) if JOBD = 'D'. +C LDD >= 1 if JOBD = 'Z'. +C +C Error Indicator +C +C INFO INTEGER +C = 0: successful exit; +C < 0: if INFO = i, the ith argument had an illegal +C value. +C +C METHOD +C +C If the given statespace representation is the Minput/Poutput +C (A,B,C,D), its dual is simply the Pinput/Moutput (A',C',B',D'). +C +C REFERENCES +C +C None +C +C NUMERICAL ASPECTS +C +C None +C +C CONTRIBUTOR +C +C Release 3.0: V. Sima, Katholieke Univ. Leuven, Belgium, Dec. 1996. +C Supersedes Release 2.0 routine AB07AD by T.W.C.Williams, Kingston +C Polytechnic, United Kingdom, March 1982. +C +C REVISIONS +C +C V. Sima, Research Institute for Informatics, Bucharest, Feb. 2004. +C +C KEYWORDS +C +C Dual system, statespace model, statespace representation. +C +C ****************************************************************** +C +C .. Scalar Arguments .. + CHARACTER JOBD + INTEGER INFO, LDA, LDB, LDC, LDD, M, N, P +C .. Array Arguments .. + DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*) +C .. Local Scalars .. + LOGICAL LJOBD + INTEGER J, MINMP, MPLIM +C .. External functions .. + LOGICAL LSAME + EXTERNAL LSAME +C .. External subroutines .. + EXTERNAL DCOPY, DSWAP, XERBLA +C .. Intrinsic Functions .. + INTRINSIC MAX, MIN +C .. Executable Statements .. +C + INFO = 0 + LJOBD = LSAME( JOBD, 'D' ) + MPLIM = MAX( M, P ) + MINMP = MIN( M, P ) +C +C Test the input scalar arguments. +C + IF( .NOT.LJOBD .AND. .NOT.LSAME( JOBD, 'Z' ) ) THEN + INFO = 1 + ELSE IF( N.LT.0 ) THEN + INFO = 2 + ELSE IF( M.LT.0 ) THEN + INFO = 3 + ELSE IF( P.LT.0 ) THEN + INFO = 4 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = 6 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = 8 + ELSE IF( ( N.GT.0 .AND. LDC.LT.MAX( 1, MPLIM ) ) .OR. + $ ( N.EQ.0 .AND. LDC.LT.1 ) ) THEN + INFO = 10 + ELSE IF( ( LJOBD .AND. LDD.LT.MAX( 1, MPLIM ) ) .OR. + $ ( .NOT.LJOBD .AND. LDD.LT.1 ) ) THEN + INFO = 12 + END IF +C + IF ( INFO.NE.0 ) THEN +C +C Error return. +C + CALL XERBLA( 'AB07MD', INFO ) + RETURN + END IF +C +C Quick return if possible. +C + IF ( MAX( N, MINMP ).EQ.0 ) + $ RETURN +C + IF ( N.GT.0 ) THEN +C +C Transpose A, if nonscalar. +C + DO 10 J = 1, N  1 + CALL DSWAP( NJ, A(J+1,J), 1, A(J,J+1), LDA ) + 10 CONTINUE +C +C Replace B by C' and C by B'. +C + DO 20 J = 1, MPLIM + IF ( J.LE.MINMP ) THEN + CALL DSWAP( N, B(1,J), 1, C(J,1), LDC ) + ELSE IF ( J.GT.P ) THEN + CALL DCOPY( N, B(1,J), 1, C(J,1), LDC ) + ELSE + CALL DCOPY( N, C(J,1), LDC, B(1,J), 1 ) + END IF + 20 CONTINUE +C + END IF +C + IF ( LJOBD .AND. MINMP.GT.0 ) THEN +C +C Transpose D, if nonscalar. +C + DO 30 J = 1, MPLIM + IF ( J.LT.MINMP ) THEN + CALL DSWAP( MINMPJ, D(J+1,J), 1, D(J,J+1), LDD ) + ELSE IF ( J.GT.P ) THEN + CALL DCOPY( P, D(1,J), 1, D(J,1), LDD ) + ELSE IF ( J.GT.M ) THEN + CALL DCOPY( M, D(J,1), LDD, D(1,J), 1 ) + END IF + 30 CONTINUE +C + END IF +C + RETURN +C *** Last line of AB07MD *** + END Copied: trunk/octaveforge/extra/controldevel/src/AB07ND.f (from rev 8749, trunk/octaveforge/main/control/devel/slred/slconred/AB07ND.f) ===================================================================  trunk/octaveforge/extra/controldevel/src/AB07ND.f (rev 0) +++ trunk/octaveforge/extra/controldevel/src/AB07ND.f 20111015 19:04:14 UTC (rev 8750) @@ 0,0 +1,303 @@ + SUBROUTINE AB07ND( N, M, A, LDA, B, LDB, C, LDC, D, LDD, RCOND, + $ IWORK, DWORK, LDWORK, INFO ) +C +C SLICOT RELEASE 5.0. +C +C Copyright (c) 20022009 NICONET e.V. +C +C This program is free software: you can redistribute it and/or +C modify it under the terms of the GNU General Public License as +C published by the Free Software Foundation, either version 2 of +C the License, or (at your option) any later version. +C +C This program is distributed in the hope that it will be useful, +C but WITHOUT ANY WARRANTY; without even the implied warranty of +C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +C GNU General Public License for more details. +C +C You should have received a copy of the GNU General Public License +C along with this program. If not, see +C <http://www.gnu.org/licenses/>;. +C +C PURPOSE +C +C To compute the inverse (Ai,Bi,Ci,Di) of a given system (A,B,C,D). +C +C ARGUMENTS +C +C Input/Output Parameters +C +C N (input) INTEGER +C The order of the state matrix A. N >= 0. +C +C M (input) INTEGER +C The number of system inputs and outputs. M >= 0. +C +C A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +C On entry, the leading NbyN part of this array must +C contain the state matrix A of the original system. +C On exit, the leading NbyN part of this array contains +C the state matrix Ai of the inverse system. +C +C LDA INTEGER +C The leading dimension of the array A. LDA >= MAX(1,N). +C +C B (input/output) DOUBLE PRECISION array, dimension (LDB,M) +C On entry, the leading NbyM part of this array must +C contain the input matrix B of the original system. +C On exit, the leading NbyM part of this array contains +C the input matrix Bi of the inverse system. +C +C LDB INTEGER +C The leading dimension of the array B. LDB >= MAX(1,N). +C +C C (input/output) DOUBLE PRECISION array, dimension (LDC,N) +C On entry, the leading MbyN part of this array must +C contain the output matrix C of the original system. +C On exit, the leading MbyN part of this array contains +C the output matrix Ci of the inverse system. +C +C LDC INTEGER +C The leading dimension of the array C. LDC >= MAX(1,M). +C +C D (input/output) DOUBLE PRECISION array, dimension (LDD,M) +C On entry, the leading MbyM part of this array must +C contain the feedthrough matrix D of the original system. +C On exit, the leading MbyM part of this array contains +C the feedthrough matrix Di of the inverse system. +C +C LDD INTEGER +C The leading dimension of the array D. LDD >= MAX(1,M). +C +C RCOND (output) DOUBLE PRECISION +C The estimated reciprocal condition number of the +C feedthrough matrix D of the original system. +C +C Workspace +C +C IWORK INTEGER array, dimension (2*M) +C +C DWORK DOUBLE PRECISION array, dimension (LDWORK) +C On exit, if INFO = 0 or M+1, DWORK(1) returns the optimal +C value of LDWORK. +C +C LDWORK INTEGER +C The length of the array DWORK. LDWORK >= MAX(1,4*M). +C For good performance, LDWORK should be larger. +C +C Error Indicator +C +C INFO INTEGER +C = 0: successful exit; +C < 0: if INFO = i, the ith argument had an illegal +C value; +C = i: the matrix D is exactly singular; the (i,i) diagonal +C element is zero, i <= M; RCOND was set to zero; +C = M+1: the matrix D is numerically singular, i.e., RCOND +C is less than the relative machine precision, EPS +C (see LAPACK Library routine DLAMCH). The +C calculations have been completed, but the results +C could be very inaccurate. +C +C METHOD +C +C The matrices of the inverse system are computed with the formulas: +C 1 1 1 1 +C Ai = A  B*D *C, Bi = B*D , Ci = D *C, Di = D . +C +C NUMERICAL ASPECTS +C +C The accuracy depends mainly on the condition number of the matrix +C D to be inverted. The estimated reciprocal condition number is +C returned in RCOND. +C +C CONTRIBUTORS +C +C A. Varga, German Aerospace Center, Oberpfaffenhofen, March 2000. +C D. Sima, University of Bucharest, April 2000. +C V. Sima, Research Institute for Informatics, Bucharest, Apr. 2000. +C Based on the routine SYSINV, A. Varga, 1992. +C +C REVISIONS +C +C A. Varga, German Aerospace Center, Oberpfaffenhofen, July 2000. +C +C KEYWORDS +C +C Inverse system, statespace model, statespace representation. +C +C ****************************************************************** +C +C .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +C .. Scalar Arguments .. + DOUBLE PRECISION RCOND + INTEGER INFO, LDA, LDB, LDC, LDD, LDWORK, M, N +C .. Array Arguments .. + DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*), + $ DWORK(*) + INTEGER IWORK(*) +C .. Local Scalars .. + DOUBLE PRECISION DNORM + INTEGER BL, CHUNK, I, IERR, J, MAXWRK + LOGICAL BLAS3, BLOCK +C .. External Functions .. + DOUBLE PRECISION DLAMCH, DLANGE + INTEGER ILAENV + EXTERNAL DLAMCH, DLANGE, ILAENV +C .. External Subroutines .. + EXTERNAL DCOPY, DGECON, DGEMM, DGEMV, DGETRF, DGETRI, + $ DLACPY, XERBLA +C .. Intrinsic Functions .. + INTRINSIC DBLE, MAX, MIN +C .. Executable Statements .. +C + INFO = 0 +C +C Test the input scalar arguments. +C + IF( N.LT.0 ) THEN + INFO = 1 + ELSE IF( M.LT.0 ) THEN + INFO = 2 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = 4 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = 6 + ELSE IF( LDC.LT.MAX( 1, M ) ) THEN + INFO = 8 + ELSE IF( LDD.LT.MAX( 1, M ) ) THEN + INFO = 10 + ELSE IF( LDWORK.LT.MAX( 1, 4*M ) ) THEN + INFO = 14 + END IF +C + IF ( INFO.NE.0 ) THEN +C +C Error return. +C + CALL XERBLA( 'AB07ND', INFO ) + RETURN + END IF +C +C Quick return if possible. +C + IF ( M.EQ.0 ) THEN + RCOND = ONE + DWORK(1) = ONE + RETURN + END IF +C +C Factorize D. +C + CALL DGETRF( M, M, D, LDD, IWORK, INFO ) + IF ( INFO.NE.0 ) THEN + RCOND = ZERO + RETURN + END IF +C +C Compute the reciprocal condition number of the matrix D. +C Workspace: need 4*M. +C (Note: Comments in the code beginning "Workspace:" describe the +C minimal amount of workspace needed at that point in the code, +C as well as the preferred amount for good performance. +C NB refers to the optimal block size for the immediately +C following subroutine, as returned by ILAENV.) +C + DNORM = DLANGE( '1norm', M, M, D, LDD, DWORK ) + CALL DGECON( '1norm', M, D, LDD, DNORM, RCOND, DWORK, IWORK(M+1), + $ IERR ) + IF ( RCOND.LT.DLAMCH( 'Epsilon' ) ) + $ INFO = M + 1 +C 1 +C Compute Di = D . +C Workspace: need M; +C prefer M*NB. +C + MAXWRK = MAX( 4*M, M*ILAENV( 1, 'DGETRI', ' ', M, 1, 1, 1 ) ) + CALL DGETRI( M, D, LDD, IWORK, DWORK, LDWORK, IERR ) + IF ( N.GT.0 ) THEN + CHUNK = LDWORK / M + BLAS3 = CHUNK.GE.N .AND. M.GT.1 + BLOCK = MIN( CHUNK, M ).GT.1 +C 1 +C Compute Bi = B*D . +C + IF ( BLAS3 ) THEN +C +C Enough workspace for a fast BLAS 3 algorithm. +C + CALL DLACPY( 'Full', N, M, B, LDB, DWORK, N ) + CALL DGEMM( 'NoTranspose', 'NoTranspose', N, M, M, ONE, + $ DWORK, N, D, LDD, ZERO, B, LDB ) +C + ELSE IF( BLOCK ) THEN +C +C Use as many rows of B as possible. +C + DO 10 I = 1, N, CHUNK + BL = MIN( NI+1, CHUNK ) + CALL DLACPY( 'Full', BL, M, B(I,1), LDB, DWORK, BL ) + CALL DGEMM( 'NoTranspose', 'NoTranspose', BL, M, M, ONE, + $ DWORK, BL, D, LDD, ZERO, B(I,1), LDB ) + 10 CONTINUE +C + ELSE +C +C Use a BLAS 2 algorithm. +C + DO 20 I = 1, N + CALL DCOPY( M, B(I,1), LDB, DWORK, 1 ) + CALL DGEMV( 'Transpose', M, M, ONE, D, LDD, DWORK, 1, + $ ZERO, B(I,1), LDB ) + 20 CONTINUE +C + END IF +C +C Compute Ai = A + Bi*C. +C + CALL DGEMM( 'NoTranspose', 'NoTranspose', N, N, M, ONE, B, LDB, + $ C, LDC, ONE, A, LDA ) +C 1 +C Compute C < D *C. +C + IF ( BLAS3 ) THEN +C +C Enough workspace for a fast BLAS 3 algorithm. +C + CALL DLACPY( 'Full', M, N, C, LDC, DWORK, M ) + CALL DGEMM( 'NoTranspose', 'NoTranspose', M, N, M, ONE, + $ D, LDD, DWORK, M, ZERO, C, LDC ) +C + ELSE IF( BLOCK ) THEN +C +C Use as many columns of C as possible. +C + DO 30 J = 1, N, CHUNK + BL = MIN( NJ+1, CHUNK ) + CALL DLACPY( 'Full', M, BL, C(1,J), LDC, DWORK, M ) + CALL DGEMM( 'NoTranspose', 'NoTranspose', M, BL, M, ONE, + $ D, LDD, DWORK, M, ZERO, C(1,J), LDC ) + 30 CONTINUE +C + ELSE +C +C Use a BLAS 2 algorithm. +C + DO 40 J = 1, N + CALL DCOPY( M, C(1,J), 1, DWORK, 1 ) + CALL DGEMV( 'NoTranspose', M, M, ONE, D, LDD, DWORK, 1, + $ ZERO, C(1,J), 1 ) + 40 CONTINUE +C + END IF + END IF +C +C Return optimal workspace in DWORK(1). +C + DWORK(1) = DBLE( MAX( MAXWRK, N*M ) ) @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. 
From: <paramaniac@us...>  20111015 09:54:49

Revision: 8749 http://octave.svn.sourceforge.net/octave/?rev=8749&view=rev Author: paramaniac Date: 20111015 09:54:43 +0000 (Sat, 15 Oct 2011) Log Message:  control: touch up hsvd, doc still missing Modified Paths:  trunk/octaveforge/main/control/inst/hsvd.m Modified: trunk/octaveforge/main/control/inst/hsvd.m ===================================================================  trunk/octaveforge/main/control/inst/hsvd.m 20111014 19:00:14 UTC (rev 8748) +++ trunk/octaveforge/main/control/inst/hsvd.m 20111015 09:54:43 UTC (rev 8749) @@ 17,7 +17,8 @@ ## * texinfo * ## @deftypefn{Function File} {@var{hsv} =} hsvd (@var{sys}) ## @deftypefnx{Function File} {@var{hsv} =} hsvd (@var{sys}, @var{"offset"}, @var{alpha}) +## @deftypefnx{Function File} {@var{hsv} =} hsvd (@var{sys}, @var{"offset"}, @var{offset}) +## @deftypefnx{Function File} {@var{hsv} =} hsvd (@var{sys}, @var{"alpha"}, @var{alpha}) ## Hankel singular values of the stable part of an LTI model. If no output arguments are ## given, the Hankel singular values are displayed in a plot. ## Uses SLICOT AB13AD by courtesy of @@ 26,32 +27,39 @@ ## Author: Lukas Reichlin <lukas.reichlin@...> ## Created: January 2010 ## Version: 0.3 +## Version: 0.4 function hsv_r = hsvd (sys, prop = "offset", val = 1e8)  if (! nargin) + if (nargin != 1 && nargin != 3) print_usage (); endif  + if (! isa (sys, "lti")) error ("hsvd: first argument must be an LTI system"); endif   if (! strcmp (tolower (prop(1)), "o"))  error ("hsvd: second argument invalid"); + + if (! is_real_scalar (val)) + error ("hsvd: third argument must be a real scalar"); endif  + [a, b, c, ~, ~, scaled] = ssdata (sys); discrete = ! isct (sys); + + switch (tolower (prop(1))) + case "o" # offset + if (discrete) + alpha = 1  val; + else + alpha =  val; + endif + case "a" # alpha + alpha = val; + otherwise + error ("hsvd: second argument invalid"); + endswitch  if (discrete)  alpha = 1  val;  else  alpha =  val;  endif  [hsv, ns] = slab13ad (a, b, c, discrete, alpha, scaled); if (nargout) @@ 89,7 +97,7 @@ %! 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000]; %! %! sys = ss (a, b, c, [], "scaled", true); %! hsv = hsvd (sys); +%! hsv = hsvd (sys, "alpha", 0.0); %! %! hsv_exp = [2.5139; 2.0846; 1.9178; 0.7666; 0.5473; 0.0253; 0.0246]; %! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. 