From: <ha...@us...> - 2008-08-24 16:17:39
|
Revision: 5259 http://octave.svn.sourceforge.net/octave/?rev=5259&view=rev Author: hauberg Date: 2008-08-24 16:17:40 +0000 (Sun, 24 Aug 2008) Log Message: ----------- Bumped version number Modified Paths: -------------- trunk/octave-forge/main/ann/DESCRIPTION trunk/octave-forge/main/audio/DESCRIPTION trunk/octave-forge/main/benchmark/INDEX trunk/octave-forge/main/bioinfo/DESCRIPTION trunk/octave-forge/main/combinatorics/DESCRIPTION trunk/octave-forge/main/comm/DESCRIPTION trunk/octave-forge/main/control/DESCRIPTION trunk/octave-forge/main/database/DESCRIPTION trunk/octave-forge/main/econometrics/DESCRIPTION trunk/octave-forge/main/fixed/DESCRIPTION trunk/octave-forge/main/ftp/DESCRIPTION trunk/octave-forge/main/ga/DESCRIPTION trunk/octave-forge/main/general/DESCRIPTION trunk/octave-forge/main/ident/DESCRIPTION trunk/octave-forge/main/image/DESCRIPTION trunk/octave-forge/main/info-theory/DESCRIPTION trunk/octave-forge/main/io/DESCRIPTION trunk/octave-forge/main/irsa/DESCRIPTION trunk/octave-forge/main/linear-algebra/DESCRIPTION trunk/octave-forge/main/miscellaneous/DESCRIPTION trunk/octave-forge/main/missing-functions/DESCRIPTION trunk/octave-forge/main/nnet/DESCRIPTION trunk/octave-forge/main/octcdf/DESCRIPTION trunk/octave-forge/main/odebvp/DESCRIPTION trunk/octave-forge/main/odepkg/DESCRIPTION trunk/octave-forge/main/optim/DESCRIPTION trunk/octave-forge/main/outliers/DESCRIPTION trunk/octave-forge/main/parallel/DESCRIPTION trunk/octave-forge/main/physical-constants/DESCRIPTION trunk/octave-forge/main/plot/DESCRIPTION trunk/octave-forge/main/signal/DESCRIPTION trunk/octave-forge/main/signal/INDEX trunk/octave-forge/main/sockets/DESCRIPTION trunk/octave-forge/main/specfun/DESCRIPTION trunk/octave-forge/main/special-matrix/DESCRIPTION trunk/octave-forge/main/splines/DESCRIPTION trunk/octave-forge/main/statistics/DESCRIPTION trunk/octave-forge/main/statistics/INDEX trunk/octave-forge/main/strings/DESCRIPTION trunk/octave-forge/main/struct/DESCRIPTION trunk/octave-forge/main/symbolic/DESCRIPTION trunk/octave-forge/main/time/DESCRIPTION trunk/octave-forge/main/video/DESCRIPTION trunk/octave-forge/main/vrml/DESCRIPTION trunk/octave-forge/main/zenity/DESCRIPTION Modified: trunk/octave-forge/main/ann/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ann/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/ann/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: ANN -Version: 1.0 -Date: 2008-04-29 +Version: 1.0.1 +Date: 2008-08-23 Author: Various Authors Maintainer: Xavier Delacour Title: Approximate Nearest Neighbor Library Modified: trunk/octave-forge/main/audio/DESCRIPTION =================================================================== --- trunk/octave-forge/main/audio/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/audio/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Audio -Version: 1.1.1 -Date: 2008-04-29 +Version: 1.1.2 +Date: 2008-08-23 Author: Paul Kienzle Maintainer: Paul Kienzle Title: Audio. Modified: trunk/octave-forge/main/benchmark/INDEX =================================================================== --- trunk/octave-forge/main/benchmark/INDEX 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/benchmark/INDEX 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,11 +1,11 @@ benchmark >> Benchmark Utility - benchutil_default_arg.m - benchutil_initialize.m - benchutil_is_octave.m - benchutil_parse_desc.m - benchutil_set_result.m - benchutil_verbose.m + benchutil_default_arg + benchutil_initialize + benchutil_is_octave + benchutil_parse_desc + benchutil_set_result + benchutil_verbose Benchmarks - benchmark_dtmm.m - benchmark_stmm.m + benchmark_dtmm + benchmark_stmm Modified: trunk/octave-forge/main/bioinfo/DESCRIPTION =================================================================== --- trunk/octave-forge/main/bioinfo/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/bioinfo/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: bioinfo -Version: 0.1.0 -Date: 2008-04-29 +Version: 0.1.1 +Date: 2008-08-23 Author: Bill Denney <bi...@de...> Maintainer: Bill Denney <bi...@de...> Title: Bioinformatics Modified: trunk/octave-forge/main/combinatorics/DESCRIPTION =================================================================== --- trunk/octave-forge/main/combinatorics/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/combinatorics/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Combinatorics -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Torsten Finke <fi...@ig...> Maintainer: Torsten Finke <fi...@ig...> Title: Combinatorics. Modified: trunk/octave-forge/main/comm/DESCRIPTION =================================================================== --- trunk/octave-forge/main/comm/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/comm/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Communications -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: David Bateman Maintainer: David Bateman Title: Communications. Modified: trunk/octave-forge/main/control/DESCRIPTION =================================================================== --- trunk/octave-forge/main/control/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/control/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Control -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Ben Sapp Maintainer: None Title: Control. Modified: trunk/octave-forge/main/database/DESCRIPTION =================================================================== --- trunk/octave-forge/main/database/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/database/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: database -Version: 1.0 -Date: 2008-04-29 +Version: 1.0.1 +Date: 2008-08-23 Author: Xavier Delacour Maintainer: Xavier Delacour Title: Bindings for postgres, mysql, sqlite, and standard ODBC Modified: trunk/octave-forge/main/econometrics/DESCRIPTION =================================================================== --- trunk/octave-forge/main/econometrics/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/econometrics/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Econometrics -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Michael Creel <mic...@ua...> Maintainer: Michael Creel <mic...@ua...> Title: Econometrics. Modified: trunk/octave-forge/main/fixed/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fixed/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/fixed/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Fixed -Version: 0.7.6 -Date: 2008-04-29 +Version: 0.7.7 +Date: 2008-08-23 Author: David Bateman Maintainer: David Bateman Title: Fixed Point Computations. Modified: trunk/octave-forge/main/ftp/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ftp/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/ftp/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: ftp -Version: 1.0 -Date: 2008-04-29 +Version: 1.0.1 +Date: 2008-08-23 Author: Xavier Delacour Maintainer: Xavier Delacour Title: FTP functions Modified: trunk/octave-forge/main/ga/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ga/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/ga/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: ga -Version: 0.9.3 -Date: 2008-08-21 +Version: 0.9.4 +Date: 2008-08-23 Author: Luca Favatella <sla...@gm...> Maintainer: Luca Favatella <sla...@gm...> Title: Genetic Algorithm and Direct Search Modified: trunk/octave-forge/main/general/DESCRIPTION =================================================================== --- trunk/octave-forge/main/general/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/general/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: General -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Various authors Maintainer: The Octave Community Title: General Modified: trunk/octave-forge/main/ident/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ident/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/ident/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Ident -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Paul Kienzle Maintainer: Paul Kienzle Title: System Indentification. Modified: trunk/octave-forge/main/image/DESCRIPTION =================================================================== --- trunk/octave-forge/main/image/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/image/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Image -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Image Processing Modified: trunk/octave-forge/main/info-theory/DESCRIPTION =================================================================== --- trunk/octave-forge/main/info-theory/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/info-theory/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: InformationTheory -Version: 0.1.5 -Date: 2008-04-29 +Version: 0.1.6 +Date: 2008-08-23 Author: Muthiah Annamalai Maintainer: Muthiah Annamalai Title: Information Theory Modified: trunk/octave-forge/main/io/DESCRIPTION =================================================================== --- trunk/octave-forge/main/io/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/io/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: io -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Input/Output Modified: trunk/octave-forge/main/irsa/DESCRIPTION =================================================================== --- trunk/octave-forge/main/irsa/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/irsa/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: IRSA -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Joerg Huber Maintainer: Joerg Huber Title: Irregular sampling analysis. Modified: trunk/octave-forge/main/linear-algebra/DESCRIPTION =================================================================== --- trunk/octave-forge/main/linear-algebra/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/linear-algebra/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Linear-Algebra -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Linear Algebra. Modified: trunk/octave-forge/main/miscellaneous/DESCRIPTION =================================================================== --- trunk/octave-forge/main/miscellaneous/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/miscellaneous/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Miscellaneous -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Miscellaneous functions Modified: trunk/octave-forge/main/missing-functions/DESCRIPTION =================================================================== --- trunk/octave-forge/main/missing-functions/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/missing-functions/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: missing-functions -Version: 1.0.0 -Date: 2008-04-29 +Version: 1.0.1 +Date: 2008-08-23 Author: Bill Denney <bi...@de...> Maintainer: Bill Denney <bi...@de...> Title: Missing Functions Modified: trunk/octave-forge/main/nnet/DESCRIPTION =================================================================== --- trunk/octave-forge/main/nnet/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/nnet/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: nnet -Version: 0.1.7 -Date: 2008-04-29 +Version: 0.1.8 +Date: 2008-08-23 Author: Michael Schmid Maintainer: Michael Schmid Title: Neural Networks Modified: trunk/octave-forge/main/octcdf/DESCRIPTION =================================================================== --- trunk/octave-forge/main/octcdf/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/octcdf/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: octcdf -Version: 1.0.10 -Date: 2008-06-19 +Version: 1.0.11 +Date: 2008-08-23 Author: Alexander Barth <ab...@ma...> Maintainer: Alexander Barth <ab...@ma...> Title: octcdf Modified: trunk/octave-forge/main/odebvp/DESCRIPTION =================================================================== --- trunk/octave-forge/main/odebvp/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/odebvp/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: odebvp -Version: 1.0.4 -Date: 2008-04-29 +Version: 1.0.5 +Date: 2008-08-23 Author: Tiago Charters de Azevedo Maintainer: Tiago Charters de Azevedo Title: Linear-difference method for linear odes - boundary-value problem Modified: trunk/octave-forge/main/odepkg/DESCRIPTION =================================================================== --- trunk/octave-forge/main/odepkg/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/odepkg/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: OdePkg -Version: 0.6.2 -Date: 2008-07-23 +Version: 0.6.3 +Date: 2008-08-23 Author: Thomas Treichl Maintainer: Thomas Treichl Title: OdePkg. Modified: trunk/octave-forge/main/optim/DESCRIPTION =================================================================== --- trunk/octave-forge/main/optim/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/optim/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Optim -Version: 1.0.3 -Date: 2008-05-07 +Version: 1.0.4 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Optimzation. Modified: trunk/octave-forge/main/outliers/DESCRIPTION =================================================================== --- trunk/octave-forge/main/outliers/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/outliers/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Outliers -Version: 0.13.7 -Date: 2008-04-29 +Version: 0.13.8 +Date: 2008-08-23 Author: Lukasz Komsta Maintainer: Lukasz Komsta Title: Outlier Detection Modified: trunk/octave-forge/main/parallel/DESCRIPTION =================================================================== --- trunk/octave-forge/main/parallel/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/parallel/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Parallel -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Hayato Fujiwara Maintainer: Hayato Fujiwara Title: Parallel Computing. Modified: trunk/octave-forge/main/physical-constants/DESCRIPTION =================================================================== --- trunk/octave-forge/main/physical-constants/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/physical-constants/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: PhysicalConstants -Version: 0.1.5 -Date: 2008-04-29 +Version: 0.1.6 +Date: 2008-08-23 Author: Muthiah Annamalai Maintainer: Muthiah Annamalai Title: Physical Constants Modified: trunk/octave-forge/main/plot/DESCRIPTION =================================================================== --- trunk/octave-forge/main/plot/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/plot/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Plot -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Plotting. Modified: trunk/octave-forge/main/signal/DESCRIPTION =================================================================== --- trunk/octave-forge/main/signal/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/signal/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Signal -Version: 1.0.7 -Date: 2008-04-29 +Version: 1.0.8 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Signal Processing. Modified: trunk/octave-forge/main/signal/INDEX =================================================================== --- trunk/octave-forge/main/signal/INDEX 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/signal/INDEX 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,7 +1,6 @@ $SPCTOOLS= in spline directory of Dennis Brown's <a href="ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/tools/spctools">SPCtools</a> $TFTB= try <a href="http://www-isis.enst.fr/Applications/tftb/iutsn.univ-nantes.fr/auger/tftb.html">Time-Frequency Tool box</a> - signal >> Signal processing Signals diric @@ -101,6 +100,9 @@ icceps cplxreal bitrevorder + dwt + fht + ifht Power spectrum analysis pwelch tfe @@ -166,3 +168,7 @@ yulewalk=use <f>yulewalker</f> Utility buffer + fracshift + wkeep + wrev + Modified: trunk/octave-forge/main/sockets/DESCRIPTION =================================================================== --- trunk/octave-forge/main/sockets/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/sockets/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: sockets -Version: 1.0.4 -Date: 2008-04-29 +Version: 1.0.5 +Date: 2008-08-23 Author: John Swensen <jps...@co...> Maintainer: Tom Holroyd <to...@ku...> Title: Sockets Modified: trunk/octave-forge/main/specfun/DESCRIPTION =================================================================== --- trunk/octave-forge/main/specfun/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/specfun/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Specfun -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Specfun Modified: trunk/octave-forge/main/special-matrix/DESCRIPTION =================================================================== --- trunk/octave-forge/main/special-matrix/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/special-matrix/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: special-matrix -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Paul Kienzle <pki...@us...> Maintainer: Paul Kienzle <pki...@us...> Title: Special Matrices Modified: trunk/octave-forge/main/splines/DESCRIPTION =================================================================== --- trunk/octave-forge/main/splines/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/splines/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: splines -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Kai Habel and Paul Kienzle Maintainer: Kai Habel and Paul Kienzle Title: Splines. Modified: trunk/octave-forge/main/statistics/DESCRIPTION =================================================================== --- trunk/octave-forge/main/statistics/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/statistics/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Statistics -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Statistics. Modified: trunk/octave-forge/main/statistics/INDEX =================================================================== --- trunk/octave-forge/main/statistics/INDEX 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/statistics/INDEX 2008-08-24 16:17:40 UTC (rev 5259) @@ -61,3 +61,9 @@ pdist linkage squareform +Reading and Writing + caseread + casewrite + tblread + tblwrite + Modified: trunk/octave-forge/main/strings/DESCRIPTION =================================================================== --- trunk/octave-forge/main/strings/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/strings/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: strings -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: String Handling. Modified: trunk/octave-forge/main/struct/DESCRIPTION =================================================================== --- trunk/octave-forge/main/struct/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/struct/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Struct -Version: 1.0.5 -Date: 2008-04-29 +Version: 1.0.6 +Date: 2008-08-23 Author: Etienne Grossmann Maintainer: Etienne Grossmann Title: Structure Handling. Modified: trunk/octave-forge/main/symbolic/DESCRIPTION =================================================================== --- trunk/octave-forge/main/symbolic/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/symbolic/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Symbolic -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Title: Symbolic Computations. Modified: trunk/octave-forge/main/time/DESCRIPTION =================================================================== --- trunk/octave-forge/main/time/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/time/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: time -Version: 1.0.7 -Date: 2008-04-29 +Version: 1.0.8 +Date: 2008-08-23 Author: Bill Denney <bi...@de...> Maintainer: Bill Denney <bi...@de...> Title: Time and Dates Modified: trunk/octave-forge/main/video/DESCRIPTION =================================================================== --- trunk/octave-forge/main/video/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/video/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: video -Version: 1.0.0 -Date: 2008-04-29 +Version: 1.0.1 +Date: 2008-08-23 Author: Stefan van der Walt, Roman Stanchak Maintainer: Xavier Delacour Title: Video functions Modified: trunk/octave-forge/main/vrml/DESCRIPTION =================================================================== --- trunk/octave-forge/main/vrml/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/vrml/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Vrml -Version: 1.0.6 -Date: 2008-04-29 +Version: 1.0.7 +Date: 2008-08-23 Author: Etienne Grossmann Maintainer: Etienne Grossmann Title: VRML. Modified: trunk/octave-forge/main/zenity/DESCRIPTION =================================================================== --- trunk/octave-forge/main/zenity/DESCRIPTION 2008-08-24 16:15:20 UTC (rev 5258) +++ trunk/octave-forge/main/zenity/DESCRIPTION 2008-08-24 16:17:40 UTC (rev 5259) @@ -1,6 +1,6 @@ Name: Zenity -Version: 0.5.5 -Date: 2008-04-29 +Version: 0.5.6 +Date: 2008-08-23 Author: S\xF8ren Hauberg Maintainer: S\xF8ren Hauberg Title: Zenity This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-31 17:53:54
|
Revision: 5287 http://octave.svn.sourceforge.net/octave/?rev=5287&view=rev Author: hauberg Date: 2008-08-31 17:53:57 +0000 (Sun, 31 Aug 2008) Log Message: ----------- Update version number Modified Paths: -------------- trunk/octave-forge/main/comm/DESCRIPTION trunk/octave-forge/main/data-smoothing/DESCRIPTION trunk/octave-forge/main/fixed/DESCRIPTION trunk/octave-forge/main/image/DESCRIPTION trunk/octave-forge/main/odepkg/DESCRIPTION trunk/octave-forge/main/vrml/DESCRIPTION Modified: trunk/octave-forge/main/comm/DESCRIPTION =================================================================== --- trunk/octave-forge/main/comm/DESCRIPTION 2008-08-31 16:55:03 UTC (rev 5286) +++ trunk/octave-forge/main/comm/DESCRIPTION 2008-08-31 17:53:57 UTC (rev 5287) @@ -1,5 +1,5 @@ Name: Communications -Version: 1.0.7 +Version: 1.0.8 Date: 2008-08-23 Author: David Bateman Maintainer: David Bateman Modified: trunk/octave-forge/main/data-smoothing/DESCRIPTION =================================================================== --- trunk/octave-forge/main/data-smoothing/DESCRIPTION 2008-08-31 16:55:03 UTC (rev 5286) +++ trunk/octave-forge/main/data-smoothing/DESCRIPTION 2008-08-31 17:53:57 UTC (rev 5287) @@ -1,5 +1,5 @@ Name: data-smoothing -Version: 1.1.0 +Version: 1.1.1 Date: 2008-08-21 Author: Jonathan Stickel Maintainer: The Octave Community Modified: trunk/octave-forge/main/fixed/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fixed/DESCRIPTION 2008-08-31 16:55:03 UTC (rev 5286) +++ trunk/octave-forge/main/fixed/DESCRIPTION 2008-08-31 17:53:57 UTC (rev 5287) @@ -1,5 +1,5 @@ Name: Fixed -Version: 0.7.7 +Version: 0.7.8 Date: 2008-08-23 Author: David Bateman Maintainer: David Bateman Modified: trunk/octave-forge/main/image/DESCRIPTION =================================================================== --- trunk/octave-forge/main/image/DESCRIPTION 2008-08-31 16:55:03 UTC (rev 5286) +++ trunk/octave-forge/main/image/DESCRIPTION 2008-08-31 17:53:57 UTC (rev 5287) @@ -1,5 +1,5 @@ Name: Image -Version: 1.0.7 +Version: 1.0.8 Date: 2008-08-23 Author: Various Authors Maintainer: The Octave Community Modified: trunk/octave-forge/main/odepkg/DESCRIPTION =================================================================== --- trunk/octave-forge/main/odepkg/DESCRIPTION 2008-08-31 16:55:03 UTC (rev 5286) +++ trunk/octave-forge/main/odepkg/DESCRIPTION 2008-08-31 17:53:57 UTC (rev 5287) @@ -1,5 +1,5 @@ Name: OdePkg -Version: 0.6.3 +Version: 0.6.4 Date: 2008-08-23 Author: Thomas Treichl Maintainer: Thomas Treichl Modified: trunk/octave-forge/main/vrml/DESCRIPTION =================================================================== --- trunk/octave-forge/main/vrml/DESCRIPTION 2008-08-31 16:55:03 UTC (rev 5286) +++ trunk/octave-forge/main/vrml/DESCRIPTION 2008-08-31 17:53:57 UTC (rev 5287) @@ -1,5 +1,5 @@ Name: Vrml -Version: 1.0.7 +Version: 1.0.8 Date: 2008-08-23 Author: Etienne Grossmann Maintainer: Etienne Grossmann This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ad...@us...> - 2008-10-01 10:00:45
|
Revision: 5326 http://octave.svn.sourceforge.net/octave/?rev=5326&view=rev Author: adb014 Date: 2008-10-01 09:59:40 +0000 (Wed, 01 Oct 2008) Log Message: ----------- Import control, quaternion and finance packages from Octave Modified Paths: -------------- trunk/octave-forge/main/INDEX trunk/octave-forge/main/control/INDEX trunk/octave-forge/main/financial/DESCRIPTION Added Paths: ----------- trunk/octave-forge/main/control/Makefile trunk/octave-forge/main/control/doc/ trunk/octave-forge/main/control/doc/Makefile trunk/octave-forge/main/control/doc/OCSTreport trunk/octave-forge/main/control/doc/control.txi trunk/octave-forge/main/control/doc/csrefcard.lt trunk/octave-forge/main/control/inst/DEMOcontrol.m trunk/octave-forge/main/control/inst/__abcddims__.m trunk/octave-forge/main/control/inst/__bodquist__.m trunk/octave-forge/main/control/inst/__freqresp__.m trunk/octave-forge/main/control/inst/__outlist__.m trunk/octave-forge/main/control/inst/__stepimp__.m trunk/octave-forge/main/control/inst/__syschnamesl__.m trunk/octave-forge/main/control/inst/__sysconcat__.m trunk/octave-forge/main/control/inst/__syscont_disc__.m trunk/octave-forge/main/control/inst/__sysdefioname__.m trunk/octave-forge/main/control/inst/__sysdefstname__.m trunk/octave-forge/main/control/inst/__sysgroupn__.m trunk/octave-forge/main/control/inst/__tf2sysl__.m trunk/octave-forge/main/control/inst/__tfl__.m trunk/octave-forge/main/control/inst/__zgpbal__.m trunk/octave-forge/main/control/inst/__zp2ssg2__.m trunk/octave-forge/main/control/inst/abcddim.m trunk/octave-forge/main/control/inst/analdemo.m trunk/octave-forge/main/control/inst/are.m trunk/octave-forge/main/control/inst/axis2dlim.m trunk/octave-forge/main/control/inst/bddemo.m trunk/octave-forge/main/control/inst/bode.m trunk/octave-forge/main/control/inst/bode_bounds.m trunk/octave-forge/main/control/inst/buildssic.m trunk/octave-forge/main/control/inst/c2d.m trunk/octave-forge/main/control/inst/controldemo.m trunk/octave-forge/main/control/inst/ctrb.m trunk/octave-forge/main/control/inst/d2c.m trunk/octave-forge/main/control/inst/damp.m trunk/octave-forge/main/control/inst/dare.m trunk/octave-forge/main/control/inst/dcgain.m trunk/octave-forge/main/control/inst/dezero.m trunk/octave-forge/main/control/inst/dgkfdemo.m trunk/octave-forge/main/control/inst/dgram.m trunk/octave-forge/main/control/inst/dhinfdemo.m trunk/octave-forge/main/control/inst/dkalman.m trunk/octave-forge/main/control/inst/dlqe.m trunk/octave-forge/main/control/inst/dlqg.m trunk/octave-forge/main/control/inst/dlqr.m trunk/octave-forge/main/control/inst/dlyap.m trunk/octave-forge/main/control/inst/dmr2d.m trunk/octave-forge/main/control/inst/dre.m trunk/octave-forge/main/control/inst/fir2sys.m trunk/octave-forge/main/control/inst/frdemo.m trunk/octave-forge/main/control/inst/freqchkw.m trunk/octave-forge/main/control/inst/gram.m trunk/octave-forge/main/control/inst/h2norm.m trunk/octave-forge/main/control/inst/h2syn.m trunk/octave-forge/main/control/inst/hinf_ctr.m trunk/octave-forge/main/control/inst/hinfdemo.m trunk/octave-forge/main/control/inst/hinfnorm.m trunk/octave-forge/main/control/inst/hinfsyn.m trunk/octave-forge/main/control/inst/hinfsyn_chk.m trunk/octave-forge/main/control/inst/hinfsyn_ric.m trunk/octave-forge/main/control/inst/impulse.m trunk/octave-forge/main/control/inst/is_abcd.m trunk/octave-forge/main/control/inst/is_controllable.m trunk/octave-forge/main/control/inst/is_detectable.m trunk/octave-forge/main/control/inst/is_dgkf.m trunk/octave-forge/main/control/inst/is_digital.m trunk/octave-forge/main/control/inst/is_observable.m trunk/octave-forge/main/control/inst/is_sample.m trunk/octave-forge/main/control/inst/is_signal_list.m trunk/octave-forge/main/control/inst/is_siso.m trunk/octave-forge/main/control/inst/is_stabilizable.m trunk/octave-forge/main/control/inst/is_stable.m trunk/octave-forge/main/control/inst/jet707.m trunk/octave-forge/main/control/inst/lqe.m trunk/octave-forge/main/control/inst/lqg.m trunk/octave-forge/main/control/inst/lqr.m trunk/octave-forge/main/control/inst/lsim.m trunk/octave-forge/main/control/inst/ltifr.m trunk/octave-forge/main/control/inst/lyap.m trunk/octave-forge/main/control/inst/minfo.m trunk/octave-forge/main/control/inst/moddemo.m trunk/octave-forge/main/control/inst/nichols.m trunk/octave-forge/main/control/inst/nyquist.m trunk/octave-forge/main/control/inst/obsv.m trunk/octave-forge/main/control/inst/ord2.m trunk/octave-forge/main/control/inst/packedform.m trunk/octave-forge/main/control/inst/packsys.m trunk/octave-forge/main/control/inst/parallel.m trunk/octave-forge/main/control/inst/place.m trunk/octave-forge/main/control/inst/prompt.m trunk/octave-forge/main/control/inst/pzmap.m trunk/octave-forge/main/control/inst/qzval.m trunk/octave-forge/main/control/inst/rldemo.m trunk/octave-forge/main/control/inst/rlocus.m trunk/octave-forge/main/control/inst/rotg.m trunk/octave-forge/main/control/inst/run_cmd.m trunk/octave-forge/main/control/inst/series.m trunk/octave-forge/main/control/inst/sortcom.m trunk/octave-forge/main/control/inst/ss.m trunk/octave-forge/main/control/inst/ss2sys.m trunk/octave-forge/main/control/inst/ss2tf.m trunk/octave-forge/main/control/inst/ss2zp.m trunk/octave-forge/main/control/inst/starp.m trunk/octave-forge/main/control/inst/step.m trunk/octave-forge/main/control/inst/strappend.m trunk/octave-forge/main/control/inst/swap.m trunk/octave-forge/main/control/inst/swapcols.m trunk/octave-forge/main/control/inst/swaprows.m trunk/octave-forge/main/control/inst/sys2fir.m trunk/octave-forge/main/control/inst/sys2ss.m trunk/octave-forge/main/control/inst/sys2tf.m trunk/octave-forge/main/control/inst/sys2zp.m trunk/octave-forge/main/control/inst/sysadd.m trunk/octave-forge/main/control/inst/sysappend.m trunk/octave-forge/main/control/inst/syschnames.m trunk/octave-forge/main/control/inst/syschtsam.m trunk/octave-forge/main/control/inst/sysconnect.m trunk/octave-forge/main/control/inst/syscont.m trunk/octave-forge/main/control/inst/sysdimensions.m trunk/octave-forge/main/control/inst/sysdisc.m trunk/octave-forge/main/control/inst/sysdup.m trunk/octave-forge/main/control/inst/sysgetsignals.m trunk/octave-forge/main/control/inst/sysgettsam.m trunk/octave-forge/main/control/inst/sysgettype.m trunk/octave-forge/main/control/inst/sysgroup.m trunk/octave-forge/main/control/inst/sysidx.m trunk/octave-forge/main/control/inst/sysmin.m trunk/octave-forge/main/control/inst/sysmult.m trunk/octave-forge/main/control/inst/sysout.m trunk/octave-forge/main/control/inst/sysprune.m trunk/octave-forge/main/control/inst/sysreorder.m trunk/octave-forge/main/control/inst/sysrepdemo.m trunk/octave-forge/main/control/inst/sysscale.m trunk/octave-forge/main/control/inst/syssetsignals.m trunk/octave-forge/main/control/inst/syssub.m trunk/octave-forge/main/control/inst/sysupdate.m trunk/octave-forge/main/control/inst/tf.m trunk/octave-forge/main/control/inst/tf2ss.m trunk/octave-forge/main/control/inst/tf2sys.m trunk/octave-forge/main/control/inst/tf2zp.m trunk/octave-forge/main/control/inst/tfout.m trunk/octave-forge/main/control/inst/tzero.m trunk/octave-forge/main/control/inst/tzero2.m trunk/octave-forge/main/control/inst/ugain.m trunk/octave-forge/main/control/inst/unpacksys.m trunk/octave-forge/main/control/inst/wgt1o.m trunk/octave-forge/main/control/inst/zgfmul.m trunk/octave-forge/main/control/inst/zgfslv.m trunk/octave-forge/main/control/inst/zginit.m trunk/octave-forge/main/control/inst/zgreduce.m trunk/octave-forge/main/control/inst/zgrownorm.m trunk/octave-forge/main/control/inst/zgscal.m trunk/octave-forge/main/control/inst/zgsgiv.m trunk/octave-forge/main/control/inst/zgshsr.m trunk/octave-forge/main/control/inst/zp.m trunk/octave-forge/main/control/inst/zp2ss.m trunk/octave-forge/main/control/inst/zp2sys.m trunk/octave-forge/main/control/inst/zp2tf.m trunk/octave-forge/main/control/inst/zpout.m trunk/octave-forge/main/financial/inst/fv.m trunk/octave-forge/main/financial/inst/fvl.m trunk/octave-forge/main/financial/inst/irr.m trunk/octave-forge/main/financial/inst/nper.m trunk/octave-forge/main/financial/inst/npv.m trunk/octave-forge/main/financial/inst/pmt.m trunk/octave-forge/main/financial/inst/pv.m trunk/octave-forge/main/financial/inst/pvl.m trunk/octave-forge/main/financial/inst/rate.m trunk/octave-forge/main/financial/inst/vol.m trunk/octave-forge/main/quaternion/ trunk/octave-forge/main/quaternion/COPYING trunk/octave-forge/main/quaternion/DESCRIPTION trunk/octave-forge/main/quaternion/doc/ trunk/octave-forge/main/quaternion/doc/quaternion.ps trunk/octave-forge/main/quaternion/inst/ trunk/octave-forge/main/quaternion/inst/demoquat.m trunk/octave-forge/main/quaternion/inst/qconj.m trunk/octave-forge/main/quaternion/inst/qcoordinate_plot.m trunk/octave-forge/main/quaternion/inst/qderiv.m trunk/octave-forge/main/quaternion/inst/qderivmat.m trunk/octave-forge/main/quaternion/inst/qinv.m trunk/octave-forge/main/quaternion/inst/qmult.m trunk/octave-forge/main/quaternion/inst/qtrans.m trunk/octave-forge/main/quaternion/inst/qtransv.m trunk/octave-forge/main/quaternion/inst/qtransvmat.m trunk/octave-forge/main/quaternion/inst/quaternion.m Modified: trunk/octave-forge/main/INDEX =================================================================== --- trunk/octave-forge/main/INDEX 2008-10-01 09:51:38 UTC (rev 5325) +++ trunk/octave-forge/main/INDEX 2008-10-01 09:59:40 UTC (rev 5326) @@ -943,10 +943,6 @@ polyfit polyder polyderiv polyint polyreduce polyout polygcd -Quaternions - quaternion - demoquat qconj qcoordinate_plot qderiv qderivmat qinv qmult - qtrans qtransv qtransvmat Deprecated polyinteg @@ -1227,10 +1223,6 @@ glpkmex lsqnonneg -finance >> Finance -Finance - fv fvl irr nper npv pmt pv pvl rate vol - statistics >> Statistics Deprecated beta_cdf beta_inv beta_pdf beta_rnd @@ -1365,92 +1357,6 @@ ttest2= use <f>t_test_2</f> ztest= use <f>z_test</f> -control >> Control theory -OCST demos - DEMOcontrol - controldemo - sysrepdemo - bddemo jet707 analdemo - frdemo - dgkfdemo hinfdemo dhinfdemo moddemo rldemo -System interface functions - sysrepdemo - fir2sys sys2fir - ss2sys sys2ss - tf2sys sys2tf - zp2sys sys2zp - tf2ss ss2tf - zp2tf tf2zp - zp2ss ss2zp zp - ss - tf -Data structure access - syschtsam - sysdimensions - sysgetsignals - sysgettsam - sysgettype - syssetsignals - sysupdate - minfo -System display functions - sysout polyout tfout zpout -Block diagram manipulations - bddemo jet707 - buildssic ord2 parallel sysadd sysmin - sysappend sysconnect - syscont sysdisc - sysdup sysgroup sysmult sysprune - sysreorder sysscale syssub ugain wgt1o - starp -Numerical functions - are dare dgram dlyap gram lyap pinv dre - zgfmul zgfslv zginit zgreduce zgrownorm zgscal zgsgiv - zgshsr -System properties - analdemo - abcddim ctrb h2norm hinfnorm obsv pzmap - is_abcd is_controllable is_detectable is_dgkf - is_digital is_observable is_sample is_siso is_stabilizable - is_signal_list is_stable -Time domain analysis - c2d d2c dmr2d damp dcgain impulse step -Frequency domain analysis - frdemo - bode bode_bounds nichols - freqchkw ltifr nyquist tzero tzero2 - rlocus -Controller design - dgkfdemo hinfdemo dhinfdemo - dlqe dlqr lqe lqg lqr - hinf_ctr hinfsyn hinfsyn_ric hinfsyn_chk - lsim place dkalman h2syn -Miscellaneous - axis2dlim prompt sortcom swap run_cmd - strappend listidx packedform sysidx -Obsolete - dezero dlqg minfo packsys unpacksys swaprows swapcols rotg qzval - syschnames series -Internal - __bodquist__ __freqresp__ __stepimp__ __abcddims__ __syschnamesl__ - __syscont_disc__ __sysdefioname__ __sysdefstname__ __sysgroupn__ - __tf2sysl__ __zp2ssg2__ __outlist__ __zgpbal__ -Compatibility - filt= use <f>tf2sys</f> - zpk= use <f>zp2sys</f> - ssdata= use <f>sys2ss</f> - tfdata=use <f>sys2tf</f> - zpkdata=use <f>sys2zp</f> - isct=use !<f>is_digital</f> - isdt=use <f>is_digital</f> - issiso=use <f>is_siso</f> - append(sys)=use <f>sysappend</f> - lft=use <f>starp</f> - norm(sys)=use <f>h2norm</f>, <f>hinfnorm</f> or <f>zgrownorm</f> - zero=use <f>tzero</f> or <f>tzero2</f> - kalman=use <f>lqe</f> - kalmd=use <f>dlqe</f> or <f>dkalman</f> - image >> Image processing Display image Modified: trunk/octave-forge/main/control/INDEX =================================================================== --- trunk/octave-forge/main/control/INDEX 2008-10-01 09:51:38 UTC (rev 5325) +++ trunk/octave-forge/main/control/INDEX 2008-10-01 09:59:40 UTC (rev 5326) @@ -1,5 +1,89 @@ control >> Control theory +OCST demos + DEMOcontrol + controldemo + sysrepdemo + bddemo jet707 analdemo + frdemo + dgkfdemo hinfdemo dhinfdemo moddemo rldemo +System interface functions + sysrepdemo + fir2sys sys2fir + ss2sys sys2ss + tf2sys sys2tf + zp2sys sys2zp + tf2ss ss2tf + zp2tf tf2zp + zp2ss ss2zp zp + ss + tf +Data structure access + syschtsam + sysdimensions + sysgetsignals + sysgettsam + sysgettype + syssetsignals + sysupdate + minfo +System display functions + sysout polyout tfout zpout Block diagram manipulations + bddemo jet707 + buildssic ord2 parallel sysadd sysmin + sysappend sysconnect + syscont sysdisc + sysdup sysgroup sysmult sysprune + sysreorder sysscale syssub ugain wgt1o + starp +Numerical functions + are dare dgram dlyap gram lyap pinv dre + zgfmul zgfslv zginit zgreduce zgrownorm zgscal zgsgiv + zgshsr +System properties + analdemo + abcddim ctrb h2norm hinfnorm obsv pzmap + is_abcd is_controllable is_detectable is_dgkf + is_digital is_observable is_sample is_siso is_stabilizable + is_signal_list is_stable +Time domain analysis + c2d d2c dmr2d damp dcgain impulse step +Frequency domain analysis + frdemo + bode bode_bounds nichols + freqchkw ltifr nyquist tzero tzero2 + rlocus +Controller design + dgkfdemo hinfdemo dhinfdemo + dlqe dlqr lqe lqg lqr + hinf_ctr hinfsyn hinfsyn_ric hinfsyn_chk + lsim place dkalman h2syn +Miscellaneous + axis2dlim prompt sortcom swap run_cmd + strappend listidx packedform sysidx +Obsolete + dezero dlqg minfo packsys unpacksys swaprows swapcols rotg qzval + syschnames series +Internal + __bodquist__ __freqresp__ __stepimp__ __abcddims__ __syschnamesl__ + __syscont_disc__ __sysdefioname__ __sysdefstname__ __sysgroupn__ + __tf2sysl__ __zp2ssg2__ __outlist__ __zgpbal__ +Block diagram manipulations feedback unitfeedback +Compatibility + filt= use <f>tf2sys</f> + zpk= use <f>zp2sys</f> + ssdata= use <f>sys2ss</f> + tfdata=use <f>sys2tf</f> + zpkdata=use <f>sys2zp</f> + isct=use !<f>is_digital</f> + isdt=use <f>is_digital</f> + issiso=use <f>is_siso</f> + append(sys)=use <f>sysappend</f> + lft=use <f>starp</f> + norm(sys)=use <f>h2norm</f>, <f>hinfnorm</f> or <f>zgrownorm</f> + zero=use <f>tzero</f> or <f>tzero2</f> + kalman=use <f>lqe</f> + kalmd=use <f>dlqe</f> or <f>dkalman</f> Added: trunk/octave-forge/main/control/Makefile =================================================================== --- trunk/octave-forge/main/control/Makefile (rev 0) +++ trunk/octave-forge/main/control/Makefile 2008-10-01 09:59:40 UTC (rev 5326) @@ -0,0 +1,16 @@ +sinclude ../../Makeconf + +PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard inst/*) doc/control.pdf doc/control.texi doc/control.txi +SUBDIRS = doc/ + +.PHONY: $(SUBDIRS) + +pre-pkg:: + @for _dir in $(SUBDIRS); do \ + $(MAKE) -C $$_dir all; \ + done + +clean: + @for _dir in $(SUBDIRS); do \ + $(MAKE) -C $$_dir $(MAKECMDGOALS); \ + done Property changes on: trunk/octave-forge/main/control/Makefile ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/octave-forge/main/control/doc/Makefile =================================================================== --- trunk/octave-forge/main/control/doc/Makefile (rev 0) +++ trunk/octave-forge/main/control/doc/Makefile 2008-10-01 09:59:40 UTC (rev 5326) @@ -0,0 +1,111 @@ +sinclude ../../../Makeconf + +# Fill in the variables as it makes testing the package manager easier +ifeq ($(MKDOC),) +MKDOC = ../../../admin/mkdoc +MKTEXI = ../../../admin/mktexi +MAKEINFO = makeinfo --no-split +TEXI2PDF = texi2ppf --clean +DVIPS = dvips +LN_S = ln -s +endif + +INFODOC = control.info +PSDOC = $(patsubst %.info,%.ps,$(INFODOC)) +PDFDOC = $(patsubst %.info,%.pdf,$(INFODOC)) +HTMLDOC = $(patsubst %.info,%.html,$(INFODOC)) +TEXIDOC = $(patsubst %.info,%.texi,$(INFODOC)) +DOCS = $(INFODOC) $(PDFDOC) +DOCSTRINGS = DOCSTRINGS +INDEX = ../INDEX +TMPDELETES = *.log *.dvi $(DOCSTRINGS) $(TEXIDOC) *~ +DELETES = $(TMPDELETES) *.ps *.texi *.info $(DOCS) *.html control/ html/ + +all : $(PDFDOC) $(HTMLDOC) ../inst/doc.info + +../inst/doc.info : $(INFODOC) + cp -f $(INFODOC) ../inst/doc.info + +%.dvi : %.texi + @if test "x$(TEXI2DVI)" != "x"; then \ + echo "Making dvi $@"; \ + TEXINPUTS="./:../../..:$(TEXINPUTS):"; \ + export TEXINPUTS; \ + $(TEXI2DVI) $< ; \ + fi + +%.ps : %.dvi + @if test "x$(TEXI2DVI)" != "x" && test "x$(DVIPS)" != "x"; then \ + echo "Making postscript $@"; \ + $(DVIPS) -o $@ $< ; \ + fi + +ifeq (,$(TEXI2PDF)) +%.pdf : %.dvi + @if test "x$(TEXI2DVI)" != "x" && test "x$(DVIPDF)" != "x"; then \ + echo "Making pdf $@"; \ + $(DVIPDF) $< ; \ + fi +else +%.pdf : %.texi + @if test "x$(TEXI2PDF)" != "x"; then \ + echo "Making pdf $@"; \ + TEXINPUTS="./:../../..:$(TEXINPUTS):"; \ + export TEXINPUTS; \ + $(TEXI2PDF) $< ; \ + fi +endif + +%.info : %.texi + @if test "x$(MAKEINFO)" != "x"; then \ + echo "Making info $@"; \ + $(MAKEINFO) -I./ -I../../../ $< ; \ + fi + +# This build target is broken as the refcard card is written with an old +# version of lout +csrefcard.ps : csrefcard.lt OCSTreport + lout csrefcard.lt > csrefcard.ps + +# Need a stupid copy of the TOC for older texi2html versions +# Newer texi2html place documentation in a sub-directory +%.html : %.texi + @if test "x$(TEXI2HTML)" != "x"; then \ + echo "Making html $@"; \ + $(TEXI2HTML) -I . -I ../../.. -iftex --subdir=./ -expandinfo $< ; \ + if test ! -e "$(@:.html=_toc.html)"; then \ + if test ! -e "control/$@"; then \ + $(INSTALL_DATA) control/$(@:.html=_toc.html) control/$@ ; \ + fi; \ + $(LN_S) $@ control/index.html; \ + mv control html; \ + $(INSTALL_DATA) html; \ + else \ + if test ! -e "$@"; then \ + $(INSTALL_DATA) $(@:.html=_toc.html) $@ ; \ + fi; \ + if [ ! -e "html/" ]; then \ + mkdir html; \ + fi; \ + $(INSTALL_DATA) *.html html; \ + $(LN_S) $@ html/index.html; \ + fi \ + fi + +.PRECIOUS: %.texi +%.texi : %.txi + @echo "Making texinfo $@"; \ + $(RM) -f $(DOCSTRINGS); \ + $(MKDOC) ../ > $(DOCSTRINGS); \ + $(MKTEXI) $< $(DOCSTRINGS) $(INDEX) > $@ ; \ + $(RM) -f $(DOCSTRINGS); + +clean: + @echo "Cleaning..."; \ + $(RM) -fr $(DELETES) + +dist: all + +count: + wc *.txi + Property changes on: trunk/octave-forge/main/control/doc/Makefile ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/octave-forge/main/control/doc/OCSTreport =================================================================== --- trunk/octave-forge/main/control/doc/OCSTreport (rev 0) +++ trunk/octave-forge/main/control/doc/OCSTreport 2008-10-01 09:59:40 UTC (rev 5326) @@ -0,0 +1,318 @@ + +############################################################################### +# # +# report # +# # +# Lout setup file for technical reports. # +# # +# Jeffrey H. Kingston # +# 12 September 1994 # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { fontdefs } # font definitions + @SysInclude { langdefs } # language definitions + @SysInclude { dl } # DocumentLayout package + @SysInclude { reportf } # ReportLayout extension + @SysInclude { tab } # @Tab table formatter +# @SysInclude { eq } # @Eq equation formatter +# @SysInclude { fig } # @Fig advanced graphics +# @SysInclude { graph } # @Graph graph drawing +# @SysInclude { cprint } # @CPrint C and C++ programs +# @SysInclude { pas } # @Pas Pascal programs + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + + +############################################################################### +# # +# The @DocumentLayout @Use clause - overall document format options. # +# # +############################################################################### + +@Use { @DocumentLayout + # @InitialFont { Times Base 12p } # initial font + # @InitialBreak { adjust 1.20fx hyphen } # initial break + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @ParaGap { 1.30vx } # gap between paragraphs + # @ParaIndent { 2.00f } # first-line indent for @PP + # @DisplayGap { 1.00v } # gap above, below displays + # @DisplayIndent { 2.00f } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f } # @WideTaggedList indent + # @VeryWideIndent { 8.00f } # @VeryWideTaggedList indent + # @ListGap { 1.00v } # gap between list items + # @ListIndent { 0c } # indent of list items + # @ListRightIndent { 0c } # right indent of list items + # @ListLabelWidth { 2.00f } # width allowed for list tags + @PageType { A4 } # page type (width, height) + # @PageType { Letter } # page type (width, height) + # @PageWidth { } # page width if type Other + # @PageHeight { } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.50c } # top margin of all pages + # @FootMargin { 2.50c } # bottom margin of all pages + # @OddLeftMargin { 2.50c } # left margin of odd pages + # @OddRightMargin { 2.50c } # right margin of odd pages + # @EvenLeftMargin { 2.50c } # left margin of even pages + # @EvenRightMargin { 2.50c } # right margin of even pages + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c } # column gap + # @FigureLocation { PageTop } # default figure location + # @TableLocation { PageTop } # default table location + # @FigureWord { figure } # "Figure" word else anything + # @TableWord { table } # "Table" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @TableNumbers { Arabic } # method of numbering tables + # @FigureCaptionPos { Below } # Above or Below + # @TableCaptionPos { Below } # Above or Below + # @CaptionFont { } # figure, table caption font + # @CaptionBreak { } # figure, table caption break + # @MakeFigureContents { No } # list of figures at start + # @MakeTableContents { No } # list of tables at start + # @MakeContents { No } # make contents? Yes or No + # @ContentsGap { 0.20v } # extra gap above minor entry + # @ContentsGapAbove { 0.80v } # extra gap above major entry + # @ContentsGapBelow { 0.00v } # extra gap below major entry + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s } # gap between leaders + # @ContentsRightWidth { 3f } # page numbers column width + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0c } # indent to left of labels + # @RefListRightIndent { 0c } # indent to right of items + # @RefListGap { 1.00v } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { 2.00f } # Labels column width + # @RefListSortKey { @Tag } # sorting key + # @MakeIndex { No } # make index? Yes or No + # @IndexFont { } # index entries font + # @IndexBreak { outdent 1.2fx } # index entries break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c } # index column gap + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAFont { } # index A entries font + # @IndexABreak { outdent 1.2fx } # index A entries break + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c } # index A column gap + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBFont { } # index B entries font + # @IndexBBreak { outdent 1.2fx } # index B entries break + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c } # index B column gap + # @IndexFont { } # index entries font + # @IndexBreak { outdent 1.2fx } # index entries break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c } # index column gap + # @TopGap { 0.75c } # gap between figures + # @MidGap { 0.75c } # gap above/below body text + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.20fx } # break for footnotes + # @FootLen { 2.00c } # length of footnote line + # @FootAboveGap { 1.00v } # gap above footnote line + # @FootGap { 0.20c } # gap between footnotes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.20fx } # break for endnotes + # @EndNoteGap { 0.20c } # gap between endnotes + # @TheoremThrough { No } # numbered through whole doc? + # @TheoremNumbers { Arabic } # theorem etc. numbers + # @DefinitionWord { definition } # "Definition" word, etc. + # @LemmaWord { lemma } # "Lemma" word, etc. + # @TheoremWord { theorem } # "Theorem" word, etc. + # @PropositionWord { proposition } # "Proposition" word, etc. + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @ExampleWord { example } # "Example" word, etc. + # @ClaimWord { claim } # "Claim" word, etc. + # @ProofWord { proof } # "Proof" word, etc. + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { 1.00v } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @PageHeaders { Simple } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Null } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Null } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + # @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + # @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningStartEvenTop { @Null } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @ReportLayout @Use clause - options specific to technical reports. # +# # +############################################################################### + +@Use { @ReportLayout + # @CoverSheet { Yes } # make cover sheet + # @DateLine { No } # Yes, No, or a date + # @ReferencesBeforeAppendices { No } # pos of ref list + # @AbstractWord { abstract } # "Abstract" word etc. + # @ContentsWord { contents } # "Contents" word etc. + # @AppendixWord { appendix } # "Appendix" word etc. + # @IndexWord { index } # "Index" word etc. + # @IndexAWord { index } # "Index" word in index A + # @IndexBWord { index } # "Index" word in index B + # @SectionNumbers { Arabic } # section numbers + # @SubSectionNumbers { Arabic } # subsection numbers + # @SubSubSectionNumbers { Arabic } # sub-subsection numbers + # @AppendixNumbers { UCAlpha } # appendix numbers + # @SubAppendixNumbers { Arabic } # subappendix numbers + # @SubSubAppendixNumbers { Arabic } # sub-subappendix numbers + # @AbstractHeadingFont { Bold } # abstract heading font + # @AbstractHeadingBreak { ragged 1.2fx nohyphen } # abstract heading break + # @AbstractHeadingFormat { title } # abstract heading format + # @ContentsHeadingFont { Bold } # contents heading font + # @ContentsHeadingBreak { ragged 1.2fx nohyphen } # contents heading break + # @ContentsHeadingFormat { title } # contents heading format + # @SectionHeadingFont { Bold } # section heading font + # @SectionHeadingBreak { ragged 1.2fx nohyphen } # section heading break + # @SectionHeadingFormat { number @DotSep title } # section heading format + # @SubSectionHeadingFont { Bold } # subsection heading font + # @SubSectionHeadingBreak { ragged 1.2fx nohyphen } # subsection heading break + # @SubSectionHeadingFormat { number @DotSep title } # subsection heading format + # @SubSubSectionHeadingFont { Slope } # sub-subsection heading font + # @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } # sub-subsection heading break + # @SubSubSectionHeadingFormat { number @DotSep title } # sub-subsection heading format + # @AppendixHeadingFont { Bold } # appendix heading font + # @AppendixHeadingBreak { ragged 1.2fx nohyphen } # appendix heading break + # @AppendixHeadingFormat { number @DotSep title } # appendix heading format + # @SubAppendixHeadingFont { Bold } # subappendix heading font + # @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } # subappendix heading break + # @SubAppendixHeadingFormat { number @DotSep title } # subappendix heading format + # @SubSubAppendixHeadingFont { Slope } # sub-subapp. heading font + # @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } # sub-subappendix heading break + # @SubSubAppendixHeadingFormat{ number @DotSep title } # sub-subappendix heading format + # @ReferencesHeadingFont { Bold } # references heading font + # @ReferencesHeadingBreak { ragged 1.2fx nohyphen } # references heading break + # @ReferencesHeadingFormat { title } # references heading format + # @IndexHeadingFont { Bold } # index heading font + # @IndexHeadingBreak { ragged 1.2fx nohyphen } # index heading break + # @IndexHeadingFormat { title } # index heading format + # @IndexAHeadingFont { Bold } # index A heading font + # @IndexAHeadingBreak { ragged 1.2fx nohyphen } # index A heading break + # @IndexAHeadingFormat { title } # index A heading format + # @IndexBHeadingFont { Bold } # index B heading font + # @IndexBHeadingBreak { ragged 1.2fx nohyphen } # index B heading break + # @IndexBHeadingFormat { title } # index B heading format + # @SectionGap { 2.00v } # gap between sections + # @SubSectionGap { 1.50v } # gap between subsections + # @SubSubSectionGap { 1.50v } # gap between sub-subsections + # @AppendixGap { 2.00v } # gap between appendices + # @SubAppendixGap { 1.50v } # gap between subappendices + # @SubSubAppendixGap { 1.50v } # gap between sub-subapps + # @SectionInContents { Yes } # list sections in contents + # @SubSectionInContents { Yes } # list subsections + # @SubSubSectionInContents { No } # list sub-subsections + # @AppendixInContents { Yes } # list appendices + # @SubAppendixInContents { Yes } # list subappendices + # @SubSubAppendixInContents { No } # list sub-subappendices + # @ReferencesInContents { Yes } # list references + # @IndexInContents { Yes } # list index in contents + # @IndexAInContents { Yes } # list index A + # @IndexBInContents { Yes } # list index B + # @SectionNumInTheorems { No } # section numbers in theorems + # @SubSectionNumInTheorems { No } # subsection numbers in theorems + # @SubSubSectionNumInTheorems { No } # sub-subsection numbers in theorems + # @AppendixNumInTheorems { No } # appendix numbers in theorems + # @SubAppendixNumInTheorems { No } # subappendix numbers in theorems + # @SubSubAppendixNumInTheorems{ No } # sub-subappendix nums. in theorems + # @SectionNumInDisplays { Yes } # section numbers in displays + # @SubSectionNumInDisplays { No } # subsection numbers in displays + # @SubSubSectionNumInDisplays { No } # sub-subsection numbers in displays + # @AppendixNumInDisplays { Yes } # appendix numbers in displays + # @SubAppendixNumInDisplays { No } # subappendix numbers in displays + # @SubSubAppendixNumInDisplays{ No } # sub-subappendix nums in displays + # @SectionNumInFigures { Yes } # section number in figures + # @SubSectionNumInFigures { No } # subsection number in figures + # @SubSubSectionNumInFigures { No } # subsubsection number in figures + # @AppendixNumInFigures { Yes } # appendix number in figures + # @SubAppendixNumInFigures { No } # subappendix number in figures + # @SubSubAppendixNumInFigures { No } # sub-subappendix number in figures + # @SectionNumInTables { Yes } # section number in tables + # @SubSectionNumInTables { No } # subsection number in tables + # @SubSubSectionNumInTables { No } # subsubsection number in tables + # @AppendixNumInTables { Yes } # appendix number in tables + # @SubAppendixNumInTables { No } # subappendix number in tables + # @SubSubAppendixNumInTables { No } # sub-subappendix number in tables +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @RefStyle { refstyle } # reference printing styles Added: trunk/octave-forge/main/control/doc/control.txi =================================================================== --- trunk/octave-forge/main/control/doc/control.txi (rev 0) +++ trunk/octave-forge/main/control/doc/control.txi 2008-10-01 09:59:40 UTC (rev 5326) @@ -0,0 +1,539 @@ +\input texinfo + +@setfilename control.info + +@settitle Octave Control Systems Toolbox (@acronym{OCST}) + +@titlepage +@title Octave Control Systems Toolbox (@acronym{OCST}) +@subtitle Version 1.0.0 +@subtitle July 2008 +@author Dr A Scottedward Hodel +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 2008 A Scottedward Hodel + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the same conditions as for modified versions. +@end titlepage + +@contents + +@ifinfo +@node Top, Introduction +@top +@end ifinfo + +@menu +* Introduction:: Introduction +* sysstruct:: System Data Structure +* sysinterface:: System Construction and Interface Functions +* sysdisp:: System display functions +* blockdiag:: Block Diagram Manipulations +* numerical:: Numerical Functions +* sysprop:: System Analysis-Properties +* systime:: System Analysis-Time Domain +* sysfreq:: System Analysis-Frequency Domain +* cacsd:: Controller Design +* misc:: Miscellaneous Functions (Not yet properly filed/documented) +@end menu + +@node Introduction +@chapter Introduction + +The Octave Control Systems Toolbox (@acronym{OCST}) was initially developed +by Dr.@: A. Scottedward Hodel +@email{a.s.hodel@@eng.auburn.edu} with the assistance +of his students +@itemize @bullet +@item R. Bruce Tenison @email{btenison@@dibbs.net}, +@item David C. Clem, +@item John E. Ingram @email{John.Ingram@@sea.siemans.com}, and +@item Kristi McGowan. +@end itemize +This development was supported in part by @acronym{NASA}'s Marshall Space Flight +Center as part of an in-house @acronym{CACSD} environment. Additional important +contributions were made by Dr. Kai Mueller @email{mueller@@ifr.ing.tu-bs.de} +and Jose Daniel Munoz Frias (@code{place.m}). + +An on-line menu-driven tutorial is available via @code{DEMOcontrol}; +beginning @acronym{OCST} users should start with this program. + +@DOCSTRING(DEMOcontrol) + +@menu +* sysstruct:: +* sysinterface:: +* sysdisp:: +* blockdiag:: +* numerical:: +* sysprop:: +* systime:: +* sysfreq:: +* cacsd:: +* misc:: +@end menu + +@node sysstruct +@chapter System Data Structure + +@menu +* sysstructvars:: +* sysstructtf:: +* sysstructzp:: +* sysstructss:: +@end menu + +The @acronym{OCST} stores all dynamic systems in +a single data structure format that can represent continuous systems, +discrete-systems, and mixed (hybrid) systems in state-space form, and +can also represent purely continuous/discrete systems in either +transfer function or pole-zero form. In order to +provide more flexibility in treatment of discrete/hybrid systems, the +@acronym{OCST} also keeps a record of which system outputs are sampled. + +Octave structures are accessed with a syntax much like that used +by the C programming language. For consistency in +use of the data structure used in the @acronym{OCST}, it is recommended that +the system structure access m-files be used (@pxref{sysinterface}). +Some elements of the data structure are absent depending on the internal +system representation(s) used. More than one system representation +can be used for @acronym{SISO} systems; the @acronym{OCST} m-files ensure that all representations +used are consistent with one another. + +@DOCSTRING(sysrepdemo) + +@node sysstructvars +@section Variables common to all @acronym{OCST} system formats + +The data structure elements (and variable types) common to all system +representations are listed below; examples of the initialization +and use of the system data structures are given in subsequent sections and +in the online demo @code{DEMOcontrol}. +@table @var +@item n +@itemx nz +The respective number of continuous and discrete states +in the system (scalar) + +@item inname +@itemx outname +list of name(s) of the system input, output signal(s). (list of strings) + +@item sys +System status vector. (vector) + +This vector indicates both what representation was used to initialize +the system data structure (called the primary system type) and which +other representations are currently up-to-date with the primary system +type (@pxref{structaccess}). + +The value of the first element of the vector indicates the primary +system type. + +@table @asis +@item 0 +for tf form (initialized with @code{tf2sys} or @code{fir2sys}) + +@item 1 +for zp form (initialized with @code{zp2sys}) + +@item 2 +for ss form (initialized with @code{ss2sys}) +@end table + +The next three elements are boolean flags that indicate whether tf, zp, +or ss, respectively, are ``up to date" (whether it is safe to use the +variables associated with these representations). These flags are +changed when calls are made to the @code{sysupdate} command. + +@item tsam + Discrete time sampling period (nonnegative scalar). + @var{tsam} is set to 0 for continuous time systems. + +@item yd + Discrete-time output list (vector) + + indicates which outputs are discrete time (i.e., + produced by D/A converters) and which are continuous time. + yd(ii) = 0 if output ii is continuous, = 1 if discrete. +@end table + +The remaining variables of the system data structure are only present +if the corresponding entry of the @code{sys} vector is true (=1). + +@node sysstructtf +@section @code{tf} format variables + +@table @var +@item num + numerator coefficients (vector) + +@item den + denominator coefficients (vector) + +@end table + +@node sysstructzp +@section @code{zp} format variables + +@table @var +@item zer + system zeros (vector) + +@item pol + system poles (vector) + +@item k + leading coefficient (scalar) + +@end table + +@node sysstructss +@section @code{ss} format variables + +@table @var +@item a +@itemx b +@itemx c +@itemx d +The usual state-space matrices. If a system has both + continuous and discrete states, they are sorted so that + continuous states come first, then discrete states + +@strong{Note} some functions (e.g., @code{bode}, @code{hinfsyn}) +will not accept systems with both discrete and continuous states/outputs + +@item stname +names of system states (list of strings) + +@end table + +@node sysinterface +@chapter System Construction and Interface Functions + +Construction and manipulations of the @acronym{OCST} system data structure +(@pxref{sysstruct}) requires attention to many details in order +to ensure that data structure contents remain consistent. Users +are strongly encouraged to use the system interface functions +in this section. Functions for the formatted display in of system +data structures are given in @ref{sysdisp}. + +@menu +* fir2sys:: +* ss2sys:: +* tf2sys:: +* zp2sys:: +* structaccess:: +@end menu + +@node fir2sys +@section Finite impulse response system interface functions + +@DOCSTRING(fir2sys) + +@DOCSTRING(sys2fir) + +@node ss2sys +@section State space system interface functions + +@DOCSTRING(ss) + +@DOCSTRING(ss2sys) + +@DOCSTRING(sys2ss) + +@node tf2sys +@section Transfer function system interface functions + +@DOCSTRING(tf) + +@DOCSTRING(tf2sys) + +@DOCSTRING(sys2tf) + +@node zp2sys +@section Zero-pole system interface functions + +@DOCSTRING(zp) + +@DOCSTRING(zp2sys) + +@DOCSTRING(sys2zp) + +@node structaccess +@section Data structure access functions + +@DOCSTRING(syschnames) + +@DOCSTRING(syschtsam) + +@DOCSTRING(sysdimensions) + +@DOCSTRING(sysgetsignals) + +@DOCSTRING(sysgettype) + +@DOCSTRING(syssetsignals) + +@DOCSTRING(sysupdate) + +@DOCSTRING(minfo) + +@DOCSTRING(sysgettsam) + +@node sysdisp +@chapter System display functions + +@DOCSTRING(sysout) + +@DOCSTRING(tfout) + +@DOCSTRING(zpout) + +@node blockdiag +@chapter Block Diagram Manipulations + +@xref{systime}. + +Unless otherwise noted, all parameters (input,output) are +system data structures. + +@DOCSTRING(bddemo) + +@DOCSTRING(buildssic) + +@DOCSTRING(jet707) + +@DOCSTRING(ord2) + +@DOCSTRING(sysadd) + +@DOCSTRING(sysappend) + +@DOCSTRING(sysconnect) + +@DOCSTRING(syscont) + +@DOCSTRING(sysdisc) + +@DOCSTRING(sysdup) + +@DOCSTRING(sysgroup) + +@DOCSTRING(sysmult) + +@DOCSTRING(sysprune) + +@DOCSTRING(sysreorder) + +@DOCSTRING(sysscale) + +@DOCSTRING(syssub) + +@DOCSTRING(ugain) + +@DOCSTRING(wgt1o) + +@DOCSTRING(parallel) + +@DOCSTRING(sysmin) + +@node numerical +@chapter Numerical Functions + +@DOCSTRING(are) + +@DOCSTRING(dare) + +@DOCSTRING(dre) + +@DOCSTRING(dgram) + +@DOCSTRING(dlyap) + +@DOCSTRING(gram) + +@DOCSTRING(lyap) + +@DOCSTRING(qzval) + +@DOCSTRING(zgfmul) + +@DOCSTRING(zgfslv) + +@DOCSTRING(zginit) + +@DOCSTRING(zgreduce) + +@DOCSTRING(zgrownorm) + +@DOCSTRING(zgscal) + +@DOCSTRING(zgsgiv) + +@DOCSTRING(zgshsr) + +@strong{References} +@table @strong +@item ZGEP + Hodel, @cite{Computation of Zeros with Balancing}, 1992, Linear Algebra + and its Applications +@item @strong{Generalized CG} + Golub and Van Loan, @cite{Matrix Computations, 2nd ed} 1989. +@end table + +@node sysprop +@chapter System Analysis-Properties + +@DOCSTRING(analdemo) + +@DOCSTRING(abcddim) + +@DOCSTRING(ctrb) + +@DOCSTRING(h2norm) + +@DOCSTRING(hinfnorm) + +@DOCSTRING(obsv) + +@DOCSTRING(pzmap) + +@DOCSTRING(is_abcd) + +@DOCSTRING(is_controllable) + +@DOCSTRING(is_detectable) + +@DOCSTRING(is_dgkf) + +@DOCSTRING(is_digital) + +@DOCSTRING(is_observable) + +@DOCSTRING(is_sample) + +@DOCSTRING(is_siso) + +@DOCSTRING(is_stabilizable) + +@DOCSTRING(is_signal_list) + +@DOCSTRING(is_stable) + +@node systime +@chapter System Analysis-Time Domain + +@DOCSTRING(c2d) + +@DOCSTRING(d2c) + +@DOCSTRING(dmr2d) + +@DOCSTRING(damp) + +@DOCSTRING(dcgain) + +@DOCSTRING(impulse) + +@DOCSTRING(step) + +@node sysfreq +@chapter System Analysis-Frequency Domain + +@strong{Demonstration/tutorial script} +@DOCSTRING(frdemo) + +@DOCSTRING(bode) + +@DOCSTRING(bode_bounds) + +@DOCSTRING(freqchkw) + +@DOCSTRING(ltifr) + +@DOCSTRING(nyquist) + +@DOCSTRING(nichols) + +@DOCSTRING(tzero) + +@DOCSTRING(tzero2) + +@node cacsd +@chapter Controller Design + +@DOCSTRING(dgkfdemo) + +@DOCSTRING(hinfdemo) + +@DOCSTRING(dlqe) + +@DOCSTRING(dlqr) + +@DOCSTRING(dkalman) + +@DOCSTRING(h2syn) + +@DOCSTRING(hinf_ctr) + +@DOCSTRING(hinfsyn) + +@DOCSTRING(hinfsyn_chk) + +@DOCSTRING(hinfsyn_ric) + +@DOCSTRING(lqe) + +@DOCSTRING(lqg) + +@DOCSTRING(lqr) + +@DOCSTRING(lsim) + +@DOCSTRING(place) + +@node misc +@chapter Miscellaneous Functions (Not yet properly filed/documented) + +@DOCSTRING(axis2dlim) + +@DOCSTRING(moddemo) + +@DOCSTRING(prompt) + +@DOCSTRING(rldemo) + +@DOCSTRING(rlocus) + +@DOCSTRING(sortcom) + +@DOCSTRING(ss2tf) + +@DOCSTRING(ss2zp) + +@DOCSTRING(starp) + +@DOCSTRING(tf2ss) + +@DOCSTRING(tf2zp) + +@DOCSTRING(zp2ss) + +@DOCSTRING(zp2tf) + +@bye + +@c Local Variables: *** +@c Mode: texinfo *** +@c End: *** Added: trunk/octave-forge/main/control/doc/csrefcard.lt =================================================================== --- trunk/octave-forge/main/control/doc/csrefcard.lt (rev 0) +++ trunk/octave-forge/main/control/doc/csrefcard.lt 2008-10-01 09:59:40 UTC (rev 5326) @@ -0,0 +1,1486 @@ +@Include { OCSTreport } +@Report + @Title { + { clines 0.8vx } @Break { 1.4f @Font { + Octave Controls Toolbox Reference Card } + 0.8f @Font 0.7vx @Break { The Controls Toolbox was written by + A. Scottedward Hodel <A.S.Hodel@Eng.Auburn.EDU> } + } + } + @Author { clines @Break { Kai P. Mueller + <mu...@if...> } + } + @Institution { clines @Break { Technical University of Braunschweig + Control Department } + } + @DateLine { Yes } + @CoverSheet { No } + @InitialFont { Schoolbook Base 12p } + @InitialSpace { tex } +// + +@Abstract + @Title { } +@Begin +@I { +This document provides an overview of the Controls Toolbox functions +of Octave. It is still under construction, don't rely on details. +} +@End @Abstract + +@Section + @Title { System Analysis } +@Begin + @BeginSubSections + + @SubSection + @Title { Properties } + @Begin + @PP + @Tab + between { single } + @Fmta { @Col @Heading A ! + @Col @Heading B ! + @Col @Heading C } + @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A ! + @Col 7c @Wide { ragged nohyphen } @Break B ! + @Col 3c @Wide { ragged nohyphen } @Break C } + { + @Rowa above { double } below { double } + A { name } B { description "/" usage } C { remarks } + @Rowb above { yes } + A { is_controllable } + B { controllability check + @DP { Helvetica Base -2p } @Font @CurveBox { + [retval,U] = is_controllable(a [, b ,tol]) + } + } + C { } + @Rowb above { yes } + A { is_detectable } + B { decetability check (unstable subsystem stabilizable?) + @DP { Helvetica Base -2p } @Font @CurveBox { + [retval,U] = is_detectable(a , c [, tol]) + } + } + C { } + @Rowb above { yes } + A { is_dgkf } + B { checks if packed system meets assumptions for the + H{ @Sub @Sym infinity } Doyle-Glover-algorithm + @DP { Helvetica Base -2p } @Font @CurveBox { + retval = dgkf(Asys,nu,ny[,tol]) + } + } + C { } + @Rowb above { yes } + A { is_digital } + B { returns true if packed system is a sampled system + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { } + } + + @DP @PP + @Tab + between { single } + @Fmta { @Col @Heading A ! + @Col @Heading B ! + @Col @Heading C } + @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A ! + @Col 7c @Wide { ragged nohyphen } @Break B ! + @Col 3c @Wide { ragged nohyphen } @Break C } + { + @Rowa above { double } below { double } + A { name } B { description "/" usage } C { remarks } + @Rowb above { yes } + A { is_observable } + B { observability check + @DP { Helvetica Base -2p } @Font @CurveBox { + [retval,U] = is_observable(a , c [, tol]) + } + } + C { } + @Rowb above { yes } + A { is_sample } + B { returns true if sampling time Ts is a legal (scalar) value + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { } + @Rowb above { yes } + A { is_siso } + B { returns true if packed system is siso + @DP { Helvetica Base -2p } @Font @CurveBox { + SISO = is_siso(sys) + } + } + C { } + @Rowb above { yes } + A { is_stabilizable } + B { returns true if system stabilizable + @DP { Helvetica Base -2p } @Font @CurveBox { + [retval,U] = is_stabilizable(a [, b ,tol]) + } + } + C { } + @Rowb above { yes } + A { is_stable } + B { stability check + @DP { Helvetica Base -2p } @Font @CurveBox { + is_stable(a [,tol,disc]) + } + } + C { } + } + @End @SubSection + + @SubSection + @Title { Time Domain } + @Begin + @PP + @Tab + between { single } + @Fmta { @Col @Heading A ! + @Col @Heading B ! + @Col @Heading C } + @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A ! + @Col 7c @Wide { ragged nohyphen } @Break B ! + @Col 3c @Wide { ragged nohyphen } @Break C } + { + @Rowa above { double } below { double } + A { name } B { description "/" usage } C { remarks } + @Rowb above { yes } + A { step } + B { step response of a system (mimo, discrete, or both) + @DP { Helvetica Base -2p } @Font @CurveBox { + [y, u] = step(sys[, tstop, n, inp]) + } + } + C { } + @Rowb above { yes } + A { impulse } + B { impulse response of a system (mimo, discrete, or both) + @DP { Helvetica Base -2p } @Font @CurveBox { + [y, u] = impulse(sys[, tstop, n, inp]) + } + } + C { } + @Rowb above { yes } + A { stepimp } + B { common code for step and impulse + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { internal use } + @Rowb above { yes } + A { damp } + B { display eigenvalues, damping ratios, and naural frequencies of a + matrix or poles of a packed system (continuous and discrete) + @DP { Helvetica Base -2p } @Font @CurveBox { + damp(p,[ tsamp]) + } + } + C { } + } + + @DP @PP + @Tab + between { single } + @Fmta { @Col @Heading A ! + @Col @Heading B ! + @Col @Heading C } + @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A ! + @Col 7c @Wide { ragged nohyphen } @Break B ! + @Col 3c @Wide { ragged nohyphen } @Break C } + { + @Rowa above { double } below { double } + A { name } B { description "/" usage } C { remarks } + @Rowb above { yes } + A { dcgain } + B { calculate steady state gain of a packed system + @DP { Helvetica Base -2p } @Font @CurveBox { + [gm, ok] = dcgain(sys[, tol]) + } + } + C { } + @Rowb above { yes } + A { dgram } + B { discrete controllability grammian + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { } + @Rowb above { yes } + A { gram } + B { continuous controllabilty grammian + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { } + @Rowb above { yes } + A { h2norm } + B { continuous system H{ @Sub 2} norm + @DP { Helvetica Base -2p } @Font @CurveBox { + out = h2norm(sys) + } + } + C { } + @Rowb above { yes } + A { lsim } + B { simulation of a linear system with arbitrary input and + time vector + @DP { Helvetica Base -2p } @Font @CurveBox { + [y,x] = lsim(sys,u,t[,x0]) + } + } + C { } + } + @End @SubSection + + @SubSection + @Title { Frequency Domain } + @Begin + @PP + @Tab + between { single } + @Fmta { @Col @Heading A ! + @Col @Heading B ! + @Col @Heading C } + @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A ! + @Col 7c @Wide { ragged nohyphen } @Break B ! + @Col 3c @Wide { ragged nohyphen } @Break C } + { + @Rowa above { double } below { double } + A { name } B { description "/" usage } C { remarks } + @Rowb above { yes } + A { bode } + B { bode diagram or compute magnitude and phase data + @DP { Helvetica Base -2p } @Font @CurveBox { + [mag,phase,w] = bode(sys[,w,outputs,inputs]) + } + } + C { } + @Rowb above { yes } + A { bode_bounds } + B { calculation of frequencies for bode and nyquist + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { internal use } + @Rowb above { yes } + A { bodquist } + B { common code for bode und nyquist + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { internal use } + } + + @DP @PP + @Tab + between { single } + @Fmta { @Col @Heading A ! + @Col @Heading B ! + @Col @Heading C } + @Fmtb { @Col 3c @Wide { ragged nohyphen } @Break A ! + @Col 7c @Wide { ragged nohyphen } @Break B ! + @Col 3c @Wide { ragged nohyphen } @Break C } + { + @Rowa above { double } below { double } + A { name } B { description "/" usage } C { remarks } + @Rowb above { yes } + A { freqchkw } + B { check frequency vector, used by freqresp + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { internal use } + @Rowb above { yes } + A { freqresp } + B { calculation of the mutivariable frequency response of a system, + used by bode and nyquist + @DP { Helvetica Base -2p } @Font @CurveBox { + out = freqresp(sys, SISO, DIGITAL, USEW + @LLP + [, w, SQUARE_NYQUIST]) + } + } + C { internal use } + @Rowb above { yes } + A { nyquist } + B { nyquist diagram + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { } + @Rowb above { yes } + A { dcgain } + B { calculate steady state gain of a packed system + @DP { Helvetica Base -2p } @Font @CurveBox { + [gm, ok] = dcgain(sys[, tol]) + } + } + C { } + @Rowb above { yes } + A { h2norm } + B { continuous system H{ @Sub 2} norm + @DP { Helvetica Base -2p } @Font @CurveBox { + out = h2norm(sys) + } + } + C { } + @Rowb above { yes } + A { hinfnorm } + B { continuous system H{ @Sub @Sym infinity} norm + @DP { Helvetica Base -2p } @Font @CurveBox { + [g gmin gmax] = hinfnorm(sys[,tol,gmin,gmax,ptol]) + } + } + C { } + @Rowb above { yes } + A { ltifr } + B { siso system frequency response + @DP { Helvetica Base -2p } @Font @CurveBox { + *** no description *** + } + } + C { } + @Rowb above { yes } + A { pzmap } + B { plot of poles and zeros of a system + @DP { Helvetica Base -2p } @Font @CurveBox { + pzmap(sys) or [zer,pol] = pzmap(sys) + } + } + C { } + @Rowb above { yes } + A { rlocus } + B { displays root locus plot + @DP { Helvetica Base -2p } @Font @CurveBox { + rlocus(sys[,inc,mink,maxk]) + } + } + C { } + @Rowb above { yes } + A { tzero } + B { transmission zeros of a continuous"/"discrete system + @DP { Helvetica Base -2p } @Font @CurveBox { + [zer,gain] = tzero(A,B,C,D) or + @LLP + zer = tzero(Asys) + } + } + ... [truncated message content] |
From: <prz...@us...> - 2008-10-28 13:39:31
|
Revision: 5388 http://octave.svn.sourceforge.net/octave/?rev=5388&view=rev Author: przykry2004 Date: 2008-10-28 10:20:21 +0000 (Tue, 28 Oct 2008) Log Message: ----------- Initial release of FENV package: set rounding or precision mode Added Paths: ----------- trunk/octave-forge/main/fenv/ trunk/octave-forge/main/fenv/COPYING trunk/octave-forge/main/fenv/DESCRIPTION trunk/octave-forge/main/fenv/INDEX trunk/octave-forge/main/fenv/Makefile trunk/octave-forge/main/fenv/PKG_ADD trunk/octave-forge/main/fenv/configure trunk/octave-forge/main/fenv/pre_install.m trunk/octave-forge/main/fenv/src/ trunk/octave-forge/main/fenv/src/Makefile trunk/octave-forge/main/fenv/src/fe_system_dependent.cc trunk/octave-forge/main/fenv/src/fesetprec.m trunk/octave-forge/main/fenv/src/fesetround.m trunk/octave-forge/main/fenv/src/fetestenv.m trunk/octave-forge/main/fenv/src/system_dependent.m Added: trunk/octave-forge/main/fenv/COPYING =================================================================== --- trunk/octave-forge/main/fenv/COPYING (rev 0) +++ trunk/octave-forge/main/fenv/COPYING 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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 licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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 is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. Added: trunk/octave-forge/main/fenv/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fenv/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/fenv/DESCRIPTION 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,12 @@ +Name: fenv +Version: 0.1.0 +Date: 2008-10-10 +Author: Grzegorz Timoszuk (gti...@gm...) +Maintainer: Grzegorz Timoszuk (gti...@gm...) +Title: Floating point environment +Description: On supported architectures, change the rounding mode of the floating point arithmetics (to nearest, up, down, to zero) or change the precision of the arithmetical operations (single, double, double extended). Experimentally test the properties of the floating point arithmetics. +Categories: floating point environment +Depends: octave (>= 3.0.0) +Autoload: yes +License: GPL version 3 +Url: http://octave.sf.net Added: trunk/octave-forge/main/fenv/INDEX =================================================================== --- trunk/octave-forge/main/fenv/INDEX (rev 0) +++ trunk/octave-forge/main/fenv/INDEX 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,9 @@ +fenv >> Floating point environment +Test floating point environment + fetestenv +Change floating point environment + fesetround + fesetprec + fe_system_dependent + system_dependent + Added: trunk/octave-forge/main/fenv/Makefile =================================================================== --- trunk/octave-forge/main/fenv/Makefile (rev 0) +++ trunk/octave-forge/main/fenv/Makefile 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,75 @@ +## Generic Makefile to allow the octave-forge packages to be build and +## installed using "configure; make all; make install". This Makefile +## includes the capability to install to a temporary location, and install +## an on_uninstall.m file that prevents the user removing this package +## with Octave's package manager. This is useful for for the distribution's +## various package managers and is forced by defining DESTDIR and DISTPKG. + +PKGDIR := $(shell pwd | sed -e 's|^.*/||') +TMPDIR ?= /tmp +PACKAGE ?= $(TMPDIR)/$(PKGDIR).tar.gz +PKG := $(shell echo $(PKGDIR) | sed -e 's|^\(.*\)-.*|\1|') + +all: build package + +build: + @if [ -e src/Makefile ]; then \ + $(MAKE) -C src all; \ + fi + +package: build + @if [ -e src/Makefile ]; then \ + mv src/Makefile src/Makefile.disable; \ + fi; \ + if [ -e src/configure ]; then \ + mv src/configure src/configure.disable; \ + fi; \ + cd ..; tar -czf $(PACKAGE) $(PKGDIR); \ + +install: + @cd ../; \ + if [ "X${DISTPKG}X" != "XX" ]; then \ + stripcmd="unlink(pkg('local_list'));unlink(pkg('global_list'));"; \ + fi; \ + if [ "X$(DESTDIR)X" = "XX" ]; then \ + pkgdir=`octave -H -q --no-site-file --eval "warning('off','all');pkg('install','$(PACKAGE)');l=pkg('list');disp(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)}.dir);$$stripcmd;"`; \ + else \ + shareprefix=$(DESTDIR)/`octave -H -q --no-site-file --eval "disp(fullfile(OCTAVE_HOME(),'share','octave'));"`; \ + libexecprefix=$(DESTDIR)/`octave -H -q --no-site-file --eval "disp(fullfile(octave_config_info('libexecdir'),'octave'));"`; \ + octprefix=$$shareprefix/packages; \ + archprefix=$$libexecprefix/packages; \ + if [ ! -e $$octprefix ]; then \ + mkdir -p $$octprefix; \ + fi; \ + if [ ! -e $$archprefix ]; then \ + mkdir -p $$archprefix; \ + fi; \ + octave -H -q --no-site-file --eval "warning('off','all');pkg('prefix','$$octprefix','$$archprefix');pkg('global_list',fullfile('$$shareprefix','octave_packages'));pkg('local_list',fullfile('$$shareprefix','octave_packages'));pkg('install','-nodeps','-verbose','$(PACKAGE)');"; \ + pkgdir=`octave -H -q --no-site-file --eval "warning('off','all');pkg('prefix','$$octprefix','$$archprefix');pkg('global_list',fullfile('$$shareprefix','octave_packages'));pkg('local_list',fullfile('$$shareprefix','octave_packages'));l=pkg('list');disp(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)}.dir);$$stripcmd;"`; \ + fi; \ + if [ "X${DISTPKG}X" != "XX" ]; then \ + if [ -e $$pkgdir/packinfo/on_uninstall.m ]; then \ + mv $$pkgdir/packinfo/on_uninstall.m \ + $$pkgdir/packinfo/on_uninstall.m.orig; \ + fi; \ + echo "function on_uninstall (desc)" > $$pkgdir/packinfo/on_uninstall.m; \ + echo " error ('Can not uninstall %s installed by the $(DISTPKG) package manager', desc.name);" >> $$pkgdir/packinfo/on_uninstall.m; \ + echo "endfunction" >> $$pkgdir/packinfo/on_uninstall.m; \ + echo "#! /bin/sh -f" > $$pkgdir/packinfo/dist_admin; \ + echo "if [ \"\$$1\" == \"install\" ]; then" >> $$pkgdir/packinfo/dist_admin; \ + echo " octave -H -q --no-site-file --eval \"pkg('rebuild');\"" >> $$pkgdir/packinfo/dist_admin; \ + echo "else" >> $$pkgdir/packinfo/dist_admin; \ + echo " pkgdir=\`octave -H -q --no-site-file --eval \"pkg('rebuild');l=pkg('list');disp(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)}.dir);\"\`" >> $$pkgdir/packinfo/dist_admin; \ + echo " rm \$$pkgdir/packinfo/on_uninstall.m" >> $$pkgdir/packinfo/dist_admin; \ + echo " if [ -e \$$pkgdir/packinfo/on_uninstall.m.orig ]; then" >> $$pkgdir/packinfo/dist_admin; \ + echo " mv \$$pkgdir/packinfo/on_uninstall.m.orig \$$pkgdir/packinfo/on_uninstall.m" >> $$pkgdir/packinfo/dist_admin; \ + echo " cd \$$pkgdir/packinfo" >> $$pkgdir/packinfo/dist_admin; \ + echo " octave -q -H --no-site-file --eval \"l=pkg('list');on_uninstall(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)});\"" >> $$pkgdir/packinfo/dist_admin; \ + echo " fi" >> $$pkgdir/packinfo/dist_admin; \ + echo "fi" >> $$pkgdir/packinfo/dist_admin; \ + chmod a+x $$pkgdir/packinfo/dist_admin; \ + fi; + +clean: + rm $(PACKAGE) + $(MAKE) -C src clean Added: trunk/octave-forge/main/fenv/PKG_ADD =================================================================== --- trunk/octave-forge/main/fenv/PKG_ADD (rev 0) +++ trunk/octave-forge/main/fenv/PKG_ADD 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1 @@ +autoload ("fe_system_dependent", fullfile (fileparts (mfilename ("fullpath")), "fe_system_dependent.oct")); Added: trunk/octave-forge/main/fenv/configure =================================================================== --- trunk/octave-forge/main/fenv/configure (rev 0) +++ trunk/octave-forge/main/fenv/configure 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,7 @@ +#! /bin/sh -f + +if [ -e src/configure ]; then + cd src + ./configure $* +fi + Added: trunk/octave-forge/main/fenv/pre_install.m =================================================================== --- trunk/octave-forge/main/fenv/pre_install.m (rev 0) +++ trunk/octave-forge/main/fenv/pre_install.m 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,26 @@ +function pre_install(desc) +# Sets FENV_OPTS variable for the Makefile +# If the system is detected as an x86/x86_64 machine, we define a flag which +# is later used when compiling system_dependent.cc + +systemtype = computer(); + +# Presently, we support either x86_64... +supported = ~isempty(findstr('x86_64', systemtype)); + +# or x86... +# (Actually we only support i486DX and above, +# but in many cases the default compiler settings are for i386. +# We also do believe older machines are already either dead +# or at the museum.) +supported |= strcmp("i86", systemtype([1,3,4])); + +file = fopen('src/configure.in','wt'); +fprintf(file,'FENV_OPTS = '); +if (supported) + fprintf(file,'-DX86_PROCESSOR'); +end +fprintf(file,'\n'); +fclose(file); + +endfunction Added: trunk/octave-forge/main/fenv/src/Makefile =================================================================== --- trunk/octave-forge/main/fenv/src/Makefile (rev 0) +++ trunk/octave-forge/main/fenv/src/Makefile 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,18 @@ +include configure.in # This file is automatically generated by + # ../pre_install.m and sets FENV_OPTS + +OCT = fe_system_dependent.oct +SRC := $(OCT:.oct=.cc) + +all: $(OCT) +fe_system_dependent: $(OCT) + +%.oct: %.cc configure.in Makefile + mkoctfile -s $< $(FENV_OPTS) + + +clean: + rm -f *.oct *.o configure.in + +.PHONY: all clean + Added: trunk/octave-forge/main/fenv/src/fe_system_dependent.cc =================================================================== --- trunk/octave-forge/main/fenv/src/fe_system_dependent.cc (rev 0) +++ trunk/octave-forge/main/fenv/src/fe_system_dependent.cc 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,137 @@ +/* +## Copyright (C) 2008 Grzegorz Timoszuk <gti...@gm...> +## +## 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/>. +## +*/ + +/* +## Author: Grzegorz Timoszuk <gti...@gm...> +## + +## TODO: use .configure or other Octaveforge package installation procedure to determine the architecture and make system-dependent compilation of the source code, so that only x86 and x86_64 systems would compile the assembly code + +## Revision history: +## +## 2008-10-21, Piotr Krzyzanowski <pio...@mi...> +## Compile show_flags() code only if X86_PROCESSOR is defined +## 2008-10-10, Piotr Krzyzanowski <pio...@mi...> +## Code cleanup. Improvements to change_prec() function +## (removal of previous side-effects dependence). +## Octave wrappers fenvset{prec,round} to +## system_dependent(). +## change_prec() now returns its exit code to system_dependent(), +## which passes it by as its return value +## 2008-10-09, Grzegorz Timoszuk <gti...@gm...> +## Initial release +## + +*/ + +#include <octave/oct.h> +#include <stdio.h> +#include <string> +#include <fenv.h> +#include <math.h> + +using namespace std; + +#define FP87_SINGLE_PREC 0x0000 /* single precision x87 FPU */ +#define FP87_DOUBLE_PREC 0x0200 /* double precision x87 FPU */ +#define FP87_DOUBLEEXT_PREC 0x0300 /* double extended precision x87 FPU */ + +#define FP87_PREC_MASK 0xFCFF /* x87 FPU control word bits: 8 and 9 */ + +//reads and prints out x86/x86_64 CPU control words for x87 and SSE +//good for debugging +void show_flags() { +#ifdef X86_PROCESSOR + unsigned short cw; + unsigned int cww; + //x87 control word + asm volatile ("fstcw %0" : : "m" (cw)); + fprintf(stderr, "x87 FPU: %#06x \n", cw); + //SSE control world + asm volatile ("stmxcsr %0" : : "m" (cww)); + fprintf(stderr, "MXCSR: %#010x \n", cww); +#endif +} + + +//Change the rounding mode; returns zero if successful +int change_rounding(int rounding) { +#pragma STDC FENV_ACCESS ON + return(fesetround(rounding)); +#pragma STDC FENV_ACCESS OFF +} + +//Changing x86/x86_64 CPU precision for x87 +//Note: changing SSE precision is impossible +int change_prec(short prec) { +#ifdef X86_PROCESSOR + short cw; + asm volatile ("fstcw %0" : : "m" (cw)); + cw &= FP87_PREC_MASK; + cw |= prec; + // show_flags(); + asm volatile ("fldcw %0" : : "m" (cw) ); + // show_flags(); + return(0); +#else + return(-1); +#endif +} + + +DEFUN_DLD (fe_system_dependent, args, nargout, "Function usage\n fe_system_dependent ((\"rounding\" (\"zero\"|\"up\"|\"down\"|\"normal\")+)|(\"precision\" (\"single\"|\"double\"|\"double ext\")+)+\n") +{ + //main function making simple parsing of argument and + //calling functions that change rounding method or precision + octave_value_list retval; + int args_count = args.length(); + int err = -1; //error code; err == 0 if successful + + if (args_count != 2) { + print_usage(); + } else { + if (args(0).string_value().compare("rounding") == 0) { + if (args(1).string_value().compare("zero") == 0) { + err = change_rounding(FE_TOWARDZERO); + } else if (args(1).string_value().compare("up") == 0) { + err = change_rounding(FE_UPWARD); + } else if (args(1).string_value().compare("down") == 0) { + err = change_rounding(FE_DOWNWARD); + } else if (args(1).string_value().compare("normal") == 0) { + err = change_rounding(FE_TONEAREST); + } else { + print_usage(); + } + } else if (args(0).string_value().compare("precision") == 0) { + if (args(1).string_value().compare("single") == 0) { + err = change_prec(FP87_SINGLE_PREC); + } else if (args(1).string_value().compare("double") == 0) { + err = change_prec(FP87_DOUBLE_PREC); + } else if (args(1).string_value().compare("double ext") == 0) { + err = change_prec(FP87_DOUBLEEXT_PREC); + } else { + print_usage(); + } + } else { + print_usage(); + } + } + retval(0) = err; + return retval; +} + Added: trunk/octave-forge/main/fenv/src/fesetprec.m =================================================================== --- trunk/octave-forge/main/fenv/src/fesetprec.m (rev 0) +++ trunk/octave-forge/main/fenv/src/fesetprec.m 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,133 @@ +## Copyright (C) 2008 Piotr Krzyzanowski <pio...@mi...> +## +## 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/>. +## + +## -*- texinfo -*- +## @deftypefn {Function File} {} fesetprec (@var{mode}) +## Change the precision of the floating point arithmetics. At present, @code{fesetprec} may work @strong{only} on systems with x86 or x86_64 processors. +## +## Possible values of @var{mode} are +## @table @samp +## @item 1 +## @itemx 24 +## Sets the x87 FPU precision mode to single precision (24-bit significand) +## @item 2 +## @itemx 53 +## Sets the x87 FPU precision mode to double precision (53-bit significand) +## @item 3 +## @itemx 64 +## Sets the x87 FPU precision mode to double extended precision (64-bit significand) +## @end table +## +## When successful, @code{fesetprec} returns 0. It is always recommended to verify the result experimentally by calling the function @code{fetestenv}, which tests the rounding mode and the precision of the floating point arithmetics. +## +## Modern processors, including x86 and x86_64 architectures, support changing certain properties of their floating point arithmetics. Here, we focus @strong{exclusively} on x86 and x86_64. +## These processors presently feature two types of floating point processing units: the older x87 FPU and the newer SSE unit. Only x87 FPU allows changing the precision, so @code{fesetprec} applies only to those instructions which are executed by x87 FPU. @code{fesetprec} changes the precision of the four basic arithmetic operations and of the square root on x87 FPU. +## +## Since floating point operations on x86 or x86_64 may be executed either by x87 FPU or SSE units, @code{fesetprec} may affect all, some, or no Octave's operations. The rule of the thumb, however, is that 64-bit systems usually do their floating point on SSE by default, when 32-bit systems use x87 FPU. You can always check how your system reacts to changes made by @code{fesetprec} by verifying them with @code{fetestenv}. +## +## It is important to know that all expressions and their intermediate results processed by Octave's interpreter are cast to temporary @code{double} variables and thus it is impossible to execute an interpreted expression in double extended precision. On the other hand, those libraries called by Octave which rely on x87 FPU will usually perform the computations using x87 FPU 80-bit registers, i.e. in double extended precision. This may lead to some subtle differences in how the precision mode affects the computations. Let's take a look at the simplest example: +## +## @example +## macheps = builtin('eps'); +## fesetprec(3); +## x = [1, macheps/2, -1]*[1;1;1]; +## y = 1 + macheps/2 - 1; +## @end example +## +## The built-in function @code{eps} returns the machine epsilon in @emph{double precision}. Mathematically the expressions for @code{x} and @code{y} are equivalent, but in reality they may be not. The expression for @code{x} will call a BLAS subroutine and on a 32-bit system it will most likely be executed on x87 FPU using 64-bit double extended precision - so @code{x} will be greater than zero. On the other hand, the expression for @code{y} will be executed through the interpreter and these calculations will store all intermediate results in double precision, so that @code{y} will be equal to zero. In contrast to 32-bit systems, many 64-bit systems will do all floating point on SSE - and thus both @code{x} and @code{y} will then be equal to zero. +## +## It is also known that some numerical libraries set their own precision modes or execute floating point operations on different units (say, they may use only the SSE unit when Octave uses exclusively the x87 FPU...). Therefore calls to such numerical libraries may also cancel changes made previously by @code{fesetprec}: +## +## @example +## fesetprec(1); fesetround(0); fetestenv +## @print{} Machine epsilon: 1.19209e-07 +## @print{} Rounding mode: 0 +## hilb(2)\ones(2,1); fetestenv +## @print{} Machine epsilon: 2.22045e-16 +## @print{} Rounding mode: 0.5 +## @end example +## +## (the above test has been run on an x86 32-bit system using Octave 3.0.2 package provided along with the Fedora 9 Linux distribution). +## +## Changes issued by @code{fesetprec} @strong{are} reflected by Octave's function @code{eps}: calling @code{fesetprec} replaces the built-in function @code{eps} with a dispatch @code{fetestenv}. In order to perform a more detailed check of actual parameters of the floating point arithmetics, use @code{fetestenv} directly. +## +## A possible application of @code{fesetprec}, following the idea by W. Kahan, is an experimental (in)stability analysis. Running some code with various settings of the floating point arithmetics may reveal some instability of the numerical algorithm being used in the code or reveal possible ill conditioning of the very problem being solved. +## +## Literature +## +## @enumerate +## @item W. Kahan, "How Futile are Mindless Assessments of Roundoff in Floating-Point Computation?", available on the Web: @indicateurl{http://www.cs.berkeley.edu/~wkahan/Mindless.pdf}. +## @item W. Kahan, "Why I can Debug some Numerical Programs You can't", available on the Web: @indicateurl{http://www.cs.berkeley.edu/~wkahan/Stnfrd50.pdf}. +## @item Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture, May 2007. +## @end enumerate +## @seealso{fetestenv, fesetround, system_dependent, eps, fe_system_dependent} +## @end deftypefn + +## Author: Piotr Krzyzanowski <pio...@mi...> +## + +## Revision history: +## +## 2008-10-10, Piotr Krzyzanowski <pio...@mi...> +## Initial release +## + +function err = fesetprec(mode) +if (nargin ~= 1) + print_usage(); +end + +systemtype = computer(); + +# Presently, we support either x86_64... +supported = ~isempty(findstr('x86_64', systemtype)); + +# ...or x86 +# (Actually we only support i486 and above, +# but in many cases the default compiler settings are for i386. +# We also do believe i286 and older are dead or at the museum.) +supported |= strcmp("i86", systemtype([1,3,4])); + +err = -2; +if (supported && exist('system_dependent')) + switch mode + case {1, 24} + err = fe_system_dependent('precision','single'); + case {2, 53} + err = fe_system_dependent('precision','double'); + case {3, 64} + err = fe_system_dependent('precision','double ext'); + otherwise + warning('Cannot set the precision mode to %g', mode); + usage('fesetprec (MODE), with MODE in {1, 2, 3}'); + end + if (err == 0) + % replace original eps function with fetestenv + dispatch('eps', 'any'); % restore the built-in version + dispatch('eps', 'fetestenv', 'any'); % obscure by fetestenv + else + warning('Problems setting precision mode %g.', mode); + warning('Use fetestenv() to verify.'); + end +else + warning('This system is not supported by fesetprec'); +end +end +%!demo +%! fesetprec(1); +%! fetestenv(); +%! fesetprec(3); +%! fetestenv(); Added: trunk/octave-forge/main/fenv/src/fesetround.m =================================================================== --- trunk/octave-forge/main/fenv/src/fesetround.m (rev 0) +++ trunk/octave-forge/main/fenv/src/fesetround.m 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,119 @@ +## Copyright (C) 2008 Piotr Krzyzanowski <pio...@mi...> +## +## 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/>. +## + +## -*- texinfo -*- +## @deftypefn {Function File} {} fesetround (@var{mode}) +## Change the rounding mode of the floating point arithmetics. +## +## Following the IEEE-754 standard recommendation, modern processors, including x86 and x86_64 architectures, support changing the rounding direction of the floating point arithmetics. +## +## Possible values of @var{mode} are +## @table @samp +## @item 0 +## Sets the rounding mode to @samp{towards zero}, i.e. @samp{truncate} +## @item 0.5 +## Sets the rounding mode to @samp{nearest} (the standard mode) +## @item Inf +## Sets the rounding mode to @samp{up}, i.e. @samp{towards +infinity} +## @item -Inf +## Sets the rounding mode to @samp{down}, i.e. @samp{towards -infinity} +## @end table +## +## When successful, @code{fesetround} returns 0. It is always recommended to verify the result experimentally by calling the function @code{fetestenv}, which tests the rounding mode and the precision of the floating point arithmetics. +## +## It is known that some numerical libraries may set their own rounding modes. Therefore @code{fesetround} may affect operations performed by numerical libraries called by Octave in a different way than it does the interpreted code. Calls to such numerical libraries may also cancel changes previously made by @code{fesetround}: +## +## @example +## fesetprec(1); fesetround(0); fetestenv +## @print{} Machine epsilon: 1.19209e-07 +## @print{} Rounding mode: 0 +## hilb(2)\ones(2,1); fetestenv +## @print{} Machine epsilon: 2.22045e-16 +## @print{} Rounding mode: 0.5 +## @end example +## +## (the above test has been run on an x86 32-bit system using Octave 3.0.2 package provided along with the Fedora 9 Linux distribution). +## +## A possible application of this function, following the idea by W. Kahan, is an experimental (in)stability analysis. Running some code with various settings of the floating point arithmetics may reveal some instability of the numerical algorithm being used in the code or reveal possible ill conditioning of the very problem being solved. +## +## Literature +## +## @enumerate +## @item W. Kahan, "How Futile are Mindless Assessments of Roundoff in Floating-Point Computation?", available on the Web: @indicateurl{http://www.cs.berkeley.edu/~wkahan/Mindless.pdf}. +## @item W. Kahan, "Why I can Debug some Numerical Programs You can't", available on the Web: @indicateurl{http://www.cs.berkeley.edu/~wkahan/Stnfrd50.pdf}. +## @item Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture, May 2007. +## @end enumerate +## @seealso{fetestenv, fesetprec, system_dependent, fe_system_dependent} +## @end deftypefn + +## Author: Piotr Krzyzanowski <pio...@mi...> +## + +## Revision history: +## +## 2008-10-10, Piotr Krzyzanowski <pio...@mi...> +## Initial release +## + +function err = fesetround(mode) +if (nargin ~= 1) + print_usage(); +end +err = -1; +supported = 1; +if supported && exist('system_dependent') + switch mode + case 0 + err = fe_system_dependent('rounding','zero'); + case 0.5 + err = fe_system_dependent('rounding','normal'); + case Inf + err = fe_system_dependent('rounding','up'); + case -Inf + err = fe_system_dependent('rounding','down'); + otherwise + warning('Cannot set the rounding mode to %g', mode); + usage('fesetround (MODE), with MODE in {0, 0.5, Inf, -Inf}'); + + end + if (err ~=0) + warning('Problems setting rounding mode %g.', mode); + warning('Use fetestenv() to verify.'); + end +else + warning('This system is not supported by fesetround'); +end +end +%!demo +%! fesetround(+Inf); +%! test = (1 + realmin > 1) +%! fesetround(0.5); +%!demo +%! fesetround(0.5); +%! test = (1 + realmin > 1) +%! fesetround(0.5); +%!test +%! fesetround(+Inf); +%! assert(1 + realmin > 1, true); +%! fesetround(0.5); +%!test +%! fesetround(0.5); +%! assert(1 + realmin > 1, false); +%!test +%! fesetround(0); +%! assert(1 + realmin > 1, false); +%! assert(-1 + realmin > -1, true); +%! fesetround(0.5); Added: trunk/octave-forge/main/fenv/src/fetestenv.m =================================================================== --- trunk/octave-forge/main/fenv/src/fetestenv.m (rev 0) +++ trunk/octave-forge/main/fenv/src/fetestenv.m 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,159 @@ +## Copyright (C) 2008 Piotr Krzyzanowski <pio...@mi...> +## +## 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/>. +## + +## -*- texinfo -*- +## @deftypefn {Function File} {} [@var{macheps}, @var{round}, @var{machepsb}, @var{roundb}] = fetestenv () +## Check some properties of floating point arithmetics: +## the rounding mode and the machine epsilon, as seen by +## Octave's interpreted code (@var{round} and @var{macheps}, respectively) and, if requested, as seen by BLAS (@var{roundb} and @var{machepsb}, respectively). +## +## The function performs a variant of the standard +## @display +## 1 + @var{macheps} ~= 1 +## @end display +## test in order to check the actual machine epsilon @var{macheps} +## and the present rounding mode @var{round} used in all interpreted +## expressions in Octave. +## +## As Octave interpreted code cannot achieve more than double precision, +## and some BLAS implementations may impose their internal precision and rounding modes, +## the user may request to check the actual rounding and precision used in BLAS calls. +## To this end, we perform a machine epsilon/rounding mode check of the form +## @display +## [1, @var{machepsb}, -1]*[1; 1; 1] ~= 0. +## @end display +## This Octave code results in a call to a BLAS routine, which in turn may use different floating point arithmetic settings than +## available to Octave. +## Rounding mode and machine epsilon (both as seen by BLAS) are returned +## in @var{roundb} and @var{machepsb}, respectively. +## +## See the manual pages of @command{fesetprec} for more details and subtleties. +## +## Note that the results of this test may or may not apply to library functions called by Octave. The simplest way to verify if the function you use in Octave is affected by the change of the rounding mode or the precision, is to run your function on the same data with different settings. Small differences between various modes indicate these modes do affect the behaviour of your function. No differences mean they probably do not apply. Big differences most likely indicate either an instability of your function or ill conditioning of your problem. +## +## +## @seealso{fesetround, fesetprec, system_dependent, eps, fe_system_dependent} +## @end deftypefn + +## Author: Piotr Krzyzanowski <pio...@mi...> +## + +## Revision history: +## +## 2008-10-10, Piotr Krzyzanowski <pio...@mi...> +## Initial release +## + +function [macheps, round, machepsb, roundb] = fetestenv() +if (nargin != 0) + warning ("Ignoring extra arguments"); +end + +# first run the standard "1 + eps == 1" test, modified to accommodate +# various rounding modes +x = [ 1, 1, -1, -1]; +xeps = [ 1, -1, 1, -1]; +do + xeps = xeps ./ 2; + stop = [(x + xeps > x)([1,3]), (x + xeps < x)([2,4])]; +until ( ~prod(stop) ) + +# machine eps is thus a twice as big number +macheps = xeps(1)*2; + +# use an even smaller number to reveal rounding direction +xeps = xeps ./ 2; +stop = [(x + xeps > x)([1,3]), (x + xeps < x)([2,4])]; + +round = sense_round(stop); + +if(nargout != 2) +# Check macheps and rounding as in BLAS' routine +# (Inspired by some discussion on the Octave's mailing list) + + x = [ 1, 1, -1, -1]; + xeps = [ 1, -1, 1, -1]; + do + xeps = xeps ./ 2; + stop = [([1,1,1]*[x; xeps; -x]>0)([1,3]), ... + ([1,1,1]*[x; xeps; -x]<0)([2,4])]; + until ( ~prod(stop) ) + + # machine eps is thus a twice as big number + machepsb = xeps(1)*2; + + # use an even smaller number to reveal rounding direction + xeps = xeps ./ 2; + stop = [([1,1,1]*[x; xeps; -x]>0)([1,3]), ... + ([1,1,1]*[x; xeps; -x]<0)([2,4])]; + + roundb = sense_round(stop); +end + +if(nargout == 0) + printf('Interpreter:\n'); + printf('\tMachine epsilon: %g\n', macheps); + printf('\tRounding mode: %g\n', round); + printf('BLAS:\n'); + printf('\tMachine epsilon: %g\n', machepsb); + printf('\tRounding mode: %g\n', roundb); +end + +endfunction + +function rnd = sense_round(stop) +# tries to sniff the rounding mode from the sign checks +# of the "1+meps-1" type expressions provided in 'stop' argument +switch stop +case [0, 0, 0, 0] + # all additions/subtractions collapsed to +1 or -1; we are in the + # round-to-nearest mode + rnd = 0.5; +case [1, 1, 0, 0] + # round-up mode + rnd = +Inf; +case [0, 0, 1, 1] + # round-down mode + rnd = -Inf; +case [0, 1, 1, 0] + # round-to-zero mode + rnd = 0; +otherwise + # am I dreaming? + rnd = NaN; + error('Unknown rounding mode detected.'); +end +endfunction +%!demo +%! fesetround(+Inf); fesetprec(1); +%! fetestenv(); +%! fesetround(0.5); fesetprec(3); +%!demo +%! fesetround(0); fesetprec(3); +%! fetestenv(); +%! fesetround(0.5); fesetprec(3); +%!test +%! if( fesetround(+Inf) == 0) +%! [eps, round] = fetestenv(); +%! assert(round, Inf); +%! fesetround(0.5); +%! endif +%!test +%! if( fesetround(0) == 0) +%! [eps, round] = fetestenv(); +%! assert(round, 0); +%! fesetround(0.5); +%! endif Added: trunk/octave-forge/main/fenv/src/system_dependent.m =================================================================== --- trunk/octave-forge/main/fenv/src/system_dependent.m (rev 0) +++ trunk/octave-forge/main/fenv/src/system_dependent.m 2008-10-28 10:20:21 UTC (rev 5388) @@ -0,0 +1,35 @@ +## Copyright (C) 2008 Grzegorz Timoszuk <gti...@gm...> +## +## 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/>. +## + +## -*- texinfo -*- +## @deftypefn {Function File} {} @var{err} = system_dependent (@var{property}, @var{value}) +## This function is intentionally left undocumented. +## @end deftypefn + +function err = system_dependent(property, value) +err = -1; +switch property +# the interface for "setround" and "setprecision" follows +# the examples from W.Kahan's article +# http://www.cs.berkeley.edu/~wkahan/Mindless.pdf +case "setround" + err = fesetround(value); +case "setprecision" + err = fesetprec(value); +otherwise + err = -1; +endswitch +endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sim...@us...> - 2008-12-16 20:15:21
|
Revision: 5494 http://octave.svn.sourceforge.net/octave/?rev=5494&view=rev Author: simonepernice Date: 2008-12-16 20:15:12 +0000 (Tue, 16 Dec 2008) Log Message: ----------- First version of SIMP. Added Paths: ----------- trunk/octave-forge/main/simp/ trunk/octave-forge/main/simp/COPYING trunk/octave-forge/main/simp/DESCRIPTION trunk/octave-forge/main/simp/INDEX trunk/octave-forge/main/simp/doc/ trunk/octave-forge/main/simp/doc/simp.lyx trunk/octave-forge/main/simp/doc/simp.pdf trunk/octave-forge/main/simp/inst/ trunk/octave-forge/main/simp/inst/__add1Int__.m trunk/octave-forge/main/simp/inst/__addSingleInt__.m trunk/octave-forge/main/simp/inst/__checkInputInt__.m trunk/octave-forge/main/simp/inst/__checkInt__.m trunk/octave-forge/main/simp/inst/__checkMonotonicity__.m trunk/octave-forge/main/simp/inst/__div1Int__.m trunk/octave-forge/main/simp/inst/__divSingleInt__.m trunk/octave-forge/main/simp/inst/__engSingleFormInt__.m trunk/octave-forge/main/simp/inst/__incrementalRatio__.m trunk/octave-forge/main/simp/inst/__intSingleToTol100__.m trunk/octave-forge/main/simp/inst/__intSingleToTol__.m trunk/octave-forge/main/simp/inst/__intSingleToVal__.m trunk/octave-forge/main/simp/inst/__intersectSingleInt__.m trunk/octave-forge/main/simp/inst/__intervalFunctionMultiInt__.m trunk/octave-forge/main/simp/inst/__intervalFunctionNNSingleInt__.m trunk/octave-forge/main/simp/inst/__intervalFunctionNSingleInt__.m trunk/octave-forge/main/simp/inst/__invertSingleInt__.m trunk/octave-forge/main/simp/inst/__mul1Int__.m trunk/octave-forge/main/simp/inst/__mulSingleInt__.m trunk/octave-forge/main/simp/inst/__negateSingleInt__.m trunk/octave-forge/main/simp/inst/__powerSingleInt__.m trunk/octave-forge/main/simp/inst/__sqrSingleInt__.m trunk/octave-forge/main/simp/inst/__sqrtSingleInt__.m trunk/octave-forge/main/simp/inst/__sub1Int__.m trunk/octave-forge/main/simp/inst/__subSingleInt__.m trunk/octave-forge/main/simp/inst/addInt.m trunk/octave-forge/main/simp/inst/dB10ToLinInt.m trunk/octave-forge/main/simp/inst/dB20ToLinInt.m trunk/octave-forge/main/simp/inst/divInt.m trunk/octave-forge/main/simp/inst/engFormInt.m trunk/octave-forge/main/simp/inst/errorBarInt.m trunk/octave-forge/main/simp/inst/findRootInt.m trunk/octave-forge/main/simp/inst/functionInt.m trunk/octave-forge/main/simp/inst/intToTol.m trunk/octave-forge/main/simp/inst/intToTol100.m trunk/octave-forge/main/simp/inst/intToVal.m trunk/octave-forge/main/simp/inst/invertAddInt.m trunk/octave-forge/main/simp/inst/invertInt.m trunk/octave-forge/main/simp/inst/linSpaceTol100Int.m trunk/octave-forge/main/simp/inst/linToDB10Int.m trunk/octave-forge/main/simp/inst/linToDB20Int.m trunk/octave-forge/main/simp/inst/logSpaceTol100Int.m trunk/octave-forge/main/simp/inst/monotonicFunctionInt.m trunk/octave-forge/main/simp/inst/mulInt.m trunk/octave-forge/main/simp/inst/negateInt.m trunk/octave-forge/main/simp/inst/plotInt.m trunk/octave-forge/main/simp/inst/powerInt.m trunk/octave-forge/main/simp/inst/sqrAddInt.m trunk/octave-forge/main/simp/inst/sqrInt.m trunk/octave-forge/main/simp/inst/sqrtInt.m trunk/octave-forge/main/simp/inst/subInt.m trunk/octave-forge/main/simp/inst/valtol100ToInt.m Added: trunk/octave-forge/main/simp/COPYING =================================================================== --- trunk/octave-forge/main/simp/COPYING (rev 0) +++ trunk/octave-forge/main/simp/COPYING 2008-12-16 20:15:12 UTC (rev 5494) @@ -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 program--to 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 general-purpose 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 non-free. + + 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 copyright-like 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 non-source +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 general-purpose 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 Anti-Circumvention 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 +non-permissive 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 Non-Source 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 +machine-readable 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 peer-to-peer 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 non-consumer 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 non-permissive 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 non-permissive, 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 peer-to-peer 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 cross-claim 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 non-exclusive, worldwide, royalty-free +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 non-exercise 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/why-not-lgpl.html>. Added: trunk/octave-forge/main/simp/DESCRIPTION =================================================================== --- trunk/octave-forge/main/simp/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/simp/DESCRIPTION 2008-12-16 20:15:12 UTC (rev 5494) @@ -0,0 +1,12 @@ +Name: simp.tar +Version: 1.0.0 +Date: 13/12/2008 +Author: Simone Pernice +Maintainer: Simone Pernice +Title: Single Interval Mathematics Package for Octave +Description: This package define the basic operations on intervals. It is useful when some values for a computation are incerte. +Categories: Interval Mathematics Octave +Url: simonepernice.freehostia.com +Autoload: yes +License: GPL version 3 + Added: trunk/octave-forge/main/simp/INDEX =================================================================== --- trunk/octave-forge/main/simp/INDEX (rev 0) +++ trunk/octave-forge/main/simp/INDEX 2008-12-16 20:15:12 UTC (rev 5494) @@ -0,0 +1,27 @@ +intervals >> Basic Arithmetic + addInt + negateInt + subInt + mulInt + invertInt + invertAddInt + divInt + powerInt + sqrInt + sqrtInt + addSqrInt + engFormInt + dB10ToLinInt + linToDB10Int + dB20ToLinInt + linToDB20Int + valtol100ToInt + intToTol + intToTol100 + intToVal + linSpaceTol100Int + logSpaceTol100Int + monotonicFunctionInt + functionInt + plotInt + errorBarInt Added: trunk/octave-forge/main/simp/doc/simp.lyx =================================================================== --- trunk/octave-forge/main/simp/doc/simp.lyx (rev 0) +++ trunk/octave-forge/main/simp/doc/simp.lyx 2008-12-16 20:15:12 UTC (rev 5494) @@ -0,0 +1,1137 @@ +#LyX 1.5.6 created this file. For more info see http://www.lyx.org/ +\lyxformat 276 +\begin_document +\begin_header +\textclass article +\language english +\inputencoding auto +\font_roman default +\font_sans default +\font_typewriter default +\font_default_family default +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\paperfontsize default +\spacing single +\papersize default +\use_geometry false +\use_amsmath 1 +\use_esint 1 +\cite_engine basic +\use_bibtopic false +\paperorientation portrait +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\defskip medskip +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\author "" +\author "" +\end_header + +\begin_body + +\begin_layout Title +Single Interval Mathematics Package for Octave +\end_layout + +\begin_layout Standard + +\newpage + +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand tableofcontents + +\end_inset + + +\end_layout + +\begin_layout Standard + +\newpage + +\end_layout + +\begin_layout Section +Author and version +\end_layout + +\begin_layout Standard +I am Simone Pernice and I am the writer of the SIMP pachage. + If you find any bug or you want to add features, you can contact me at + pe...@li.... + You can find further details on my web site: simonepernice.freehostia.com +\end_layout + +\begin_layout Standard +List of versions of this document: +\end_layout + +\begin_layout Itemize +Version 1.0, Turin 14th December 2008, initial draft +\end_layout + +\begin_layout Section +Preface +\end_layout + +\begin_layout Standard +I am an engineer, I worked on hardware and software fields. + To design an electrical circuit is quite complex because the characteristics + of the components involved have huge tolerance some about 5%, while others + 80%. + The engineer has the target to have the circuit working in the worst case + of the components and of the environment. + That involves to compute several time the same equation putting inside + the worst or best case values. + Some time ago I was doing the usual design when I though, what if I use + intervals instead of numbers: I may get the results in just one step! Then + I went on the Internet looking for Interval Mathematics: I discovered it + was invented in the '50s. + Eventually I looked for a open source calculator able to manage intervals + instead of Numbers. + Unfortunately I was not able to find anything. + There are just some libraries for C++ language and packages for proprietary + software. + I was thinking to develop a calculator on my own, but I was not that happy + because it would have required a lot of effort. + Then I discovered Octave. + After a loot at its tutorial I decided to write a package to work on intervals + in Octave. + It was the right choice, because it tooks just three days while to make + a new program from scratch would have taken weeks. + The package extends the basic function to single interval mathematics, + it is called SIMP. + Unfortunately it is not possible to overload Octave operators, therefore + new functions working on matrix were added for that purpose. +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand prettyref +reference "sec:Introduction" + +\end_inset + + shows why numbers are not the best tool when computing real world measures. + +\begin_inset LatexCommand prettyref +reference "sec:Intervals" + +\end_inset + + explains what is an interval and how a function can be extended to work + on intervals. + +\begin_inset LatexCommand prettyref +reference "sec:Issues-with-interval" + +\end_inset + + explains some issues to be aware when making interval calculations, which + are not present in the number computation. + +\begin_inset LatexCommand prettyref +reference "sec:Single-Interval-Mathematics" + +\end_inset + + shows some examples to explain how the SIMP package can be used. + Eventually the +\begin_inset LatexCommand prettyref +reference "sec:Functions" + +\end_inset + + provides the detailed list of functions available. +\end_layout + +\begin_layout Section +Introduction +\begin_inset LatexCommand label +name "sec:Introduction" + +\end_inset + + +\end_layout + +\begin_layout Standard +Every day we need to compute the result of a lot of simple mathematical + equations. + For example the cost of the apples bought at the supermarket is given by + the apple cost per kilo times the number of kilos bought: +\begin_inset Formula $applePrice=appleCostPerKilo\times kilosOfAppleBought$ +\end_inset + +. +\end_layout + +\begin_layout Standard +When we need the result of those mathematical expressions, we put the values + on the right side of the equation and we got its result on the left side. + Well, we usually put wrong numbers on the right side and therefore no doubt + we get wrong results. + There are a lot of reason why we put wrong values, below some of them follows: + +\end_layout + +\begin_layout Enumerate +Most of the values are measured, therefore they are known within a given + tolerance (looking for accuracy and precision on Wikipedia will provide + interesting information); +\end_layout + +\begin_layout Enumerate +Some values have an infinite number of digits after the decimal point, like + for +\begin_inset Formula $\pi$ +\end_inset + + (the ratio between a circumference and its diameter); +\end_layout + +\begin_layout Enumerate +Some values change with time or samples or whatever, like the weight of + a person (which can change of 5% during a day) or the current gain of a + BJT (which can change of 50% from the samples of the same series); +\end_layout + +\begin_layout Enumerate +Some value are estimation or guess: something like between a minimum and + a maximum. + +\end_layout + +\begin_layout Standard +For example if a pipe brakes and you want to buy a new one you need its + diameter. + If you do not have a caliber, you may measure its circumference and divide + it by +\begin_inset Formula $\pi$ +\end_inset + + (3.1415...): +\begin_inset Formula $diameter=\frac{circumference}{\pi}$ +\end_inset + +. +\end_layout + +\begin_layout Standard +Here there are two errors: the circumference is knows with the tolerance + given by your meter, moreover +\begin_inset Formula $\pi$ +\end_inset + + has an infinite number of digits while only few of them can be used in + the operation. + You may think the error is negligible, the result is enough accurate to + buy a new pipe in a hardware shop. + However the not infinite accuracy of those operation avoid the use of computers + as automatic theorem demonstration tools and so on... +\end_layout + +\begin_layout Standard +This kind of issue is quite common on engineer design. + What engineers do is to be sure their design will work in the worst case + or in most of the cases (usually more than 99.9%). + Here a simple example. + Let us say you want to repaint the walls of your living room completely + messed up by your children. + You need to compute how many paint cans you need to buy. + The equation is quite simple: +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +paintCans=\frac{2\times\left(roomWidth+roomLength\right)\times roomHeight}{paintLitersPerCan\times paintEfficiency}\label{eq:paintCans}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +where paintEfficiency is how may square meter of surface can be painted + with a liter of paint. + The problem here is that usually we do not have a meter long enough to + measure the room width and length, it is much simpler to count the number + of steps to go through it (1 step is about 1m, let us say from 0.9 to 1.1m). + Moreover the paint provider usually declare a paint efficiency range. + Let us put below the data: +\end_layout + +\begin_layout Itemize +roomWidth = 6 +\end_layout + +\begin_layout Itemize +steps roomLength = 4 +\end_layout + +\begin_layout Itemize +steps roomHeight = 3 +\end_layout + +\begin_layout Itemize +meters paintEfficiency = from 0.7 to 1.3 square meters per liter (1 liter + per square meter in average) +\end_layout + +\begin_layout Itemize +paintLitersPerCan = 40 +\end_layout + +\begin_layout Standard +To compute the average result just put average values in +\begin_inset LatexCommand eqref +reference "eq:paintCans" + +\end_inset + +. + We get: +\begin_inset Formula $paintCans=\frac{2\times\left(6+4\right)\times3}{40\times1}=1.5$ +\end_inset + + +\end_layout + +\begin_layout Standard +paint cans, which means two unless you are able to buy just half of a can. + +\end_layout + +\begin_layout Standard +Are you satisfied with that result? I am not. + What if I have underestimated something? As every good engineer I would + check what would happen in the worst case, which means 1.1m step and efficiency + of just 0.8. + Again just substituting those values in +\begin_inset LatexCommand eqref +reference "eq:paintCans" + +\end_inset + +, we get: +\begin_inset Formula $paintCans=\frac{2\times\left(6.6+4.4\right)\times3}{40\times0.7}=2.36$ +\end_inset + +. + That is really interesting: in the worst case I would miss 0.36 cans, it + makes sense to buy three cans to avoid to go back to the hardware shop + to buy one more (in the worst case). + +\end_layout + +\begin_layout Standard +More happy with the result now? I am not completely satisfied, I am asking + myself: what if in the best case I need just 1 can? In that case probably + I need more accurate data because the result range would be too wide. + Eventually from +\begin_inset LatexCommand eqref +reference "eq:paintCans" + +\end_inset + + we get: +\begin_inset Formula $paintCans=\frac{2\times\left(5.4+3.6\right)\times3}{40\times1.3}=1.04$ +\end_inset + +. + Which means two cans. + I am satisfied, I have to buy at least two cans, but probably I may need + one more. + In the next paragraph you will see how to do all this stuff in one step + using Octave and SIMP. + +\end_layout + +\begin_layout Section +Intervals +\begin_inset LatexCommand label +name "sec:Intervals" + +\end_inset + + +\end_layout + +\begin_layout Standard +As you can see in the example above a lot of computations are required to + get an idea of the result. + To get the worst (and sometime is required also best) case, you need also + to think carefully at the equation because some time you need to put the + higher value (for steps) while other times the smallest (for efficiency) + to get the worst case and vice versa for the best. + There is a much simpler way to work with that issue. + You can use intervals instead of number. + An interval is: +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +[a1,a2]=\left\{ \forall x\in\mathbb{R\mid\mathit{a1}\leqslant\mathit{x}\leqslant\mathit{a2}}\right\} ;a1,a2\in\mathbb{R\cup\left\{ -\infty,+\infty\right\} ;\mathit{a1}\leqslant\mathit{a2};}\label{eq:interval}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +In few words, [a, b] is the set of real numbers among a and b. + Please note that intervals suit perfectly in all the cases where numbers + do not fit (some were showed in the +\begin_inset LatexCommand prettyref +reference "sec:Introduction" + +\end_inset + +). + Moreover if it is correct to use a number, it is possible to use a degenerate + interval like [a, a]. + It is possible also to define functions that work on interval instead of + numbers: +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +f\left([a1,a2],[b1,b2],...\right)=\left\{ \forall f(a,b,...)\in\mathbb{R}\mid\exists a\in[a1,a2],b\in[b1,b2],...\right\} \label{eq:functionOnInterval}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +Please note, with that definition it is possible to extend every function + (like addition, multiplication, square, square root, ...) to work on intervals. + +\end_layout + +\begin_layout Standard +Note also sometime a function may generate several intervals as result, + but in this package we will concentrate on single interval function. + I will give you an example: +\begin_inset Formula $[4,4]/[-2,2]=[-\infty,-2]\cup[2,+\infty]$ +\end_inset + +. + However the result is a double interval, for that reason if you try to + divide for a interval containing 0 in SIMP, you will get an error. +\end_layout + +\begin_layout Standard +Eventually note that the usually compute the interval result of a function + applied to intervals is computationally a long task. + In those case we are satisfied by a bigger interval containing the correct + interval. + However the target is always to get the smaller interval containing the + solution. + In the example above you would have: +\end_layout + +\begin_layout Itemize +roomWidth = [5.4, 6.6] meters +\end_layout + +\begin_layout Itemize +roomLength = [3.6, 4.4] meters +\end_layout + +\begin_layout Itemize +roomHeight = 3 = [3, 3] meters +\end_layout + +\begin_layout Itemize +paintEfficiency = [0.7, 1.3] square meters per liter +\end_layout + +\begin_layout Itemize +paintLitersPerCan = 40 = [40, 40] liters per can +\end_layout + +\begin_layout Standard +Now you have just to compute the equation once with extended function to + get [1.04, 2.36] cans. + SIMP, the Octave package I developed, extends all the basic mathematical + functions and it provides functions to extend all other available Octave + functions. + +\end_layout + +\begin_layout Section +Issues with interval computation +\begin_inset LatexCommand label +name "sec:Issues-with-interval" + +\end_inset + + +\end_layout + +\begin_layout Standard +There are few issues you need to know about interval computations. + +\end_layout + +\begin_layout Subsection +Variables independence +\end_layout + +\begin_layout Standard +All the variables you use to make a computation are independent from each + other, although they are the same instance of variable for you. + For example the perimeter of a rectangle (which was also used in a piece + of the equation +\begin_inset LatexCommand ref +reference "eq:paintCans" + +\end_inset + +) can be written in several different ways. + If the dimensions of the rectangle are a end b we can write: +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +perimeter=2(a+b)\label{eq:perimetersmall}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{equation} +perimeter=a+a+b+b\label{eq:perimeterbig}\end{equation} + +\end_inset + + +\end_layout + +\begin_layout Standard +In standard mathematics they are the same, while in interval mathematics + we have the interval +\begin_inset Formula $equation(\ref{eq:perimetersmall})\subseteqq equation(\ref{eq:perimeterbig})$ +\end_inset + +. + The reason is that every interval that appears in the equation is not dependent + from each other, therefore in equation +\begin_inset LatexCommand ref +reference "eq:perimeterbig" + +\end_inset + + is like having four different intervals. + What is important to remember is that: +\emph on +Every variable should appear just once in the equation if possible in order + to get the smallest interval possible as result. +\end_layout + +\begin_layout Subsection +Hyper-cube Overlapping +\end_layout + +\begin_layout Standard +The result of a set of equation involving intervals is an Hyper-cube. + For example if we have just two equations in the unknowns x and y the result + will be a couple of intervals which draw a rectangle on the Cartesian plane. + However in general the solution will be smaller, for example just a segment. + In that case the rectangle will contain the solution. + There is no way to solve that, just remember the solution is usually a + super set of the actual one. +\end_layout + +\begin_layout Section +Introduction on how the package works +\begin_inset LatexCommand label +name "sec:Single-Interval-Mathematics" + +\end_inset + + +\end_layout + +\begin_layout Subsection +Installation +\end_layout + +\begin_layout Standard +First of all you have to install the SIMP package in Octave, so that Octave + will automatically load the new functions at every start. + To do that just run Octave from the directory where was downloaded the + package and execute the following command: +\end_layout + +\begin_layout Itemize +pkg install simp.tar.gz +\end_layout + +\begin_layout Subsection +Some example +\end_layout + +\begin_layout Standard +SIMP works on matrix, interpreted as intervals. + The basic interval is: [min, max], which in Octave is a row vector made + by two elements. + The added functions work on those matrix. + For example to add the intervals [5.4, 6.6] and [3.6, 4.4] it is possible to + write: +\end_layout + +\begin_layout Itemize +addInt ([5.4, 6.6], [3.6, 4.4]) +\end_layout + +\begin_layout Description +> ans = [9, 11] +\end_layout + +\begin_layout Standard +addInt stands for add intervals. + It is possible to use scalar number instead of intervals. + Every scalar is computed like: +\begin_inset Formula $s=[s,s]$ +\end_inset + +. + Therefore the following computations give the same result: +\end_layout + +\begin_layout Itemize +addInt ([5.4, 6.6], 3.6) +\end_layout + +\begin_layout Description +> ans = [9, 10.2] +\end_layout + +\begin_layout Itemize +addInt ([5.4, 6.6], [3.6, 3.6]) +\end_layout + +\begin_layout Description +> ans = [9, 10.2] +\end_layout + +\begin_layout Standard +Octave supports variable declaration, therefore it is possible to write: +\end_layout + +\begin_layout Itemize +roomWidth = [5.4, 6.6]; +\end_layout + +\begin_layout Itemize +roomLength =[3.6, 4.4]; +\end_layout + +\begin_layout Itemize +addInt (roomWidth, roomLength) +\end_layout + +\begin_layout Description +> ans = [9, 11] +\end_layout + +\begin_layout Standard +Now we know enough from Octave to compute the equation +\begin_inset LatexCommand ref +reference "eq:paintCans" + +\end_inset + +: +\end_layout + +\begin_layout Itemize +roomHeight = 3; +\end_layout + +\begin_layout Itemize +paintEfficiency = [0.7, 1.3]; +\end_layout + +\begin_layout Itemize +paintLitersPerCan = 40; +\end_layout + +\begin_layout Itemize +divInt(mulInt(2, addInt (roomWidth, roomLength), roomHeight), mulInt(paintLiters +PerCan, paintEfficiency)) +\end_layout + +\begin_layout Description +> ans = [1.0385, 2.3571] +\end_layout + +\begin_layout Standard +Sometime the intervals are expressed in terms of tolerance. + The electronic resistors are sold in several tolerances: 1%, 2%, 5%. + There is a function to easily make an interval from a tolerance. + For example a resistor of 10KOhms with 5% of tolerance can be converted + in an interval: +\end_layout + +\begin_layout Itemize +tollToInt (10000, 5) +\end_layout + +\begin_layout Description +> ans = [9500, 10500] +\end_layout + +\begin_layout Standard +If the tolerance is not symmetric, for example +5% and -10%: +\end_layout + +\begin_layout Itemize +tollToInt (10000, 5, -10) +\end_layout + +\begin_layout Description +> ans = [9000, 10500] +\end_layout + +\begin_layout Standard +All the computations are done among intervals, therefore if a result with + tolerance is required it is possible to get back the value and tolerance + of an interval in the hypothesis that the tolerance is symmetrical: +\end_layout + +\begin_layout Itemize +engFormInt([9500, 10500]) +\end_layout + +\begin_layout Description +> 10K+-5% +\end_layout + +\begin_layout Standard +Eventually those functions work on vectors of interv... [truncated message content] |
From: <xav...@us...> - 2009-01-10 01:02:42
|
Revision: 5518 http://octave.svn.sourceforge.net/octave/?rev=5518&view=rev Author: xavier98 Date: 2009-01-10 01:02:37 +0000 (Sat, 10 Jan 2009) Log Message: ----------- Bring swig wrappers up to date, and fix/suppress mysql build error in ubuntu 8.10. Modified Paths: -------------- trunk/octave-forge/main/ann/DESCRIPTION trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp trunk/octave-forge/main/database/DESCRIPTION trunk/octave-forge/main/database/src/mysql.i trunk/octave-forge/main/database/src/mysql_filtered.h trunk/octave-forge/main/database/src/mysql_wrap.cpp trunk/octave-forge/main/database/src/odbc_wrap.cpp trunk/octave-forge/main/database/src/postgres_wrap.cpp trunk/octave-forge/main/database/src/sqlite3_wrap.cpp trunk/octave-forge/main/ftp/DESCRIPTION trunk/octave-forge/main/ftp/src/ftp_wrap.cpp Modified: trunk/octave-forge/main/ann/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ann/DESCRIPTION 2009-01-09 14:17:46 UTC (rev 5517) +++ trunk/octave-forge/main/ann/DESCRIPTION 2009-01-10 01:02:37 UTC (rev 5518) @@ -1,6 +1,6 @@ Name: ANN -Version: 1.0.1 -Date: 2008-08-23 +Version: 1.0.2 +Date: 2009-01-09 Author: Various Authors Maintainer: Xavier Delacour Title: Approximate Nearest Neighbor Library Modified: trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp =================================================================== --- trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2009-01-09 14:17:46 UTC (rev 5517) +++ trunk/octave-forge/main/ann/src/ann/bindings/ann_wrap.cpp 2009-01-10 01:02:37 UTC (rev 5518) @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.35 + * Version 1.3.37 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -8,22 +8,27 @@ * interface file instead. * ----------------------------------------------------------------------------- */ +#define SWIGOCTAVE #define SWIG_name_d "ann" #define SWIG_name ann + #ifdef __cplusplus +/* SwigValueWrapper is described in swig.swg */ template<typename T> class SwigValueWrapper { - T *tt; + struct SwigMovePointer { + T *ptr; + SwigMovePointer(T *p) : ptr(p) { } + ~SwigMovePointer() { delete ptr; } + SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs); + SwigValueWrapper(const SwigValueWrapper<T>& rhs); public: - SwigValueWrapper() : tt(0) { } - SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { } - SwigValueWrapper(const T& t) : tt(new T(t)) { } - ~SwigValueWrapper() { delete tt; } - SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } - operator T&() const { return *tt; } - T *operator&() { return tt; } -private: - SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs); + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } + operator T&() const { return *pointer.ptr; } + T *operator&() { return pointer.ptr; } }; template <typename T> T SwigValueInit() { @@ -73,6 +78,12 @@ # endif #endif +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) @@ -139,11 +150,12 @@ #include <octave/parse.h> #include <octave/ov-fcn-handle.h> #include <octave/Cell.h> +#include <octave/oct-map.h> /* ----------------------------------------------------------------------------- * swigrun.swg * - * This file contains generic CAPI SWIG runtime support for pointer + * This file contains generic C API SWIG runtime support for pointer * type checking. * ----------------------------------------------------------------------------- */ @@ -162,11 +174,11 @@ /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for - creating a static or dynamic library from the swig runtime code. - In 99.9% of the cases, swig just needs to declare them as 'static'. + creating a static or dynamic library from the SWIG runtime code. + In 99.9% of the cases, SWIG just needs to declare them as 'static'. - But only do this if is strictly necessary, ie, if you have problems - with your compiler or so. + But only do this if strictly necessary, ie, if you have problems + with your compiler or suchlike. */ #ifndef SWIGRUNTIME @@ -193,14 +205,14 @@ /* Flags/methods for returning states. - The swig conversion methods, as ConvertPtr, return and integer + The SWIG conversion methods, as ConvertPtr, return and integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). Use the following macros/flags to set or process the returning states. - In old swig versions, you usually write code as: + In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { // success code @@ -208,7 +220,7 @@ //fail code } - Now you can be more explicit as: + Now you can be more explicit: int res = SWIG_ConvertPtr(obj,vptr,ty.flags); if (SWIG_IsOK(res)) { @@ -217,7 +229,7 @@ // fail code } - that seems to be the same, but now you can also do + which is the same really, but now you can also do Type *ptr; int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); @@ -235,7 +247,7 @@ I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that - requires also to SWIG_ConvertPtr to return new result values, as + also requires SWIG_ConvertPtr to return new result values, such as int SWIG_ConvertPtr(obj, ptr,...) { if (<obj is ok>) { @@ -253,7 +265,7 @@ Of course, returning the plain '0(success)/-1(fail)' still works, but you can be more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the - swig errors code. + SWIG errors code. Finally, if the SWIG_CASTRANK_MODE is enabled, the result code allows to return the 'cast rank', for example, if you have this @@ -267,9 +279,8 @@ fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() +*/ - - */ #define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) @@ -294,7 +305,6 @@ #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) - /* Cast-Rank Mode */ #if defined(SWIG_CASTRANK_MODE) # ifndef SWIG_TypeRank @@ -317,8 +327,6 @@ #endif - - #include <string.h> #ifdef __cplusplus @@ -415,40 +423,58 @@ } -/* think of this as a c++ template<> or a scheme macro */ -#define SWIG_TypeCheck_Template(comparison, ty) \ - if (ty) { \ - swig_cast_info *iter = ty->cast; \ - while (iter) { \ - if (comparison) { \ - if (iter == ty->cast) return iter; \ - /* Move iter to the top of the linked list */ \ - iter->prev->next = iter->next; \ - if (iter->next) \ - iter->next->prev = iter->prev; \ - iter->next = ty->cast; \ - iter->prev = 0; \ - if (ty->cast) ty->cast->prev = iter; \ - ty->cast = iter; \ - return iter; \ - } \ - iter = iter->next; \ - } \ - } \ - return 0 - /* Check the typename */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheck(const char *c, swig_type_info *ty) { - SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty); + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (strcmp(iter->type->name, c) == 0) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; } -/* Same as previous function, except strcmp is replaced with a pointer comparison */ +/* + Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison +*/ SWIGRUNTIME swig_cast_info * -SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) { - SWIG_TypeCheck_Template(iter->type == from, into); +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (iter->type == from) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; } /* @@ -1318,7 +1344,7 @@ // index operator else { if (ops[skip] == '(' || ops[skip] == '{') { - const char *op_name = ops[skip] == '(' ? "__paren" : "__brace"; + const char *op_name = ops[skip] == '(' ? "__paren__" : "__brace__"; octave_value_list args; args.append(*idx_it++); ++skip; @@ -1357,7 +1383,7 @@ } else if (ops[skip] == '(' || ops[skip] == '{') { - const char *op_name = ops[skip] == '(' ? "__paren_asgn" : "__brace_asgn"; + const char *op_name = ops[skip] == '(' ? "__paren_asgn__" : "__brace_asgn__"; member_value_pair *m = find_member(op_name, false); if (m) { octave_value_list args; @@ -1395,40 +1421,27 @@ virtual bool is_string() const { octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); - return !!nc_this->find_member("__str", false); + return !!nc_this->find_member("__str__", false); } virtual std::string string_value(bool force = false) const { octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); - member_value_pair *m = nc_this->find_member("__str", false); + member_value_pair *m = nc_this->find_member("__str__", false); if (!m) { - error("__str method not defined"); + error("__str__ method not defined"); return std::string(); } octave_value_list outarg = nc_this->member_invoke(m, octave_value_list(nc_this->as_value()), 1); if (outarg.length() < 1 || !outarg(0).is_string()) { - error("__str method did not return a string"); + error("__str__ method did not return a string"); return std::string(); } return outarg(0).string_value(); } - /* virtual Octave_map map_value() const { - octave_swig_type *nc_this = const_cast < octave_swig_type *>(this); - member_value_pair *m = nc_this->find_member("__str", false); - if (!m) { - error("__map method not defined"); - return std::string(); - } - octave_value_list outarg = nc_this->member_invoke(m, octave_value_list(nc_this->as_value()), 1); - if (outarg.length() < 1 || !outarg(0).is_map()) { - error("__map method did not return a string"); - return std::string(); - } - return outarg(0).map_value(); + return Octave_map(); } - */ virtual string_vector map_keys() const { member_map tmp; @@ -1442,6 +1455,35 @@ return keys; } + virtual bool save_ascii (std::ostream& os) { + return true; + } + + virtual bool load_ascii (std::istream& is) { + return true; + } + + virtual bool save_binary (std::ostream& os, bool& save_as_floats) { + return true; + } + + virtual bool load_binary (std::istream& is, bool swap, + oct_mach_info::float_format fmt) { + return true; + } + +#if defined (HAVE_HDF5) + virtual bool + save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats) { + return true; + } + + virtual bool + load_hdf5 (hid_t loc_id, const char *name, bool have_h5giterate_bug) { + return true; + } +#endif + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return string_value(); } @@ -1466,7 +1508,7 @@ assert(ost); octave_value ret; - if (ost->dispatch_unary_op(std::string("__") + op_name, ret)) + if (ost->dispatch_unary_op(std::string("__") + op_name + std::string("__"), ret)) return ret; std::string symbol = "op_" + ost->swig_type_name() + "_" + op_name; octave_value_list args; @@ -1483,7 +1525,7 @@ octave_swig_type *rhs_ost = Swig::swig_value_deref(rhs); octave_value ret; - if (lhs_ost && lhs_ost->dispatch_binary_op(std::string("__") + op_name, rhs, ret)) + if (lhs_ost && lhs_ost->dispatch_binary_op(std::string("__") + op_name + std::string("__"), rhs, ret)) return ret; std::string symbol; @@ -1605,9 +1647,35 @@ virtual std::string string_value(bool force = false) const { return ptr->string_value(force); } + virtual Octave_map map_value() const + { return ptr->map_value(); } + virtual string_vector map_keys() const { return ptr->map_keys(); } + virtual bool save_ascii (std::ostream& os) + { return ptr->save_ascii(os); } + + virtual bool load_ascii (std::istream& is) + { return ptr->load_ascii(is); } + + virtual bool save_binary (std::ostream& os, bool& save_as_floats) + { return ptr->save_binary(os, save_as_floats); } + + virtual bool load_binary (std::istream& is, bool swap, + oct_mach_info::float_format fmt) + { return ptr->load_binary(is, swap, fmt); } + +#if defined (HAVE_HDF5) + virtual bool + save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats) + { return ptr->save_hdf5(loc_id, name, save_as_floats); } + + virtual bool + load_hdf5 (hid_t loc_id, const char *name, bool have_h5giterate_bug) + { return ptr->load_hdf5(loc_id, name, have_h5giterate_bug); } +#endif + virtual octave_value convert_to_str(bool pad = false, bool force = false, char type = '"') const { return ptr->convert_to_str(pad, force, type); } @@ -1656,6 +1724,37 @@ void print(std::ostream &os, bool pr_as_read_syntax = false) const { os << "swig packed type: name = " << (type ? type->name : std::string()) << ", len = " << buf.size() << std::endl; } + + + virtual bool save_ascii (std::ostream& os) { + return true; + } + + virtual bool load_ascii (std::istream& is) { + return true; + } + + virtual bool save_binary (std::ostream& os, bool& save_as_floats) { + return true; + } + + virtual bool load_binary (std::istream& is, bool swap, + oct_mach_info::float_format fmt) { + return true; + } + +#if defined (HAVE_HDF5) + virtual bool + save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats) { + return true; + } + + virtual bool + load_hdf5 (hid_t loc_id, const char *name, bool have_h5giterate_bug) { + return true; + } +#endif + private: DECLARE_OCTAVE_ALLOCATOR; DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA; @@ -2047,7 +2146,7 @@ /* -------- TYPES TABLE (END) -------- */ -#define SWIGVERSION 0x010335 +#define SWIGVERSION 0x010337 #define SWIG_VERSION SWIGVERSION @@ -2294,12 +2393,12 @@ int arg1 ; ANNpoint arg2 = (ANNpoint) 0 ; ANNpoint arg3 = (ANNpoint) 0 ; - ANNdist result; int val1 ; int ecode1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNdist result; if (!SWIG_check_num_args("annDist",args.length(),3,3,0)) { SWIG_fail; @@ -2346,7 +2445,6 @@ static octave_value_list _wrap_annAllocPt__SWIG_0 (const octave_value_list& args, int nargout) { int arg1 ; ANNcoord arg2 ; - ANNpoint result; int val1 ; int ecode1 = 0 ; double val2 ; @@ -2354,6 +2452,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpoint result; if (!SWIG_check_num_args("annAllocPt",args.length(),2,2,0)) { SWIG_fail; @@ -2384,12 +2483,12 @@ static octave_value_list _wrap_annAllocPt__SWIG_1 (const octave_value_list& args, int nargout) { int arg1 ; - ANNpoint result; int val1 ; int ecode1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpoint result; if (!SWIG_check_num_args("annAllocPt",args.length(),1,1,0)) { SWIG_fail; @@ -2454,7 +2553,6 @@ static octave_value_list _wrap_annAllocPts (const octave_value_list& args, int nargout) { int arg1 ; int arg2 ; - ANNpointArray result; int val1 ; int ecode1 = 0 ; int val2 ; @@ -2462,6 +2560,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpointArray result; if (!SWIG_check_num_args("annAllocPts",args.length(),2,2,0)) { SWIG_fail; @@ -2559,12 +2658,12 @@ static octave_value_list _wrap_annCopyPt (const octave_value_list& args, int nargout) { int arg1 ; ANNpoint arg2 = (ANNpoint) 0 ; - ANNpoint result; int val1 ; int ecode1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpoint result; if (!SWIG_check_num_args("annCopyPt",args.length(),2,2,0)) { SWIG_fail; @@ -2616,8 +2715,7 @@ arg1 = (ANNpointSet *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -2829,7 +2927,6 @@ ANNidxArray arg5 = (ANNidxArray) 0 ; ANNdistArray arg6 = (ANNdistArray) 0 ; double arg7 ; - int result; void *argp1 = 0 ; int res1 = 0 ; double val3 ; @@ -2839,6 +2936,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNpointSet_annkFRSearch",args.length(),5,5,0)) { SWIG_fail; @@ -2906,7 +3004,6 @@ int arg4 ; ANNidxArray arg5 = (ANNidxArray) 0 ; ANNdistArray arg6 = (ANNdistArray) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; double val3 ; @@ -2914,6 +3011,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNpointSet_annkFRSearch",args.length(),4,4,0)) { SWIG_fail; @@ -3045,12 +3143,12 @@ static octave_value_list _wrap_ANNpointSet_theDim (const octave_value_list& args, int nargout) { ANNpointSet *arg1 = (ANNpointSet *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNpointSet_theDim",args.length(),1,1,0)) { SWIG_fail; @@ -3076,12 +3174,12 @@ static octave_value_list _wrap_ANNpointSet_nPoints (const octave_value_list& args, int nargout) { ANNpointSet *arg1 = (ANNpointSet *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNpointSet_nPoints",args.length(),1,1,0)) { SWIG_fail; @@ -3107,12 +3205,12 @@ static octave_value_list _wrap_ANNpointSet_thePoints (const octave_value_list& args, int nargout) { ANNpointSet *arg1 = (ANNpointSet *) 0 ; - ANNpointArray result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpointArray result; if (!SWIG_check_num_args("ANNpointSet_thePoints",args.length(),1,1,0)) { SWIG_fail; @@ -3153,10 +3251,10 @@ int arg2 ; int arg3 ; bool arg4 ; - ANNbruteForce *result = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbruteForce *result = 0 ; if (!SWIG_check_num_args("new_ANNbruteForce",args.length(),1,1,0)) { SWIG_fail; @@ -3192,7 +3290,6 @@ ANNpointArray arg1 = (ANNpointArray) 0 ; int arg2 ; int arg3 ; - ANNbruteForce *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; @@ -3202,6 +3299,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbruteForce *result = 0 ; if (!SWIG_check_num_args("new_ANNbruteForce",args.length(),3,3,0)) { SWIG_fail; @@ -3304,8 +3402,7 @@ arg1 = (ANNbruteForce *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -3517,7 +3614,6 @@ ANNidxArray arg5 = (ANNidxArray) 0 ; ANNdistArray arg6 = (ANNdistArray) 0 ; double arg7 ; - int result; void *argp1 = 0 ; int res1 = 0 ; double val3 ; @@ -3527,6 +3623,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNbruteForce_annkFRSearch",args.length(),5,5,0)) { SWIG_fail; @@ -3594,7 +3691,6 @@ int arg4 ; ANNidxArray arg5 = (ANNidxArray) 0 ; ANNdistArray arg6 = (ANNdistArray) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; double val3 ; @@ -3602,6 +3698,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNbruteForce_annkFRSearch",args.length(),4,4,0)) { SWIG_fail; @@ -3733,12 +3830,12 @@ static octave_value_list _wrap_ANNbruteForce_theDim (const octave_value_list& args, int nargout) { ANNbruteForce *arg1 = (ANNbruteForce *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNbruteForce_theDim",args.length(),1,1,0)) { SWIG_fail; @@ -3764,12 +3861,12 @@ static octave_value_list _wrap_ANNbruteForce_nPoints (const octave_value_list& args, int nargout) { ANNbruteForce *arg1 = (ANNbruteForce *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNbruteForce_nPoints",args.length(),1,1,0)) { SWIG_fail; @@ -3795,12 +3892,12 @@ static octave_value_list _wrap_ANNbruteForce_thePoints (const octave_value_list& args, int nargout) { ANNbruteForce *arg1 = (ANNbruteForce *) 0 ; - ANNpointArray result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpointArray result; if (!SWIG_check_num_args("ANNbruteForce_thePoints",args.length(),1,1,0)) { SWIG_fail; @@ -3870,7 +3967,6 @@ int arg1 ; int arg2 ; int arg3 ; - ANNkd_tree *result = 0 ; int val1 ; int ecode1 = 0 ; int val2 ; @@ -3880,6 +3976,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),3,3,0)) { SWIG_fail; @@ -3916,7 +4013,6 @@ static octave_value_list _wrap_new_ANNkd_tree__SWIG_1 (const octave_value_list& args, int nargout) { int arg1 ; int arg2 ; - ANNkd_tree *result = 0 ; int val1 ; int ecode1 = 0 ; int val2 ; @@ -3924,6 +4020,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),2,2,0)) { SWIG_fail; @@ -3954,12 +4051,12 @@ static octave_value_list _wrap_new_ANNkd_tree__SWIG_2 (const octave_value_list& args, int nargout) { int arg1 ; - ANNkd_tree *result = 0 ; int val1 ; int ecode1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),1,1,0)) { SWIG_fail; @@ -3984,10 +4081,10 @@ static octave_value_list _wrap_new_ANNkd_tree__SWIG_3 (const octave_value_list& args, int nargout) { - ANNkd_tree *result = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),0,0,0)) { SWIG_fail; @@ -4013,7 +4110,6 @@ bool arg4 ; int arg5 ; ANNsplitRule arg6 ; - ANNkd_tree *result = 0 ; int val5 ; int ecode5 = 0 ; int val6 ; @@ -4021,6 +4117,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),3,3,0)) { SWIG_fail; @@ -4068,12 +4165,12 @@ int arg3 ; bool arg4 ; int arg5 ; - ANNkd_tree *result = 0 ; int val5 ; int ecode5 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),2,2,0)) { SWIG_fail; @@ -4115,10 +4212,10 @@ int arg2 ; int arg3 ; bool arg4 ; - ANNkd_tree *result = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),1,1,0)) { SWIG_fail; @@ -4154,7 +4251,6 @@ ANNpointArray arg1 = (ANNpointArray) 0 ; int arg2 ; int arg3 ; - ANNkd_tree *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; @@ -4164,6 +4260,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),3,3,0)) { SWIG_fail; @@ -4199,12 +4296,12 @@ static octave_value_list _wrap_new_ANNkd_tree__SWIG_8 (const octave_value_list& args, int nargout) { std::istream *arg1 = 0 ; - ANNkd_tree *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNkd_tree",args.length(),1,1,0)) { SWIG_fail; @@ -4396,8 +4493,7 @@ arg1 = (ANNkd_tree *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -4801,7 +4897,6 @@ ANNidxArray arg5 = (ANNidxArray) 0 ; ANNdistArray arg6 = (ANNdistArray) 0 ; double arg7 ; - int result; void *argp1 = 0 ; int res1 = 0 ; double val3 ; @@ -4811,6 +4906,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkd_tree_annkFRSearch",args.length(),5,5,0)) { SWIG_fail; @@ -4878,7 +4974,6 @@ int arg4 ; ANNidxArray arg5 = (ANNidxArray) 0 ; ANNdistArray arg6 = (ANNdistArray) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; double val3 ; @@ -4886,6 +4981,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkd_tree_annkFRSearch",args.length(),4,4,0)) { SWIG_fail; @@ -5017,12 +5113,12 @@ static octave_value_list _wrap_ANNkd_tree_theDim (const octave_value_list& args, int nargout) { ANNkd_tree *arg1 = (ANNkd_tree *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkd_tree_theDim",args.length(),1,1,0)) { SWIG_fail; @@ -5048,12 +5144,12 @@ static octave_value_list _wrap_ANNkd_tree_nPoints (const octave_value_list& args, int nargout) { ANNkd_tree *arg1 = (ANNkd_tree *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkd_tree_nPoints",args.length(),1,1,0)) { SWIG_fail; @@ -5079,12 +5175,12 @@ static octave_value_list _wrap_ANNkd_tree_thePoints (const octave_value_list& args, int nargout) { ANNkd_tree *arg1 = (ANNkd_tree *) 0 ; - ANNpointArray result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpointArray result; if (!SWIG_check_num_args("ANNkd_tree_thePoints",args.length(),1,1,0)) { SWIG_fail; @@ -5248,7 +5344,6 @@ int arg1 ; int arg2 ; int arg3 ; - ANNbd_tree *result = 0 ; int val1 ; int ecode1 = 0 ; int val2 ; @@ -5258,6 +5353,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),3,3,0)) { SWIG_fail; @@ -5294,7 +5390,6 @@ static octave_value_list _wrap_new_ANNbd_tree__SWIG_1 (const octave_value_list& args, int nargout) { int arg1 ; int arg2 ; - ANNbd_tree *result = 0 ; int val1 ; int ecode1 = 0 ; int val2 ; @@ -5302,6 +5397,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),2,2,0)) { SWIG_fail; @@ -5338,7 +5434,6 @@ int arg5 ; ANNsplitRule arg6 ; ANNshrinkRule arg7 ; - ANNbd_tree *result = 0 ; int val5 ; int ecode5 = 0 ; int val6 ; @@ -5348,6 +5443,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),4,4,0)) { SWIG_fail; @@ -5401,7 +5497,6 @@ bool arg4 ; int arg5 ; ANNsplitRule arg6 ; - ANNbd_tree *result = 0 ; int val5 ; int ecode5 = 0 ; int val6 ; @@ -5409,6 +5504,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),3,3,0)) { SWIG_fail; @@ -5456,12 +5552,12 @@ int arg3 ; bool arg4 ; int arg5 ; - ANNbd_tree *result = 0 ; int val5 ; int ecode5 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),2,2,0)) { SWIG_fail; @@ -5503,10 +5599,10 @@ int arg2 ; int arg3 ; bool arg4 ; - ANNbd_tree *result = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),1,1,0)) { SWIG_fail; @@ -5542,7 +5638,6 @@ ANNpointArray arg1 = (ANNpointArray) 0 ; int arg2 ; int arg3 ; - ANNbd_tree *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; @@ -5552,6 +5647,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),3,3,0)) { SWIG_fail; @@ -5587,12 +5683,12 @@ static octave_value_list _wrap_new_ANNbd_tree__SWIG_7 (const octave_value_list& args, int nargout) { std::istream *arg1 = 0 ; - ANNbd_tree *result = 0 ; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbd_tree *result = 0 ; if (!SWIG_check_num_args("new_ANNbd_tree",args.length(),1,1,0)) { SWIG_fail; @@ -5798,8 +5894,7 @@ arg1 = (ANNbd_tree *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -5901,7 +5996,6 @@ } } if (arg1) (arg1)->msg = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -5911,12 +6005,12 @@ static octave_value_list _wrap_ANN_exception_msg_get (const octave_value_list& args, int nargout) { ANN_exception *arg1 = (ANN_exception *) 0 ; - std::string result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + std::string result; if (!SWIG_check_num_args("ANN_exception_msg_get",args.length(),1,1,0)) { SWIG_fail; @@ -5936,12 +6030,12 @@ static octave_value_list _wrap_new_ANN_exception (const octave_value_list& args, int nargout) { std::string *arg1 = 0 ; - ANN_exception *result = 0 ; void *argp1 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANN_exception *result = 0 ; if (!SWIG_check_num_args("new_ANN_exception",args.length(),1,1,0)) { SWIG_fail; @@ -5986,8 +6080,7 @@ arg1 = (ANN_exception *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -6032,7 +6125,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->dim = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6042,12 +6134,12 @@ static octave_value_list _wrap_ANNkdStats_dim_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_dim_get",args.length(),1,1,0)) { SWIG_fail; @@ -6090,7 +6182,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->n_pts = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6100,12 +6191,12 @@ static octave_value_list _wrap_ANNkdStats_n_pts_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_n_pts_get",args.length(),1,1,0)) { SWIG_fail; @@ -6148,7 +6239,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->bkt_size = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6158,12 +6248,12 @@ static octave_value_list _wrap_ANNkdStats_bkt_size_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_bkt_size_get",args.length(),1,1,0)) { SWIG_fail; @@ -6206,7 +6296,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->n_lf = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6216,12 +6305,12 @@ static octave_value_list _wrap_ANNkdStats_n_lf_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_n_lf_get",args.length(),1,1,0)) { SWIG_fail; @@ -6264,7 +6353,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->n_tl = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6274,12 +6362,12 @@ static octave_value_list _wrap_ANNkdStats_n_tl_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_n_tl_get",args.length(),1,1,0)) { SWIG_fail; @@ -6322,7 +6410,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->n_spl = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6332,12 +6419,12 @@ static octave_value_list _wrap_ANNkdStats_n_spl_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_n_spl_get",args.length(),1,1,0)) { SWIG_fail; @@ -6380,7 +6467,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->n_shr = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6390,12 +6476,12 @@ static octave_value_list _wrap_ANNkdStats_n_shr_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_n_shr_get",args.length(),1,1,0)) { SWIG_fail; @@ -6438,7 +6524,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->depth = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6448,12 +6533,12 @@ static octave_value_list _wrap_ANNkdStats_depth_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNkdStats_depth_get",args.length(),1,1,0)) { SWIG_fail; @@ -6496,7 +6581,6 @@ } arg2 = (float)(val2); if (arg1) (arg1)->sum_ar = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6506,12 +6590,12 @@ static octave_value_list _wrap_ANNkdStats_sum_ar_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - float result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + float result; if (!SWIG_check_num_args("ANNkdStats_sum_ar_get",args.length(),1,1,0)) { SWIG_fail; @@ -6554,7 +6638,6 @@ } arg2 = (float)(val2); if (arg1) (arg1)->avg_ar = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -6564,12 +6647,12 @@ static octave_value_list _wrap_ANNkdStats_avg_ar_get (const octave_value_list& args, int nargout) { ANNkdStats *arg1 = (ANNkdStats *) 0 ; - float result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + float result; if (!SWIG_check_num_args("ANNkdStats_avg_ar_get",args.length(),1,1,0)) { SWIG_fail; @@ -6840,10 +6923,10 @@ static octave_value_list _wrap_new_ANNkdStats (const octave_value_list& args, int nargout) { - ANNkdStats *result = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNkdStats *result = 0 ; if (!SWIG_check_num_args("new_ANNkdStats",args.length(),0,0,0)) { SWIG_fail; @@ -6916,8 +6999,7 @@ arg1 = (ANNkdStats *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -6979,10 +7061,10 @@ static octave_value_list _wrap_new_ANNsampStat (const octave_value_list& args, int nargout) { - ANNsampStat *result = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNsampStat *result = 0 ; if (!SWIG_check_num_args("new_ANNsampStat",args.length(),0,0,0)) { SWIG_fail; @@ -7003,12 +7085,12 @@ static octave_value_list _wrap_ANNsampStat_samples (const octave_value_list& args, int nargout) { ANNsampStat *arg1 = (ANNsampStat *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNsampStat_samples",args.length(),1,1,0)) { SWIG_fail; @@ -7034,12 +7116,12 @@ static octave_value_list _wrap_ANNsampStat_mean (const octave_value_list& args, int nargout) { ANNsampStat *arg1 = (ANNsampStat *) 0 ; - double result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + double result; if (!SWIG_check_num_args("ANNsampStat_mean",args.length(),1,1,0)) { SWIG_fail; @@ -7065,12 +7147,12 @@ static octave_value_list _wrap_ANNsampStat_stdDev (const octave_value_list& args, int nargout) { ANNsampStat *arg1 = (ANNsampStat *) 0 ; - double result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + double result; if (!SWIG_check_num_args("ANNsampStat_stdDev",args.length(),1,1,0)) { SWIG_fail; @@ -7096,12 +7178,12 @@ static octave_value_list _wrap_ANNsampStat_min (const octave_value_list& args, int nargout) { ANNsampStat *arg1 = (ANNsampStat *) 0 ; - double result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + double result; if (!SWIG_check_num_args("ANNsampStat_min",args.length(),1,1,0)) { SWIG_fail; @@ -7127,12 +7209,12 @@ static octave_value_list _wrap_ANNsampStat_max (const octave_value_list& args, int nargout) { ANNsampStat *arg1 = (ANNsampStat *) 0 ; - double result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + double result; if (!SWIG_check_num_args("ANNsampStat_max",args.length(),1,1,0)) { SWIG_fail; @@ -7174,8 +7256,7 @@ arg1 = (ANNsampStat *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -7884,7 +7965,6 @@ arg2[j]=p(j); } if (arg1) (arg1)->lo = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); annDeallocPt(arg2); @@ -7895,12 +7975,12 @@ static octave_value_list _wrap_ANNorthRect_lo_get (const octave_value_list& args, int nargout) { ANNorthRect *arg1 = (ANNorthRect *) 0 ; - ANNpoint result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpoint result; if (!SWIG_check_num_args("ANNorthRect_lo_get",args.length(),1,1,0)) { SWIG_fail; @@ -7945,7 +8025,6 @@ arg2[j]=p(j); } if (arg1) (arg1)->hi = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); annDeallocPt(arg2); @@ -7956,12 +8035,12 @@ static octave_value_list _wrap_ANNorthRect_hi_get (const octave_value_list& args, int nargout) { ANNorthRect *arg1 = (ANNorthRect *) 0 ; - ANNpoint result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNpoint result; if (!SWIG_check_num_args("ANNorthRect_hi_get",args.length(),1,1,0)) { SWIG_fail; @@ -7983,7 +8062,6 @@ int arg1 ; ANNcoord arg2 ; ANNcoord arg3 ; - ANNorthRect *result = 0 ; int val1 ; int ecode1 = 0 ; double val2 ; @@ -7993,6 +8071,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNorthRect *result = 0 ; if (!SWIG_check_num_args("new_ANNorthRect",args.length(),3,3,0)) { SWIG_fail; @@ -8029,7 +8108,6 @@ static octave_value_list _wrap_new_ANNorthRect__SWIG_1 (const octave_value_list& args, int nargout) { int arg1 ; ANNcoord arg2 ; - ANNorthRect *result = 0 ; int val1 ; int ecode1 = 0 ; double val2 ; @@ -8037,6 +8115,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNorthRect *result = 0 ; if (!SWIG_check_num_args("new_ANNorthRect",args.length(),2,2,0)) { SWIG_fail; @@ -8067,12 +8146,12 @@ static octave_value_list _wrap_new_ANNorthRect__SWIG_2 (const octave_value_list& args, int nargout) { int arg1 ; - ANNorthRect *result = 0 ; int val1 ; int ecode1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNorthRect *result = 0 ; if (!SWIG_check_num_args("new_ANNorthRect",args.length(),1,1,0)) { SWIG_fail; @@ -8099,7 +8178,6 @@ static octave_value_list _wrap_new_ANNorthRect__SWIG_3 (const octave_value_list& args, int nargout) { int arg1 ; ANNorthRect *arg2 = 0 ; - ANNorthRect *result = 0 ; int val1 ; int ecode1 = 0 ; void *argp2 ; @@ -8107,6 +8185,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNorthRect *result = 0 ; if (!SWIG_check_num_args("new_ANNorthRect",args.length(),2,2,0)) { SWIG_fail; @@ -8142,12 +8221,12 @@ int arg1 ; ANNpoint arg2 = (ANNpoint) 0 ; ANNpoint arg3 = (ANNpoint) 0 ; - ANNorthRect *result = 0 ; int val1 ; int ecode1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNorthRect *result = 0 ; if (!SWIG_check_num_args("new_ANNorthRect",args.length(),3,3,0)) { SWIG_fail; @@ -8304,8 +8383,7 @@ arg1 = (ANNorthRect *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -8321,7 +8399,6 @@ ANNorthRect *arg1 = (ANNorthRect *) 0 ; int arg2 ; ANNpoint arg3 = (ANNpoint) 0 ; - ANNbool result; void *argp1 = 0 ; int res1 = 0 ; int val2 ; @@ -8329,6 +8406,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbool result; if (!SWIG_check_num_args("ANNorthRect_inside",args.length(),3,3,0)) { SWIG_fail; @@ -8454,7 +8532,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->cd = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -8464,12 +8541,12 @@ static octave_value_list _wrap_ANNorthHalfSpace_cd_get (const octave_value_list& args, int nargout) { ANNorthHalfSpace *arg1 = (ANNorthHalfSpace *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNorthHalfSpace_cd_get",args.length(),1,1,0)) { SWIG_fail; @@ -8512,7 +8589,6 @@ } arg2 = (ANNcoord)(val2); if (arg1) (arg1)->cv = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -8522,12 +8598,12 @@ static octave_value_list _wrap_ANNorthHalfSpace_cv_get (const octave_value_list& args, int nargout) { ANNorthHalfSpace *arg1 = (ANNorthHalfSpace *) 0 ; - ANNcoord result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNcoord result; if (!SWIG_check_num_args("ANNorthHalfSpace_cv_get",args.length(),1,1,0)) { SWIG_fail; @@ -8570,7 +8646,6 @@ } arg2 = (int)(val2); if (arg1) (arg1)->sd = arg2; - _outv = octave_value(); if (_outv.is_defined()) _outp = SWIG_Octave_AppendOutput(_outp, _outv); fail: @@ -8580,12 +8655,12 @@ static octave_value_list _wrap_ANNorthHalfSpace_sd_get (const octave_value_list& args, int nargout) { ANNorthHalfSpace *arg1 = (ANNorthHalfSpace *) 0 ; - int result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + int result; if (!SWIG_check_num_args("ANNorthHalfSpace_sd_get",args.length(),1,1,0)) { SWIG_fail; @@ -8604,10 +8679,10 @@ static octave_value_list _wrap_new_ANNorthHalfSpace__SWIG_0 (const octave_value_list& args, int nargout) { - ANNorthHalfSpace *result = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNorthHalfSpace *result = 0 ; if (!SWIG_check_num_args("new_ANNorthHalfSpace",args.length(),0,0,0)) { SWIG_fail; @@ -8630,7 +8705,6 @@ int arg1 ; ANNcoord arg2 ; int arg3 ; - ANNorthHalfSpace *result = 0 ; int val1 ; int ecode1 = 0 ; double val2 ; @@ -8640,6 +8714,7 @@ octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNorthHalfSpace *result = 0 ; if (!SWIG_check_num_args("new_ANNorthHalfSpace",args.length(),3,3,0)) { SWIG_fail; @@ -8713,12 +8788,12 @@ static octave_value_list _wrap_ANNorthHalfSpace_in (const octave_value_list& args, int nargout) { ANNorthHalfSpace *arg1 = (ANNorthHalfSpace *) 0 ; ANNpoint arg2 = (ANNpoint) 0 ; - ANNbool result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbool result; if (!SWIG_check_num_args("ANNorthHalfSpace_in",args.length(),2,2,0)) { SWIG_fail; @@ -8755,12 +8830,12 @@ static octave_value_list _wrap_ANNorthHalfSpace_out (const octave_value_list& args, int nargout) { ANNorthHalfSpace *arg1 = (ANNorthHalfSpace *) 0 ; ANNpoint arg2 = (ANNpoint) 0 ; - ANNbool result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNbool result; if (!SWIG_check_num_args("ANNorthHalfSpace_out",args.length(),2,2,0)) { SWIG_fail; @@ -8797,12 +8872,12 @@ static octave_value_list _wrap_ANNorthHalfSpace_dist (const octave_value_list& args, int nargout) { ANNorthHalfSpace *arg1 = (ANNorthHalfSpace *) 0 ; ANNpoint arg2 = (ANNpoint) 0 ; - ANNdist result; void *argp1 = 0 ; int res1 = 0 ; octave_value_list _out; octave_value_list *_outp=&_out; octave_value _outv; + ANNdist result; if (!SWIG_check_num_args("ANNorthHalfSpace_dist",args.length(),2,2,0)) { SWIG_fail; @@ -8993,8 +9068,7 @@ arg1 = (ANNorthHalfSpace *)(argp1); { try { - delete arg1; - ; + delete arg1;; } catch (ANN_exception& e) { error("ANN fatal error: %s",e.msg.c_str()); } @@ -9152,16 +9226,16 @@ /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ -static void *_p_ANNbd_treeTo_p_ANNkd_tree(void *x, int *newmemory) { +static void *_p_ANNbd_treeTo_p_ANNkd_tree(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((ANNkd_tree *) ((ANNbd_tree *) x)); } -static void *_p_ANNbruteForceTo_p_ANNpointSet(void *x, int *newmemory) { +static void *_p_ANNbruteForceTo_p_ANNpointSet(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((ANNpointSet *) ((ANNbruteForce *) x)); } -static void *_p_ANNkd_treeTo_p_ANNpointSet(void *x, int *newmemory) { +static void *_p_ANNkd_treeTo_p_ANNpointSet(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((ANNpointSet *) ((ANNkd_tree *) x)); } -static void *_p_ANNbd_treeTo_p_ANNpointSet(void *x, int *newmemory) { +static void *_p_ANNbd_treeTo_p_ANNpointSet(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((ANNpointSet *) (ANNkd_tree *) ((ANNbd_tree *) x)); } static swig_type_info _swigt__p_ANN_exception = {"_p_ANN_exception", "ANN_exception *", 0, 0, (void*)&_wrap_class_ANN_exception, 0}; Modified: trunk/octave-forge/main/database/DESCRIPTION =================================================================== --- trunk/octave-forge/main/database/DESCRIPTION 2009-01-09 14:17:46 UTC (rev 5517) +++ trunk/octave-forge/main/database/DESCRIPTION 2009-01-10 01:02:37 UTC (rev 5518) @@ -1,6 +1,6 @@ Name: database -Version: 1.0.2 -Date: 2008-08-23 +Version: 1.0.3 +Date: 2009-01-09 Author: Xavier Delacour Maintainer: Xavier Delacour Title: Bindings for postgres, mysql, sqlite, and standard ODBC Modified: trunk/octave-forge/main/database/src/mysql.i =================================================================== --- trunk/octave-forge/main/database/src/mysql.i 2009-01-09 14:17:46 UTC (rev 5517) +++ trunk/octave-forge/main/database/src/mysql.i 2009-01-10 01:02:37 UTC (rev 5518) @@ -24,6 +24,9 @@ const char* __paren(int i) const { return (*$self)[i]; } + const char* __paren__(int i) const { + return (*$self)[i]; + } } // taken from mysql_com.h Modified: trunk/octave-forge/main/database/src/mysql_filtered.h =================================================================== --- trunk/octave-forge/main/database/src/mysql_filtered.h 2009-01-09 14:17:46 UTC (rev 5517) +++ trunk/octave-forge/main/database/src/mysql_filtered.h 2009-01-10 01:02:37 UTC (rev 5518) @@ -561,6 +561,7 @@ char *to,const char *from, unsigned long length); void STDCALL mysql_debug(const char *debug); +#ifndef SWIG char * STDCALL mysql_odbc_escape_string(MYSQL *mysql, char *to, unsigned long to_length, @@ -571,6 +572,7 @@ (*extend_buffer) (void *, char *to, unsigned long *length)); +#endif // SWIG void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); unsigned int STDCALL mysql_thread_safe(void); my_bool STDCALL mysql_embedded(void); Modified: trunk/octave-forge/main/database/src/mysql_wrap.cpp =================================================================== --- trunk/octave-forge/main/database/src/mysql_wrap.cpp 2009-01-09 14:17:46 UTC (rev 5517) +++ trunk/octave-forge/main/database/src/mysql_wrap.cpp 2009-01-10 01:02:37 UTC (rev 5518) @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.35 + * Version 1.3.37 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -8,22 +8,27 @@ * interface file instead. * ----------------------------------------------------------------------------- */ +#define SWIGOCTAVE #define SWIG_name_d "mysql" #define SWIG_name mysql + #ifdef __cplusplus +/* SwigValueWrapper is described in swig.swg */ template<typename T> class SwigValueWrapper { - T *tt; + struct SwigMovePointer { + T *ptr; + SwigMovePointer(T *p) : ptr(p) { } + ~SwigMovePointer() { delete ptr; } + SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs); + SwigValueWrapper(const SwigValueWrapper<T>& rhs); public: - SwigValueWrapper() : tt(0) { } - SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { } - SwigValueWrapper(const T& t) : tt(new T(t)) { } - ~SwigValueWrapper() { delete tt; } - SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } - operator T&() const { return *tt; } - T *operator&() { return tt; } -private: - SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs); + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } + operator T&() const { return *pointer.ptr; } + T *operator&() { return pointer.ptr; } }; template <typename T> T SwigValueInit() { @@ -73,6 +78,12 @@ # endif #endif +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) @@ -139,11 +150,12 @@ #include <octave/parse.h> #include <octave/ov-fcn-handle.h> #include <octave/Cell.h> +#include <octave/oct-map.h> /* ----------------------------------------------------------------------------- * swigrun.swg * - * This file contains generic CAPI SWIG runtime support for pointer + * This file contains generic C API SWIG runtime support for pointer * type checking. * ----------------------------------------------------------------------------- */ @@ -162,11 +174,11 @@ /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for - creating a static or dynamic library from the swig runtime code. - In 99.9% of the cases, swig just needs to declare them as 'static'. + creating a static or dynamic library from the SWIG runtime code. + In 99.9% of the cases, SWIG just needs to declare them as 'static'. - But only do this if is strictly necessary, ie, if you have problems - with your compiler or so. + But only do this if strictly necessary, ie, if you have problems + with your compiler or suchlike. */ #ifndef SWIGRUNTIME @@ -193,14 +205,14 @@ /* Flags/methods for returning states. - The swig conversion methods, as ConvertPtr, return and integer + The SWIG conversion methods, as ConvertPtr, return and integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). Use the following macros/flags to set or process the returning states. - In old swig versions, you usually write code as: + In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { // success code @@ -208,7 +220,7 @@ //fail code } - Now you can be more explicit as: + Now you can be more explicit: int res = SWIG_ConvertPtr(obj,vptr,ty.flags); if (SWIG_IsOK(res)) { @@ -217,7 +229,7 @@ // fail code } - that seems to be the same, but now you can also do + which is the same really, but now you can also do Type *ptr; int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); @@ -235,7 +247,7 @@ I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that - requires also to SWIG_ConvertPtr to return new result values, as + also requires SWIG_ConvertPtr to return new result values, such as int SWIG_ConvertPtr(obj, ptr,...) { if (<obj is ok>) { @@ -253,7 +265,7 @@ Of course, returning the plain '0(success)/-1(fail)' still works, but you can be more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the - swig errors code. + SWIG errors code. Finally, if the SWIG_CASTRANK_MODE is enabled, the result code allows to return the 'cast rank', for example, if you have this @@ -267,9 +279,8 @@ fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() +*/ - - */ #define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) @@ -294,7 +305,6 @@ #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) - /* Cast-Rank Mode */ #if defined(SWIG_CASTRANK_MODE) # ifndef SWIG_TypeRank @@ -317,8 +327,6 @@ #endif - - #include <string.h> #ifdef __cplus... [truncated message content] |
From: <ha...@us...> - 2009-06-07 10:48:49
|
Revision: 5903 http://octave.svn.sourceforge.net/octave/?rev=5903&view=rev Author: hauberg Date: 2009-06-07 10:48:48 +0000 (Sun, 07 Jun 2009) Log Message: ----------- Update version Modified Paths: -------------- trunk/octave-forge/main/database/DESCRIPTION trunk/octave-forge/main/octcdf/DESCRIPTION Modified: trunk/octave-forge/main/database/DESCRIPTION =================================================================== --- trunk/octave-forge/main/database/DESCRIPTION 2009-06-07 10:43:06 UTC (rev 5902) +++ trunk/octave-forge/main/database/DESCRIPTION 2009-06-07 10:48:48 UTC (rev 5903) @@ -1,5 +1,5 @@ Name: database -Version: 1.0.3 +Version: 1.0.4 Date: 2009-01-09 Author: Xavier Delacour Maintainer: Xavier Delacour Modified: trunk/octave-forge/main/octcdf/DESCRIPTION =================================================================== --- trunk/octave-forge/main/octcdf/DESCRIPTION 2009-06-07 10:43:06 UTC (rev 5902) +++ trunk/octave-forge/main/octcdf/DESCRIPTION 2009-06-07 10:48:48 UTC (rev 5903) @@ -1,5 +1,5 @@ Name: octcdf -Version: 1.0.12 +Version: 1.0.13 Date: 2009-02-19 Author: Alexander Barth <bar...@gm...> Maintainer: Alexander Barth <bar...@gm...> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <est...@us...> - 2009-07-25 14:46:55
|
Revision: 6049 http://octave.svn.sourceforge.net/octave/?rev=6049&view=rev Author: esteban319 Date: 2009-07-25 14:46:47 +0000 (Sat, 25 Jul 2009) Log Message: ----------- Added Paths: ----------- trunk/octave-forge/main/actuarial/ trunk/octave-forge/main/actuarial/COPYING trunk/octave-forge/main/actuarial/DESCRIPTION trunk/octave-forge/main/actuarial/INDEX trunk/octave-forge/main/actuarial/inst/ trunk/octave-forge/main/actuarial/inst/bfanalisis.m trunk/octave-forge/main/actuarial/inst/bferguson.m trunk/octave-forge/main/actuarial/inst/quotaad.m trunk/octave-forge/main/actuarial/inst/quotald.m trunk/octave-forge/main/actuarial/inst/quotamack.m trunk/octave-forge/main/actuarial/inst/quotapanning.m trunk/octave-forge/main/actuarial/inst/ultimatead.m trunk/octave-forge/main/actuarial/inst/ultimatecc.m trunk/octave-forge/main/actuarial/inst/ultimateld.m trunk/octave-forge/main/actuarial/inst/ultimatemack.m trunk/octave-forge/main/actuarial/inst/ultimatepanning.m Added: trunk/octave-forge/main/actuarial/COPYING =================================================================== --- trunk/octave-forge/main/actuarial/COPYING (rev 0) +++ trunk/octave-forge/main/actuarial/COPYING 2009-07-25 14:46:47 UTC (rev 6049) @@ -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 program--to 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 general-purpose 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 non-free. + + 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 copyright-like 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 non-source +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 general-purpose 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 Anti-Circumvention 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 +non-permissive 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 Non-Source 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 +machine-readable 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 peer-to-peer 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 non-consumer 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 non-permissive 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 non-permissive, 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 peer-to-peer 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 cross-claim 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 non-exclusive, worldwide, royalty-free +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 non-exercise 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/why-not-lgpl.html>. Added: trunk/octave-forge/main/actuarial/DESCRIPTION =================================================================== --- trunk/octave-forge/main/actuarial/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/actuarial/DESCRIPTION 2009-07-25 14:46:47 UTC (rev 6049) @@ -0,0 +1,17 @@ +Name: Actuarial +Version: 1.1.0 +Date: 2009-07-23 +Author: Act. Esteban Cervetto ARG <est...@gm...> +Maintainer: Act. Esteban Cervetto ARG <est...@gm...> +Title: Actuarial. +Description: Actuarial functions for Casualty and Property lines. +Depends: octave (>= 3.0.1) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net +#I am an Actuary from Argentina. +#If you are looking for an Actuary +#If you are an idea to develop +#if you only want to talk about the actuarial career +#email me please. +#Actually, I speak Spanish. Added: trunk/octave-forge/main/actuarial/INDEX =================================================================== --- trunk/octave-forge/main/actuarial/INDEX (rev 0) +++ trunk/octave-forge/main/actuarial/INDEX 2009-07-25 14:46:47 UTC (rev 6049) @@ -0,0 +1,13 @@ +actuarial >> Actuarial +Actuarial + bfanalisis + bferguson + quotald + quotamack + quotaad + quotapanning + ultimateld + ultimatead + ultimatemack + ultimatecc + ultimatepanning Added: trunk/octave-forge/main/actuarial/inst/bfanalisis.m =================================================================== --- trunk/octave-forge/main/actuarial/inst/bfanalisis.m (rev 0) +++ trunk/octave-forge/main/actuarial/inst/bfanalisis.m 2009-07-25 14:46:47 UTC (rev 6049) @@ -0,0 +1,163 @@ +## Copyright (C) 2009 Esteban Cervetto <est...@gm...> +## +## Octave 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. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{quotas}, @var{outcome} =} bfanalisis (@var{S}, @var{V}, @var{quota_ext}, @var{ultimate_ext}) +## Calculate the extended Bornhuetter-Ferguson method for reserves in many ways. If all arguments are provided, +## it calculates 30 different estimations included in the @var{outcome} structure. It also returns the @var{quotas} used. +## +##@var{outcome} had two levels: +## +##@group +##level 1: Type of Ultimate +## list of posible estimative methods: +##@example +##@multitable {xxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxx} +##@headitem FLAG @tab METHOD @tab REQUIRES @tab RELATED FUNCTION +##@item ultad @tab Loss Ratio AD @tab S,V @tab ultimatead.m +##@item ultcc @tab Cape Cod @tab S,V @tab ultimatecc.m +##@item ultexternal @tab none @tab ultimate_ext @tab none +##@item ultld @tab Loss Development @tab S @tab ultimateld.m +##@item ultmack @tab Mack @tab S,V @tab ultimatemack.m +##@item ultpanning @tab Panning @tab S @tab ultimatepanning.m +##@end multitable +##@end example +##@end group +##@group +##level 2: Type of Quotas +## list of posible estimative methods: +##@example +## +##@multitable {xxxxxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxx} +##@headitem FLAG @tab METHOD @tab REQUIRES @tab RELATED FUNCTION +##@item quotasad @tab Loss Ratio AD @tab S,V @tab quotaad.m +##@item quotasexternal @tab none @tab quota_ext @tab none +##@item quotasld @tab Loss Development @tab S @tab quotald.m +##@item quotasmack @tab Mack @tab S,V @tab quotamack.m +##@item quotaspanning @tab Panning @tab S @tab quotapanning.m +##@end multitable +##@end example +##@end group +## +## Parameters: +## @var{S} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years +## and n is the number of periods to final development. @var{s} may contain u = m-n complete years. +## Optional: +## @var{v} is an mx1 vector of known volume measures (like premiums or the number of contracts). +## @var{quota_ext} is an 1xn vector with an external scheme of quotas. +## @group +## @example +## +## E[S(i,k+1)] +## quota(k) = -------------, k={0,1,n-1} +## E[S(i,n) ] +## +## @end example +## @end group +## @var{ultimate_ext} is a mx1 vector wuth an external estimatios of the ultimate column. +## +## +## @seealso {bferguson} +## @end deftypefn +## @bye + +## Author: Act. Esteban Cervetto ARG <est...@gm...> +## +## Maintainer: Act. Esteban Cervetto ARG <est...@gm...> +## +## Created: jul-2009 +## +## Version: 1.1.0 +## +## Keywords: actuarial reserves insurance bornhuetter ferguson chainladder + +function [quotas,outcome] = bfanalisis (S,V,quota_ext,ultimate_ext) + +#check number of arguments in +if (nargin==0) + usage("insuficient args. Enter a mxn triangle of losses at least"); +else + #check S + [m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) + u = m - n; #rows of the upper square + S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + quotas.ld = quotald(S); #quotas LD + quotas.panning = quotapanning(S); #Panning quotas + for k=1:n + outcome.ultld.quotasld(:,k) = bferguson(S,quotas.ld,ultimateld(S,quotas.ld),k-1); + outcome.ultld.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimateld(S,quotas.panning),k-1); + outcome.ultpanning.quotasld(:,k) = bferguson(S,quotas.ld,ultimatepanning(S,quotas.ld),k-1); + outcome.ultpanning.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatepanning(S,quotas.panning),k-1); + endfor + + if (nargin>1) + # verify V + if (size(V) ~= [m,1]) + usage(strcat("volume V must be of size [",num2str(m),",1]" )); + else + for k=1:n + quotas.ad = quotaad(S,V); #quotas AD + quotas.mack = quotamack(S,V); #quotas Mack + outcome.ultld.quotasad(:,k) = bferguson(S,quotas.ad,ultimateld(S,quotas.ad),k-1); + outcome.ultld.quotasmack(:,k) = bferguson(S,quotas.mack,ultimateld(S,quotas.mack),k-1); + outcome.ultpanning.quotasad(:,k) = bferguson(S,quotas.ad,ultimatepanning(S,quotas.ad),k-1); + outcome.ultpanning.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatepanning(S,quotas.mack),k-1); + outcome.ultad.quotasld(:,k) = bferguson(S,quotas.ld,ultimatead(S,V),k-1); + outcome.ultad.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatead(S,V),k-1); + outcome.ultad.quotasad(:,k) = bferguson(S,quotas.ad,ultimatead(S,V),k-1); + outcome.ultad.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatead(S,V),k-1); + outcome.ultcc.quotasld(:,k) = bferguson(S,quotas.ld,ultimatecc(S,V,quotas.ld),k-1); + outcome.ultcc.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatecc(S,V,quotas.panning),k-1); + outcome.ultcc.quotasad(:,k) = bferguson(S,quotas.ad,ultimatecc(S,V,quotas.ad),k-1); + outcome.ultcc.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatecc(S,V,quotas.mack),k-1); + outcome.ultmack.quotasld(:,k) = bferguson(S,quotas.ld,ultimatemack(S,V),k-1); + outcome.ultmack.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimatemack(S,V),k-1); + outcome.ultmack.quotasad(:,k) = bferguson(S,quotas.ad,ultimatemack(S,V),k-1); + outcome.ultmack.quotasmack(:,k) = bferguson(S,quotas.mack,ultimatemack(S,V),k-1); + endfor + if (nargin>2) + #check out quota_ext + if (size(quota_ext) ~= [1,n]) + usage(strcat("quota_ext must be of size [1,",num2str(n),"]" )); + else + for k=1:n + quotas.external = quota_ext; #external quotas + outcome.ultld.quotasexternal(:,k) = bferguson(S,quotas.external,ultimateld(S,quotas.external),k-1); + outcome.ultpanning.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatepanning(S,quotas.external),k-1); + outcome.ultad.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatead(S,V),k-1); + outcome.ultcc.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatecc(S,V,quotas.external),k-1); + outcome.ultmack.quotasexternal(:,k) = bferguson(S,quotas.external,ultimatemack(S,V),k-1); + endfor + if (nargin>3) + #verify ultimate_ext + if (size(ultimate_ext) ~= [m,1]) + usage(strcat("ultimate_ext must be of size [",num2str(m),",1]" )); + else + for k=1:n + outcome.ultexternal.quotasld(:,k) = bferguson(S,quotas.ld,ultimate_ext,k-1); + outcome.ultexternal.quotaspanning(:,k) = bferguson(S,quotas.panning,ultimate_ext,k-1); + outcome.ultexternal.quotasad(:,k) = bferguson(S,quotas.ad,ultimate_ext,k-1); + outcome.ultexternal.quotasmack(:,k) = bferguson(S,quotas.mack,ultimate_ext,k-1); + outcome.ultexternal.quotasexternal(:,k) = bferguson(S,quotas.external,ultimate_ext,k-1); + endfor + end + end + end + end + end +end + +end Added: trunk/octave-forge/main/actuarial/inst/bferguson.m =================================================================== --- trunk/octave-forge/main/actuarial/inst/bferguson.m (rev 0) +++ trunk/octave-forge/main/actuarial/inst/bferguson.m 2009-07-25 14:46:47 UTC (rev 6049) @@ -0,0 +1,75 @@ +## Copyright (C) 2009 Esteban Cervetto <est...@gm...> +## +## Octave 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. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{BF} =} bferguson (@var{s}, @var{quotas}, @var{ultimate}, @var{k}) +## Calculate the extended Bornhuetter-Ferguson method for reserves. +## @var{BF} provides a column vector with the elements of @var{k}-th period of development. +## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years +## and n is the number of periods to final development. @var{s} may contain u = m-n complete years. +## @var{k} may vary from 0 (first period) to n-1 (final period). +## +## The Bornhuetter-Ferguson predictors of the losses S(i,@var{k}) with i + @var{k} > n are defined as +## @tex +## @example +## @group +## $$ +## S _{i,k}^BF (hat %gamma, hat %alfa) = S _{i,n-i} + (%gamma_{k} - %gamma_{n-i})%alfa_{i} +## $$ +## @end group +## @end example +## @end tex +## @ifnottex +## @example +## @group +## S(i,@var{k})= S(i,n-i)+ (@var{quotas}(@var{k})- @var{quotas}(n-i))* @var{ultimate}(i) +## @end group +## @end example +## @end ifnottex +## +## @seealso {bfanalysis} +## @end deftypefn + +## Author: Act. Esteban Cervetto ARG <est...@gm...> +## +## Maintainer: Act. Esteban Cervetto ARG <est...@gm...> +## +## Created: jul-2009 +## +## Version: 1.1.0 +## +## Keywords: actuarial reserves insurance bornhuetter ferguson chainladder + + +function [BF] = bferguson (S, quotas,ultimate,k) + +[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) +if (size(quotas) ~= [1,n]) + usage(strcat("quotas must be of size [1,",num2str(n),"]" )) +end +if (size(ultimate) ~= [m,1]) + usage(strcat("ultimate must be of size [",num2str(m),",1]" )) +end + +u = m - n; #rows of the upper square +S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular +diagS = diag(fliplr(S),-u); + +#calcs the proyection by the bornhuetter-ferguson method +BF = diagS((n-k+1):n,1) + (quotas(k+1)*ones(1,k) - quotas(k:-1:1))' .* ultimate((m-k+1):m); +BF = [S(1:m-k,k+1); BF]; + +end Added: trunk/octave-forge/main/actuarial/inst/quotaad.m =================================================================== --- trunk/octave-forge/main/actuarial/inst/quotaad.m (rev 0) +++ trunk/octave-forge/main/actuarial/inst/quotaad.m 2009-07-25 14:46:47 UTC (rev 6049) @@ -0,0 +1,96 @@ +## Copyright (C) 2009 Esteban Cervetto <est...@gm...> +## +## Octave 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. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{quotas} =} quotaad (@var{s},@var{v}) +## Calculate the cumulative quotas by the Additive method. +## +## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years +## and n is the number of periods to final development. @var{s} may contain u = m-n complete years. +## The value @var{s}(i,k), 1<=i<=m, 0<=k<=n-1 represents the cumulative losses from accident-period i +## settled with a delay of at most k years. +## The values @var{s}(i,k) with i + k > m must be zero because is future time. +## @var{v} is an mx1 vector of known volume measures (like premiums or the number of contracts). +## +## The Additive method asumes that exists a development pattern on the incremental loss ratios (IRL). +## This means that the identity +## @group +## @example +## E[Z(i,k) ] +## IRL(k) = ------------ +## V(i) +## @end example +## @end group +## holds for all k = {0,...,n-1} and for all i = {1,...,m}. +## Z represents the incremental losses; then losses satisfy +## Z(k) = (S(k) - S(k-1) ),Z(0) = S(0) for all i = {1,...,m}. +## +## @var{quotas} returns a row vector with the cumulative quotas. The transformation +## from incremental loss ratios to cumulative quotas is: +## @group +## @example +## l=k +## E IRL(l) +## l=0 +## @var{quotas}(k) = ----------- +## l=n-1 +## E IRL(l) +## l=0 +## @end example +## @end group +## +## @seealso {bferguson, quotald, quotapanning} +## @end deftypefn + +## Author: Act. Esteban Cervetto ARG <est...@gm...> +## +## Maintainer: Act. Esteban Cervetto ARG <est...@gm...> +## +## Created: jul-2009 +## +## Version: 1.1.0 +## +## Keywords: actuarial reserves insurance bornhuetter ferguson chainladder + +function [quotas] = quotaad (S,V) + +[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) +u = m - n; #rows of the upper square +S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular +if (size(V) ~= [m,1]) + usage(strcat("volume V must be of size [",num2str(m),",1]" )); +end + +# Z triangle +Z = [S(:,1), S(:,2:n)-S(:,1:n-1)]; +Z = fliplr(triu(fliplr(Z),-u)); #clean Z + +# calc the empirical incremental loss ratios +LRI = Z ./ repmat (V,1,n); + +#weights V(i)/sum(1,n-k,V(i)) +W = repmat(V,1,n); #numerator +W =fliplr(triu(fliplr(W),-u)); #clean low triangle +a = repmat(sum(W),m,1); #denominator +a = fliplr(triu(fliplr(a),-u)); #clean low triangle +W = W./a; #divide by +W = fliplr(triu(fliplr(W),-u)); + +# incremental Loss Ratios AD +LRI_AD = diag(LRI' * W)'; #weighted product +quotas = cumsum(porcentual(LRI_AD)); #calc cumulated quota + +end Added: trunk/octave-forge/main/actuarial/inst/quotald.m =================================================================== --- trunk/octave-forge/main/actuarial/inst/quotald.m (rev 0) +++ trunk/octave-forge/main/actuarial/inst/quotald.m 2009-07-25 14:46:47 UTC (rev 6049) @@ -0,0 +1,83 @@ +## Copyright (C) 2009 Esteban Cervetto <est...@gm...> +## +## Octave 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. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{quotas} =} quotald (@var{s}) +## Calculate the cumulative quotas by the Loss Development (Chainladder) method. +## +## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years +## and n is the number of periods to final development. @var{s} may contain u = m-n complete years. +## The value @var{s}(i,k), 1<=i<=m, 0<=k<=n-1 represents the cumulative losses from accident-period i +## settled with a delay of at most k years. +## The values @var{s}(i,k) with i + k > m must be zero because is future time. +## +## The LD method asumes that exists a development pattern on the individual factors. +## This means that the identity +## @group +## @example +## E[S(i,k) ] +## LDI(k) = ------------- +## E[S(i,k-1) ] +## @end example +## @end group +## holds for all k = {0,...,n-1} and for all i = {1,...,m}. +## +## @var{quotas} returns a row vector with the cumulative quotas. The transformation +## from individual factors to cumulative quotas is: +## @group +## @example +## l=n-1 1 +## @var{quotas}(k) = II ------- +## l=k+1 LDI(l) +## @end example +## @end group +## +## @seealso {bferguson, ultimateld, quotapanning, quotaad, quotamack} +## @end deftypefn + +## Author: Act. Esteban Cervetto ARG <est...@gm...> +## +## Maintainer: Act. Esteban Cervetto ARG <est...@gm...> +## +## Created: jul-2009 +## +## Version: 1.1.0 +## +## Keywords: actuarial reserves insurance bornhuetter ferguson chainladder + +function quotas = quotald(S) + +[m,n] = size (S); #triangle with m years (i=1,2,u,...u+1,u+2,....m) and n periods (k=0,1,2,...n-1) +u = m - n; #rows of the upper square +S = fliplr(triu(fliplr(S),-u)); #ensure S is triangular + +# calculate the triangle of individual development factors (LDI). +LDI = [ones(m,1), S(:,2:n)./S(:,1:n-1)]; +LDI = fliplr(triu(fliplr(LDI),-u)); +LDI (m,1) = 0; #last row element without partner + +# weights +W = fliplr(triu(fliplr(S),1-u)); #get T values to use +W = shift (W,1,2); #redim k = k-1, +W = porcentual(W,1); + +#individual development factors (LDI) or Chainladder factors +LDI_CL = diag(LDI' * W)'; #weighted product +quotas = 1./cumprod(fliplr(LDI_CL)); #calcs cumulated quota +quotas (n) = 1; #last value is 1 +quotas = fliplr(shift(quotas,1)); + +end Added: trunk/octave-forge/main/actuarial/inst/quotamack.m =================================================================== --- trunk/octave-forge/main/actuarial/inst/quotamack.m (rev 0) +++ trunk/octave-forge/main/actuarial/inst/quotamack.m 2009-07-25 14:46:47 UTC (rev 6049) @@ -0,0 +1,147 @@ +## Copyright (C) 2009 Esteban Cervetto <est...@gm...> +## +## Octave 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. +## +## Octave 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{quotas} =} quotaad (@var{s},@var{v}) +## Calculate the cumulative quotas by the Mack method. +## +## @var{s} is a mxn matrix that contains the run-off triangle, where m is the number of accident-years +## and n is the number of periods to final development. @var{s} may contain u = m-n complete years. +## The value @var{s}(i,k), 1<=i<=m, 0<=k<=n-1 represents the cumulative losses from accident-period i +## settled with a delay of at most k years. +## The values @var{s}(i,k) with i + k > m must be zero because is future time. +## @var{v} is a mx1 vector of known volume measures (like premiums or the number of contracts). +## +## The Mack method asumes that exists a vector @var{v} and a vector P(i) 1<=i<=m of parameters +## such that holds for all i = {1,...,m} the next identity: +## +## @group +## @example +## ultimate(i) = V(i)*P(i) +## @end example +## @end group +## +## where +## +## @group +## @example +## l=n-1 +## P(i)= O_mack(i) * E IRL_Mack(l) +## l=0 +## @end example +## @end group +## +## , +## +## @group +## @example +## l=n-k-1 +## E Z(j,k) +## j=0 +## IRL_Mack(i) = --------------------- +## l=n-k-1 +## E V(i)*O_Mack(l) +## l=0 +## @end example +## @end group +## +## and +## +## @group +## @example +## l=n-i-1 +## E Z(i,l) +## l=0 +## O_Mack(i) = ------------------ +## l=n-1 +## ... [truncated message content] |
From: <jgp...@us...> - 2010-02-15 08:08:30
|
Revision: 6896 http://octave.svn.sourceforge.net/octave/?rev=6896&view=rev Author: jgpallero Date: 2010-02-15 08:08:22 +0000 (Mon, 15 Feb 2010) Log Message: ----------- OctPROJ upload (correct version) Added Paths: ----------- trunk/octave-forge/main/octproj/ trunk/octave-forge/main/octproj/COPYING trunk/octave-forge/main/octproj/ChangeLog trunk/octave-forge/main/octproj/DESCRIPTION trunk/octave-forge/main/octproj/INDEX trunk/octave-forge/main/octproj/doc/ trunk/octave-forge/main/octproj/doc/octproj.pdf trunk/octave-forge/main/octproj/doc/octproj.tex trunk/octave-forge/main/octproj/inst/ trunk/octave-forge/main/octproj/inst/op_fwd.m trunk/octave-forge/main/octproj/inst/op_geoc2geod.m trunk/octave-forge/main/octproj/inst/op_geod2geoc.m trunk/octave-forge/main/octproj/inst/op_inv.m trunk/octave-forge/main/octproj/inst/op_transform.m trunk/octave-forge/main/octproj/src/ trunk/octave-forge/main/octproj/src/Makefile trunk/octave-forge/main/octproj/src/_op_fwd.cc trunk/octave-forge/main/octproj/src/_op_geoc2geod.cc trunk/octave-forge/main/octproj/src/_op_geod2geoc.cc trunk/octave-forge/main/octproj/src/_op_inv.cc trunk/octave-forge/main/octproj/src/_op_transform.cc trunk/octave-forge/main/octproj/src/projwrap.c trunk/octave-forge/main/octproj/src/projwrap.h Added: trunk/octave-forge/main/octproj/COPYING =================================================================== --- trunk/octave-forge/main/octproj/COPYING (rev 0) +++ trunk/octave-forge/main/octproj/COPYING 2010-02-15 08:08:22 UTC (rev 6896) @@ -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 program--to 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 general-purpose 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 non-free. + + 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 copyright-like 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 non-source +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 general-purpose 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 Anti-Circumvention 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 +non-permissive 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 Non-Source 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 +machine-readable 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 peer-to-peer 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 non-consumer 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 non-permissive 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 non-permissive, 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 peer-to-peer 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 cross-claim 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 non-exclusive, worldwide, royalty-free +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 non-exercise 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/why-not-lgpl.html>. Added: trunk/octave-forge/main/octproj/ChangeLog =================================================================== --- trunk/octave-forge/main/octproj/ChangeLog (rev 0) +++ trunk/octave-forge/main/octproj/ChangeLog 2010-02-15 08:08:22 UTC (rev 6896) @@ -0,0 +1,116 @@ +changeset: 22:1ff84dc91041 +tag: tip +user: José Luis García Pallero <jgp...@gm...> +date: Tue Feb 09 10:52:42 2010 +0100 +summary: Use fortran_vec() method instead const_cast<double*> to obtain pointers and improve the use of warning function + +changeset: 21:2f1c7488eace +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 17:43:12 2010 +0100 +summary: Date change + +changeset: 20:671ddf3e2a77 +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 17:40:53 2010 +0100 +summary: Change criteria for catching errors + +changeset: 19:bcdb32b735f9 +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 17:40:41 2010 +0100 +summary: Update documentation + +changeset: 18:a402765a20b8 +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 17:39:59 2010 +0100 +summary: Change criteria for catching errors + +changeset: 17:56e3823d72cf +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 15:43:48 2010 +0100 +summary: Changes in test sentences and auxiliary subfunctions + +changeset: 16:045b046bc43a +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 14:04:26 2010 +0100 +summary: Changes in test sentences + +changeset: 15:91f6ea5161f7 +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 13:59:59 2010 +0100 +summary: Testing input arguments with auxiliary subfunctions + +changeset: 14:13ef8e3568c5 +user: José Luis García Pallero <jgp...@gm...> +date: Sat Feb 06 12:37:57 2010 +0100 +summary: Comment correction + +changeset: 13:6cf0c2c16261 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Jan 19 10:17:13 2010 +0100 +summary: Documentation update + +changeset: 12:8e2c9f00c63c +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 22 18:43:50 2009 +0100 +summary: Changes in parsing input arguments + +changeset: 11:56d5916bed60 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 22 17:39:28 2009 +0100 +summary: Update general documentation + +changeset: 10:1391300aa003 +user: José Luis García Pallero <jgp...@gm...> +date: Fri Dec 18 08:56:04 2009 +0100 +summary: Change in general documentation + +changeset: 9:d41ef12f4913 +user: José Luis García Pallero <jgp...@gm...> +date: Thu Dec 17 12:04:54 2009 +0100 +summary: Add tex documentation file + +changeset: 8:3bcfd7da0c87 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 17:06:48 2009 +0100 +summary: Correction in documentation + +changeset: 7:4ea6a2cb26ba +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 16:56:19 2009 +0100 +summary: Comment the function and small changes + +changeset: 6:39501324d391 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 16:54:23 2009 +0100 +summary: Style correction + +changeset: 5:791641326573 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 16:53:52 2009 +0100 +summary: Creation of op_transform.m + +changeset: 4:6ccec5b0b0b5 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 16:52:54 2009 +0100 +summary: Comment corrections + +changeset: 3:63eb65628b12 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 16:51:40 2009 +0100 +summary: Add support to check if input arguments are both scalars or vectors and add support to convert scalars in column vectors if neccessary + +changeset: 2:29774e2ea3b5 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 16:49:46 2009 +0100 +summary: Comments corrections and add support to convert scalars in column vectors if neccessary + +changeset: 1:6b515a6b5933 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 16:47:15 2009 +0100 +summary: Change date + +changeset: 0:d89be78337c2 +user: José Luis García Pallero <jgp...@gm...> +date: Tue Dec 15 12:29:46 2009 +0100 +summary: Creating Mercurial repository for OctPROJ + Added: trunk/octave-forge/main/octproj/DESCRIPTION =================================================================== --- trunk/octave-forge/main/octproj/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/octproj/DESCRIPTION 2010-02-15 08:08:22 UTC (rev 6896) @@ -0,0 +1,13 @@ +Name: OctPROJ +Version: 1.0.0 +Date: 2010-02-06 +Author: José Luis García Pallero, <jgp...@gm...> +Maintainer: José Luis García Pallero, <jgp...@gm...> +Title: GNU Octave bindings to PROJ.4 +Description: This package allows to call functions of PROJ.4 library for + cartographic projections transformations. +Depends: Octave (>= 2.9.7) +Url: http://trac.osgeo.org/proj/ http://octave.sourceforge.net/index.html +Autoload: yes +License: GPL version 3 or later (PROJ.4 is under MIT license) +SystemRequirements: libproj-dev (>= 4.7.0) (Debian system) Added: trunk/octave-forge/main/octproj/INDEX =================================================================== --- trunk/octave-forge/main/octproj/INDEX (rev 0) +++ trunk/octave-forge/main/octproj/INDEX 2010-02-15 08:08:22 UTC (rev 6896) @@ -0,0 +1,13 @@ +toolbox >> OctPROJ +Category Kernel functions + _op_transform + _op_fwd + _op_inv + _op_geod2geoc + _op_geoc2geod +Category Driver functions + op_transform + op_fwd + op_inv + op_geod2geoc + op_geoc2geod Added: trunk/octave-forge/main/octproj/doc/octproj.pdf =================================================================== --- trunk/octave-forge/main/octproj/doc/octproj.pdf (rev 0) +++ trunk/octave-forge/main/octproj/doc/octproj.pdf 2010-02-15 08:08:22 UTC (rev 6896) @@ -0,0 +1,2756 @@ +%PDF-1.4 +%\xD0\xD4\xC5\xD8 +1 0 obj +<< /S /GoTo /D (section.1) >> +endobj +4 0 obj +(Overview) +endobj +5 0 obj +<< /S /GoTo /D (section.2) >> +endobj +8 0 obj +(Installation) +endobj +9 0 obj +<< /S /GoTo /D (section.3) >> +endobj +12 0 obj +(Kernel wrapper) +endobj +13 0 obj +<< /S /GoTo /D (subsection.3.1) >> +endobj +16 0 obj +(Error handling) +endobj +17 0 obj +<< /S /GoTo /D (section.4) >> +endobj +20 0 obj +(GNU Octave functions) +endobj +21 0 obj +<< /S /GoTo /D (subsection.4.1) >> +endobj +24 0 obj +(*.oct functions) +endobj +25 0 obj +<< /S /GoTo /D (subsection.4.2) >> +endobj +28 0 obj +(*.m functions) +endobj +29 0 obj +<< /S /GoTo /D (subsection.4.3) >> +endobj +32 0 obj +(Error handling) +endobj +33 0 obj +<< /S /GoTo /D (section.5) >> +endobj +36 0 obj +(Examples) +endobj +37 0 obj +<< /S /GoTo /D (subsection.5.1) >> +endobj +40 0 obj +(Geodetic to geocentric and vice versa) +endobj +41 0 obj +<< /S /GoTo /D (subsection.5.2) >> +endobj +44 0 obj +(Forward and inverse projection) +endobj +45 0 obj +<< /S /GoTo /D (subsection.5.3) >> +endobj +48 0 obj +(Forward and inverse projection: op\137transform) +endobj +49 0 obj +<< /S /GoTo /D (subsubsection.5.3.1) >> +endobj +52 0 obj +(With altitude) +endobj +53 0 obj +<< /S /GoTo /D (subsubsection.5.3.2) >> +endobj +56 0 obj +(Without altitude) +endobj +57 0 obj +<< /S /GoTo /D (subsection.5.4) >> +endobj +60 0 obj +(Error due to an erroneous parameter) +endobj +61 0 obj +<< /S /GoTo /D (subsection.5.5) >> +endobj +64 0 obj +(Error due to latitude too big) +endobj +65 0 obj +<< /S /GoTo /D (section*.2) >> +endobj +68 0 obj +(References) +endobj +69 0 obj +<< /S /GoTo /D [70 0 R /Fit ] >> +endobj +78 0 obj << +/Length 2229 +/Filter /FlateDecode +>> +stream +xڥX[sܶ~ׯ\xE0#\xB7\xD1B\xB8\xFDЩ\xAA\xD6{\x92\xDAI\x94\xE9d\x9C<p\xB9Њ֒\xDC\xF2"Y\xFD\xF5=\xE4\x92\xDAU\x9DNG3Z88 |
From: <hi...@us...> - 2010-02-22 07:07:22
|
Revision: 6944 http://octave.svn.sourceforge.net/octave/?rev=6944&view=rev Author: highegg Date: 2010-02-22 07:07:16 +0000 (Mon, 22 Feb 2010) Log Message: ----------- move rotv and rotparams to linear-algebra Modified Paths: -------------- trunk/octave-forge/main/linear-algebra/INDEX trunk/octave-forge/main/miscellaneous/INDEX Added Paths: ----------- trunk/octave-forge/main/linear-algebra/inst/rotparams.m trunk/octave-forge/main/linear-algebra/inst/rotv.m Removed Paths: ------------- trunk/octave-forge/main/miscellaneous/inst/rotparams.m trunk/octave-forge/main/miscellaneous/inst/rotv.m Modified: trunk/octave-forge/main/linear-algebra/INDEX =================================================================== --- trunk/octave-forge/main/linear-algebra/INDEX 2010-02-22 07:06:08 UTC (rev 6943) +++ trunk/octave-forge/main/linear-algebra/INDEX 2010-02-22 07:07:16 UTC (rev 6944) @@ -5,6 +5,8 @@ thfm outer cartprod + rotparams + rotv Matrix factorization gsvd GramSchmidt Copied: trunk/octave-forge/main/linear-algebra/inst/rotparams.m (from rev 6941, trunk/octave-forge/main/miscellaneous/inst/rotparams.m) =================================================================== --- trunk/octave-forge/main/linear-algebra/inst/rotparams.m (rev 0) +++ trunk/octave-forge/main/linear-algebra/inst/rotparams.m 2010-02-22 07:07:16 UTC (rev 6944) @@ -0,0 +1,71 @@ +## Copyright (C) 2002 Etienne Grossmann. All rights reserved. +## +## 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 2, or (at your option) any +## later version. +## +## This 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. + +## -*- texinfo -*- +## @deftypefn{Function File} {@var{[vstacked, astacked]} = } rotparams ( rstacked ) +## @cindex +## The function w = rotparams (r) - Inverse to rotv(). +## Using, @var{w} = rotparams(@var{r}) is such that +## rotv(w)*r' == eye(3). +## +## If used as, [v,a]=rotparams(r) , idem, with v (1 x 3) s.t. w == a*v. +## +## 0 <= norm(w)==a <= pi +## +## :-O !! Does not check if 'r' is a rotation matrix. +## +## Ignores matrices with zero rows or with NaNs. (returns 0 for them) +## +## @seealso{rotv} +## @end deftypefn + +## Author: Etienne Grossmann <et...@cs...> + +function [vstacked, astacked] = rotparams (rstacked) + +N = size (rstacked,1) / 3; + +## ang = 0 ; +## if length(varargin), +## if strcmp(varargin{1},'ang'), ang = 1; end +## end +ok = all ( ! isnan (rstacked') ) & any ( rstacked' ); +ok = min ( reshape (ok,3,N) ); +ok = find (ok) ; +## keyboard +vstacked = zeros (N,3); +astacked = zeros (N,1); +for j = ok, + r = rstacked(3*j-2:3*j,:); + [v,f] = eig (r); + f = diag(f); + + [m,i] = min (abs (real (f)-1)); + v = v(:,i); + + w = null (v'); + u = w(:,1); + a = u'*r*u; + if a<1, + a = real (acos (u'*r*u)); + else + a = 0; + end + ## Check orientation + x=r*u; + if v'*[0 -u(3) u(2); u(3) 0 -u(1);-u(2) u(1) 0]*x < 0, v=-v; end + + + if nargout <= 1, v = v*a; end + vstacked(j,:) = -v'; + astacked(j) = a; +end Copied: trunk/octave-forge/main/linear-algebra/inst/rotv.m (from rev 6941, trunk/octave-forge/main/miscellaneous/inst/rotv.m) =================================================================== --- trunk/octave-forge/main/linear-algebra/inst/rotv.m (rev 0) +++ trunk/octave-forge/main/linear-algebra/inst/rotv.m 2010-02-22 07:07:16 UTC (rev 6944) @@ -0,0 +1,85 @@ +## Copyright (C) 2002 Etienne Grossmann. All rights reserved. +## +## 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 2, or (at your option) any +## later version. +## +## This 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. +## + +## -*- texinfo -*- +## @deftypefn{Function File} {@var{r} = } rotv ( v, ang ) +## @cindex +## The functionrotv calculates a Matrix of rotation about @var{v} w/ angle |v| +## r = rotv(v [,ang]) +## +## Returns the rotation matrix w/ axis v, and angle, in radians, norm(v) or +## ang (if present). +## +## rotv(v) == w'*w + cos(a) * (eye(3)-w'*w) - sin(a) * crossmat(w) +## +## where a = norm (v) and w = v/a. +## +## v and ang may be vertically stacked : If 'v' is 2x3, then +## rotv( v ) == [rotv(v(1,:)); rotv(v(2,:))] +## +## @example +## +## @end example +## @seealso{rotparams} +## @end deftypefn + +## See also : rota, rot +## + +## Author: Etienne Grossmann <et...@cs...> +## Last modified: Setembro 2002 + +function r = rotv(v ,ang) + +if nargin > 1 + v = v.*((ang(:)./sqrt(sum(v'.^2))')*ones(1,3)); +end +## For checking only +## v00 = v ; +## static toto = floor(rand(1)*100) ; +## toto +a = sqrt(sum(v'.^2))' ; +oka = find(a!=0); +if all(size(oka)), + v(oka,:) = v(oka,:)./(a(oka)*ones(1,3)) ; +end +## ca = cos(a); +## sa = sin(a); + +N = size(v,1) ; N3 = 3*N ; +r = (reshape( v', N3,1 )*ones(1,3)).*kron(v,ones(3,1)) ; +r += kron(cos(a),ones(3,3)) .* (kron(ones(N,1),eye(3))-r) ; + +## kron(cos(a),ones(3,3)) .* (kron(ones(N,1),eye(3))-r0) +## cos(a) + +tmp = zeros(N3,3) ; +tmp( 2:3:N3,1 ) = v(:,3) ; +tmp( 1:3:N3,2 ) = -v(:,3) ; +tmp( 3:3:N3,1 ) = -v(:,2) ; +tmp( 1:3:N3,3 ) = v(:,2) ; +tmp( 2:3:N3,3 ) = -v(:,1) ; +tmp( 3:3:N3,2 ) = v(:,1) ; +## keyboard +r -= kron(sin(a),ones(3)) .* tmp ; + +## For checking only +## r2 = zeros(N3,3) ; +## for i=1:size(v,1), +## v0 = v00(i,:); +## t = norm(v0); +## if t, v0 = v0/t; end; +## r2(3*i-2:3*i,:) = v0'*v0 + cos(t)*(eye(3)-v0'*v0) + -sin(t)*[0, -v0(3), v0(2);v0(3), 0, -v0(1);-v0(2), v0(1), 0]; +## end +## max(abs(r2(:)-r(:))) + Modified: trunk/octave-forge/main/miscellaneous/INDEX =================================================================== --- trunk/octave-forge/main/miscellaneous/INDEX 2010-02-22 07:06:08 UTC (rev 6943) +++ trunk/octave-forge/main/miscellaneous/INDEX 2010-02-22 07:07:16 UTC (rev 6944) @@ -11,8 +11,6 @@ match nze reduce - rotparams - rotv slurp_file units zagzig Deleted: trunk/octave-forge/main/miscellaneous/inst/rotparams.m =================================================================== --- trunk/octave-forge/main/miscellaneous/inst/rotparams.m 2010-02-22 07:06:08 UTC (rev 6943) +++ trunk/octave-forge/main/miscellaneous/inst/rotparams.m 2010-02-22 07:07:16 UTC (rev 6944) @@ -1,71 +0,0 @@ -## Copyright (C) 2002 Etienne Grossmann. All rights reserved. -## -## 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 2, or (at your option) any -## later version. -## -## This 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. - -## -*- texinfo -*- -## @deftypefn{Function File} {@var{[vstacked, astacked]} = } rotparams ( rstacked ) -## @cindex -## The function w = rotparams (r) - Inverse to rotv(). -## Using, @var{w} = rotparams(@var{r}) is such that -## rotv(w)*r' == eye(3). -## -## If used as, [v,a]=rotparams(r) , idem, with v (1 x 3) s.t. w == a*v. -## -## 0 <= norm(w)==a <= pi -## -## :-O !! Does not check if 'r' is a rotation matrix. -## -## Ignores matrices with zero rows or with NaNs. (returns 0 for them) -## -## @seealso{rotv} -## @end deftypefn - -## Author: Etienne Grossmann <et...@cs...> - -function [vstacked, astacked] = rotparams (rstacked) - -N = size (rstacked,1) / 3; - -## ang = 0 ; -## if length(varargin), -## if strcmp(varargin{1},'ang'), ang = 1; end -## end -ok = all ( ! isnan (rstacked') ) & any ( rstacked' ); -ok = min ( reshape (ok,3,N) ); -ok = find (ok) ; -## keyboard -vstacked = zeros (N,3); -astacked = zeros (N,1); -for j = ok, - r = rstacked(3*j-2:3*j,:); - [v,f] = eig (r); - f = diag(f); - - [m,i] = min (abs (real (f)-1)); - v = v(:,i); - - w = null (v'); - u = w(:,1); - a = u'*r*u; - if a<1, - a = real (acos (u'*r*u)); - else - a = 0; - end - ## Check orientation - x=r*u; - if v'*[0 -u(3) u(2); u(3) 0 -u(1);-u(2) u(1) 0]*x < 0, v=-v; end - - - if nargout <= 1, v = v*a; end - vstacked(j,:) = -v'; - astacked(j) = a; -end Deleted: trunk/octave-forge/main/miscellaneous/inst/rotv.m =================================================================== --- trunk/octave-forge/main/miscellaneous/inst/rotv.m 2010-02-22 07:06:08 UTC (rev 6943) +++ trunk/octave-forge/main/miscellaneous/inst/rotv.m 2010-02-22 07:07:16 UTC (rev 6944) @@ -1,85 +0,0 @@ -## Copyright (C) 2002 Etienne Grossmann. All rights reserved. -## -## 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 2, or (at your option) any -## later version. -## -## This 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. -## - -## -*- texinfo -*- -## @deftypefn{Function File} {@var{r} = } rotv ( v, ang ) -## @cindex -## The functionrotv calculates a Matrix of rotation about @var{v} w/ angle |v| -## r = rotv(v [,ang]) -## -## Returns the rotation matrix w/ axis v, and angle, in radians, norm(v) or -## ang (if present). -## -## rotv(v) == w'*w + cos(a) * (eye(3)-w'*w) - sin(a) * crossmat(w) -## -## where a = norm (v) and w = v/a. -## -## v and ang may be vertically stacked : If 'v' is 2x3, then -## rotv( v ) == [rotv(v(1,:)); rotv(v(2,:))] -## -## @example -## -## @end example -## @seealso{rotparams} -## @end deftypefn - -## See also : rota, rot -## - -## Author: Etienne Grossmann <et...@cs...> -## Last modified: Setembro 2002 - -function r = rotv(v ,ang) - -if nargin > 1 - v = v.*((ang(:)./sqrt(sum(v'.^2))')*ones(1,3)); -end -## For checking only -## v00 = v ; -## static toto = floor(rand(1)*100) ; -## toto -a = sqrt(sum(v'.^2))' ; -oka = find(a!=0); -if all(size(oka)), - v(oka,:) = v(oka,:)./(a(oka)*ones(1,3)) ; -end -## ca = cos(a); -## sa = sin(a); - -N = size(v,1) ; N3 = 3*N ; -r = (reshape( v', N3,1 )*ones(1,3)).*kron(v,ones(3,1)) ; -r += kron(cos(a),ones(3,3)) .* (kron(ones(N,1),eye(3))-r) ; - -## kron(cos(a),ones(3,3)) .* (kron(ones(N,1),eye(3))-r0) -## cos(a) - -tmp = zeros(N3,3) ; -tmp( 2:3:N3,1 ) = v(:,3) ; -tmp( 1:3:N3,2 ) = -v(:,3) ; -tmp( 3:3:N3,1 ) = -v(:,2) ; -tmp( 1:3:N3,3 ) = v(:,2) ; -tmp( 2:3:N3,3 ) = -v(:,1) ; -tmp( 3:3:N3,2 ) = v(:,1) ; -## keyboard -r -= kron(sin(a),ones(3)) .* tmp ; - -## For checking only -## r2 = zeros(N3,3) ; -## for i=1:size(v,1), -## v0 = v00(i,:); -## t = norm(v0); -## if t, v0 = v0/t; end; -## r2(3*i-2:3*i,:) = v0'*v0 + cos(t)*(eye(3)-v0'*v0) + -sin(t)*[0, -v0(3), v0(2);v0(3), 0, -v0(1);-v0(2), v0(1), 0]; -## end -## max(abs(r2(:)-r(:))) - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rik...@us...> - 2010-03-12 13:07:08
|
Revision: 7052 http://octave.svn.sourceforge.net/octave/?rev=7052&view=rev Author: rikcorradini Date: 2010-03-12 13:06:46 +0000 (Fri, 12 Mar 2010) Log Message: ----------- First working version for main folder Added Paths: ----------- trunk/octave-forge/main/openmpi_ext/ trunk/octave-forge/main/openmpi_ext/COPYING trunk/octave-forge/main/openmpi_ext/DESCRIPTION trunk/octave-forge/main/openmpi_ext/INDEX trunk/octave-forge/main/openmpi_ext/doc/ trunk/octave-forge/main/openmpi_ext/doc/README trunk/octave-forge/main/openmpi_ext/inst/ trunk/octave-forge/main/openmpi_ext/inst/Pi.m trunk/octave-forge/main/openmpi_ext/inst/allnodes trunk/octave-forge/main/openmpi_ext/inst/hello2dimmat.m trunk/octave-forge/main/openmpi_ext/inst/hellocell.m trunk/octave-forge/main/openmpi_ext/inst/hellosparsemat.m trunk/octave-forge/main/openmpi_ext/inst/hellostruct.m trunk/octave-forge/main/openmpi_ext/inst/helloworld.m trunk/octave-forge/main/openmpi_ext/inst/mc_example.m trunk/octave-forge/main/openmpi_ext/inst/montecarlo.m trunk/octave-forge/main/openmpi_ext/src/ trunk/octave-forge/main/openmpi_ext/src/MPI_Barrier.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Load.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Test.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_rank.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_size.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Finalize.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Finalized.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Init.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Initialized.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Iprobe.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Op_Load.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Op_Test.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Probe.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Recv.cc trunk/octave-forge/main/openmpi_ext/src/MPI_Send.cc trunk/octave-forge/main/openmpi_ext/src/Makefile trunk/octave-forge/main/openmpi_ext/src/Makefile.OPENMPI1.3.3 trunk/octave-forge/main/openmpi_ext/src/simple.h trunk/octave-forge/main/openmpi_ext/src/simpleop.h Added: trunk/octave-forge/main/openmpi_ext/COPYING =================================================================== --- trunk/octave-forge/main/openmpi_ext/COPYING (rev 0) +++ trunk/octave-forge/main/openmpi_ext/COPYING 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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 licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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 is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. Added: trunk/octave-forge/main/openmpi_ext/DESCRIPTION =================================================================== --- trunk/octave-forge/main/openmpi_ext/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/openmpi_ext/DESCRIPTION 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,11 @@ +Name: openmpi_ext +Version: 1.0.0 +Date: 2009-11-16 +Author: Riccardo Corradini <ric...@ya...> +Maintainer: Riccardo Corradini <ric...@ya...> +Title: openmpi_ext +Description: MPI functions for parallel computing using simple MPI Derived Datatypes. +Depends: octave (>= 3.2.3) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/openmpi_ext/INDEX =================================================================== --- trunk/octave-forge/main/openmpi_ext/INDEX (rev 0) +++ trunk/octave-forge/main/openmpi_ext/INDEX 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1 @@ +TO be filled Added: trunk/octave-forge/main/openmpi_ext/doc/README =================================================================== --- trunk/octave-forge/main/openmpi_ext/doc/README (rev 0) +++ trunk/octave-forge/main/openmpi_ext/doc/README 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,44 @@ +The code is general-purpose, but I would like to use it for econometrics. +So the first step will be to install the following tarball from +http://www.open-mpi.org/software/ompi/v1.3/downloads/openmpi-1.3.3.tar.bz2 +possibly in a multi-core computer to run my simple examples +and configure it for instance in the following way (/home/user is your $HOME) +./configure --enable-mpirun-prefix-by-default --enable-heterogeneous --prefix=/home/user/openmpi-1.3.3/ --enable-static + +and modify .bashrc in your home + OMPIBIN=`$ompi_info -path bindir -parsable | cut -d: -f3` + OMPILIB=`$ompi_info -path libdir -parsable | cut -d: -f3` + OMPISCD=`$ompi_info -path sysconfdir -parsable | cut -d: -f3` + + + +export PATH=$OMPIBIN:$PATH + +export LD_LIBRARY_PATH=:$OMPILIB:$LD_LIBRARY_PATH + +unset ompi_info OMPIBIN OMPILIB OMPISCD + +If you want to install it on a simple toy network, just assign a static ip address on every linux computer and set up +an ssh connection with no password (see for instance http://linuxproblem.org/art_9.html ) and then install openmpi and octave always with the same versions and with the same info on .bashrc for the same user. + +After this type in a terminal mpiCC --showme +In my case I will have something like + +g++ -I/home/user/openmpi-1.3.3/include -pthread -L/home/user/openmpi-1.3.3/lib -lmpi_cxx -lmpi -lopen-rte -lopen-pal -ldl -Wl,--export-dynamic -lnsl -lutil -lm -ldl + +This will be useful for mkoctfile +for instance for MPI_Init.cc we shall have +mkoctfile -I/home/user/openmpi-1.3.3/include -lpthread -L/home/user/openmpi-1.3.3/lib -lmpi_cxx -lmpi -lopen-rte -lopen-pal -ldl -lnsl -lutil -lm -ldl MPI_Init.cc + + + +The m files just contain some very simple examples +More complex examples will be provided in the next future. +See also +http://static.msi.umn.edu/tutorial/scicomp/general/MPI/content6.html +to understand the logic of MPI Derived Datatypes and how could they be easily handled by openmpi_ext package. +Bests regards +Riccardo Corradini + + + Added: trunk/octave-forge/main/openmpi_ext/inst/Pi.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/Pi.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/Pi.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,113 @@ +## Copyright (C) 2004-2007 Javier Fernández Baldomero, Mancia Anguita López +## This code has been adjusted for octave3.2.3 and octave 3.3.50+ in +## 2009 by Riccardo Corradini <ric...@ya...> +## +## 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 2 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/>. + + +# Please add the oct files openmpi_ext folder +# For instance addpath("../src"); +# mpirun -np 5 octave -q --eval "Pi(2E7,'s')" + +function Pi(N,mod) +addpath("../src"); +# Pi: Classic PI computation by numeric integration of arctan'(x) in [0..1] +# +# Pi [ ( N [ ,mod ] ) ] +# +# N [1E7] #subdivisions of the [0, 1] interval +# mod ['s'] communication modality: (s)end (r)educe +# +# printed results struct contains +# pi estimated pi value +# err error +# time from argument xmit to pi computed +# + + +########## +# ArgChk # +########## +if nargin<1, N=1E7; end +if nargin<2, mod='s'; end +if nargin>2, usage("Pi(N,mod)"); end # let all ranks complain +flag=0; # code much simpler +flag=flag || ~isscalar(N) || ~isnumeric(N); +flag=flag | fix(N)~=N | N<1; + mod=lower(mod); mods='sr'; +flag=flag | isempty(findstr(mod, mods)); # let them all error out +if flag, usage("Pi( <int> N>0, <char> mod=='s|r' )"); end + +################## +# Results struct # +################## +results.pi =0; +results.err =0; +results.time =0; + + +############ +# PARALLEL # initialization, include MPI_Init time in measurement +############ + T=clock; # +############ + MPI_ANY_SOURCE = -1; + MPI_Init(); + MPI_COMM_WORLD = MPI_Comm_Load("NEWORLD"); + rnk = MPI_Comm_rank (MPI_COMM_WORLD); # let it abort if it fails + siz = MPI_Comm_size (MPI_COMM_WORLD); + + SLV = logical(rnk); # handy shortcuts, master is rank 0 + MST = ~ SLV; # slaves are all other + +############ +# PARALLEL # computation (depends on rank/size) +############ # vectorized code, equivalent to + width=1/N; lsum=0; # for i=rnk:siz:N-1 + i=rnk:siz:N-1; # x=(i+0.5)*width; + x=(i+0.5)*width; # lsum=lsum+4/(1+x^2); + lsum=sum(4./(1+x.^2)); # end + +############ +# PARALLEL # reduction and finish +############ +switch mod + case 's', TAG=7; # Any tag would do + if SLV # All slaves send result back + MPI_Send(lsum, 0,TAG,MPI_COMM_WORLD); + else # Here at master + Sum =lsum; # save local result + for slv=1:siz-1 # collect in any order + lsum = MPI_Recv(MPI_ANY_SOURCE,TAG,MPI_COMM_WORLD); + Sum+=lsum; # and accumulate + end # order: slv or MPI_ANY_SOURCE + end + case 'r', + disp("not yet implemented"); +# Sum=0; +# reduction master = rank 0 @ WORLD +# MPI_Reduce(lsum,Sum, MPI_SUM, 0,MPI_COMM_WORLD); +end + +MPI_Finalize(); + +if MST + Sum = Sum/N ; # better at end: don't loose resolution +################################# # stopwatch measurement +results.time = etime(clock,T); # # but only at master after PI computed +################################# # all them started T=clock; +results.err = Sum-pi; +results.pi = Sum # ; + +end \ No newline at end of file Added: trunk/octave-forge/main/openmpi_ext/inst/allnodes =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/allnodes (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/allnodes 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,7 @@ +#!/bin/bash +# this script will run an Octave script using MPI with a given hostfile, +# using a given number of ranks. Edit it to set the hostfile and number of nodes +# then use it as follows: allnodes <your_script_name.m> +HOSTFILE="/home/user/tmp/bhosts" +NUMBER_OF_NODES="33" +mpirun --hostfile $HOSTFILE -np $NUMBER_OF_NODES octave -q --eval $1 Added: trunk/octave-forge/main/openmpi_ext/inst/hello2dimmat.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/hello2dimmat.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/hello2dimmat.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,36 @@ +# Please add the oct files openmpi_ext folder +# For instance + addpath("../src"); + MPI_SUCCESS =0; + MPI_Init(); + + # the string NEWORLD is just a label could be whatever you want + CW = MPI_Comm_Load("NEWORLD"); + my_rank = MPI_Comm_rank(CW); + p = MPI_Comm_size(CW); + mytag = 48; + + + + if (my_rank != 0) +# Generate a random matrix + message=rand(90,90); +# load message +# rankvect is the vector containing the list of rank destination process + rankvect = 0; + [info] = MPI_Send(message,rankvect,mytag,CW); + else + for source = 1:p-1 + disp("We are at rank 0 that is master etc.."); + [messager, info] = MPI_Recv(source,mytag,CW); + +# You could also save each result and make comparisons if you don't trust MPI + disp("Rank 0 is the master receiving ... :"); + if (info == MPI_SUCCESS) + disp('OK!'); + endif + endfor + end + + + MPI_Finalize(); Added: trunk/octave-forge/main/openmpi_ext/inst/hellocell.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/hellocell.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/hellocell.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,55 @@ +## Copyright (C) 2009 Riccardo Corradini <ric...@ya...> +## under the terms of the GNU General Public License. +## +## 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 2 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/>. + + +# Please add the oct files openmpi_ext folder +# For instance +addpath("../src"); +# if you have 4 cores or a network of 4 computers with a ssh connection with no password and same openmpi 1.3.3 installation +# type at the terminal mpirun -np 4 octave --eval hellocell + + + MPI_Init(); + # the string NEWORLD is just a label could be whatever you want + CW = MPI_Comm_Load("NEWORLD"); + + + + my_rank = MPI_Comm_rank(CW); + p = MPI_Comm_size(CW); + # TAG is very important to identify the message + TAG = 1; + + + message=""; + if (my_rank != 0) + message = {magic(3) 17 'fred'; ... + 'AliceBettyCarolDianeEllen' 'yp' 42; ... + {1} 2 3}; + rankvect = 0; + [info] = MPI_Send(message,rankvect,TAG,CW); + else + for source = 1:p-1 + disp("We are at rank 0 that is master etc.."); + [messager, info] = MPI_Recv(source,TAG,CW); + info + messager + endfor + end + + + MPI_Finalize(); + Added: trunk/octave-forge/main/openmpi_ext/inst/hellosparsemat.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/hellosparsemat.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/hellosparsemat.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,50 @@ +# Please add the oct files openmpi_ext folder +# For instance + addpath("../src"); + MPI_Init(); + # the string NEWORLD is just a label could be whatever you want + CW = MPI_Comm_Load("NEWORLD"); + my_rank = MPI_Comm_rank(CW); + p = MPI_Comm_size(CW); +# tag[0] ----> type of octave_value +# tag[1] ----> array of three elements 1) num of rows 2) number of columns 3) number of non zero elements +# tag[2] ----> vector of rowindex +# tag[3] ----> vector of columnindex +# tag[4] ----> vector of non zero elements +# These tags will be generated after mytag by the MPI_Send and MPI_Recv (see source code) + + mytag = 48; + + + + +# This is just to fill the sparse matrix + M=5; + N=5; + D=0.9; + message = sprand (M, N, D); +# load message + + + + if (my_rank != 0) + dest = 0; +# rankvect is the vector containing the list of rank destination process + rankvect(1,1) = 0; + [info] = MPI_Send(message,rankvect,mytag,CW); + disp("This is flag for sending the message --") + info + else + for source = 1:p-1 + messager=''; + disp("We are at rank 0 that is master etc.."); + [messager, info] = MPI_Recv(source,mytag,CW); + disp("Rank 0 is the master receiving ... :"); + if (messager/message) + disp('OK!'); + endif + messager + endfor + end + + MPI_Finalize(); Added: trunk/octave-forge/main/openmpi_ext/inst/hellostruct.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/hellostruct.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/hellostruct.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,51 @@ +## Copyright (C) 2009 Riccardo Corradini <ric...@ya...> +## under the terms of the GNU General Public License. +## +## 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 2 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/>. + + +# Please add the oct files openmpi_ext folder +# For instance +addpath("../src"); +# if you have 4 cores or a network of 4 computers with a ssh connection with no password and same openmpi 1.3.3 installation +# type at the terminal mpirun -np 4 octave --eval hellostruct + + + MPI_Init(); + # the string NEWORLD is just a label could be whatever you want + CW = MPI_Comm_Load("NEWORLD"); + + + + my_rank = MPI_Comm_rank(CW); + p = MPI_Comm_size(CW); + # TAG is very important to identify the message + TAG = 1; + + + message=""; + if (my_rank != 0) + message = struct('f1', {1 3; 2 4}, 'f2', 25); + # Could be a vector containing the list of ranks identifiers; + rankvect = 0; + [info] = MPI_Send(message,rankvect,TAG,CW); + else + for source = 1:p-1 + disp("We are at rank 0 that is master etc.."); + [message, info] = MPI_Recv(source,TAG,CW); + message + endfor + end + MPI_Finalize(); + Added: trunk/octave-forge/main/openmpi_ext/inst/helloworld.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/helloworld.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/helloworld.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,52 @@ +## Copyright (C) 2009 Riccardo Corradini <ric...@ya...> +## under the terms of the GNU General Public License. +## +## 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 2 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/>. + + +# Please add the oct files openmpi_ext folder +# For instance +addpath("../src"); +# if you have 4 cores or a network of 4 computers with a ssh connection with no password and same openmpi 1.3.3 installation +# type at the terminal mpirun -np 4 octave --eval helloworld + + + MPI_Init(); + # the string NEWORLD is just a label could be whatever you want + CW = MPI_Comm_Load("NEWORLD"); + + + + my_rank = MPI_Comm_rank(CW); + p = MPI_Comm_size(CW); + # Could be any number + TAG=1; + + + message=""; + if (my_rank != 0) + message = sprintf('Greetings from process: %d!',my_rank); + # rankvect is the vector containing the list of rank destination process + rankvect = 0; + [info] = MPI_Send(message,rankvect,TAG,CW); + else + for source = 1:p-1 + disp("We are at rank 0 that is master etc.."); + [message, info] = MPI_Recv(source,TAG,CW); + printf('%s\n', message); + endfor + end + + MPI_Finalize(); + Added: trunk/octave-forge/main/openmpi_ext/inst/mc_example.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/mc_example.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/mc_example.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,50 @@ +## Copyright (C) 2009 Michael Cree <mic...@ua...> +## under the terms of the GNU General Public License. +## +## 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 2 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/>. + + +# mc_example: shows how Monte Carlo can be done using mpi, Does Monte +# Carlo on the OLS estimator. Uses montecarlo.m +# +# USAGE: from the command prompt, not the octave prompt, execute +# orterun -np 3 octave --eval mc_example + +1; +addpath("../src"); +function betahat = olswrapper(args) + n = args{1}; + theta = args{2}; + x = [ones(n,1) randn(n,1)]; + y = x*theta + randn(n,1); + betahat = ols(y,x); + betahat = betahat'; +endfunction + + +n = 30; +theta = [1;1]; + +reps = 1000; +f = "olswrapper"; +args = {n, theta}; +outfile = "mc_output"; +n_pooled = 10; +verbose = true; + +# montecarlo(f, args, reps, outfile, n_pooled, false, verbose); + +if not(MPI_Initialized) MPI_Init; endif +montecarlo(f, args, reps, outfile, n_pooled, verbose); +if not(MPI_Finalized) MPI_Finalize; endif Added: trunk/octave-forge/main/openmpi_ext/inst/montecarlo.m =================================================================== --- trunk/octave-forge/main/openmpi_ext/inst/montecarlo.m (rev 0) +++ trunk/octave-forge/main/openmpi_ext/inst/montecarlo.m 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,135 @@ +# Copyright (C) 2006, 2009 Michael Creel <mic...@ua...> +# under the terms of the GNU General Public License. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +# montecarlo.m: generates a specified number of replications of a function's +# output and writes them to a user-specified output file. +# +# USAGE: montecarlo(f,f_args,reps,outfile,n_pooled,n_returns,usempi, verbose) +# +# IMPORTANT: f should return a row vector of output from feval(f,f_args) +# +# For normal evaluation on one core, only the first 4 arguments are required. +# * Arg 1: (required) the function that generates a row vector of output +# * Arg 2: (required) the arguments of the function, in a cell +# * Arg 3: (required) the number of replications to generate +# * Arg 4: (required) the output file name +# * Arg 5 (optional) number of replications to be pooled together between writes +# * Arg 6 (optional) verbose: 1 for on, 0 for off +# +# If using MPI, you should run using ranks equal to number of cores plus 1, +# and should make sure that the core running the frontend is also the one that +# has the second rank. That way the core the frontend is on will also do work. + +function n_received = montecarlo(f,f_args,reps,outfile,n_pooled,verbose) + + t0 = clock(); # initialize timing + + # defaults for optional arguments + if (nargin < 6) verbose = false; endif + if (nargin < 5) n_pooled = 1; endif; + + if MPI_Initialized # check if doing this parallel or serial + use_mpi = true; + CW = MPI_Comm_Load("NEWORLD"); + is_node = MPI_Comm_rank(CW); + nodes = MPI_Comm_size(CW); + mytag = 48; + else + use_mpi = false; + is_node = 0; + endif + + if is_node # compute nodes + more_please = 1; + while more_please + for i = 1:n_pooled + contrib = feval(f, f_args); + contribs(i,:) = contrib; + endfor + MPI_Send(contribs, 0, mytag, CW); + # check if we're done + if (MPI_Iprobe(0, is_node, CW)) # check for ping from rank 0 + junk = MPI_Recv(0, is_node, CW); + break; + endif + endwhile + else # frontend + received = 0; + done = false; + while received < reps + if use_mpi + # retrieve results from compute nodes + for i = 1:nodes-1 + # compute nodes have results yet? + ready = false; + ready = MPI_Iprobe(i, mytag, CW); # check if message pending + if ready + # get it if it's there + contribs = MPI_Recv(i, mytag, CW); + need = reps - received; + received = received + n_pooled; + # truncate? + if n_pooled >= need + contribs = contribs(1:need,:); + done = true; + endif + # write to output file + FN = fopen (outfile, "a"); + if (FN < 0) error ("montecarlo: couldn't open output file %s", outfile); endif + t = etime(clock(), t0); + for j = 1:rows(contribs) + fprintf(FN, "%f ", i, t, contribs(j,:)); + fprintf(FN, "\n"); + endfor + fclose(FN); + if verbose printf("\nContribution received from node%d. Received so far: %d\n", i, received); endif + endif + # tell compute nodes to stop loop + if done + for i = 1:(nodes-1) + ready = MPI_Iprobe(i, mytag, CW); # get last messages + if ready contribs = MPI_Recv(i, mytag, CW); endif + MPI_Send(" ",i,i,CW); # send out message to stop + endfor + break; + endif + endfor + else + for i = 1:n_pooled + contrib = feval(f, f_args); + contribs(i,:) = contrib; + endfor + need = reps - received; + received = received + n_pooled; + # truncate? + if n_pooled >= need + contribs = contribs(1:need,:); + endif + # write to output file + FN = fopen (outfile, "a"); + if (FN < 0) error ("montecarlo: couldn't open output file %s", outfile); endif + t = etime(clock(), t0); + for j = 1:rows(contribs) + fprintf(FN, "%f ", 0, t, contribs(j,:)); + fprintf(FN, "\n"); + endfor + fclose(FN); + if verbose printf("\nContribution received from node 0. Received so far: %d\n", received); endif + endif + endwhile + endif +endfunction Added: trunk/octave-forge/main/openmpi_ext/src/MPI_Barrier.cc =================================================================== --- trunk/octave-forge/main/openmpi_ext/src/MPI_Barrier.cc (rev 0) +++ trunk/octave-forge/main/openmpi_ext/src/MPI_Barrier.cc 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,85 @@ +// Copyright (C) 2004-2007 Javier Fernández Baldomero, Mancia Anguita López +// This code has been adjusted for octave3.2.3 and more in +// 2009 by Riccardo Corradini <ric...@ya...> +// Copyright (C) 2009 VZLU Prague + +// +// 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 2 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/>. + +#define NAME MPI_Barrier +/* + * ---------------------------------------------------- + * Blocks until all processes in the communicator have reached this routine + * [info ] = MPI_Barrier (comm) + * ---------------------------------------------------- + */ + + +#include "simple.h" +DEFUN_DLD(NAME, args, ,"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} @var{INFO} = MPI_Barrier (@var{COMM})\n\ +Blocks until all processes in the communicator have reached this routine.\n\ +If @var{COMM} octave comunicator object loaded with MPI_Comm_Load is omitted \n\ +returns an error. \n\ + @example\n\ + @group\n\ + @var{INFO} (int) return code\n\ + 0 MPI_SUCCESS No error\n\ + 5 MPI_ERR_COMM Invalid communicator (NULL?)\n\ + 13 MPI_ERR_ARG Invalid argument (typically a NULL pointer?)\n\ +@end group\n\ +@end example\n\ +@end deftypefn") +{ + + octave_value results; + int nargin = args.length (); + if (nargin != 1) + { + error ("expecting 1 input argument"); + return results; + } + + if (!simple_type_loaded) + { + simple::register_type (); + simple_type_loaded = true; + mlock (); + } + + if((args.length() != 1 ) + || args(0).type_id()!=simple::static_type_id()){ + + error("Please enter octave comunicator object!"); + return octave_value(-1); + } + + const octave_base_value& rep = args(0).get_rep(); + const simple& B = ((const simple &)rep); + MPI_Comm comm = ((const simple&) B).comunicator_value (); + if (! error_state) + { + int my_size; + int info = MPI_Barrier (comm); + + results = info; + } + else + print_usage (); + comm= NULL; + /* [info] = MPI_Barrier (comm) */ + + return results; +} + Added: trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Load.cc =================================================================== --- trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Load.cc (rev 0) +++ trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Load.cc 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,56 @@ +// Copyright (C) 2009 Riccardo Corradini <ric...@ya...> +// under the terms of the GNU General Public License. +// Copyright (C) 2009 VZLU Prague +// +// 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 2 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/>. +#include "simple.h" + +DEFUN_DLD(MPI_Comm_Load, args, ,"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} @var{COMM} = MPI_Comm_Load (@var{DESCRIPTION})\n\ +Return @var{COMM} the MPI_Communicator object whose description is @var{DESCRIPTION}, as a string.\n\ +The default value will be MPI_COMM_WORLD. \n\ +If @var{DESCRIPTION} is omitted, return anyway an MPI_COMM_WORLD comunicator object \n\ +with no decription.\n\ +For\n\ +example,\n\ +\n\ +@example\n\ +@group\n\ +MPI_Init();\n\ +X = MPI_Comm_Load(\"description\"); \n\ +whos X\n\ +MPI_Finalize();\n\ +@end group\n\ +@end example\n\ +@end deftypefn") +{ + if (!simple_type_loaded) + { + simple::register_type (); + simple_type_loaded = true; + mlock (); + } + + octave_value retval; + if (args.length () != 1 || !args (0).is_string ()) + { + error ("MPI_Comm_Load: first argument must be a string"); + return retval; + } + + const std::string name = args (0).string_value (); + retval = new simple (name,MPI_COMM_WORLD); + + return retval; +} \ No newline at end of file Added: trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Test.cc =================================================================== --- trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Test.cc (rev 0) +++ trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_Test.cc 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,40 @@ +#include "simple.h" +DEFUN_DLD(MPI_Comm_Test, args, ,"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} @var{DESCRIPTION} = MPI_Comm_Test (@var{COMM})\n\ +Return @var{DESCRIPTION} string description of the MPI_Communicator @var{COMM}\n\ +For\n\ +example,\n\ +\n\ +@example\n\ +@group\n\ +MPI_Init();\n\ +X = MPI_Comm_Load(\"description\"); \n\ +whos X\n\ +MPI_Comm_Test(X) \n\ +@result{} \"description\"\n\ +MPI_Finalize();\n\ +@end group\n\ +@end example\n\ +@end deftypefn") +{ + if (!simple_type_loaded) + { + simple::register_type (); + simple_type_loaded = true; + mlock (); + } + + octave_value retval; + if(args.length() != 1 + || args(0).type_id()!=simple::static_type_id()){ + + error("usage: MPI_Comm_Test(octave_comunicator_object)"); + return octave_value(-1); + } + const octave_base_value& rep = args(0).get_rep(); + const simple& b = ((const simple &)rep); + octave_stdout << "MPI_Comm_Test has " << b.name_value() << " output arguments.\n"; + MPI_Comm res = b.comunicator_value(); + retval = b.name_value(); + return retval; +} \ No newline at end of file Added: trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_rank.cc =================================================================== --- trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_rank.cc (rev 0) +++ trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_rank.cc 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,88 @@ +// Copyright (C) 2004-2007 Javier Fernández Baldomero, Mancia Anguita López +// This code has been adjusted for octave3.2.3 and more in +// 2009 by Riccardo Corradini <ric...@ya...> +// Copyright (C) 2009 VZLU Prague + +// +// 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 2 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/>. + + +#define NAME MPI_Comm_rank +/* + * ---------------------------------------------------- + * Determines the rank of the calling process in the communicator + * [info rank] = MPI_Comm_rank (comm) + * ---------------------------------------------------- + */ + +#include "simple.h" +DEFUN_DLD(NAME, args,nargout ,"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} [@var{RANK} @var{INFO}] = MPI_Comm_rank (@var{COMM})\n\ +Determines rank of calling process in communicator.\n\ +If @var{COMM} octave comunicator object loaded with MPI_Comm_Load is omitted \n\ +returns an error. \n\ + @example\n\ + @group\n\ + @var{RANK} rank of the calling process in group of communicator\n\ + @var{INFO} (int) return code\n\ + 0 MPI_SUCCESS No error\n\ + 5 MPI_ERR_COMM Invalid communicator (NULL?)\n\ + 13 MPI_ERR_ARG Invalid argument (typically a NULL pointer?)\n\ +SEE ALSO: MPI_Comm_size\n\ +@end group\n\ +@end example\n\ +@end deftypefn") + +{ + octave_value_list results; + int nargin = args.length (); + if (nargin != 1) + { + error ("expecting 1 input argument"); + return results; + } + + if (!simple_type_loaded) + { + simple::register_type (); + simple_type_loaded = true; + mlock (); + } + + if((args.length() != 1 ) + || args(0).type_id()!=simple::static_type_id()){ + + error("Please enter octave comunicator object!"); + return octave_value(-1); + } + + const octave_base_value& rep = args(0).get_rep(); + const simple& B = ((const simple &)rep); + MPI_Comm comm = ((const simple&) B).comunicator_value (); + if (! error_state) + { + int my_rank; + int info = MPI_Comm_rank (comm, &my_rank); + if (nargout > 1) + results(1) = info; + results(0) = my_rank; + } + else + print_usage (); + comm= NULL; + /* [rank info] = MPI_Comm_rank (comm) */ + + return results; + +} Added: trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_size.cc =================================================================== --- trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_size.cc (rev 0) +++ trunk/octave-forge/main/openmpi_ext/src/MPI_Comm_size.cc 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,89 @@ +// Copyright (C) 2004-2007 Javier Fernández Baldomero, Mancia Anguita López +// This code has been adjusted for octave3.2.3 and more in +// 2009 by Riccardo Corradini <ric...@ya...> +// Copyright (C) 2009 VZLU Prague + +// +// 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 2 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/>. + +#define NAME MPI_Comm_size +/* + * ---------------------------------------------------- + * Determines the size of the calling process in the communicator + * [info rank] = MPI_Comm_size (comm) + * ---------------------------------------------------- + */ + +#include "simple.h" +DEFUN_DLD(NAME, args,nargout ,"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} [@var{RANK} @var{INFO}] = MPI_Comm_size (@var{COMM})\n\ +Determines size of calling process in communicator.\n\ +If @var{COMM} octave comunicator object loaded with MPI_Comm_Load is omitted \n\ +returns an error. \n\ + @example\n\ + @group\n\ + @var{exprank} rank of the calling process in group of communicator\n\ + @var{exprinfo} (int) return code\n\ + 0 MPI_SUCCESS No error\n\ + 5 MPI_ERR_COMM Invalid communicator (NULL?)\n\ + 13 MPI_ERR_ARG Invalid argument (typically a NULL pointer?)\n\ +SEE ALSO: MPI_Comm_rank\n\ +@end group\n\ +@end example\n\ +@end deftypefn") + +{ + octave_value_list results; + int nargin = args.length (); + if (nargin != 1) + { + error ("expecting 1 input argument"); + return results; + } + + if (!simple_type_loaded) + { + simple::register_type (); + simple_type_loaded = true; + mlock (); + } + + if((args.length() != 1 ) + || args(0).type_id()!=simple::static_type_id()){ + + error("Please enter octave comunicator object!"); + return octave_value(-1); + } + + const octave_base_value& rep = args(0).get_rep(); + const simple& B = ((const simple &)rep); + MPI_Comm comm = ((const simple&) B).comunicator_value (); + + + if (! error_state) + { + int my_size; + int info = MPI_Comm_size (comm, &my_size); + if (nargout > 1) + results(1) = info; + results(0) = my_size; + } + else + print_usage (); + comm= NULL; + /* [size info] = MPI_Comm_size (comm) */ + + return results; +} + Added: trunk/octave-forge/main/openmpi_ext/src/MPI_Finalize.cc =================================================================== --- trunk/octave-forge/main/openmpi_ext/src/MPI_Finalize.cc (rev 0) +++ trunk/octave-forge/main/openmpi_ext/src/MPI_Finalize.cc 2010-03-12 13:06:46 UTC (rev 7052) @@ -0,0 +1,48 @@ +// Copyright (C) 2004-2007 Javier Fernández Baldomero, Mancia Anguita López +// This code has been adjusted for octave3.2.3 and more in +// 2009 by Riccardo Corradini <ric...@ya...> + +// +// 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 2 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/>. + +#define NAME MPI_Finalize +/* + * ---------------------------------------------------- + * Terminates MPI execution environment + * info = MPI_Finalize + * ---------------------------------------------------- + */ +#include "mpi.h" +#include <octave/oct.h> + +DEFUN_DLD(NAME, args, nargout,"-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} @var{INFO} = MPI_Finalize()\n\ + Terminates MPI execution environment\n\ +\n\ + @example\n\ + @group\n\ + @var{INFO} (int) return code\n\ + 0 MPI_SUCCESS No error\n\ + 5 MPI_ERR_COMM Invalid communicator (NULL?)\n\ + 13 MPI_ERR_ARG Invalid argument (typically a NULL pointer?)\n\ +SEE ALSO: MPI_Init\n\ +@end group\n\ +@end example\n\ +@end deftypefn") +{ + + int info = MPI_Finalize(); + + return octave_value(info); +} Added: trunk/octave-forge/main/openmpi_ext/src/MPI_Finalized.cc =================================================================== --- trunk/octave-forge/main/openmpi_ext/src/MPI_Finalized.cc (rev 0) +++ trunk/octave-forge/main/openmpi_ext/src/MPI_Finalized.cc 2010-03-12 13:06:46... [truncated message content] |
From: <et...@us...> - 2010-04-10 16:05:24
|
Revision: 7169 http://octave.svn.sourceforge.net/octave/?rev=7169&view=rev Author: etienne Date: 2010-04-10 16:05:18 +0000 (Sat, 10 Apr 2010) Log Message: ----------- Make more robust Modified Paths: -------------- trunk/octave-forge/main/optim/doc/Makefile trunk/octave-forge/main/vrml/doc/Makefile Modified: trunk/octave-forge/main/optim/doc/Makefile =================================================================== --- trunk/octave-forge/main/optim/doc/Makefile 2010-04-10 15:44:59 UTC (rev 7168) +++ trunk/octave-forge/main/optim/doc/Makefile 2010-04-10 16:05:18 UTC (rev 7169) @@ -13,18 +13,20 @@ echo '</body></html>' >> html/index.html %.pdf : %.tex - latex $< > /dev/null 2>&1 - latex $< > /dev/null 2>&1 + latex -interaction=nonstopmode $< > /dev/null 2>&1 + latex -interaction=nonstopmode $< > /dev/null 2>&1 $(DVIPDF) $(@:.pdf=.dvi) # Note verbosity=0 as well as making latex2html quieter, has the side-effect # of not including a url to the raw text, which it'll get wrong html/%/index.html : %.tex - latex2html -verbosity=0 -local_icons $< - if [ ! -e "html" ]; then \ - mkdir html; \ - fi; \ - mv -f $(patsubst html/%/index.html,%,$@) html + if [ -e `which latex2html` ] ; then \ + latex2html -verbosity=0 -local_icons $< ; \ + if [ ! -e "html" ]; then \ + mkdir html; \ + fi; \ + mv -f $(patsubst html/%/index.html,%,$@) html ; \ + fi clean: rm -fr $(patsubst %.tex,%,$(TEX)) html *.log Modified: trunk/octave-forge/main/vrml/doc/Makefile =================================================================== --- trunk/octave-forge/main/vrml/doc/Makefile 2010-04-10 15:44:59 UTC (rev 7168) +++ trunk/octave-forge/main/vrml/doc/Makefile 2010-04-10 16:05:18 UTC (rev 7169) @@ -6,8 +6,8 @@ all : $(PDF) html/index.html %.pdf : %.tex - latex -interaction=batchmode $< > /dev/null 2>&1 - latex -interaction=batchmode $< > /dev/null 2>&1 + latex -interaction=nonstopmode $< > /dev/null 2>&1 + latex -interaction=nonstopmode $< > /dev/null 2>&1 $(DVIPDF) $(@:.pdf=.dvi) # Note verbosity=0 as well as making latex2html quieter, has the side-effect This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sch...@us...> - 2010-06-16 20:11:34
|
Revision: 7440 http://octave.svn.sourceforge.net/octave/?rev=7440&view=rev Author: schloegl Date: 2010-06-16 20:11:25 +0000 (Wed, 16 Jun 2010) Log Message: ----------- simplify expressions and fix typos Modified Paths: -------------- trunk/octave-forge/main/data-smoothing/inst/ddmat.m trunk/octave-forge/main/data-smoothing/inst/regdatasmooth.m trunk/octave-forge/main/info-theory/inst/conditionalentropy_XY.m trunk/octave-forge/main/nnet/inst/__calcjacobian.m trunk/octave-forge/main/vrml/inst/vrml_faces.m Modified: trunk/octave-forge/main/data-smoothing/inst/ddmat.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/ddmat.m 2010-06-16 19:19:36 UTC (rev 7439) +++ trunk/octave-forge/main/data-smoothing/inst/ddmat.m 2010-06-16 20:11:25 UTC (rev 7440) @@ -37,7 +37,7 @@ function D = ddmat(x, d) - if ( size(x)(2) != 1 ) + if ( size(x,2) != 1 ) error("x should be a column vector") endif m = length(x); @@ -45,7 +45,7 @@ D = speye(m); else dx = x((d + 1):m) - x(1:(m - d)); - V = sparse(diag(1 ./ dx); + V = sparse(diag(1 ./ dx)); D = d * V * diff(ddmat(x, d - 1)); endif endfunction Modified: trunk/octave-forge/main/data-smoothing/inst/regdatasmooth.m =================================================================== --- trunk/octave-forge/main/data-smoothing/inst/regdatasmooth.m 2010-06-16 19:19:36 UTC (rev 7439) +++ trunk/octave-forge/main/data-smoothing/inst/regdatasmooth.m 2010-06-16 20:11:25 UTC (rev 7440) @@ -103,10 +103,10 @@ if (length(x)!=length(y)) error("x and y must be equal length vectors") endif - if ( size(x)(1)==1 ) + if ( size(x,1)==1 ) x = x'; endif - if ( size(y)(1)==1 ) + if ( size(y,1)==1 ) y = y'; endif Modified: trunk/octave-forge/main/info-theory/inst/conditionalentropy_XY.m =================================================================== --- trunk/octave-forge/main/info-theory/inst/conditionalentropy_XY.m 2010-06-16 19:19:36 UTC (rev 7439) +++ trunk/octave-forge/main/info-theory/inst/conditionalentropy_XY.m 2010-06-16 20:11:25 UTC (rev 7440) @@ -48,7 +48,7 @@ function val=conditionalentropy_XY(XY) val=0.0; - for i=1:size(XY)(2) + for i=1:size(XY, 2) Yi = sum(XY(i,:)); val = val + Yi*entropy(XY(i,:)/sum(XY(i,:))); end Modified: trunk/octave-forge/main/nnet/inst/__calcjacobian.m =================================================================== --- trunk/octave-forge/main/nnet/inst/__calcjacobian.m 2010-06-16 19:19:36 UTC (rev 7439) +++ trunk/octave-forge/main/nnet/inst/__calcjacobian.m 2010-06-16 20:11:25 UTC (rev 7440) @@ -124,7 +124,7 @@ ## tildeSx = -dFx(n_x^x) ## use mIdentity to calculate the number of targets correctly ## for all other layers, use instead: - ## tildeSx(-1) = dF1(n_x^(x-1)))(W^x)' * tildeSx; + ## tildeSx(-1) = dF1(n_x^(x-1))(W^x)' * tildeSx; for iLayers = nLayers:-1:1 # this will count from the last # layer to the first layer ... Modified: trunk/octave-forge/main/vrml/inst/vrml_faces.m =================================================================== --- trunk/octave-forge/main/vrml/inst/vrml_faces.m 2010-06-16 19:19:36 UTC (rev 7439) +++ trunk/octave-forge/main/vrml/inst/vrml_faces.m 2010-06-16 20:11:25 UTC (rev 7440) @@ -90,7 +90,6 @@ opt0 = " smooth convex " ; verbose = 0 ; - nargin = nargin(); nargin -= 2 ; i = 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xav...@us...> - 2010-08-05 16:01:13
|
Revision: 7497 http://octave.svn.sourceforge.net/octave/?rev=7497&view=rev Author: xavier98 Date: 2010-08-05 16:01:04 +0000 (Thu, 05 Aug 2010) Log Message: ----------- update Maintainer field for various packages Modified Paths: -------------- trunk/octave-forge/main/ann/DESCRIPTION trunk/octave-forge/main/database/DESCRIPTION trunk/octave-forge/main/ftp/DESCRIPTION trunk/octave-forge/main/video/DESCRIPTION Modified: trunk/octave-forge/main/ann/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ann/DESCRIPTION 2010-08-05 10:35:19 UTC (rev 7496) +++ trunk/octave-forge/main/ann/DESCRIPTION 2010-08-05 16:01:04 UTC (rev 7497) @@ -2,7 +2,7 @@ Version: 1.0.2 Date: 2009-01-09 Author: Various Authors -Maintainer: Xavier Delacour +Maintainer: The Octave Community Title: Approximate Nearest Neighbor Library Description: The Octave-forge ANN package wraps the ANN library, which provides data structures and functions for computing exact and approximate nearest neighbors on an arbitrarily high dimensional point set. Depends: octave (>= 2.9.12) Modified: trunk/octave-forge/main/database/DESCRIPTION =================================================================== --- trunk/octave-forge/main/database/DESCRIPTION 2010-08-05 10:35:19 UTC (rev 7496) +++ trunk/octave-forge/main/database/DESCRIPTION 2010-08-05 16:01:04 UTC (rev 7497) @@ -2,7 +2,7 @@ Version: 1.0.4 Date: 2009-01-09 Author: Xavier Delacour -Maintainer: Xavier Delacour +Maintainer: The Octave Community Title: Bindings for postgres, mysql, sqlite, and standard ODBC Description: These are bindings that allow SQL queries and other database operations on postgres, mysql, sqlite, and standard ODBC databases from within Octave. A simplified interface that is uniform across all database types is provided, as well as the entire C client API for each database (libpq, libmysqlclient, etc). Depends: octave (>= 2.9.12) Modified: trunk/octave-forge/main/ftp/DESCRIPTION =================================================================== --- trunk/octave-forge/main/ftp/DESCRIPTION 2010-08-05 10:35:19 UTC (rev 7496) +++ trunk/octave-forge/main/ftp/DESCRIPTION 2010-08-05 16:01:04 UTC (rev 7497) @@ -2,7 +2,7 @@ Version: 1.0.2 Date: 2009-01-09 Author: Xavier Delacour -Maintainer: Xavier Delacour +Maintainer: The Octave Community Title: FTP functions Description: These are bindings for ftplib, and MATLAB compatible APIs. Depends: octave (>= 2.9.12) Modified: trunk/octave-forge/main/video/DESCRIPTION =================================================================== --- trunk/octave-forge/main/video/DESCRIPTION 2010-08-05 10:35:19 UTC (rev 7496) +++ trunk/octave-forge/main/video/DESCRIPTION 2010-08-05 16:01:04 UTC (rev 7497) @@ -2,7 +2,7 @@ Version: 1.0.2 Date: 2009-05-03 Author: Stefan van der Walt, Roman Stanchak -Maintainer: Xavier Delacour +Maintainer: The Octave Community Title: Video functions Description: Implements addframe, avifile, aviinfo, and aviread, using ffmpeg. (and approximately conforms to Matlab interface) Depends: octave (>= 2.9.12) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pau...@us...> - 2010-09-01 00:52:34
|
Revision: 7621 http://octave.svn.sourceforge.net/octave/?rev=7621&view=rev Author: paulsundvall Date: 2010-09-01 00:52:27 +0000 (Wed, 01 Sep 2010) Log Message: ----------- added a new package for reading and writing FITS images, written by Dirk Schmidt Added Paths: ----------- trunk/octave-forge/main/fits/ trunk/octave-forge/main/fits/COPYING trunk/octave-forge/main/fits/DESCRIPTION trunk/octave-forge/main/fits/INDEX trunk/octave-forge/main/fits/Makefile trunk/octave-forge/main/fits/README trunk/octave-forge/main/fits/configure trunk/octave-forge/main/fits/src/ trunk/octave-forge/main/fits/src/Makefile trunk/octave-forge/main/fits/src/read_fits_image.cc trunk/octave-forge/main/fits/src/save_fits_image.cc trunk/octave-forge/main/fits/src/save_fits_image_multi_ext.cc Added: trunk/octave-forge/main/fits/COPYING =================================================================== --- trunk/octave-forge/main/fits/COPYING (rev 0) +++ trunk/octave-forge/main/fits/COPYING 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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 licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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 is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. Added: trunk/octave-forge/main/fits/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fits/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/fits/DESCRIPTION 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,15 @@ +Name: FITS +Version: 1.0.0 +Date: 2010-08-23 +Author: Dirk Schmidt +Maintainer: Dirk Schmidt +Title: Reading and writing FITS (Flexible Image Transport System) files. +Description: The Octave-FITS package provides functions for + reading, and writing FITS (Flexible Image Transport System) files. The package supports + uses the libcfitsio library. +Depends: octave (>= 2.9.10) +Autoload: no +BuildRequires: libcfitsio-dev +SystemRequirements: libcfitsio +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/fits/INDEX =================================================================== --- trunk/octave-forge/main/fits/INDEX (rev 0) +++ trunk/octave-forge/main/fits/INDEX 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,6 @@ +FITS >> reading and writing FITS files +Reading and writing FITS files + read_fits_image + save_fits_image + save_fits_image_multi_ext + Added: trunk/octave-forge/main/fits/Makefile =================================================================== --- trunk/octave-forge/main/fits/Makefile (rev 0) +++ trunk/octave-forge/main/fits/Makefile 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,4 @@ +include ../../Makeconf + + +PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard src/*) Added: trunk/octave-forge/main/fits/README =================================================================== --- trunk/octave-forge/main/fits/README (rev 0) +++ trunk/octave-forge/main/fits/README 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,6 @@ +On Debian Lenny, pkgconfig does not work because of a missing file +in the fitsio library. You can solve this by replacing the +MKOCT_FLAGS = $(shell pkg-config --libs cfitsio) with +MKOCT_FLAGS = -lcfitsio +in src/Makefile + Added: trunk/octave-forge/main/fits/configure =================================================================== --- trunk/octave-forge/main/fits/configure (rev 0) +++ trunk/octave-forge/main/fits/configure 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,7 @@ +#! /bin/sh -f + +if [ -e src/configure ]; then + cd src + ./configure $* +fi + Property changes on: trunk/octave-forge/main/fits/configure ___________________________________________________________________ Added: svn:executable + * Added: trunk/octave-forge/main/fits/src/Makefile =================================================================== --- trunk/octave-forge/main/fits/src/Makefile (rev 0) +++ trunk/octave-forge/main/fits/src/Makefile 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,10 @@ +MKOCT_FLAGS = $(shell pkg-config --libs cfitsio) + +all: read_fits_image.oct save_fits_image.oct save_fits_image_multi_ext.oct + +clean: + rm -f *.oct *.o + +%.oct: %.cc + mkoctfile --verbose -Wall $(MKOCT_FLAGS) $< + Added: trunk/octave-forge/main/fits/src/read_fits_image.cc =================================================================== --- trunk/octave-forge/main/fits/src/read_fits_image.cc (rev 0) +++ trunk/octave-forge/main/fits/src/read_fits_image.cc 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,171 @@ +/* + * + * To install, execute + * $ mkoctfile -lcfitsio read_fits_image.cc + * and copy read_fits_image.oct to a directory which is read by octave. + * + * This program is licensed under the terms of the GNU General Public License version 2. + */ +#include <iostream> +#include <sstream> +#include <octave/oct.h> + +extern "C" +{ +#include "fitsio.h" +} + +static bool any_bad_argument( const octave_value_list& args ); + +DEFUN_DLD( read_fits_image, args, nargout, +"-*- texinfo -*-\n\ +@deftypefn {Function File} {[@var{image},@var{header}]} = read_fits_image(@var{filename},@var{hdu})\n\ +Read FITS file @var{filename} and return image data in @var{image}, and the image header in @var{header}.\n\ +\n\ +@var{filename} can be concatenated with filters provided by libcfitsio. See:\ +<http://heasarc.gsfc.nasa.gov/docs/software/fitsio/c/c_user/node81.html>\ +\n\n\ +Examples:\n\ +\n\ +1. If the file contains a single image, read_fits_image( \"filename\" ) will store the data into a 2d double matrix.\n\ +\n\ +2. If the file contains a data cube (continous data, no exentions!), read_fits_image( \"filename\" ) will store the whole data cube into a 3d array.\n\ +\n\ +3. If the file contains a data cube, then read_fits_image( \"filename[*,*,2:5]\" ) will read the 2nd, 3rd, 4th, and 5th image, and store them into a 3d array.\n\ +\n\ +4. If the file contains multiple image extensions, then read_fits_image( \"filename[5]\" ) will read the 5th image. This is equivalent to read_fits_image( \"filename\", 5 ).\n\ +\n\ +NOTE: It's only possible to read one extension (HDU) at a time, i.e. multi-extension files need to be read in a loop.\n\ +\n\ +@seealso{save_fits_image, save_fits_image_multi_ext}\ +Copyright (c) 2009-2010, Dirk Schmidt <fs@@dirk-schmidt.net>\ +@end deftypefn") +{ + if ( any_bad_argument(args) ) + return octave_value_list(); + + octave_value fitsimage; // the octave container for the image data to be read by this function + std::string infile = args(0).string_value (); + + if ( args.length()==2 ) + { + std::ostringstream stream; + stream << infile << "[" << int(args(1).scalar_value()) << "]"; + infile = stream.str(); + } + + int status=0; // must be initialized with zero (I consider this to be a bug in libcfitsio). + // status seems not to be set to zero after successful API calls + + // Open FITS file and position to first HDU containing an image + fitsfile *fp; + if ( fits_open_image( &fp, infile.c_str(), READONLY, &status) > 0 ) + { + fprintf( stderr, "Could not open file %s.\n", infile.c_str() ); + fits_report_error( stderr, status ); + return fitsimage = -1; + } + + // Gather informations about the image + int bits_per_pixel, num_axis; + long int sz_axes[3]; + memset( sz_axes, 0, sizeof(sz_axes) ); + if( fits_get_img_param( fp, 3, &bits_per_pixel, &num_axis, sz_axes, &status) > 0 ) + { + fprintf( stderr, "Could not get image information.\n" ); + fits_report_error( stderr, status ); + return fitsimage = -1 ; + } + if( 2 == num_axis ) + sz_axes[2] = 1; + + //std::cerr << bits_per_pixel << " " << num_axis << " " << sz_axes[0] << " " << sz_axes[1] << " " << sz_axes[2] << std::endl; + + // Read image header + int num_keys, key_pos; + char card[FLEN_CARD]; /* standard string lengths defined in fitsioc.h */ + string_vector header; + if( fits_get_hdrpos( fp, &num_keys, &key_pos, &status) > 0 ) // get number of keywords + { + fprintf( stderr, "Could not get number of header keywords\n" ) ; + fits_report_error( stderr, status ); + } + for( int i = 1; i <= num_keys; i++ ) // get the keywords + { + if ( fits_read_record( fp, i, card, &status ) ) + { + fprintf( stderr, "Could not read header keyword\n" ); + fits_report_error( stderr, status ); + } + else + { + header.append( std::string(card) ); + } + } + header.append( std::string("END\n") ); /* terminate listing with END */ + + // Read image data and write it to an octave MArrayN type + dim_vector dims; + if( 2 == num_axis ) + dims = dim_vector( sz_axes[0], sz_axes[1] ); + else + dims = dim_vector( sz_axes[0], sz_axes[1], sz_axes[2] ); + MArrayN<double> image_data( dims ); // a octace double-type array + + int type = TDOUBLE; // convert read data to double (done by libcfitsio) + long fpixel[3] = {1,1,1}; // start at first pixel in all axes + int anynul; + if( fits_read_pix( fp, type, fpixel, sz_axes[0]*sz_axes[1]*sz_axes[2], NULL, image_data.fortran_vec(), + &anynul, &status ) > 0 ) + { + fprintf( stderr, "Could not read image.\n" ); + fits_report_error( stderr, status ); + return fitsimage = -1; + } + + // Close FITS file + if( fits_close_file(fp, &status) > 0 ) + { + fprintf( stderr, "Could not close file %s.\n", infile.c_str() ); + fits_report_error( stderr, status ); + } + + octave_value_list retlist; + retlist(0) = image_data; + retlist(1) = header; + + return retlist; +} + +static bool any_bad_argument( const octave_value_list& args ) +{ + if ( args.length() < 1 || args.length() > 2 ) + { + error( "read_fits_image: number of arguments - expecting read_fits_image( filename ) or read_fits_image( filename, extension )" ); + return true; + } + + if( !args(0).is_string() ) + { + error( "read_fits_image: filename (string) expected for first argument" ); + return true; + } + + if( 2 == args.length() ) + { + if( !args(1).is_scalar_type() ) + { + error( "read_fits_image: second argument must be a positive scalar integer value" ); + return true; + } + double val = args(1).double_value(); + if( (D_NINT( val ) != val) || (val < 1) ) + { + error( "read_fits_image: second argument must be a positive scalar integer value" ); + return true; + } + + } + + return false; +} Added: trunk/octave-forge/main/fits/src/save_fits_image.cc =================================================================== --- trunk/octave-forge/main/fits/src/save_fits_image.cc (rev 0) +++ trunk/octave-forge/main/fits/src/save_fits_image.cc 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,150 @@ +#include <iostream> +#include <sstream> +#include <octave/oct.h> + +extern "C" +{ +#include "fitsio.h" +} + +static bool any_bad_argument( const octave_value_list& args ); + +DEFUN_DLD( save_fits_image, args, nargout, +"-*- texinfo -*-\n\ + @deftypefn {Function File} save_fits_image(@var{filename}, @var{image}, @var{bit_per_pixel})\n\ + Write @var{IMAGE} to FITS file @var{filename}.\n\n\ + Datacubes will be saved with NAXIS=3.\n\n\ + The optional parameter @var{bit_per_pixel} specifies the data type of the pixel values. Accepted string values are BYTE_IMG, SHORT_IMG, LONG_IMG, LONGLONG_IMG, FLOAT_IMG, and DOUBLE_IMG (default). Alternatively, corresponding numbers may be passed, i.e. 8, 16, 32, 64, -32, and -64.\n\n\ + Use a preceding exclamation mark (!) in the filename to overwirte an existing file.\n\n\ + Lossless file compression can be used by adding the suffix '.gz' to the filename.\n\n\ + @seealso{save_fits_image_multi_ext, read_fits_image}\ + Copyright (c) 2009-2010, Dirk Schmidt <fs@@dirk-schmidt.net>\ + @end deftypefn") +{ + if ( any_bad_argument(args) ) + return octave_value_list(); + + octave_value fitsimage; + std::string outfile = args(0).string_value (); + + + NDArray image = args(1).array_value(); + dim_vector dims = image.dims(); + int num_axis = dims.length(); + OCTAVE_LOCAL_BUFFER ( long int, sz_axes, num_axis ); + long int len = 1; + for( int i=0; i<num_axis; i++ ) + { + sz_axes[i] = dims(i); + len *= dims(i); + } + + int bitperpixel = DOUBLE_IMG; + if( 3 == args.length() ) + { + if( args(2).is_string() ) + { + if( args(2).string_value() == "BYTE_IMG" ) + bitperpixel = BYTE_IMG; + else if( args(2).string_value() == "SHORT_IMG" ) + bitperpixel = SHORT_IMG; + else if( args(2).string_value() == "LONG_IMG" ) + bitperpixel = LONG_IMG; + else if( args(2).string_value() == "LONGLONG_IMG" ) + bitperpixel = LONGLONG_IMG; + else if( args(2).string_value() == "FLOAT_IMG" ) + bitperpixel = FLOAT_IMG; + else if( args(2).string_value() == "DOUBLE_IMG" ) + bitperpixel = DOUBLE_IMG; + else + { + fprintf( stderr, "Invalid string value for 'bit_per_pixel': %s\n", args(2).string_value().c_str() ); + return octave_value_list(); + } + } + else if( args(2).is_scalar_type() ) + { + double val = args(2).double_value(); + if( (D_NINT( val ) == val) ) + { + if( BYTE_IMG == val ) + bitperpixel = BYTE_IMG; + else if( SHORT_IMG == val ) + bitperpixel = SHORT_IMG; + else if( LONG_IMG == val ) + bitperpixel = LONG_IMG; + else if( LONGLONG_IMG == val ) + bitperpixel = LONGLONG_IMG; + else if( FLOAT_IMG == val ) + bitperpixel = FLOAT_IMG; + else if( DOUBLE_IMG == val ) + bitperpixel = DOUBLE_IMG; + else + { + fprintf( stderr, "Invalid numeric value for 'bit_per_pixel': %f\n", val ); + return octave_value_list(); + } + } + } + else + { + fprintf( stderr, "Third parameter must be a valid string or a valid scalar value.\nSee 'help save_fits_image' for valid values.\n" ); + return octave_value_list(); + } + } + + int status=0; // must be initialized with zero (I consider this to be a bug in libcfitsio). + // status seems not to be set to zero after successful API calls + + // Open FITS file + fitsfile *fp; + if ( fits_create_file( &fp, outfile.c_str(), &status) > 0 ) + { + fprintf( stderr, "Could not open file %s.\n", outfile.c_str() ); + fits_report_error( stderr, status ); + return octave_value_list(); + } + + long fpixel = 1; + if( fits_create_img( fp, bitperpixel, num_axis, sz_axes, &status ) > 0 ) + { + fprintf( stderr, "Could not create HDU.\n" ); + fits_report_error( stderr, status ); + return octave_value_list(); + } + + if( fits_write_img( fp, TDOUBLE, fpixel, len, image.fortran_vec() , &status ) > 0 ) + { + fprintf( stderr, "Could not write image data.\n" ); + fits_report_error( stderr, status ); + return octave_value_list(); + } + + + // Close FITS file + if( fits_close_file(fp, &status) > 0 ) + { + fprintf( stderr, "Could not close file %s.\n", outfile.c_str() ); + fits_report_error( stderr, status ); + } + + return octave_value_list(); +} + +static bool any_bad_argument( const octave_value_list& args ) +{ + if ( args.length() < 2 || args.length() > 3 ) + { + error( "save_fits_image: number of arguments - expecting save_fits_image( filename, image ) or save_fits_image( filename, image, bitsperpixel )" ); + return true; + } + + if( !args(0).is_string() ) + { + error( "save_fits_image: filename (string) expected for first argument" ); + return true; + } + + + return false; +} Added: trunk/octave-forge/main/fits/src/save_fits_image_multi_ext.cc =================================================================== --- trunk/octave-forge/main/fits/src/save_fits_image_multi_ext.cc (rev 0) +++ trunk/octave-forge/main/fits/src/save_fits_image_multi_ext.cc 2010-09-01 00:52:27 UTC (rev 7621) @@ -0,0 +1,157 @@ +#include <iostream> +#include <sstream> +#include <octave/oct.h> + +extern "C" +{ +#include "fitsio.h" +} + +static bool any_bad_argument( const octave_value_list& args ); + +DEFUN_DLD( save_fits_image_multi_ext, args, nargout, +"-*- texinfo -*-\n\ + @deftypefn {Function File} save_fits_image_multi_ext(@var{filename}, @var{image}, @var{bit_per_pixel})\n\ + Write @var{IMAGE} to FITS file @var{filename}.\n\n\ + Datacubes will be saved as multi-image extensions.\n\n\ + The optional parameter @var{bit_per_pixel} specifies the data type of the pixel values. Accepted string values are BYTE_IMG, SHORT_IMG, LONG_IMG, LONGLONG_IMG, FLOAT_IMG, and DOUBLE_IMG (default). Alternatively, corresponding numbers may be passed, i.e. 8, 16, 32, 64, -32, and -64.\n\n\ + Use a preceding exclamation mark (!) in the filename to overwirte an existing file.\n\n\ + Lossless file compression can be used by adding the suffix '.gz' to the filename.\n\n\ + @seealso{save_fits_image, read_fits_image}\ + Copyright (c) 2009-2010, Dirk Schmidt <fs@@dirk-schmidt.net>\ + @end deftypefn") +{ + if ( any_bad_argument(args) ) + return octave_value_list(); + + octave_value fitsimage; + std::string outfile = args(0).string_value (); + + int num_axis = 2; + NDArray image = args(1).array_value(); + long int sz_axes[2]; + sz_axes[0] = image.dim1(); + sz_axes[1] = image.dim2(); + int num_images = image.dim3(); + + //std::cerr << "num_images " << num_images << std::endl; + + int bitperpixel = DOUBLE_IMG; + if( 3 == args.length() ) + { + if( args(2).is_string() ) + { + if( args(2).string_value() == "BYTE_IMG" ) + bitperpixel = BYTE_IMG; + else if( args(2).string_value() == "SHORT_IMG" ) + bitperpixel = SHORT_IMG; + else if( args(2).string_value() == "LONG_IMG" ) + bitperpixel = LONG_IMG; + else if( args(2).string_value() == "LONGLONG_IMG" ) + bitperpixel = LONGLONG_IMG; + else if( args(2).string_value() == "FLOAT_IMG" ) + bitperpixel = FLOAT_IMG; + else if( args(2).string_value() == "DOUBLE_IMG" ) + bitperpixel = DOUBLE_IMG; + else + { + fprintf( stderr, "Invalid string value for 'bit_per_pixel': %s\n", args(2).string_value().c_str() ); + return octave_value_list(); + } + } + else if( args(2).is_scalar_type() ) + { + double val = args(2).double_value(); + if( (D_NINT( val ) == val) ) + { + if( BYTE_IMG == val ) + bitperpixel = BYTE_IMG; + else if( SHORT_IMG == val ) + bitperpixel = SHORT_IMG; + else if( LONG_IMG == val ) + bitperpixel = LONG_IMG; + else if( LONGLONG_IMG == val ) + bitperpixel = LONGLONG_IMG; + else if( FLOAT_IMG == val ) + bitperpixel = FLOAT_IMG; + else if( DOUBLE_IMG == val ) + bitperpixel = DOUBLE_IMG; + else + { + fprintf( stderr, "Invalid numeric value for 'bit_per_pixel': %f\n", val ); + return octave_value_list(); + } + } + } + else + { + fprintf( stderr, "Third parameter must be a valid string or a valid scalar value.\nSee 'help save_fits_image' for valid values.\n" ); + return octave_value_list(); + } + } + + int status=0; // must be initialized with zero (I consider this to be a bug in libcfitsio). + // status seems not to be set to zero after successful API calls + + // Open FITS file + fitsfile *fp; + if ( fits_create_file( &fp, outfile.c_str(), &status) > 0 ) + { + fprintf( stderr, "Could not open file %s.\n", outfile.c_str() ); + fits_report_error( stderr, status ); + return fitsimage = -1; + } + + long fpixel = 1; + for( int i=0; i<num_images; i++ ) + { + std::cerr << "image: " << i << std::endl; + if( fits_create_img( fp, bitperpixel, num_axis, sz_axes, &status ) > 0 ) + { + fprintf( stderr, "Could not create HDU.\n" ); + fits_report_error( stderr, status ); + return octave_value_list(); + } + char keyname[9] = "XTENSION"; + char value[6] = "IMAGE"; + char comment[16] = "IMAGE extension"; + if( fits_write_key_str( fp, keyname, value, comment, &status ) > 0 ) + { + fprintf( stderr, "Could not write XTENSION to HDU.\n" ); + fits_report_error( stderr, status ); + return octave_value_list(); + } + if( fits_write_img( fp, TDOUBLE, fpixel, sz_axes[0]*sz_axes[1], image.fortran_vec() + i*sz_axes[0]*sz_axes[1], &status ) > 0 ) + { + fprintf( stderr, "Could not write image data.\n" ); + fits_report_error( stderr, status ); + return octave_value_list(); + } + } + + // Close FITS file + if( fits_close_file(fp, &status) > 0 ) + { + fprintf( stderr, "Could not close file %s.\n", outfile.c_str() ); + fits_report_error( stderr, status ); + } + + return octave_value_list(); +} +static bool any_bad_argument( const octave_value_list& args ) +{ + if ( args.length() < 2 || args.length() > 3 ) + { + error( "save_fits_image_multi_ext: number of arguments - expecting save_fits_image_multi_ext( filename, image ) or save_fits_image_multi_ext( filename, image, bitsperpixel )" ); + return true; + } + + if( !args(0).is_string() ) + { + error( "save_fits_image_multi_ext: filename (string) expected for first argument" ); + return true; + } + + + return false; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pau...@us...> - 2010-09-17 14:17:29
|
Revision: 7746 http://octave.svn.sourceforge.net/octave/?rev=7746&view=rev Author: paulsundvall Date: 2010-09-17 14:17:22 +0000 (Fri, 17 Sep 2010) Log Message: ----------- added new toolbox for graph related functions Added Paths: ----------- trunk/octave-forge/main/graph/ trunk/octave-forge/main/graph/COPYING trunk/octave-forge/main/graph/DESCRIPTION trunk/octave-forge/main/graph/INDEX trunk/octave-forge/main/graph/inst/ trunk/octave-forge/main/graph/inst/toposort.m Copied: trunk/octave-forge/main/graph/COPYING (from rev 7745, trunk/octave-forge/main/sockets/COPYING) =================================================================== --- trunk/octave-forge/main/graph/COPYING (rev 0) +++ trunk/octave-forge/main/graph/COPYING 2010-09-17 14:17:22 UTC (rev 7746) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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 licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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 is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. Property changes on: trunk/octave-forge/main/graph/COPYING ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:mergeinfo + Copied: trunk/octave-forge/main/graph/DESCRIPTION (from rev 7745, trunk/octave-forge/main/sockets/DESCRIPTION) =================================================================== --- trunk/octave-forge/main/graph/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/graph/DESCRIPTION 2010-09-17 14:17:22 UTC (rev 7746) @@ -0,0 +1,12 @@ +Name: graph +Version: 0.0.0 +Date: 2010-09-17 +Author: Paul Dreik <sl...@pa...> +Maintainer: Paul Dreik <sl...@pa...> +Title: graph +Description: Functions related to graph theory +Depends: octave +Autoload: no +License: GPL version 2 or later +Url: http://octave.sf.net +SVNRelease: 0 Property changes on: trunk/octave-forge/main/graph/DESCRIPTION ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:mergeinfo + Copied: trunk/octave-forge/main/graph/INDEX (from rev 7745, trunk/octave-forge/main/sockets/INDEX) =================================================================== --- trunk/octave-forge/main/graph/INDEX (rev 0) +++ trunk/octave-forge/main/graph/INDEX 2010-09-17 14:17:22 UTC (rev 7746) @@ -0,0 +1,3 @@ +graph >> functions related to graph theory +Sorting + toposort Property changes on: trunk/octave-forge/main/graph/INDEX ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:mergeinfo + Added: trunk/octave-forge/main/graph/inst/toposort.m =================================================================== --- trunk/octave-forge/main/graph/inst/toposort.m (rev 0) +++ trunk/octave-forge/main/graph/inst/toposort.m 2010-09-17 14:17:22 UTC (rev 7746) @@ -0,0 +1,119 @@ +function nodelist=toposort(C); +%function nodelist=toposort(C) +%This is a function which carries out a topological sort of a graph. See +%http://en.wikipedia.org/wiki/Topological_sorting. +%Given an input graph C, it outputs an ordered list of nodes +%nodelist which is topologically sorted. +% +% A demo is available by running toposort('demo'). +% The input is a vector cell array C which holds the graph. For each +% node i, C{i} is a vector of nodes which node i depends on. A cell may +% be empty. +% +%the input is a linear cell array. each cell should be a vector +%containing the indices it depends on. +% +%The output is a column vector of indices in C, sorted in +%topological order. +% +%Author Paul Dreik 20101008 +%License: GPL v2 or later, at your option. + +if 0==nargin + error('please supply one input argument'); +end + +if isequal(C,'demo') + %this is the example on wikipedia as per 20100908 + C=cell(11,1); + C{11}=[7 5]; + C{8}=[7 3]; + C{2}=11; + C{9}=[8 11]; + C{10}=[3 11]; +end + +debug=false; + +%go through the list and make sure it is sorted + + +%L - Empty list that will contain the sorted elements +L=[]; +%S - Set of all nodes with no incoming edges +S=[]; +for i=1:length(C) + if isempty(C{i}) + S(end+1)=i; + else + %while we are at it, make sure the incoming graph is sorted + %properly + p=unique(C{i}); + C{i}=p; + %check that the indices are in a valid range 1 + %to length(C). This check checks for nan as well. + if ~all(p>=1 & p<=length(C)) + error('parent list for node %d contains nodes outside valid range.',i); + end + end +end +if debug + disp(S) +end + +%S is sorted from lowest node id to highest. This way nodes with +%low indices will be output prior to higher indices. + +%while S is non-empty do +while ~isempty(S) + % remove a node n from S + n=S(1); + S=S(2:end); + if debug + printf('removing node %d from S. S is now\n',n); + disp(S); + end + % insert n into L + L(end+1)=n; + if debug + printf('inserting node %d into L. L is now\n',n); + disp(L); + end + % for each node m with an edge e from n to m do + % remove edge e from the graph + for i=1:length(C) + m=i; + children=C{m}; + if any(children==n) + children(find(children==n))=[]; + C{m}=children; + if debug + printf('removing link %d to %d\n',n,m); + disp(C); + end + + % if m has no other incoming edges then + % insert m into S + if isempty(C{m}) + S(end+1)=m; + S=sort(S); + if debug + printf('node %d now has no incoming edges. S is now\n',m); + disp(S); + end + end + end + end +end + +%if graph has edges then +% output error message (graph has at least one cycle) +for i=1:length(C) + if ~isempty(C{i}) + error('the graph has at least one cycle'); + end +end +%else +% output message (proposed topologically sorted order: L) + +nodelist=L(:); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gia...@us...> - 2011-02-06 17:36:09
|
Revision: 8093 http://octave.svn.sourceforge.net/octave/?rev=8093&view=rev Author: gianvito Date: 2011-02-06 17:36:01 +0000 (Sun, 06 Feb 2011) Log Message: ----------- Initial commit into SVN. Added Paths: ----------- trunk/octave-forge/main/package/ trunk/octave-forge/main/package/COPYING trunk/octave-forge/main/package/DESCRIPTION trunk/octave-forge/main/package/INDEX trunk/octave-forge/main/package/inst/ trunk/octave-forge/main/package/inst/fl_cartproduct.m trunk/octave-forge/main/package/inst/fl_complement.m trunk/octave-forge/main/package/inst/fl_intersect.m trunk/octave-forge/main/package/inst/fl_union.m trunk/octave-forge/main/package/src/ trunk/octave-forge/main/package/src/Makefile trunk/octave-forge/main/package/src/fl_compose.cc Added: trunk/octave-forge/main/package/COPYING =================================================================== --- trunk/octave-forge/main/package/COPYING (rev 0) +++ trunk/octave-forge/main/package/COPYING 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,166 @@ + GNU LESSER 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. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + Added: trunk/octave-forge/main/package/DESCRIPTION =================================================================== --- trunk/octave-forge/main/package/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/package/DESCRIPTION 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,10 @@ +Name: fl-core +Version: 1.0 +Date: 2011-12-01 +Author: Gianvito Pio and Piero Molino +Title: Fuzzy Logic Core for Octave +Maintainer: Gianvito Pio (pio...@gm...) and Piero Molino (pie...@gm...) +Description: The package contains code for basic functions in Fuzzy Logic for Octave. +Autoload: yes +License: GPL v2 +Depends: octave (>= 2.9.7) Added: trunk/octave-forge/main/package/INDEX =================================================================== --- trunk/octave-forge/main/package/INDEX (rev 0) +++ trunk/octave-forge/main/package/INDEX 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,8 @@ +fl-core >> Fuzzy Logic Core +Set Operations + fl_intersect + fl_union + fl_complement + fl_cartproduct +Function Composition + fl_compose Added: trunk/octave-forge/main/package/inst/fl_cartproduct.m =================================================================== --- trunk/octave-forge/main/package/inst/fl_cartproduct.m (rev 0) +++ trunk/octave-forge/main/package/inst/fl_cartproduct.m 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,62 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + + +function res = fl_cartproduct(A, B, N= "min") +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_cartproduct(@var{A}, @var{B}) +## @deftypefnx{Function File} {@var{res} = } fl_cartproduct(@var{A}, @var{B}, @var{N}) +## +## Returns the bi-dimensional Fuzzy Logic cartesian product. @var{A} and @var{B} must be both vectors. +## The argument @var{N} allows to specify a custom function. So it can be: +## @itemize @minus +## @item 'min': use the minimum function (same as fl_cartproduct(A,B)); +## @item 'prod': use the product function; +## @item 'max': use the maximum function; +## @item 'sum': use the probabilistic sum function; +## @item function_handle: a user-defined function. +## @end itemize +## +## Note that only the predefined functions will be calculated rapidly and in +## multithread mode. Using a user-defined function will result +## in a long time calculation. +## @end deftypefn + + + % Check the argument number and type + if (nargin !=2 && nargin !=3) + print_usage(); + elseif (!(isvector(A) && isvector(B))) + error("fl_cartproduct: the first two arguments must be vectors"); + endif + + % Transpose the vectors if necessary (the first as column vector and the second as row vector) + if (rows(A)<columns(A)) + A = A'; + endif + if(rows(B)>columns(B)) + B = B'; + endif + + res = fl_compose(A,B,N); + +endfunction Property changes on: trunk/octave-forge/main/package/inst/fl_cartproduct.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/package/inst/fl_complement.m =================================================================== --- trunk/octave-forge/main/package/inst/fl_complement.m (rev 0) +++ trunk/octave-forge/main/package/inst/fl_complement.m 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,50 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + +function res = fl_complement(A) +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_complement(@var{A}) +## +## Returns the Fuzzy Logic complement (1 - @var{A}). @var{A} can be a row vector or a column vector. +## @end deftypefn + + % Check the argument number + if (nargin != 1) + print_usage(); + endif + + % Check the argument type + if (isvector(A)) + + % Check if the input vector is row vector or column vector + if ((rows(A) == 1) && (columns(A) >= 1)) + % Calculate the complement as row vector + res = ones(1, length(A)) - A; + else + % Calculate the complement as column vector + res = ones(length(A), 1) - A; + endif + else + error ("fl_complement: expecting vector argument"); + endif + +endfunction Property changes on: trunk/octave-forge/main/package/inst/fl_complement.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/package/inst/fl_intersect.m =================================================================== --- trunk/octave-forge/main/package/inst/fl_intersect.m (rev 0) +++ trunk/octave-forge/main/package/inst/fl_intersect.m 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,67 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + +function res = fl_intersect(A, B, T = "min") +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_intersect(@var{A}, @var{B}) +## @deftypefnx{Function File} {@var{res} = } fl_intersect(@var{A}, @var{B}, @var{T}) +## +## Returns the Fuzzy Logic intersection. @var{A} and @var{B} must be both row vectors or both column vectors. +## +## The argument @var{T} allows to specify a custom T-Norm function. So it can be: +## @itemize @minus +## @item 'min': use the minimum T-Norm (same as fl_intersect(@var{A},@var{B})); +## @item 'prod': use the product T-Norm; +## @item function_handle: a user-defined function as T-Norm. +## @end itemize +## +## Note that only minimum and product T-Norm will be calculated rapidly and in +## multithread mode. Using a user-defined function as T-Norm will result +## in a long time calculation. +## @end deftypefn + + + % Check the argument number and type + if (!(nargin == 2 || nargin == 3)) + print_usage(); + endif + if (!(isvector(A) && isvector(B))) + error ("fl_intersect: expecting vector arguments"); + endif + + % Check dimension compatibility + if (!(length(A) == length(B))) + error ("fl_intersect: expecting conformant vector arguments"); + endif + + % Check if both vectors are row vectors or column vectors + if ((columns(A) >= rows(A)) && (columns(B) >= rows(B))) + % Calculate the composition function with the custom T-Norm (defalut is min) + res = transpose(fl_compose(transpose(A), B, true, T)); + elseif ((rows(A) >= columns(A)) && (rows(B) >= columns(B))) + % Calculate the composition function with the custom T-Norm (defalut is min) + res = fl_compose(A, transpose(B), true, T); + else + error ("fl_intersect: expecting vector arguments to be both column vectors or both row vectors"); + endif + +endfunction Property changes on: trunk/octave-forge/main/package/inst/fl_intersect.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/package/inst/fl_union.m =================================================================== --- trunk/octave-forge/main/package/inst/fl_union.m (rev 0) +++ trunk/octave-forge/main/package/inst/fl_union.m 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,68 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + +function res = fl_union(A, B, S = "max") +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_union(@var{A}, @var{B}) +## @deftypefnx{Function File} {@var{res} = } fl_union(@var{A}, @var{B}, @var{S}) +## +## Returns the Fuzzy Logic union. @var{A} and @var{B} must be both row vectors or both column vectors. +## +## The argument @var{S} allows to specify a custom S-Norm function. So it can be: +## @itemize @minus +## @item 'max': use the maximum S-Norm (same as fl_union(@var{A}, @var{B})); +## @item 'sum': use the probabilistic sum S-Norm; +## @item function_handle: a user-defined function as S-Norm. +## @end itemize +## +## Note that only maximum and probabilistic sum S-Norm will be calculated rapidly and in +## multithread mode. Using a user-defined function as S-Norm will result +## in a long time calculation. +## @end deftypefn + + + + % Check the argument number and type + if (!(nargin == 2 || nargin == 3)) + print_usage(); + endif + if (!(isvector(A) && isvector(B))) + error ("fl_union: expecting vector arguments"); + endif + + % Check dimension compatibility + if (!(length(A) == length(B))) + error ("fl_union: expecting conformant vector arguments"); + endif + + % Check if both vectors are row vectors or column vectors + if ((columns(A) >= rows(A)) && (columns(B) >= rows(B))) + % Calculate the composition function with the custom S-Norm (defalut is max) + res = transpose(fl_compose(transpose(A), B, true, S)); + elseif ((rows(A) >= columns(A)) && (rows(B) >= columns(B))) + % Calculate the composition function with the custom S-Norm (defalut is max) + res = fl_compose(A, transpose(B), true, S); + else + error ("fl_union: expecting vector arguments to be both column vectors or both row vectors"); + endif + +endfunction Property changes on: trunk/octave-forge/main/package/inst/fl_union.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/package/src/Makefile =================================================================== --- trunk/octave-forge/main/package/src/Makefile (rev 0) +++ trunk/octave-forge/main/package/src/Makefile 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,16 @@ +OCT = fl_compose.oct +SRC := $(OCT:.oct=.cc) +BASE := $(OCT:.oct=) +ifdef COMSPEC + ADDPARAM := -lpthreadVC2 +endif + +.phony: all +all: $(OCT) + +%.oct: %.cc + mkoctfile -s $< $(ADDPARAM) + +.phony: clean +clean: + $(RM) $(PART) *.o *.oct octave-core *~ Property changes on: trunk/octave-forge/main/package/src/Makefile ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/package/src/fl_compose.cc =================================================================== --- trunk/octave-forge/main/package/src/fl_compose.cc (rev 0) +++ trunk/octave-forge/main/package/src/fl_compose.cc 2011-02-06 17:36:01 UTC (rev 8093) @@ -0,0 +1,782 @@ +/* Copyright(C) 2011 Gianvito Pio, Piero Molino +* Contact Email: pio...@gm... pie...@gm... +* +* fl-core - Fuzzy Logic Core functions for Octave +* This file is part of fl-core. +* +* fl-core is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* fl-core 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with fl-core. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <octave/oct.h> +#include <octave/parse.h> +#include <pthread.h> + +#define HELP \ +"-*- texinfo -*-\n\ + @deftypefn{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}) \n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{LOCK})\n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{T})\n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{T}, @var{S})\n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{LOCK}, @var{T})\n\ + Returns the T-Norm / S-Norm composition as basic inference mechanism of Fuzzy Logic. By default, it calculates the max-min composition.\n\n\ +@var{A} and @var{B} must be matrices with conformant dimensions as in matrix product. If they are both full matrices or mixed (one full and one sparse), a full matrix will be returned. If they are both sparse matrices, a sparse matrix will be returned. However the best computation method (sparse or full) is optimally chosen at runtime.\n\n\ +When true, the boolean @var{LOCK} option forces to calculate the diagonal results only and returns it as a column vector.\n\n\ +The arguments @var{T} and @var{S} allows to specify a custom T-Norm and S-Norm function respectively. They can be:\n\n\ +@itemize @minus \n\ +@item 'min': use the minimum function (default for T-Norm);\n\n\ +@item 'prod': use the product function;\n\n\ +@item 'max': use the maximum function (default for S-Norm);\n\n\ +@item 'sum': use the probabilistic sum function;\n\n\ +@item function_handle: a user-defined function (at most 2 arguments).\n\n\ +@end itemize\n\ +Note that only the predefined functions are calculated rapidly and in multithread mode. Using a user-defined function as T-Norm and/or S-Norm will result in a long time calculation.\n\n\ +Furthermore, no check is performed to be sure the provided functions have the T-Norm or S-Norm properties. The results will be correct as expected, but the semantic correctness is only a user responsibility.\n\ + @end deftypefn" + + + +#define MIN_ARG 2 +#define MAX_ARG 4 + +#define STR_MINNORM "min" +#define STR_PRONORM "prod" +#define STR_MAXNORM "max" +#define STR_SUMNORM "sum" + +#define ERR_INVALIDFUNC "fl_compose: the specified T-Norm or S-Norm function is invalid!\nPlease read help for details" +#define ERR_MATRIXSIZE "fl_compose: incompatible matrices dimensions\n" +#define ERR_MATRIXTYPE "fl_compose: the first two argument must be matrices\n" + + + +// Structure for thread arguments. Each thread will perform the computation between the start_index and end_index row. +struct threadArg +{ + int start_index; + int end_index; +}; + + +// Functions prototype declaration +float get_elem(float vec[], int row, int col,int numCols); +void set_elem(float vec[], int row, int col, int numCols, float elem); +int is_valid_function(octave_function *func); +void *thread_function(void *arg); +int get_available_cpus(); +int assign_default_func(octave_value arg, int tnorm); +int optimal_sparse(octave_value mat_a,octave_value mat_b); + +void (*compose)(octave_value_list); +void full_compose(octave_value_list args); +void sparse_compose(octave_value_list args); + +float (*calc_tnorm)(float,float); +float (*calc_snorm)(float,float); + +float func_min(float first, float second); +float func_prod(float first, float second); +float func_max(float first, float second); +float func_sum(float first, float second); + +float func_custom_tnorm(float first, float second); +float func_custom_snorm(float first, float second); + + +// T-Norm and S-Norm function pointers +octave_function *tnorm; +octave_function *snorm; + + +// Structure for the thread arguments +struct threadArg* thread_args = NULL; + +// Input and output matrices +float* a; +float* b; +float* c; + +// Sparse matrix output (for sparse composition) +SparseMatrix sparseC; + +// Matrices dimensions +long int rowsA,rowsB,colsA,colsB,rowsC,colsC; + +// Lock option. 1 = calculation executed only for the diagonal of the matrix +int lock_option; + +// The increment +int col_index_increment; + +// Number of threads that will be created +int num_threads; + + +// 0 = the input matrices are both full. A full output matrix will be produced. +// 1 = the input matrices are both sparse. A sparse output matrix will be produced. +int sparse_res; + + +// 0 = A full composition is performed. 1 = a sparse composition is performed +int sparse_composition; + + +// Indicate that a standard T-Norm (prod or min) and a S-Norm was specified (probabilistic sum or max) +int standard_norm; + + + +/* Main function - Check the arguments and call the compose method */ +DEFUN_DLD (fl_compose, args, nargout, HELP) +{ + int numargs = args.length(); // Arguments number + int specified_lockoption = 0; // 1 = the lock_option was specified in the arguments + + // Set the default values + lock_option = 0; + sparse_res = 0; + sparse_composition = 0; + standard_norm = 1; + + // Set the num_thread to the actual available CPU cores + num_threads = get_available_cpus(); + + // Set the lock_option to default value (0) + lock_option = 0; + + // Set the computation to default (full matrices) + compose = full_compose; + + // Set the T-Norm and S-Norm function pointer to default value (Minimum and Maximum) + calc_tnorm = func_min; + calc_snorm = func_max; + + + // Check if the argument number is correct + if(numargs < MIN_ARG || numargs > MAX_ARG) + { + print_usage(); + return octave_value_list(); + } + + + // Check if the first two arguments are matrices + if(!args(0).is_matrix_type() || !args(1).is_matrix_type()) + { + error(ERR_MATRIXTYPE); + return octave_value_list(); + } + + + // Check if the matrices are both both sparse and set the output matrix to sparse type + if(args(0).is_sparse_type() && args(1).is_sparse_type()) + sparse_res = 1; + + + // Analyze the third argument (can be the lock_option, a custom T-Norm or a default string for T-Norm) + if(numargs > 2) + { + // Check if the third argument is the lock_option. + if(args(2).is_bool_scalar()) + { + // Get the lock_option value + lock_option = args(2).int_value(); + specified_lockoption = 1; + } + + + // Check if the third argument is a function + else if(args(2).is_function_handle()) + { + // Check if the custom T-Norm function has at most two arguments + if(!is_valid_function(args(2).function_value())) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + else + { + // Set the custom T-Norm and force single thread mode + tnorm = args(2).function_value(); + calc_tnorm = func_custom_tnorm; + num_threads = 1; + standard_norm = 0; + } + } + + // Check if the third argument is a string and try to assign a default T-Norm + else if(!((args(2).is_sq_string() || args(2).is_dq_string()) && assign_default_func(args(2),1))) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + + + + + + // Analyze the fourth argument (can be a custom T-Norm, a default string for T-Norm or a custom S-Norm) + if(numargs > 3) + { + // Check if the fourth argument is a function + if(args(3).is_function_handle()) + { + if(specified_lockoption) + { + // Check if the custom T-Norm function has at most two arguments + if(!is_valid_function(args(3).function_value())) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + else + { + // Set the custom T-Norm and force single thread mode + tnorm = args(3).function_value(); + calc_tnorm = func_custom_tnorm; + num_threads = 1; + } + } + else + { + // Check if the custom S-Norm function has at most two arguments + if(!is_valid_function(args(3).function_value())) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + else + { + // Set the custom S-Norm and force single thread mode + snorm = args(3).function_value(); + calc_snorm = func_custom_snorm; + num_threads = 1; + } + } + standard_norm = 0; + } + + // Check if the fourth argument is a string (could be a default T-Norm) + else if (args(3).is_sq_string() || args(3).is_dq_string()) + { + if(specified_lockoption) + { + if (!assign_default_func(args(3),1)) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + else + { + if (!assign_default_func(args(3),0)) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + } + else + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + + + + + + // Get the dimensions of matrices + rowsA = args(0).matrix_value().dims()(0); + colsA = args(0).matrix_value().dims()(1); + rowsB = args(1).matrix_value().dims()(0); + colsB = args(1).matrix_value().dims()(1); + rowsC = rowsA; + colsC = colsB; + + // Check if the dimensions are compatible + if(colsA != rowsB) + { + error(ERR_MATRIXSIZE); + return octave_value_list(); + } + + + // If the matrices are really sparse, the S-Norm is a standard type, the lock_option is false and the matrices aren't vectors perform the sparse composition + // (Workaround for segmentation fault caused by sparse vector transposition) + if(standard_norm && !lock_option && rowsA != 1 && colsA != 1 && colsB != 1 && optimal_sparse(args(0),args(1))) + { + compose = sparse_compose; + sparse_composition = 1; + } + + + + + + // If the lock_option is true, the function will return a column vector. + // Sets proper output matrix dimensions and column index increment. + if(lock_option) + { + // A column index increment = colsB let the two FOR cycle to calculate only the first element + col_index_increment = colsB; + c = new float[rowsC]; + colsC = 1; + } + else + { + col_index_increment = 1; + c = new float[rowsC*colsC]; + } + + + // Start the matrix composition + compose(args); + + + // Compose the output result as an octave matrix (sparse or full, same as input matrices) + if(sparse_composition) + { + if(sparse_res) + return octave_value(sparseC); + else + return octave_value(sparseC.matrix_value()); + } + else + { + Matrix outMatrix(rowsC,colsC); + for(int i=0;i<rowsC;i++) + for(int j=0;j<colsC;j++) + outMatrix(i,j) = get_elem(c,i,j,colsC); + + if(sparse_res) + { + SparseMatrix spMatrix = SparseMatrix(outMatrix); + return octave_value(spMatrix); + } + else + return octave_value(outMatrix); + } + + + +} + + + + + + + + + + +// Calculate the S-Norm/T-Norm composition of full matrices (multi thread) +void full_compose(octave_value_list args) +{ + + // Initialize the first matrix + Matrix tempMatrix = args(0).matrix_value(); + a = new float[rowsA*colsA]; + for (int i=0; i<rowsA; i++) + for(int j=0; j<colsA;j++) + a[i*colsA+j] = tempMatrix(i,j); + + // Initialize the second matrix + tempMatrix = args(1).matrix_value(); + b = new float[rowsB*colsB]; + for (int i=0; i<rowsB; i++) + for(int j=0; j<colsB;j++) + b[i*colsB+j] = tempMatrix(i,j); + + + // Create the thread args array + thread_args = new threadArg[num_threads]; + + + // Define an array of threads + pthread_t th[num_threads]; + + // If the lock_option is true, the result will be a column vector of the dimension of the diagonal + // (the minimum between the rows of the matrix A and the columns of the matrix B) + if(lock_option) + { + rowsA = func_min(rowsA,colsB); + rowsC = rowsA; + } + + // Define the number interval of rows for each thread + int interval = rowsA / num_threads; + + int i; + // Define the threads + for (i=0; i<num_threads; i++) + { + // Set the proper row start_index and end_index in the thread argument + thread_args[i].start_index = i*interval; + thread_args[i].end_index = thread_args[i].start_index + interval; + + if(i == num_threads - 1) + thread_args[i].end_index = rowsA; + + // Start the thread + pthread_create(&th[i],NULL,thread_function, (void *) &thread_args[i]); + } + + void *ans1; + + // Wait the results from each thread + for(i=0; i<num_threads; i++) + pthread_join(th[i],&ans1); +} + + + + + + + + + +// Calculate the S-Norm/T-Norm composition of sparse matrices (single thread) +void sparse_compose(octave_value_list args) +{ + // Create constant versions of the input matrices to prevent them to be filled by zeros on reading. + // a is the const reference to the transpose of a because octave sparse matrices are column compressed + // (to cycle on the rows, we cycle on the columns of the transpose). + SparseMatrix atmp = args(0).sparse_matrix_value(); + const SparseMatrix a = atmp.transpose(); + const SparseMatrix b = args(1).sparse_matrix_value(); + + // Declare variables for the T-Norm and S-Norm values + float snorm_val; + float tnorm_val; + + // Initialize the result sparse matrix + sparseC = SparseMatrix((int)colsB, (int)rowsA, (int)(colsB*rowsA)); + + // Initialize the number of nonzero elements in the sparse matrix c + int nel = 0; + sparseC.xcidx(0) = 0; + + // Calculate the composition for each element + for (int i = 0; i < rowsC; i++) + { + for(int j = 0; j < colsC; j++) + { + + // Get the index of the first element of the i-th column of a transpose (i-th row of a) + // and the index of the first element of the j-th column of b + int ka = a.cidx(i); + int kb = b.cidx(j); + snorm_val = 0; + + // Check if the values of the matrix are really not 0 (it happens if the column of a or b hasn't any value) + // because otherwise the cidx(i) or cidx(j) returns the first nonzero element of the previous column + if(a(a.ridx(ka),i)!=0 && b(b.ridx(kb),j)!=0) + { + // Cicle on the i-th column of a transpose (i-th row of a) and j-th column of b + // From a.cidx(i) to a.cidx(i+1)-1 there are all the nonzero elements of the column i of a transpose (i-th row of a) + // From b.cidx(j) to b.cidx(j+1)-1 there are all the nonzero elements of the column j of b + while ((ka <= (a.cidx(i+1)-1)) && (kb <= (b.cidx(j+1)-1))) + { + + // If a.ridx(ka) == b.ridx(kb) is true, then there's a nonzero value on the same row + // so there's a k for that a'(k, i) (equals to a(i, k)) and b(k, j) are both nonzero + if (a.ridx(ka) == b.ridx(kb)) + { + tnorm_val = calc_tnorm(a.data(ka), b.data(kb)); + snorm_val = calc_snorm(snorm_val, tnorm_val); + ka++; + kb++; + } + + // If a.ridx(ka) == b.ridx(kb) ka should become the index of the next nonzero element on the i column of a + // transpose (i row of a) + else if (a.ridx(ka) < b.ridx(kb)) + ka++; + // If a.ridx(ka) > b.ridx(kb) kb should become the index of the next nonzero element on the j column of b + else + kb++; + } + } + + if (snorm_val != 0) + { + // Equivalent to sparseC(i, j) = snorm_val; + sparseC.xridx(nel) = j; + sparseC.xdata(nel++) = snorm_val; + } + } + sparseC.xcidx(i+1) = nel; + } + + // Compress the result sparse matrix because it is initialized with a number of nonzero element probably greater than the real one + sparseC.maybe_compress(); + + // Transpose the result + sparseC = sparseC.transpose(); +} + + + + + + + + +/* Function executed by each thread */ +void *thread_function(void *arg) +{ + // Get the structure from the thread arguments + struct threadArg *thread_args; + thread_args = (struct threadArg *) arg; + + // Declare variables for the T-Norm and S-Norm values + float snorm_val; + float tnorm_val; + + // Get the row start_index and end_index + int start_index = thread_args->start_index; + int end_index = thread_args->end_index; + + + // Calculate the composition for the specified rows (between start_index and end_index) + for (int i=start_index; i<end_index; i++) + { + for(int j=lock_option*i; j<colsB; j=j+col_index_increment) + { + snorm_val = calc_tnorm(get_elem(a,i,0,colsA),get_elem(b,0,j,colsB)); + + for(int k=1; k<colsA; k++) + { + tnorm_val = calc_tnorm(get_elem(a,i,k,colsA),get_elem(b,k,j,colsB)); + snorm_val = calc_snorm(snorm_val,tnorm_val); + } + set_elem(c,i,j*(1-lock_option),colsC,snorm_val); + } + } + return((void *)0); +} + + + + + + + + +// Check if the application of the sparse algorithm is optimal +int optimal_sparse(octave_value mat_a,octave_value mat_b) +{ + // Parameters for execution time of each algorithm (may be changed if the algorithms change) + const float sparse_norm_cost = 0.0000115; + const float sparse_skip_cost = 0.000015; + const float full_norm_cost = 0.000017; + + // Get the non-zero elements number of each matrix + SparseMatrix tempMatrix = mat_a.sparse_matrix_value(); + long int nnzA = tempMatrix.nnz(); + tempMatrix = mat_b.sparse_matrix_value(); + long int nnzB = tempMatrix.nnz(); + + // Calculate the time for full calculation + long int full_time = full_norm_cost*rowsC*colsC*colsA/num_threads; + + // Calculate the approximate number of calculated T-Norm/S-Norm in the sparse algorithm + long int estimated_norm_number = nnzA*(nnzB/rowsB); + + // Calculate the approximate number of skip operations in the sparse algorithm + long int estimated_skip_number = nnzA*colsB + nnzB*rowsA - 2*estimated_norm_number; + + // Calculate the time for full calculation + long int sparse_time = sparse_norm_cost*estimated_norm_number + sparse_skip_cost * estimated_skip_number; + + if(sparse_time < full_time) + return 1; + else + return 0; +} + + + + + +/* Returns 1 if an octave_function FUNC has at most 2 arguments. */ +int is_valid_function(octave_function *func) +{ + octave_value_list testArgs; + testArgs(0) = 1; + testArgs(1) = 2; + feval(func,testArgs); + if(error_state) + return 0; + else + return 1; +} + + + +/* Assign a default function or T-Norm or S-Norm. +If tnorm = 0 the function will be assigned as S-Norm, else the function will be assigned as T-Norm. +Returns 0 if it fails*/ +int assign_default_func(octave_value arg, int tnorm) +{ + int res = 1; + if(arg.string_value() == STR_PRONORM) + if(tnorm) + calc_tnorm = func_prod; + else + { + calc_snorm = func_prod; + standard_norm = 0; + } + + else if (arg.string_value() == STR_MAXNORM) + if(tnorm) + { + calc_tnorm = func_max; + standard_norm = 0; + } + else + calc_snorm = func_max; + else if (arg.string_value() == STR_SUMNORM) + if(tnorm) + { + calc_tnorm = func_sum; + standard_norm = 0; + } + else + calc_snorm = func_sum; + else if(arg.string_value() == STR_MINNORM) + { + if(!tnorm) + standard_norm = 0; + } + else + res = 0; + return res; +} + + + + + + + + + + +/* Calculate the minimum between the two values */ +float func_min(float first, float second) +{ + if(first < second) + return first; + else + return second; +} + + + +/* Calculate the product between the two values */ +float func_prod(float first, float second) +{ + return first*second; +} + + + +/* Calculate the Maximum between the two values */ +float func_max(float first, float second) +{ + if(first > second) + return first; + else + return second; +} + + + +/* Calculate the probabilistic sum between the two values */ +float func_sum(float first, float second) +{ + return first+second-(first*second); +} + + + +/* Calculate a custom T-Norm between the two values */ +float func_custom_tnorm(float first, float second) +{ + octave_value_list fargs; + fargs(0) = octave_value(first); + fargs(1) = octave_value(second); + return feval(tnorm,fargs)(0).float_value(); +} + + + +/* Calculate a custom S-Norm between the two values */ +float func_custom_snorm(float first, float second) +{ + octave_value_list fargs; + fargs(0) = octave_value(first); + fargs(1) = octave_value(second); + return feval(snorm,fargs)(0).float_value(); +} + + + + + + + + + + +/* Get the current cpu cores number */ +int get_available_cpus() +{ + #ifdef WIN32 + SYSTEM_INFO sysinfo; + GetSystemInfo( &sysinfo ); + return sysinfo.dwNumberOfProcessors; + #else + return sysconf( _SC_NPROCESSORS_ONLN); + #endif +} + + + + + + + + + +/* Get the (i,j)-th element from the vector vec. The column number of the original matrix (numCols) is required */ +float get_elem(float vec[], int row, int col,int numCols) +{ + return vec[row*numCols+col]; +} + + + +/* Set the (i,j)-th element from the vector vec. The column number of the original matrix (numCols) is required */ +void set_elem(float vec[], int row, int col, int numCols, float elem) +{ + vec[row*numCols+col] = elem; + return; +} Property changes on: trunk/octave-forge/main/package/src/fl_compose.cc ___________________________________________________________________ Added: svn:executable + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gia...@us...> - 2011-02-06 19:09:11
|
Revision: 8095 http://octave.svn.sourceforge.net/octave/?rev=8095&view=rev Author: gianvito Date: 2011-02-06 19:09:03 +0000 (Sun, 06 Feb 2011) Log Message: ----------- Initial commit into SVN. Added Paths: ----------- trunk/octave-forge/main/fl-core/ trunk/octave-forge/main/fl-core/COPYING trunk/octave-forge/main/fl-core/DESCRIPTION trunk/octave-forge/main/fl-core/INDEX trunk/octave-forge/main/fl-core/inst/ trunk/octave-forge/main/fl-core/inst/fl_cartproduct.m trunk/octave-forge/main/fl-core/inst/fl_complement.m trunk/octave-forge/main/fl-core/inst/fl_intersect.m trunk/octave-forge/main/fl-core/inst/fl_union.m trunk/octave-forge/main/fl-core/src/ trunk/octave-forge/main/fl-core/src/Makefile trunk/octave-forge/main/fl-core/src/fl_compose.cc Added: trunk/octave-forge/main/fl-core/COPYING =================================================================== --- trunk/octave-forge/main/fl-core/COPYING (rev 0) +++ trunk/octave-forge/main/fl-core/COPYING 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,166 @@ + GNU LESSER 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. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + Added: trunk/octave-forge/main/fl-core/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fl-core/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/fl-core/DESCRIPTION 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,10 @@ +Name: fl-core +Version: 1.0 +Date: 2011-12-01 +Author: Gianvito Pio and Piero Molino +Title: Fuzzy Logic Core for Octave +Maintainer: Gianvito Pio (pio...@gm...) and Piero Molino (pie...@gm...) +Description: The package contains code for basic functions in Fuzzy Logic for Octave. +Autoload: yes +License: GPL v2 +Depends: octave (>= 2.9.7) Added: trunk/octave-forge/main/fl-core/INDEX =================================================================== --- trunk/octave-forge/main/fl-core/INDEX (rev 0) +++ trunk/octave-forge/main/fl-core/INDEX 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,8 @@ +fl-core >> Fuzzy Logic Core +Set Operations + fl_intersect + fl_union + fl_complement + fl_cartproduct +Function Composition + fl_compose Added: trunk/octave-forge/main/fl-core/inst/fl_cartproduct.m =================================================================== --- trunk/octave-forge/main/fl-core/inst/fl_cartproduct.m (rev 0) +++ trunk/octave-forge/main/fl-core/inst/fl_cartproduct.m 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,62 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + + +function res = fl_cartproduct(A, B, N= "min") +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_cartproduct(@var{A}, @var{B}) +## @deftypefnx{Function File} {@var{res} = } fl_cartproduct(@var{A}, @var{B}, @var{N}) +## +## Returns the bi-dimensional Fuzzy Logic cartesian product. @var{A} and @var{B} must be both vectors. +## The argument @var{N} allows to specify a custom function. So it can be: +## @itemize @minus +## @item 'min': use the minimum function (same as fl_cartproduct(A,B)); +## @item 'prod': use the product function; +## @item 'max': use the maximum function; +## @item 'sum': use the probabilistic sum function; +## @item function_handle: a user-defined function. +## @end itemize +## +## Note that only the predefined functions will be calculated rapidly and in +## multithread mode. Using a user-defined function will result +## in a long time calculation. +## @end deftypefn + + + % Check the argument number and type + if (nargin !=2 && nargin !=3) + print_usage(); + elseif (!(isvector(A) && isvector(B))) + error("fl_cartproduct: the first two arguments must be vectors"); + endif + + % Transpose the vectors if necessary (the first as column vector and the second as row vector) + if (rows(A)<columns(A)) + A = A'; + endif + if(rows(B)>columns(B)) + B = B'; + endif + + res = fl_compose(A,B,N); + +endfunction Property changes on: trunk/octave-forge/main/fl-core/inst/fl_cartproduct.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/fl-core/inst/fl_complement.m =================================================================== --- trunk/octave-forge/main/fl-core/inst/fl_complement.m (rev 0) +++ trunk/octave-forge/main/fl-core/inst/fl_complement.m 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,50 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + +function res = fl_complement(A) +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_complement(@var{A}) +## +## Returns the Fuzzy Logic complement (1 - @var{A}). @var{A} can be a row vector or a column vector. +## @end deftypefn + + % Check the argument number + if (nargin != 1) + print_usage(); + endif + + % Check the argument type + if (isvector(A)) + + % Check if the input vector is row vector or column vector + if ((rows(A) == 1) && (columns(A) >= 1)) + % Calculate the complement as row vector + res = ones(1, length(A)) - A; + else + % Calculate the complement as column vector + res = ones(length(A), 1) - A; + endif + else + error ("fl_complement: expecting vector argument"); + endif + +endfunction Property changes on: trunk/octave-forge/main/fl-core/inst/fl_complement.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/fl-core/inst/fl_intersect.m =================================================================== --- trunk/octave-forge/main/fl-core/inst/fl_intersect.m (rev 0) +++ trunk/octave-forge/main/fl-core/inst/fl_intersect.m 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,67 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + +function res = fl_intersect(A, B, T = "min") +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_intersect(@var{A}, @var{B}) +## @deftypefnx{Function File} {@var{res} = } fl_intersect(@var{A}, @var{B}, @var{T}) +## +## Returns the Fuzzy Logic intersection. @var{A} and @var{B} must be both row vectors or both column vectors. +## +## The argument @var{T} allows to specify a custom T-Norm function. So it can be: +## @itemize @minus +## @item 'min': use the minimum T-Norm (same as fl_intersect(@var{A},@var{B})); +## @item 'prod': use the product T-Norm; +## @item function_handle: a user-defined function as T-Norm. +## @end itemize +## +## Note that only minimum and product T-Norm will be calculated rapidly and in +## multithread mode. Using a user-defined function as T-Norm will result +## in a long time calculation. +## @end deftypefn + + + % Check the argument number and type + if (!(nargin == 2 || nargin == 3)) + print_usage(); + endif + if (!(isvector(A) && isvector(B))) + error ("fl_intersect: expecting vector arguments"); + endif + + % Check dimension compatibility + if (!(length(A) == length(B))) + error ("fl_intersect: expecting conformant vector arguments"); + endif + + % Check if both vectors are row vectors or column vectors + if ((columns(A) >= rows(A)) && (columns(B) >= rows(B))) + % Calculate the composition function with the custom T-Norm (defalut is min) + res = transpose(fl_compose(transpose(A), B, true, T)); + elseif ((rows(A) >= columns(A)) && (rows(B) >= columns(B))) + % Calculate the composition function with the custom T-Norm (defalut is min) + res = fl_compose(A, transpose(B), true, T); + else + error ("fl_intersect: expecting vector arguments to be both column vectors or both row vectors"); + endif + +endfunction Property changes on: trunk/octave-forge/main/fl-core/inst/fl_intersect.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/fl-core/inst/fl_union.m =================================================================== --- trunk/octave-forge/main/fl-core/inst/fl_union.m (rev 0) +++ trunk/octave-forge/main/fl-core/inst/fl_union.m 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,68 @@ +% Copyright(C) 2011 Gianvito Pio, Piero Molino +% +% Contact Email: pio...@gm... pie...@gm... +% +% fl-core - Fuzzy Logic Core functions for Octave +% This file is part of fl-core. +% +% fl-core is free software: you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% fl-core 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 Lesser General Public License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with fl-core. If not, see <http://www.gnu.org/licenses/>. +% + + +function res = fl_union(A, B, S = "max") +## -*- texinfo -*- +## @deftypefn{Function File} {@var{res} = } fl_union(@var{A}, @var{B}) +## @deftypefnx{Function File} {@var{res} = } fl_union(@var{A}, @var{B}, @var{S}) +## +## Returns the Fuzzy Logic union. @var{A} and @var{B} must be both row vectors or both column vectors. +## +## The argument @var{S} allows to specify a custom S-Norm function. So it can be: +## @itemize @minus +## @item 'max': use the maximum S-Norm (same as fl_union(@var{A}, @var{B})); +## @item 'sum': use the probabilistic sum S-Norm; +## @item function_handle: a user-defined function as S-Norm. +## @end itemize +## +## Note that only maximum and probabilistic sum S-Norm will be calculated rapidly and in +## multithread mode. Using a user-defined function as S-Norm will result +## in a long time calculation. +## @end deftypefn + + + + % Check the argument number and type + if (!(nargin == 2 || nargin == 3)) + print_usage(); + endif + if (!(isvector(A) && isvector(B))) + error ("fl_union: expecting vector arguments"); + endif + + % Check dimension compatibility + if (!(length(A) == length(B))) + error ("fl_union: expecting conformant vector arguments"); + endif + + % Check if both vectors are row vectors or column vectors + if ((columns(A) >= rows(A)) && (columns(B) >= rows(B))) + % Calculate the composition function with the custom S-Norm (defalut is max) + res = transpose(fl_compose(transpose(A), B, true, S)); + elseif ((rows(A) >= columns(A)) && (rows(B) >= columns(B))) + % Calculate the composition function with the custom S-Norm (defalut is max) + res = fl_compose(A, transpose(B), true, S); + else + error ("fl_union: expecting vector arguments to be both column vectors or both row vectors"); + endif + +endfunction Property changes on: trunk/octave-forge/main/fl-core/inst/fl_union.m ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/fl-core/src/Makefile =================================================================== --- trunk/octave-forge/main/fl-core/src/Makefile (rev 0) +++ trunk/octave-forge/main/fl-core/src/Makefile 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,16 @@ +OCT = fl_compose.oct +SRC := $(OCT:.oct=.cc) +BASE := $(OCT:.oct=) +ifdef COMSPEC + ADDPARAM := -lpthreadVC2 +endif + +.phony: all +all: $(OCT) + +%.oct: %.cc + mkoctfile -s $< $(ADDPARAM) + +.phony: clean +clean: + $(RM) $(PART) *.o *.oct octave-core *~ Property changes on: trunk/octave-forge/main/fl-core/src/Makefile ___________________________________________________________________ Added: svn:executable + Added: trunk/octave-forge/main/fl-core/src/fl_compose.cc =================================================================== --- trunk/octave-forge/main/fl-core/src/fl_compose.cc (rev 0) +++ trunk/octave-forge/main/fl-core/src/fl_compose.cc 2011-02-06 19:09:03 UTC (rev 8095) @@ -0,0 +1,782 @@ +/* Copyright(C) 2011 Gianvito Pio, Piero Molino +* Contact Email: pio...@gm... pie...@gm... +* +* fl-core - Fuzzy Logic Core functions for Octave +* This file is part of fl-core. +* +* fl-core is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* fl-core 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with fl-core. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <octave/oct.h> +#include <octave/parse.h> +#include <pthread.h> + +#define HELP \ +"-*- texinfo -*-\n\ + @deftypefn{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}) \n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{LOCK})\n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{T})\n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{T}, @var{S})\n\ + @deftypefnx{Loadable Function} {@var{res} = } fl_compose(@var{A}, @var{B}, @var{LOCK}, @var{T})\n\ + Returns the T-Norm / S-Norm composition as basic inference mechanism of Fuzzy Logic. By default, it calculates the max-min composition.\n\n\ +@var{A} and @var{B} must be matrices with conformant dimensions as in matrix product. If they are both full matrices or mixed (one full and one sparse), a full matrix will be returned. If they are both sparse matrices, a sparse matrix will be returned. However the best computation method (sparse or full) is optimally chosen at runtime.\n\n\ +When true, the boolean @var{LOCK} option forces to calculate the diagonal results only and returns it as a column vector.\n\n\ +The arguments @var{T} and @var{S} allows to specify a custom T-Norm and S-Norm function respectively. They can be:\n\n\ +@itemize @minus \n\ +@item 'min': use the minimum function (default for T-Norm);\n\n\ +@item 'prod': use the product function;\n\n\ +@item 'max': use the maximum function (default for S-Norm);\n\n\ +@item 'sum': use the probabilistic sum function;\n\n\ +@item function_handle: a user-defined function (at most 2 arguments).\n\n\ +@end itemize\n\ +Note that only the predefined functions are calculated rapidly and in multithread mode. Using a user-defined function as T-Norm and/or S-Norm will result in a long time calculation.\n\n\ +Furthermore, no check is performed to be sure the provided functions have the T-Norm or S-Norm properties. The results will be correct as expected, but the semantic correctness is only a user responsibility.\n\ + @end deftypefn" + + + +#define MIN_ARG 2 +#define MAX_ARG 4 + +#define STR_MINNORM "min" +#define STR_PRONORM "prod" +#define STR_MAXNORM "max" +#define STR_SUMNORM "sum" + +#define ERR_INVALIDFUNC "fl_compose: the specified T-Norm or S-Norm function is invalid!\nPlease read help for details" +#define ERR_MATRIXSIZE "fl_compose: incompatible matrices dimensions\n" +#define ERR_MATRIXTYPE "fl_compose: the first two argument must be matrices\n" + + + +// Structure for thread arguments. Each thread will perform the computation between the start_index and end_index row. +struct threadArg +{ + int start_index; + int end_index; +}; + + +// Functions prototype declaration +float get_elem(float vec[], int row, int col,int numCols); +void set_elem(float vec[], int row, int col, int numCols, float elem); +int is_valid_function(octave_function *func); +void *thread_function(void *arg); +int get_available_cpus(); +int assign_default_func(octave_value arg, int tnorm); +int optimal_sparse(octave_value mat_a,octave_value mat_b); + +void (*compose)(octave_value_list); +void full_compose(octave_value_list args); +void sparse_compose(octave_value_list args); + +float (*calc_tnorm)(float,float); +float (*calc_snorm)(float,float); + +float func_min(float first, float second); +float func_prod(float first, float second); +float func_max(float first, float second); +float func_sum(float first, float second); + +float func_custom_tnorm(float first, float second); +float func_custom_snorm(float first, float second); + + +// T-Norm and S-Norm function pointers +octave_function *tnorm; +octave_function *snorm; + + +// Structure for the thread arguments +struct threadArg* thread_args = NULL; + +// Input and output matrices +float* a; +float* b; +float* c; + +// Sparse matrix output (for sparse composition) +SparseMatrix sparseC; + +// Matrices dimensions +long int rowsA,rowsB,colsA,colsB,rowsC,colsC; + +// Lock option. 1 = calculation executed only for the diagonal of the matrix +int lock_option; + +// The increment +int col_index_increment; + +// Number of threads that will be created +int num_threads; + + +// 0 = the input matrices are both full. A full output matrix will be produced. +// 1 = the input matrices are both sparse. A sparse output matrix will be produced. +int sparse_res; + + +// 0 = A full composition is performed. 1 = a sparse composition is performed +int sparse_composition; + + +// Indicate that a standard T-Norm (prod or min) and a S-Norm was specified (probabilistic sum or max) +int standard_norm; + + + +/* Main function - Check the arguments and call the compose method */ +DEFUN_DLD (fl_compose, args, nargout, HELP) +{ + int numargs = args.length(); // Arguments number + int specified_lockoption = 0; // 1 = the lock_option was specified in the arguments + + // Set the default values + lock_option = 0; + sparse_res = 0; + sparse_composition = 0; + standard_norm = 1; + + // Set the num_thread to the actual available CPU cores + num_threads = get_available_cpus(); + + // Set the lock_option to default value (0) + lock_option = 0; + + // Set the computation to default (full matrices) + compose = full_compose; + + // Set the T-Norm and S-Norm function pointer to default value (Minimum and Maximum) + calc_tnorm = func_min; + calc_snorm = func_max; + + + // Check if the argument number is correct + if(numargs < MIN_ARG || numargs > MAX_ARG) + { + print_usage(); + return octave_value_list(); + } + + + // Check if the first two arguments are matrices + if(!args(0).is_matrix_type() || !args(1).is_matrix_type()) + { + error(ERR_MATRIXTYPE); + return octave_value_list(); + } + + + // Check if the matrices are both both sparse and set the output matrix to sparse type + if(args(0).is_sparse_type() && args(1).is_sparse_type()) + sparse_res = 1; + + + // Analyze the third argument (can be the lock_option, a custom T-Norm or a default string for T-Norm) + if(numargs > 2) + { + // Check if the third argument is the lock_option. + if(args(2).is_bool_scalar()) + { + // Get the lock_option value + lock_option = args(2).int_value(); + specified_lockoption = 1; + } + + + // Check if the third argument is a function + else if(args(2).is_function_handle()) + { + // Check if the custom T-Norm function has at most two arguments + if(!is_valid_function(args(2).function_value())) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + else + { + // Set the custom T-Norm and force single thread mode + tnorm = args(2).function_value(); + calc_tnorm = func_custom_tnorm; + num_threads = 1; + standard_norm = 0; + } + } + + // Check if the third argument is a string and try to assign a default T-Norm + else if(!((args(2).is_sq_string() || args(2).is_dq_string()) && assign_default_func(args(2),1))) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + + + + + + // Analyze the fourth argument (can be a custom T-Norm, a default string for T-Norm or a custom S-Norm) + if(numargs > 3) + { + // Check if the fourth argument is a function + if(args(3).is_function_handle()) + { + if(specified_lockoption) + { + // Check if the custom T-Norm function has at most two arguments + if(!is_valid_function(args(3).function_value())) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + else + { + // Set the custom T-Norm and force single thread mode + tnorm = args(3).function_value(); + calc_tnorm = func_custom_tnorm; + num_threads = 1; + } + } + else + { + // Check if the custom S-Norm function has at most two arguments + if(!is_valid_function(args(3).function_value())) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + else + { + // Set the custom S-Norm and force single thread mode + snorm = args(3).function_value(); + calc_snorm = func_custom_snorm; + num_threads = 1; + } + } + standard_norm = 0; + } + + // Check if the fourth argument is a string (could be a default T-Norm) + else if (args(3).is_sq_string() || args(3).is_dq_string()) + { + if(specified_lockoption) + { + if (!assign_default_func(args(3),1)) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + else + { + if (!assign_default_func(args(3),0)) + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + } + else + { + error(ERR_INVALIDFUNC); + return octave_value_list(); + } + } + + + + + + // Get the dimensions of matrices + rowsA = args(0).matrix_value().dims()(0); + colsA = args(0).matrix_value().dims()(1); + rowsB = args(1).matrix_value().dims()(0); + colsB = args(1).matrix_value().dims()(1); + rowsC = rowsA; + colsC = colsB; + + // Check if the dimensions are compatible + if(colsA != rowsB) + { + error(ERR_MATRIXSIZE); + return octave_value_list(); + } + + + // If the matrices are really sparse, the S-Norm is a standard type, the lock_option is false and the matrices aren't vectors perform the sparse composition + // (Workaround for segmentation fault caused by sparse vector transposition) + if(standard_norm && !lock_option && rowsA != 1 && colsA != 1 && colsB != 1 && optimal_sparse(args(0),args(1))) + { + compose = sparse_compose; + sparse_composition = 1; + } + + + + + + // If the lock_option is true, the function will return a column vector. + // Sets proper output matrix dimensions and column index increment. + if(lock_option) + { + // A column index increment = colsB let the two FOR cycle to calculate only the first element + col_index_increment = colsB; + c = new float[rowsC]; + colsC = 1; + } + else + { + col_index_increment = 1; + c = new float[rowsC*colsC]; + } + + + // Start the matrix composition + compose(args); + + + // Compose the output result as an octave matrix (sparse or full, same as input matrices) + if(sparse_composition) + { + if(sparse_res) + return octave_value(sparseC); + else + return octave_value(sparseC.matrix_value()); + } + else + { + Matrix outMatrix(rowsC,colsC); + for(int i=0;i<rowsC;i++) + for(int j=0;j<colsC;j++) + outMatrix(i,j) = get_elem(c,i,j,colsC); + + if(sparse_res) + { + SparseMatrix spMatrix = SparseMatrix(outMatrix); + return octave_value(spMatrix); + } + else + return octave_value(outMatrix); + } + + + +} + + + + + + + + + + +// Calculate the S-Norm/T-Norm composition of full matrices (multi thread) +void full_compose(octave_value_list args) +{ + + // Initialize the first matrix + Matrix tempMatrix = args(0).matrix_value(); + a = new float[rowsA*colsA]; + for (int i=0; i<rowsA; i++) + for(int j=0; j<colsA;j++) + a[i*colsA+j] = tempMatrix(i,j); + + // Initialize the second matrix + tempMatrix = args(1).matrix_value(); + b = new float[rowsB*colsB]; + for (int i=0; i<rowsB; i++) + for(int j=0; j<colsB;j++) + b[i*colsB+j] = tempMatrix(i,j); + + + // Create the thread args array + thread_args = new threadArg[num_threads]; + + + // Define an array of threads + pthread_t th[num_threads]; + + // If the lock_option is true, the result will be a column vector of the dimension of the diagonal + // (the minimum between the rows of the matrix A and the columns of the matrix B) + if(lock_option) + { + rowsA = func_min(rowsA,colsB); + rowsC = rowsA; + } + + // Define the number interval of rows for each thread + int interval = rowsA / num_threads; + + int i; + // Define the threads + for (i=0; i<num_threads; i++) + { + // Set the proper row start_index and end_index in the thread argument + thread_args[i].start_index = i*interval; + thread_args[i].end_index = thread_args[i].start_index + interval; + + if(i == num_threads - 1) + thread_args[i].end_index = rowsA; + + // Start the thread + pthread_create(&th[i],NULL,thread_function, (void *) &thread_args[i]); + } + + void *ans1; + + // Wait the results from each thread + for(i=0; i<num_threads; i++) + pthread_join(th[i],&ans1); +} + + + + + + + + + +// Calculate the S-Norm/T-Norm composition of sparse matrices (single thread) +void sparse_compose(octave_value_list args) +{ + // Create constant versions of the input matrices to prevent them to be filled by zeros on reading. + // a is the const reference to the transpose of a because octave sparse matrices are column compressed + // (to cycle on the rows, we cycle on the columns of the transpose). + SparseMatrix atmp = args(0).sparse_matrix_value(); + const SparseMatrix a = atmp.transpose(); + const SparseMatrix b = args(1).sparse_matrix_value(); + + // Declare variables for the T-Norm and S-Norm values + float snorm_val; + float tnorm_val; + + // Initialize the result sparse matrix + sparseC = SparseMatrix((int)colsB, (int)rowsA, (int)(colsB*rowsA)); + + // Initialize the number of nonzero elements in the sparse matrix c + int nel = 0; + sparseC.xcidx(0) = 0; + + // Calculate the composition for each element + for (int i = 0; i < rowsC; i++) + { + for(int j = 0; j < colsC; j++) + { + + // Get the index of the first element of the i-th column of a transpose (i-th row of a) + // and the index of the first element of the j-th column of b + int ka = a.cidx(i); + int kb = b.cidx(j); + snorm_val = 0; + + // Check if the values of the matrix are really not 0 (it happens if the column of a or b hasn't any value) + // because otherwise the cidx(i) or cidx(j) returns the first nonzero element of the previous column + if(a(a.ridx(ka),i)!=0 && b(b.ridx(kb),j)!=0) + { + // Cicle on the i-th column of a transpose (i-th row of a) and j-th column of b + // From a.cidx(i) to a.cidx(i+1)-1 there are all the nonzero elements of the column i of a transpose (i-th row of a) + // From b.cidx(j) to b.cidx(j+1)-1 there are all the nonzero elements of the column j of b + while ((ka <= (a.cidx(i+1)-1)) && (kb <= (b.cidx(j+1)-1))) + { + + // If a.ridx(ka) == b.ridx(kb) is true, then there's a nonzero value on the same row + // so there's a k for that a'(k, i) (equals to a(i, k)) and b(k, j) are both nonzero + if (a.ridx(ka) == b.ridx(kb)) + { + tnorm_val = calc_tnorm(a.data(ka), b.data(kb)); + snorm_val = calc_snorm(snorm_val, tnorm_val); + ka++; + kb++; + } + + // If a.ridx(ka) == b.ridx(kb) ka should become the index of the next nonzero element on the i column of a + // transpose (i row of a) + else if (a.ridx(ka) < b.ridx(kb)) + ka++; + // If a.ridx(ka) > b.ridx(kb) kb should become the index of the next nonzero element on the j column of b + else + kb++; + } + } + + if (snorm_val != 0) + { + // Equivalent to sparseC(i, j) = snorm_val; + sparseC.xridx(nel) = j; + sparseC.xdata(nel++) = snorm_val; + } + } + sparseC.xcidx(i+1) = nel; + } + + // Compress the result sparse matrix because it is initialized with a number of nonzero element probably greater than the real one + sparseC.maybe_compress(); + + // Transpose the result + sparseC = sparseC.transpose(); +} + + + + + + + + +/* Function executed by each thread */ +void *thread_function(void *arg) +{ + // Get the structure from the thread arguments + struct threadArg *thread_args; + thread_args = (struct threadArg *) arg; + + // Declare variables for the T-Norm and S-Norm values + float snorm_val; + float tnorm_val; + + // Get the row start_index and end_index + int start_index = thread_args->start_index; + int end_index = thread_args->end_index; + + + // Calculate the composition for the specified rows (between start_index and end_index) + for (int i=start_index; i<end_index; i++) + { + for(int j=lock_option*i; j<colsB; j=j+col_index_increment) + { + snorm_val = calc_tnorm(get_elem(a,i,0,colsA),get_elem(b,0,j,colsB)); + + for(int k=1; k<colsA; k++) + { + tnorm_val = calc_tnorm(get_elem(a,i,k,colsA),get_elem(b,k,j,colsB)); + snorm_val = calc_snorm(snorm_val,tnorm_val); + } + set_elem(c,i,j*(1-lock_option),colsC,snorm_val); + } + } + return((void *)0); +} + + + + + + + + +// Check if the application of the sparse algorithm is optimal +int optimal_sparse(octave_value mat_a,octave_value mat_b) +{ + // Parameters for execution time of each algorithm (may be changed if the algorithms change) + const float sparse_norm_cost = 0.0000115; + const float sparse_skip_cost = 0.000015; + const float full_norm_cost = 0.000017; + + // Get the non-zero elements number of each matrix + SparseMatrix tempMatrix = mat_a.sparse_matrix_value(); + long int nnzA = tempMatrix.nnz(); + tempMatrix = mat_b.sparse_matrix_value(); + long int nnzB = tempMatrix.nnz(); + + // Calculate the time for full calculation + long int full_time = full_norm_cost*rowsC*colsC*colsA/num_threads; + + // Calculate the approximate number of calculated T-Norm/S-Norm in the sparse algorithm + long int estimated_norm_number = nnzA*(nnzB/rowsB); + + // Calculate the approximate number of skip operations in the sparse algorithm + long int estimated_skip_number = nnzA*colsB + nnzB*rowsA - 2*estimated_norm_number; + + // Calculate the time for full calculation + long int sparse_time = sparse_norm_cost*estimated_norm_number + sparse_skip_cost * estimated_skip_number; + + if(sparse_time < full_time) + return 1; + else + return 0; +} + + + + + +/* Returns 1 if an octave_function FUNC has at most 2 arguments. */ +int is_valid_function(octave_function *func) +{ + octave_value_list testArgs; + testArgs(0) = 1; + testArgs(1) = 2; + feval(func,testArgs); + if(error_state) + return 0; + else + return 1; +} + + + +/* Assign a default function or T-Norm or S-Norm. +If tnorm = 0 the function will be assigned as S-Norm, else the function will be assigned as T-Norm. +Returns 0 if it fails*/ +int assign_default_func(octave_value arg, int tnorm) +{ + int res = 1; + if(arg.string_value() == STR_PRONORM) + if(tnorm) + calc_tnorm = func_prod; + else + { + calc_snorm = func_prod; + standard_norm = 0; + } + + else if (arg.string_value() == STR_MAXNORM) + if(tnorm) + { + calc_tnorm = func_max; + standard_norm = 0; + } + else + calc_snorm = func_max; + else if (arg.string_value() == STR_SUMNORM) + if(tnorm) + { + calc_tnorm = func_sum; + standard_norm = 0; + } + else + calc_snorm = func_sum; + else if(arg.string_value() == STR_MINNORM) + { + if(!tnorm) + standard_norm = 0; + } + else + res = 0; + return res; +} + + + + + + + + + + +/* Calculate the minimum between the two values */ +float func_min(float first, float second) +{ + if(first < second) + return first; + else + return second; +} + + + +/* Calculate the product between the two values */ +float func_prod(float first, float second) +{ + return first*second; +} + + + +/* Calculate the Maximum between the two values */ +float func_max(float first, float second) +{ + if(first > second) + return first; + else + return second; +} + + + +/* Calculate the probabilistic sum between the two values */ +float func_sum(float first, float second) +{ + return first+second-(first*second); +} + + + +/* Calculate a custom T-Norm between the two values */ +float func_custom_tnorm(float first, float second) +{ + octave_value_list fargs; + fargs(0) = octave_value(first); + fargs(1) = octave_value(second); + return feval(tnorm,fargs)(0).float_value(); +} + + + +/* Calculate a custom S-Norm between the two values */ +float func_custom_snorm(float first, float second) +{ + octave_value_list fargs; + fargs(0) = octave_value(first); + fargs(1) = octave_value(second); + return feval(snorm,fargs)(0).float_value(); +} + + + + + + + + + + +/* Get the current cpu cores number */ +int get_available_cpus() +{ + #ifdef WIN32 + SYSTEM_INFO sysinfo; + GetSystemInfo( &sysinfo ); + return sysinfo.dwNumberOfProcessors; + #else + return sysconf( _SC_NPROCESSORS_ONLN); + #endif +} + + + + + + + + + +/* Get the (i,j)-th element from the vector vec. The column number of the original matrix (numCols) is required */ +float get_elem(float vec[], int row, int col,int numCols) +{ + return vec[row*numCols+col]; +} + + + +/* Set the (i,j)-th element from the vector vec. The column number of the original matrix (numCols) is required */ +void set_elem(float vec[], int row, int col, int numCols, float elem) +{ + vec[row*numCols+col] = elem; + return; +} Property changes on: trunk/octave-forge/main/fl-core/src/fl_compose.cc ___________________________________________________________________ Added: svn:executable + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <car...@us...> - 2011-04-28 14:58:16
|
Revision: 8235 http://octave.svn.sourceforge.net/octave/?rev=8235&view=rev Author: carandraug Date: 2011-04-28 14:58:09 +0000 (Thu, 28 Apr 2011) Log Message: ----------- Remove repeated function deriche (m file). There's already C version on the package Modified Paths: -------------- trunk/octave-forge/main/image/inst/imopen.m trunk/octave-forge/main/zenity/inst/zenity_scale.m Removed Paths: ------------- trunk/octave-forge/main/image/inst/deriche.m Deleted: trunk/octave-forge/main/image/inst/deriche.m =================================================================== --- trunk/octave-forge/main/image/inst/deriche.m 2011-04-26 12:49:48 UTC (rev 8234) +++ trunk/octave-forge/main/image/inst/deriche.m 2011-04-28 14:58:09 UTC (rev 8235) @@ -1,134 +0,0 @@ -## -*- texinfo -*- -## @deftypefn {Function File} @var{result} = deriche(@var{img}, @var{alpha}, @var{method}) -## Deriche 2D image gradient using recursive filters. Precessing time is -## independent of alpha. -## taken from: -## Klette, Zamperoni: Handbuch der Operatoren f\xFCr die Bildverarbeitung, vieweg -## 2.Aufl. 1995 pp 224-229 -## algorithm: Deriche R.: Fast algorithms for low-level vision: IEEE Trans. -## PAMI-12 (1990) pp 78-87 -## -## @table @code -## @item @var{img} -## Input image (as matrix of doubles). -## @item @var{alpha} -## Filter paramter (scale). -## @item method -## If 0 (default) magnitude of gradient, and if 1 -## vector gradient (last index 1 for H, 2 for V) -## @end table -## -## Due to the inherent recursive nature of the algorithms the octave -## implementation is rather slow compared to a C implementation although I have -## vectorized it as far as possible at the expense of memory consuption. As a -## side effect the evaluation order had to be modified compared to the Klette / -## Zamperoni approach. (A C Implementation can easily process PAL a video stream in -## realtime on moderate hardware.) -## @end deftypefn - -# (C)opyright Christian Kotz 2006 -# This code has no warrany whatsoever. -# Do what you like with this code as long as you -# leave this copyright in place. -# -# author: Christian Kotz -# date: 11/21/2006 -# version: 0.1 -# -## $Log$ -## Revision 1.4 2007/03/23 16:14:36 adb014 -## Update the FSF address -## -## Revision 1.3 2007/01/02 21:58:38 hauberg -## Documentation is now in Texinfo (looks better on the website) -## -## Revision 1.2 2006/12/08 06:41:30 cocus -## interface changed to match cc implementation. (returns magnitude by default) -## -## Revision 1.1 2006/12/03 10:53:14 cocus -## initial m-file implementetaion. -## -## -## 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 2 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/>. -function result = deriche(img, alpha, method) - -if nargin < 2 - alpha = 1.0 -end - -if nargin < 3 - method = 0 -end - - a = -(1-exp(-alpha))^2; - b1 = -2*exp(-alpha); - b2 = exp(-2*alpha); - a0 = -alpha / (1 - alpha * b1 - b2); - a1 = a0 * (alpha-1)*exp(-alpha); - a2 = a1 - a0 * b1; - a3 = -a0 * b2; - - - [n m] = size(img); - - g_v1 = zeros(n,m); - g_v2 = zeros(n,m); - g_h1 = zeros(n,m); - g_h2 = zeros(n,m); - g_hv = zeros(n,m); - result = zeros(n,m,2); - - for k=3:m - g_v1(:,k) = img(:, k-1) - b1 * g_v1(:,k-1)- b2 * g_v1(:,k-2); - end; - - for k=m-2:-1:1 - g_v2(:,k) = img(:, k+1) - b1 * g_v2(:,k+1)- b2 * g_v2(:,k+2); - end; - - g_hv = a * (g_v1 - g_v2); - - for k=3:n - g_h1(k,:) = a0 * g_hv(k,:) + a1 * g_hv(k-1,:) - b1 * g_h1(k-1,:) - b2 * g_h1(k-2,:); - end; - for k=n-2:-1:1 - g_h1(k,:) = a2 * g_hv(k+1,:) + a3 * g_hv(k+2,:) - b1 * g_h2(k+1,:) - b2 * g_h2(k+2,:); - end; - -result(:,:,1) = g_h1 + g_h2; - - for k=3:n - g_v1(k,:) = img(k-1,:) - b1 * g_v1(k-1,:)- b2 * g_v1(k-2,:); - end; - - for k=n-2:-1:1 - g_v2(k,:) = img(k+1,:) - b1 * g_v2(k+1,:)- b2 * g_v2(k+2,:); - end; - - g_hv = a * (g_v1 - g_v2); - - for k=3:m - g_h1(:,k) = a0 * g_hv(:,k) + a1 * g_hv(:,k-1) - b1 * g_h1(:,k-1) - b2 * g_h1(:,k-2); - end; - for k=m-2:-1:1 - g_h1(:,k) = a2 * g_hv(:,k+1) + a3 * g_hv(:,k+2) - b1 * g_h2(:,k+1) - b2 * g_h2(:,k+2); - end; - -result(:,:,2) = g_h1 + g_h2; - -if (method == 0) - result = sqrt(result(:,:,1).*result(:,:,1)+result(:,:,2).*result(:,:,2)); -end - - Modified: trunk/octave-forge/main/image/inst/imopen.m =================================================================== --- trunk/octave-forge/main/image/inst/imopen.m 2011-04-26 12:49:48 UTC (rev 8234) +++ trunk/octave-forge/main/image/inst/imopen.m 2011-04-28 14:58:09 UTC (rev 8235) @@ -9,33 +9,33 @@ ## 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. - -## -*- texinfo -*- -## @deftypefn {Function File} @var{B} = imopen (@var{A}, @var{se}) -## Perform morphological opening on a given image. -## The image @var{A} must be a grayscale or binary image, and @var{se} must be a -## structuring element. -## -## The opening corresponds to an erosion followed by a dilation of the image, i.e. -## @example -## B = imdilate(imerode(A, se), se); -## @end example -## @seealso{imdilate, imerode, imclose} -## @end deftypefn - -function retval = imopen(im, se) - ## Checkinput - if (nargin != 2) - print_usage(); - endif - if (!ismatrix(im) || !isreal(im)) - error("imopen: first input argument must be a real matrix"); - endif - if (!ismatrix(se) || !isreal(se)) - error("imopen: second input argument must be a real matrix"); - endif - - ## Perform filtering - retval = imdilate(imerode(im, se), se); - -endfunction + +## -*- texinfo -*- +## @deftypefn {Function File} @var{B} = imopen (@var{A}, @var{se}) +## Perform morphological opening on a given image. +## The image @var{A} must be a grayscale or binary image, and @var{se} must be a +## structuring element. +## +## The opening corresponds to an erosion followed by a dilation of the image, i.e. +## @example +## B = imdilate(imerode(A, se), se); +## @end example +## @seealso{imdilate, imerode, imclose} +## @end deftypefn + +function retval = imopen(im, se) + ## Checkinput + if (nargin != 2) + print_usage(); + endif + if (!ismatrix(im) || !isreal(im)) + error("imopen: first input argument must be a real matrix"); + endif + if (!ismatrix(se) || !isreal(se)) + error("imopen: second input argument must be a real matrix"); + endif + + ## Perform filtering + retval = imdilate(imerode(im, se), se); + +endfunction Modified: trunk/octave-forge/main/zenity/inst/zenity_scale.m =================================================================== --- trunk/octave-forge/main/zenity/inst/zenity_scale.m 2011-04-26 12:49:48 UTC (rev 8234) +++ trunk/octave-forge/main/zenity/inst/zenity_scale.m 2011-04-28 14:58:09 UTC (rev 8235) @@ -1,8 +1,9 @@ ## Copyright (C) 2006 Muthiah Annamalai +## Copyright (C) 2010 Carnë Draug ## ## 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 2 of the License, or +## 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, @@ -63,9 +64,16 @@ else error("zenity_scale: %s", output); ##kill -9 endif + + + ## In the future, this can be changed to return a file-handle if --print-partial + ## is selected. If so, a pipe can be open with + ## fid = fopen("zenity --scale --print-partial", "r") + ## read = fgets(fid) + ## + ## However, fgets can't read the value currently selected, only the one right + ## before the last selection + + + endfunction -% -%(Shamelessly copied from Søren Hauberg's zenity_calendar). -%zenity --scale --text 'What is in your Wallet' --value 10 --min-value 0 --max-value 100 --step 5 -%zenity_scale('','What is in your Wallet',10,0,100,5) -% \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <car...@us...> - 2011-04-28 15:12:58
|
Revision: 8236 http://octave.svn.sourceforge.net/octave/?rev=8236&view=rev Author: carandraug Date: 2011-04-28 15:12:52 +0000 (Thu, 28 Apr 2011) Log Message: ----------- Undoing some changes from 8235 which were committed by accident Modified Paths: -------------- trunk/octave-forge/main/image/inst/imopen.m trunk/octave-forge/main/zenity/inst/zenity_scale.m Modified: trunk/octave-forge/main/image/inst/imopen.m =================================================================== --- trunk/octave-forge/main/image/inst/imopen.m 2011-04-28 14:58:09 UTC (rev 8235) +++ trunk/octave-forge/main/image/inst/imopen.m 2011-04-28 15:12:52 UTC (rev 8236) @@ -9,33 +9,33 @@ ## 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. - -## -*- texinfo -*- -## @deftypefn {Function File} @var{B} = imopen (@var{A}, @var{se}) -## Perform morphological opening on a given image. -## The image @var{A} must be a grayscale or binary image, and @var{se} must be a -## structuring element. -## -## The opening corresponds to an erosion followed by a dilation of the image, i.e. -## @example -## B = imdilate(imerode(A, se), se); -## @end example -## @seealso{imdilate, imerode, imclose} -## @end deftypefn - -function retval = imopen(im, se) - ## Checkinput - if (nargin != 2) - print_usage(); - endif - if (!ismatrix(im) || !isreal(im)) - error("imopen: first input argument must be a real matrix"); - endif - if (!ismatrix(se) || !isreal(se)) - error("imopen: second input argument must be a real matrix"); - endif - - ## Perform filtering - retval = imdilate(imerode(im, se), se); - -endfunction + +## -*- texinfo -*- +## @deftypefn {Function File} @var{B} = imopen (@var{A}, @var{se}) +## Perform morphological opening on a given image. +## The image @var{A} must be a grayscale or binary image, and @var{se} must be a +## structuring element. +## +## The opening corresponds to an erosion followed by a dilation of the image, i.e. +## @example +## B = imdilate(imerode(A, se), se); +## @end example +## @seealso{imdilate, imerode, imclose} +## @end deftypefn + +function retval = imopen(im, se) + ## Checkinput + if (nargin != 2) + print_usage(); + endif + if (!ismatrix(im) || !isreal(im)) + error("imopen: first input argument must be a real matrix"); + endif + if (!ismatrix(se) || !isreal(se)) + error("imopen: second input argument must be a real matrix"); + endif + + ## Perform filtering + retval = imdilate(imerode(im, se), se); + +endfunction Modified: trunk/octave-forge/main/zenity/inst/zenity_scale.m =================================================================== --- trunk/octave-forge/main/zenity/inst/zenity_scale.m 2011-04-28 14:58:09 UTC (rev 8235) +++ trunk/octave-forge/main/zenity/inst/zenity_scale.m 2011-04-28 15:12:52 UTC (rev 8236) @@ -1,9 +1,8 @@ ## Copyright (C) 2006 Muthiah Annamalai -## Copyright (C) 2010 Carnë Draug ## ## 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 +## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, @@ -64,16 +63,9 @@ else error("zenity_scale: %s", output); ##kill -9 endif - - - ## In the future, this can be changed to return a file-handle if --print-partial - ## is selected. If so, a pipe can be open with - ## fid = fopen("zenity --scale --print-partial", "r") - ## read = fgets(fid) - ## - ## However, fgets can't read the value currently selected, only the one right - ## before the last selection - - - endfunction +% +%(Shamelessly copied from Søren Hauberg's zenity_calendar). +%zenity --scale --text 'What is in your Wallet' --value 10 --min-value 0 --max-value 100 --step 5 +%zenity_scale('','What is in your Wallet',10,0,100,5) +% \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jgp...@us...> - 2011-05-24 11:04:04
|
Revision: 8284 http://octave.svn.sourceforge.net/octave/?rev=8284&view=rev Author: jgpallero Date: 2011-05-24 11:03:50 +0000 (Tue, 24 May 2011) Log Message: ----------- The OctCLIP package for boolean operations between polygons Added Paths: ----------- trunk/octave-forge/main/octclip/ trunk/octave-forge/main/octclip/COPYING trunk/octave-forge/main/octclip/ChangeLog trunk/octave-forge/main/octclip/DESCRIPTION trunk/octave-forge/main/octclip/INDEX trunk/octave-forge/main/octclip/doc/ trunk/octave-forge/main/octclip/doc/octclip.pdf trunk/octave-forge/main/octclip/doc/octclip.tex trunk/octave-forge/main/octclip/inst/ trunk/octave-forge/main/octclip/inst/oc_polybool.m trunk/octave-forge/main/octclip/src/ trunk/octave-forge/main/octclip/src/Makefile trunk/octave-forge/main/octclip/src/_oc_polybool.cc trunk/octave-forge/main/octclip/src/compilador.c trunk/octave-forge/main/octclip/src/errores.c trunk/octave-forge/main/octclip/src/eucli.c trunk/octave-forge/main/octclip/src/fgeneral.c trunk/octave-forge/main/octclip/src/greiner.c trunk/octave-forge/main/octclip/src/libgeoc/ trunk/octave-forge/main/octclip/src/libgeoc/compilador.h trunk/octave-forge/main/octclip/src/libgeoc/constantes.h trunk/octave-forge/main/octclip/src/libgeoc/errores.h trunk/octave-forge/main/octclip/src/libgeoc/eucli.h trunk/octave-forge/main/octclip/src/libgeoc/fgeneral.h trunk/octave-forge/main/octclip/src/libgeoc/general.h trunk/octave-forge/main/octclip/src/libgeoc/geom.h trunk/octave-forge/main/octclip/src/libgeoc/greiner.h trunk/octave-forge/main/octclip/src/libgeoc/polig.h trunk/octave-forge/main/octclip/src/libgeoc/ptopol.h trunk/octave-forge/main/octclip/src/libgeoc/segmento.h trunk/octave-forge/main/octclip/src/libgeoc/ventorno.h trunk/octave-forge/main/octclip/src/octclip.h trunk/octave-forge/main/octclip/src/polig.c trunk/octave-forge/main/octclip/src/ptopol.c trunk/octave-forge/main/octclip/src/segmento.c trunk/octave-forge/main/octclip/src/ventorno.c Added: trunk/octave-forge/main/octclip/COPYING =================================================================== --- trunk/octave-forge/main/octclip/COPYING (rev 0) +++ trunk/octave-forge/main/octclip/COPYING 2011-05-24 11:03:50 UTC (rev 8284) @@ -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 program--to 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 general-purpose 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 non-free. + + 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 copyright-like 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 non-source +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 general-purpose 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 Anti-Circumvention 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 +non-permissive 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 Non-Source 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 +machine-readable 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 peer-to-peer 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 non-consumer 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 non-permissive 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 non-permissive, 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 peer-to-peer 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 cross-claim 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 non-exclusive, worldwide, royalty-free +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 non-exercise 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/why-not-lgpl.html>. Added: trunk/octave-forge/main/octclip/ChangeLog =================================================================== --- trunk/octave-forge/main/octclip/ChangeLog (rev 0) +++ trunk/octave-forge/main/octclip/ChangeLog 2011-05-24 11:03:50 UTC (rev 8284) @@ -0,0 +1,26 @@ +2011-05-24 José Luis García Pallero <jgp...@gm...> + + * .hgtags: + Version 1.0.0 + [39df102c277c] [tip] + + * doc/octclip.pdf, doc/octclip.tex: + Starting general documentation about the package + [26a79c7b76ae] [OctCLIP-1.0.0] + + * .hgignore: + Add '.hgignore' file + [85599f3bc399] + + * COPYING, DESCRIPTION, INDEX, inst/oc_polybool.m, src/Makefile, + src/_oc_polybool.cc, src/compilador.c, src/errores.c, src/eucli.c, + src/fgeneral.c, src/greiner.c, src/libgeoc/compilador.h, + src/libgeoc/constantes.h, src/libgeoc/errores.h, + src/libgeoc/eucli.h, src/libgeoc/fgeneral.h, src/libgeoc/general.h, + src/libgeoc/geom.h, src/libgeoc/greiner.h, src/libgeoc/polig.h, + src/libgeoc/ptopol.h, src/libgeoc/segmento.h, + src/libgeoc/ventorno.h, src/octclip.h, src/polig.c, src/ptopol.c, + src/segmento.c, src/ventorno.c: + Creating Mercurial repository for OctCLIP + [63a589ce04ed] + Added: trunk/octave-forge/main/octclip/DESCRIPTION =================================================================== --- trunk/octave-forge/main/octclip/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/octclip/DESCRIPTION 2011-05-24 11:03:50 UTC (rev 8284) @@ -0,0 +1,13 @@ +Name: OctCLIP +Version: 1.0.0 +Date: 2011-03-01 +Author: José Luis García Pallero, <jgp...@gm...> +Maintainer: José Luis García Pallero, <jgp...@gm...> +Title: GNU Octave clipping polygons tool +Description: This package allows to do boolean operations with polygons using + the Greiner-Hormann algorithm. +Depends: Octave (>= 2.9.7) +Url: http://davis.wpi.edu/~matt/courses/clipping/ + https://bitbucket.org/jgpallero/octclip +Autoload: yes +License: GPL version 3 or later and BSD Added: trunk/octave-forge/main/octclip/INDEX =================================================================== --- trunk/octave-forge/main/octclip/INDEX (rev 0) +++ trunk/octave-forge/main/octclip/INDEX 2011-05-24 11:03:50 UTC (rev 8284) @@ -0,0 +1,5 @@ +toolbox >> OctCLIP +Category Kernel functions + _oc_polybool +Category Driver functions + oc_polybool Added: trunk/octave-forge/main/octclip/doc/octclip.pdf =================================================================== (Binary files differ) Property changes on: trunk/octave-forge/main/octclip/doc/octclip.pdf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/octave-forge/main/octclip/doc/octclip.tex =================================================================== --- trunk/octave-forge/main/octclip/doc/octclip.tex (rev 0) +++ trunk/octave-forge/main/octclip/doc/octclip.tex 2011-05-24 11:03:50 UTC (rev 8284) @@ -0,0 +1,216 @@ +\documentclass[10pt,a4paper]{article} +\usepackage{tocbibind} +\usepackage{hyperref} +\hypersetup{colorlinks,citecolor=red,linkcolor=red,urlcolor=red} + +\newcommand{\octclip}{\texttt{OctCLIP}} +\newcommand{\octave}{GNU Octave} + +\title{Clipping polygons from \octave\footnote{This document is distributed + under the terms of the GNU Free Documentation License. Please, see + \url{http://www.gnu.org/licenses/}}} +\author{Jos\'e Luis Garc\'ia Pallero\footnote{Instituto de Astronom\'ia y + Geodesia, Fac. de CC Matem\'aticas, Universidad Complutense de Madrid. + \texttt{jlg...@pd...}, \texttt{jgp...@gm...}}} +\date{\today} + +\begin{document} +\maketitle +% \tableofcontents + +\nocite{eat-om} +\nocite{greiner1998} +\nocite{kim2006a} + +\begin{abstract} +Hello. +\end{abstract} + +\section{Overview} + +Hello again. + +\section{Installation} + +As several \octave{} packages, \octclip{} installation consists in compiling the +C++ kernel sources, link them against \octave{} library to generate +\texttt{*.oct} functions and copy this \texttt{*.oct} executables and other +\texttt{*.m} functions into a working directory. + +The automatic procedure can be easily done by running the command: + +\begin{verbatim} +octave:1> pkg install octclip-x.x.x.tar.gz +\end{verbatim} +where \texttt{x.x.x} is the version number. + +After that, the functions and documentation are installed in your machine and +you are ready for use the package. + +\section{\octave{} functions} + +Two types of functions are programmed for \octave: one \texttt{*.oct} function +and one \texttt{*.m} function. + +\subsection{\texttt{*.oct} function} +\label{op-of} + +This function are linked with the C code that actually make the computations. +You can use it, but is no recommended because the input arguments are more +strict than \texttt{*.m} functions and don't check for some errors. + +The function is: +\begin{itemize} +\item \texttt{\_oc\_polybool}: boolean operation between two polygons. +\end{itemize} + +\subsection{\texttt{*.m} function} + +This function makes the computations by calling the \texttt{*.oct} function. You +must call this function because you can use different number of input arguments +and checking of input arguments is performed. + +The function is the same as in section \ref{op-of} (without the \texttt{\_} at +the beginning of the name): +\begin{itemize} +\item \texttt{oc\_polybool}: calls \texttt{\_oc\_polybool}. +\end{itemize} + +\subsection{Error handling} + +% \texttt{*.oct} and \texttt{*.m} functions can emit errors or warnings, some due +% to errors in input arguments and other due to errors in functions from +% \texttt{projwrap} kernel execution (see section \ref{op-kw}). +% +% Errors due to wrong input arguments (data types, dimensions, etc.) can be only +% given for \texttt{*.m} functions and this is the reason because the use of these +% functions are recommended. In this case, the execution is aborted and nothing is +% stored in output arguments. +% +% Errors due to the execution of \texttt{projwrap} kernel can be emitted for both +% \texttt{*.oct} and \texttt{*.m} functions. If the error is due to an erroneous +% projection parameter, the execution is aborted and nothing is stored in output +% arguments; but if the error is due to a wrong or out of domain input coordinate, +% a warning is emitted and the execution has a normal end. + +\section{Examples} + +% \subsection{Geodetic to geocentric and vice versa} +% +% \begin{verbatim} +% lon=-6*pi/180;lat=43*pi/180;h=1000; +% [x,y,z]=op_geod2geoc(lon,lat,h,6378388,1/297) +% x = 4647300.72326257 +% y = -488450.988568138 +% z = 4328259.36425774 +% +% [lon,lat,h]=op_geoc2geod(x,y,z,6378388,1/297); +% lon*=180/pi,lat*=180/pi,h +% lon = -6 +% lat = 43 +% h = 1000.00000000074 +% \end{verbatim} +% +% \subsection{Forward and inverse projection} +% +% \begin{verbatim} +% lon=-6*pi/180;lat=43*pi/180; +% [x,y]=op_fwd(lon,lat,'+proj=utm +lon_0=3w +ellps=GRS80') +% x = 255466.980547577 +% y = 4765182.93268401 +% +% [lon,lat]=op_inv(x,y,'+proj=utm +lon_0=3w +ellps=GRS80'); +% lon*=180/pi,lat*=180/pi +% lon = -6.00000000003597 +% lat = 42.9999999999424 +% \end{verbatim} +% +% \subsection{Forward and inverse projection: \texttt{op\_transform}} +% +% \subsubsection{With altitude} +% +% \begin{verbatim} +% lon=-6*pi/180;lat=43*pi/180;h=1000; +% [x,y,h]=op_transform(lon,lat,h,'+proj=latlong +ellps=GRS80',... +% '+proj=utm +lon_0=3w +ellps=GRS80') +% x = 255466.980547577 +% y = 4765182.93268401 +% h = 1000 +% +% [lon,lat,h]=op_transform(x,y,h,... +% '+proj=utm +lon_0=3w +ellps=GRS80',... +% '+proj=latlong +ellps=GRS80'); +% lon*=180/pi,lat*=180/pi,h +% lon = -6.00000000003597 +% lat = 42.9999999999424 +% h = 1000 +% \end{verbatim} +% +% \subsubsection{Without altitude} +% +% \begin{verbatim} +% lon=-6*pi/180;lat=43*pi/180; +% [x,y]=op_transform(lon,lat,'+proj=latlong +ellps=GRS80',... +% '+proj=utm +lon_0=3w +ellps=GRS80') +% x = 255466.980547577 +% y = 4765182.93268401 +% +% [lon,lat]=op_transform(x,y,'+proj=utm +lon_0=3w +ellps=GRS80',... +% '+proj=latlong +ellps=GRS80'); +% lon*=180/pi,lat*=180/pi +% lon = -6.00000000003597 +% lat = 42.9999999999424 +% \end{verbatim} +% +% \subsection{Error due to an erroneous parameter} +% +% \begin{verbatim} +% lon=-6*pi/180;lat=43*pi/180; +% [x,y]=op_fwd(lon,lat,'+proj=utm +lon_0=3w +ellps=GRS8') +% error: +% In function op_fwd: +% In function _op_fwd: +% Projection parameters +% unknown elliptical parameter name +% +proj=utm +lon_0=3w +ellps=GRS8 +% \end{verbatim} +% +% \subsection{Error due to latitude too big} +% +% \begin{verbatim} +% lon=[-6*pi/180;-6*pi/180];lat=[43*pi/180;43]; +% [x,y]=op_fwd(lon,lat,'+proj=utm +lon_0=3w +ellps=GRS80') +% warning: _op_fwd: +% +% warning: Projection error in point 2 (index starts at 1) +% x = +% +% 255466.980547577 +% Inf +% +% y = +% +% 4765182.93268401 +% Inf +% \end{verbatim} + +\begin{thebibliography}{99} +\bibitem{eat-om} \textsc{Eaton}, John W.; \textsc{Bateman}, David, and + \textsc{Hauberg}, S\o{}ren; GNU Octave. A high-level + interactive language for numerical computations; Edition 3 for + Octave version 3.2.3; July 2007; Permanently updated at + \url{http://www.gnu.org/software/octave/docs.html}. +\bibitem{greiner1998} \textsc{Greiner}, G\"unter, and \textsc{Hormann}, Kai; + \textit{Efficient clipping of arbitrary polygons}; + ACM Transactions on Graphics; Volume 17(2), April 1998; + Pages 71--83. + There is a web link with some example code at + \url{http://davis.wpi.edu/~matt/courses/clipping/}. +\bibitem{kim2006a} \textsc{Kim}, Dae Hyun, and \textsc{Kim}, Myoung-Jun; + \textit{An Extension of Polygon Clipping To Resolve + Degenerate Cases}; + Computer-Aided Design \& Applications; Vol. 3; Numbers 1--4, + 2006; Pages 447--456. +\end{thebibliography} + +\end{document} Added: trunk/octave-forge/main/octclip/inst/oc_polybool.m =================================================================== --- trunk/octave-forge/main/octclip/inst/oc_polybool.m (rev 0) +++ trunk/octave-forge/main/octclip/inst/oc_polybool.m 2011-05-24 11:03:50 UTC (rev 8284) @@ -0,0 +1,177 @@ +## Copyright (C) 2011, José Luis García Pallero, <jgp...@gm...> +## +## This file is part of OctCLIP. +## +## OctCLIP 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 Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn{Function File}{[@var{X},@var{Y},@var{nInt},@var{nPert}] =}_oc_polybool(@var{sub},@var{clip},@var{op}) +## @deftypefnx{Function File}{[@var{X},@var{Y},@var{nInt},@var{nPert}] =}_oc_polybool(@var{sub},@var{clip}) +## +## This function performs boolean operations between two polygons using the +## Greiner-Hormann algorithm (http://davis.wpi.edu/~matt/courses/clipping/). +## +## @var{sub} is a two column matrix containing the X and Y coordinates of the +## vertices for the subject polygon. +## +## @var{clip} is a two column matrix containing the X and Y coordinates of the +## vertices for the clipper polygon. +## +## @var{op} is a text string containing the operation to perform between +## @var{sub} and @var{clip}. Possible values are: +## +## @itemize @bullet +## @item @var{'AND'} +## Intersection of @var{sub} and @var{clip} (value by default). +## @item @var{'OR'} +## Union of @var{subt} and @var{clip}. +## @item @var{'AB'} +## Operation @var{sub} - @var{clip}. +## @item @var{'BA'} +## Operation of @var{clip} - @var{sub}. +## @end itemize +## +## For the matrices @var{sub} and @var{clip}, the first point is not needed to +## be repeated at the end (but is permitted). Pairs of (NaN,NaN) coordinates in +## @var{sub} and/or @var{clip} are ommitted. +## +## @var{X} is a column vector containing the X coordinates of the vertices for. +## resultant polygon(s). +## +## @var{Y} is a column vector containing the Y coordinates of the vertices for. +## resultant polygon(s). +## +## @var{nInt} is the number of intersections between @var{sub} and @var{clip}. +## +## @var{nPert} is the number of perturbed points of the @var{clip} polygon in +## any particular case (points in the oborder of the other polygon) occurs see +## http://davis.wpi.edu/~matt/courses/clipping/ for details. +## @end deftypefn + + + + +function [X,Y,nInt,nPert] = oc_polybool(sub,clip,op) + +try + functionName = 'oc_polybool'; + minArg = 2; + maxArg = 3; + +%******************************************************************************* +%NUMBER OF INPUT ARGUMENTS CHECKING +%******************************************************************************* + + %number of input arguments checking + if (nargin<minArg)||(nargin>maxArg) + error(['Incorrect number of input arguments (%d)\n\t ',... + 'Correct number of input arguments = %d or %d'],... + nargin,minArg,maxArg); + end + +%******************************************************************************* +%INPUT ARGUMENTS CHECKING +%******************************************************************************* + + %checking input arguments + [op] = checkInputArguments(sub,clip,op); +catch + %error message + error('\n\tIn function %s:\n\t -%s ',functionName,lasterr); +end + +%******************************************************************************* +%COMPUTATION +%******************************************************************************* + +try + %calling oct function + [X,Y,nInt,nPert] = _oc_polybool(sub,clip,op); +catch + %error message + error('\n\tIn function %s:\n\tIn function %s ',functionName,lasterr); +end + + + + +%******************************************************************************* +%AUXILIARY FUNCTION +%******************************************************************************* + + + + +function [outOp] = checkInputArguments(sub,clip,inOp) + +%sub must be matrix type +if ismatrix(sub) + %a dimensions + [rowSub,colSub] = size(sub); +else + error('The first input argument is not numeric'); +end +%clip must be matrix type +if ismatrix(clip) + %b dimensions + [rowClip,colClip] = size(clip); +else + error('The second input argument is not numeric'); +end +%checking dimensions +if (colSub~=2)||(colClip~=2) + error('The columns of input arguments must be 2'); +end +%operation must be a text string +if nargin==3 + if ~ischar(inOp) + error('The third input argument is not a text string'); + else + %upper case + outOp = toupper(inOp); + %check values + if (~strcmp(outOp,'AND'))&&(~strcmp(outOp,'OR'))&& ... + (~strcmp(outOp,'AB'))&&(~strcmp(outOp,'BA')) + error('The third input argument is not correct'); + end + end +else + %value by default + outOp = 'AND'; +end + + + + +%*****END OF FUNCIONS***** + + + + +%*****FUNCTION TESTS***** + + + + +%!error(oc_polybool) +%!error(oc_polybool(1,2,3,4)) +%!error(oc_polybool('string',2,3)) +%!error(oc_polybool(1,'string',3)) +%!error(oc_polybool(1,2,3)) + + + + +%*****END OF TESTS***** Added: trunk/octave-forge/main/octclip/src/Makefile =================================================================== --- trunk/octave-forge/main/octclip/src/Makefile (rev 0) +++ trunk/octave-forge/main/octclip/src/Makefile 2011-05-24 11:03:50 UTC (rev 8284) @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +CC=mkoctfile + +.PHONY: all +all: compile clean + +.PHONY: compile +compile: + $(CC) -c -Wall -Wextra compilador.c -o compilador.o + $(CC) -c -Wall -Wextra errores.c -o errores.o + $(CC) -c -Wall -Wextra eucli.c -o eucli.o + $(CC) -c -Wall -Wextra fgeneral.c -o fgeneral.o + $(CC) -c -Wall -Wextra greiner.c -o greiner.o + $(CC) -c -Wall -Wextra polig.c -o polig.o + $(CC) -c -Wall -Wextra ptopol.c -o ptopol.o + $(CC) -c -Wall -Wextra segmento.c -o segmento.o + $(CC) -c -Wall -Wextra ventorno.c -o ventorno.o + $(CC) -s -Wall -Wextra _oc_polybool.cc *.o + +.PHONY: clean +clean: + rm -rf *.o *~ Added: trunk/octave-forge/main/octclip/src/_oc_polybool.cc =================================================================== --- trunk/octave-forge/main/octclip/src/_oc_polybool.cc (rev 0) +++ trunk/octave-forge/main/octclip/src/_oc_polybool.cc 2011-05-24 11:03:50 UTC (rev 8284) @@ -0,0 +1,231 @@ +/* -*- coding: utf-8 -*- */ +/* Copyright (C) 2011 José Luis García Pallero, <jgp...@gm...> + * + * This file is part of OctCLIP. + * + * OctCLIP 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 software; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + */ +/******************************************************************************/ +/******************************************************************************/ +#define HELPTEXT "\ +-*- texinfo -*-\n\ +@deftypefn{Loadable Function}{[@var{X},@var{Y},@var{nInt},@var{nPert}] =}\ +_oc_polybool(@var{sub},@var{clip},@var{op})\n\ +\n\ +@cindex Performs boolean operations between two polygons.\n\ +\n\ +This function performs boolean operations between two polygons using the\n\ +Greiner-Hormann algorithm (http://davis.wpi.edu/~matt/courses/clipping/).\n\ +\n\ +@var{sub} is a two column matrix containing the X and Y coordinates of the\n\ +vertices for the subject polygon.\n\n\ +@var{clip} is a two column matrix containing the X and Y coordinates of the\n\ +vertices for the clipper polygon.\n\n\ +@var{op} is a text string containing the operation to perform between\n\ +@var{sub} and @var{clip}. Possible values are:\n\ +\n\ +@itemize @bullet\n\ +@item @var{'AND'}\n\ +Intersection of @var{sub} and @var{clip}.\n\n\ +@item @var{'OR'}\n\ +Union of @var{subt} and @var{clip}.\n\n\ +@item @var{'AB'}\n\ +Operation @var{sub} - @var{clip}.\n\n\ +@item @var{'BA'}\n\ +Operation of @var{clip} - @var{sub}.\n\ +@end itemize\n\ +\n\ +For the matrices @var{sub} and @var{clip}, the first point is not needed to\n\ +be repeated at the end (but is permitted). Pairs of (NaN,NaN) coordinates in\n\ +@var{sub} and/or @var{clip} are ommitted.\n\ +\n\ +@var{X} is a column vector containing the X coordinates of the vertices for.\n\ +resultant polygon(s).\n\n\ +@var{Y} is a column vector containing the Y coordinates of the vertices for.\n\ +resultant polygon(s).\n\n\ +@var{nInt} is the number of intersections between @var{sub} and @var{clip}.\n\n\ +@var{nPert} is the number of perturbed points of the @var{clip} polygon in\n\ +any particular case (points in the oborder of the other polygon) occurs see\n\ +http://davis.wpi.edu/~matt/courses/clipping/ for details.\n\ +\n\ +@end deftypefn" +/******************************************************************************/ +/******************************************************************************/ +#include<octave/oct.h> +#include<cstdio> +#include<cstring> +#include<cstdlib> +#include<cmath> +#include"octclip.h" +/******************************************************************************/ +/******************************************************************************/ +#define ERRORTEXT 1000 +/******************************************************************************/ +/******************************************************************************/ +DEFUN_DLD(_oc_polybool,args,,HELPTEXT) +{ + //error message + char errorText[ERRORTEXT+1]="_oc_polybool:\n\t"; + //output list + octave_value_list outputList; + //////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////// + //checking input arguments + if(args.length()!=3) + { + //error text + sprintf(&errorText[strlen(errorText)], + "Incorrect number of input arguments\n\t" + "See help _oc_polybool"); + //error message + error(errorText); + } + else + { + //loop index + size_t i=0; + //operation identifier: intersection by default + enum GEOC_OP_BOOL_POLIG op=GeocOpBoolInter; + //number of intersections and perturbations + size_t nInter=0,nPert=0; + //polygons and operation + Matrix subject=args(0).matrix_value(); + Matrix clipper=args(1).matrix_value(); + std::string opchar=args(2).string_value(); + //number of vertices + size_t subjElem=static_cast<size_t>(subject.rows()); + size_t clipElem=static_cast<size_t>(clipper.rows()); + //polygon coordinates + ColumnVector xSubj(subjElem),ySubj(subjElem); + ColumnVector xClip(subjElem),yClip(subjElem); + //computation vectors + double* xA=NULL; + double* yA=NULL; + double* xB=NULL; + double* yB=NULL; + //double linked lists + vertPoliClip* polA=NULL; + vertPoliClip* polB=NULL; + //output struct + poligGreiner* result=NULL; + //////////////////////////////////////... [truncated message content] |
From: <lm...@us...> - 2011-05-25 15:26:29
|
Revision: 8286 http://octave.svn.sourceforge.net/octave/?rev=8286&view=rev Author: lmarkov Date: 2011-05-25 15:26:19 +0000 (Wed, 25 May 2011) Log Message: ----------- A fuzzy-logic-toolkit A fuzzy-logic-toolkit/DESCRIPTION A fuzzy-logic-toolkit/INDEX A fuzzy-logic-toolkit/COPYING A fuzzy-logic-toolkit/inst A fuzzy-logic-toolkit/inst/smf.m A fuzzy-logic-toolkit/inst/trimf_demo.m A fuzzy-logic-toolkit/inst/rmvar.m A fuzzy-logic-toolkit/inst/gauss2mf.m A fuzzy-logic-toolkit/inst/psigmf_demo.m A fuzzy-logic-toolkit/inst/zmf.m A fuzzy-logic-toolkit/inst/writefis.m A fuzzy-logic-toolkit/inst/trapmf_demo.m A fuzzy-logic-toolkit/inst/pimf_demo.m A fuzzy-logic-toolkit/inst/zmf_demo.m A fuzzy-logic-toolkit/inst/addvar.m A fuzzy-logic-toolkit/inst/sugeno-tip-calculator.fis A fuzzy-logic-toolkit/inst/gbellmf.m A fuzzy-logic-toolkit/inst/showrule.m A fuzzy-logic-toolkit/inst/sigmf_demo.m A fuzzy-logic-toolkit/inst/dsigmf.m A fuzzy-logic-toolkit/inst/gaussmf_demo.m A fuzzy-logic-toolkit/inst/gensurf.m A fuzzy-logic-toolkit/inst/mamdani_demo.m A fuzzy-logic-toolkit/inst/gbellmf_demo.m A fuzzy-logic-toolkit/inst/showrule_demo.m A fuzzy-logic-toolkit/inst/addmf_demo.m A fuzzy-logic-toolkit/inst/trimf.m A fuzzy-logic-toolkit/inst/getfis.m A fuzzy-logic-toolkit/inst/showfis.m A fuzzy-logic-toolkit/inst/psigmf.m A fuzzy-logic-toolkit/inst/smf_demo.m A fuzzy-logic-toolkit/inst/trapmf.m A fuzzy-logic-toolkit/inst/evalfis.m A fuzzy-logic-toolkit/inst/commandline_demo.m A fuzzy-logic-toolkit/inst/gauss2mf_demo.m A fuzzy-logic-toolkit/inst/newfis.m A fuzzy-logic-toolkit/inst/pimf.m A fuzzy-logic-toolkit/inst/setfis.m A fuzzy-logic-toolkit/inst/plotmf.m A fuzzy-logic-toolkit/inst/rmmf.m A fuzzy-logic-toolkit/inst/addvar_demo.m A fuzzy-logic-toolkit/inst/gaussmf.m A fuzzy-logic-toolkit/inst/sigmf.m A fuzzy-logic-toolkit/inst/heart_demo.m A fuzzy-logic-toolkit/inst/defuzz.m A fuzzy-logic-toolkit/inst/heart-disease-risk.fis A fuzzy-logic-toolkit/inst/evalmf.m A fuzzy-logic-toolkit/inst/addmf.m A fuzzy-logic-toolkit/inst/mamdani-tip-calculator.fis A fuzzy-logic-toolkit/inst/readfis.m A fuzzy-logic-toolkit/inst/dsigmf_demo.m A fuzzy-logic-toolkit/inst/evalmf_demo.m A fuzzy-logic-toolkit/inst/tipping_demo.m A fuzzy-logic-toolkit/inst/private A fuzzy-logic-toolkit/inst/private/is_io_vector.m A fuzzy-logic-toolkit/inst/private/is_rule_vector.m A fuzzy-logic-toolkit/inst/private/are_input_indices.m A fuzzy-logic-toolkit/inst/private/defuzzify_output_mamdani.m A fuzzy-logic-toolkit/inst/private/aggregate_output_sugeno.m A fuzzy-logic-toolkit/inst/private/is_ref_input.m A fuzzy-logic-toolkit/inst/private/is_grid_spec.m A fuzzy-logic-toolkit/inst/private/is_real_matrix.m A fuzzy-logic-toolkit/inst/private/eval_firing_strength.m A fuzzy-logic-toolkit/inst/private/is_io_struct.m A fuzzy-logic-toolkit/inst/private/is_pos_int.m A fuzzy-logic-toolkit/inst/private/is_rule_struct.m A fuzzy-logic-toolkit/inst/private/is_mf_vector.m A fuzzy-logic-toolkit/inst/private/are_bounds.m A fuzzy-logic-toolkit/inst/private/eval_rules_sugeno.m A fuzzy-logic-toolkit/inst/private/is_output_index.m A fuzzy-logic-toolkit/inst/private/is_format.m A fuzzy-logic-toolkit/inst/private/evalfis_private.m A fuzzy-logic-toolkit/inst/private/is_row_vector.m A fuzzy-logic-toolkit/inst/private/is_rule_index_list.m A fuzzy-logic-toolkit/inst/private/is_mf_index.m A fuzzy-logic-toolkit/inst/private/fuzzify_input.m A fuzzy-logic-toolkit/inst/private/is_int.m A fuzzy-logic-toolkit/inst/private/eval_rules_mamdani.m A fuzzy-logic-toolkit/inst/private/are_mf_params.m A fuzzy-logic-toolkit/inst/private/aggregate_output_mamdani.m A fuzzy-logic-toolkit/inst/private/is_string.m A fuzzy-logic-toolkit/inst/private/is_mf_struct.m A fuzzy-logic-toolkit/inst/private/is_domain.m A fuzzy-logic-toolkit/inst/private/probor.m A fuzzy-logic-toolkit/inst/private/evalmf_private.m A fuzzy-logic-toolkit/inst/private/is_var_index.m A fuzzy-logic-toolkit/inst/private/is_fis.m A fuzzy-logic-toolkit/inst/private/is_input_matrix.m A fuzzy-logic-toolkit/inst/private/is_language.m A fuzzy-logic-toolkit/inst/private/defuzzify_output_sugeno.m A fuzzy-logic-toolkit/inst/addrule.m Added Paths: ----------- trunk/octave-forge/main/fuzzy-logic-toolkit/ trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX trunk/octave-forge/main/fuzzy-logic-toolkit/inst/ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/dsigmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/dsigmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/evalfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/evalmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/evalmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gauss2mf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gauss2mf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gaussmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gaussmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gbellmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gbellmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gensurf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/getfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/heart-disease-risk.fis trunk/octave-forge/main/fuzzy-logic-toolkit/inst/heart_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/mamdani-tip-calculator.fis trunk/octave-forge/main/fuzzy-logic-toolkit/inst/mamdani_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/newfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/pimf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/pimf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/plotmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/aggregate_output_mamdani.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/aggregate_output_sugeno.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/are_bounds.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/are_input_indices.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/are_mf_params.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/defuzzify_output_mamdani.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/defuzzify_output_sugeno.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/eval_firing_strength.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/eval_rules_mamdani.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/eval_rules_sugeno.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/evalfis_private.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/evalmf_private.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/fuzzify_input.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_domain.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_fis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_format.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_grid_spec.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_input_matrix.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_int.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_io_struct.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_io_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_language.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_mf_index.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_mf_struct.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_mf_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_output_index.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_pos_int.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_real_matrix.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_ref_input.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_row_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_rule_index_list.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_rule_struct.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_rule_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_string.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_var_index.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/probor.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/psigmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/psigmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/readfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/rmmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/rmvar.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/setfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/showfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/showrule.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/showrule_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/sigmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/sigmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/smf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/smf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/sugeno-tip-calculator.fis trunk/octave-forge/main/fuzzy-logic-toolkit/inst/tipping_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/trapmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/trapmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/trimf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/trimf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/writefis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/zmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/zmf_demo.m Added: trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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 licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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 is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. Added: trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,11 @@ +Name: fuzzy-logic-toolkit +Version: 0.2 +Date: 2011-5-20 +Author: L. Markowsky <lm...@us...> +Maintainer: L. Markowsky <lm...@us...> +Title: Octave Fuzzy Logic Toolkit +Description: A mostly MATLAB-compatible fuzzy logic toolkit for Octave. +Depends: octave (>= 3.2.4) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,106 @@ +fuzzy-logic-toolkit >> Octave Fuzzy Logic Toolkit + +Evaluation + defuzz + evalfis + evalmf + +Plotting + gensurf + plotmf + +File Input/Output of Fuzzy Inference Systems + readfis + writefis + +Command-Line Creation and Modification of Fuzzy Inference Systems + addmf + addrule + addvar + newfis + rmmf + rmvar + setfis + +Text Representation of Fuzzy Inference Systems + getfis + showfis + showrule + +Membership Functions + dsigmf + gauss2mf + gaussmf + gbellmf + pimf + psigmf + sigmf + smf + trapmf + trimf + zmf + +Membership Function Demos + dsigmf_demo + evalmf_demo + gauss2mf_demo + gaussmf_demo + gbellmf_demo + pimf_demo + psigmf_demo + sigmf_demo + smf_demo + trapmf_demo + trimf_demo + zmf_demo + +Fuzzy Inference System Demos + addvar_demo + commandline_demo + heart_demo + mamdani_demo + showrule_demo + tipping_demo + +Fuzzification, Evaluation, and Defuzzification (Private) + aggregate_output_mamdani + aggregate_output_sugeno + defuzzify_output_mamdani + defuzzify_output_sugeno + eval_firing_strength + evalfis_private + evalmf_private + eval_rules_mamdani + eval_rules_sugeno + fuzzify_input + +Parameter Tests (Private) + are_bounds + are_input_indices + are_mf_params + is_domain + is_fis + is_format + is_grid_spec + is_input_matrix + is_int + is_io_struct + is_io_vector + is_language + is_mf_index + is_mf_struct + is_mf_vector + is_output_index + is_pos_int + is_real_matrix + is_ref_input + is_row_vector + is_rule_index_list + is_rule_struct + is_rule_vector + is_string + is_var_index + +Misc Functions (Private) + probor + Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,137 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{fis} =} addmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf_name}, @var{mf_type}, @var{mf_params}) +## +## Add a membership function to an existing FIS (Fuzzy Inference System) +## structure and return the updated FIS. +## +## The types of the arguments are expected to be: +## @itemize @w +## @item @var{fis}: +## an FIS structure +## @item @var{in_or_out}: +## 'input' or 'output' (case-insensitive) +## @item @var{var_index}: +## valid index of an FIS input/output variable +## @item @var{mf_name}: +## a string +## @item @var{mf_type}: +## a string +## @item @var{mf_params}: +## a vector +## @end itemize +## +## If @var{mf_type} is one of the built-in membership functions, then the +## number and values of the parameters must satisfy the membership function +## requirements for the specified @var{mf_type}. +## +## Note that addmf will allow the user to add membership functions or +## membership function names for a given input or output variable that +## duplicate mfs or mf names already entered. +## +## Also, constant and linear membership functions are not restricted to FIS +## structure outputs or to Sugeno-type FIS structures, and the result of using +## them for FIS inputs or Mamdani-type FIS outputs has not yet been tested. +## +## For example, the following code produces two figures, each showing a term +## set for one of the FIS input variables: +## +## @example +## @group +## ## Create new FIS. +## a = newfis ('Heart-Disease-Risk', 'sugeno', ... +## 'min', 'max', 'min', 'max', 'wtaver'); +## +## ## Add two inputs and their membership functions. +## a = addvar (a, 'input', 'LDL-Level', [0 300]); +## a = addmf (a, 'input', 1, 'Low', 'trapmf', ... +## [-1 0 90 110]); +## a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', ... +## [90 110 120 140]); +## a = addmf (a, 'input', 1, 'Borderline', 'trapmf', ... +## [120 140 150 170]); +## a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', ... +## [150 170 180 200]); +## a = addmf (a, 'input', 1, 'High', 'trapmf', ... +## [180 200 300 301]); +## +## a = addvar (a, 'input', 'HDL-Level', [0 100]); +## a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', ... +## [-1 0 35 45]); +## a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', ... +## [35 45 55 65]); +## a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', ... +## [55 65 100 101]); +## +## ## Plot the input membership functions. +## plotmf (a, 'input', 1); +## plotmf (a, 'input', 2); +## @end group +## @end example +## +## @noindent +## To run this code, type @t{addmf_demo} at the Octave prompt. +## +## @seealso{addmf_demo, rmmf, setfis} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy membership-function membership +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: addmf.m +## Version: 0.2 +## Last-Modified: 19 May 2011 + +function fis = addmf (fis, in_or_out, var_index, mf_name, mf_type, mf_params) + + ## If the caller did not supply 6 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 6) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf requires 6 arguments\n"); + elseif (!is_fis (fis)) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's first argument must be an FIS structure\n"); + elseif (!(is_string (in_or_out) && ... + ismember (tolower (in_or_out), {'input', 'output'}))) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's second argument must be 'input' or 'output'\n"); + elseif (!is_var_index (fis, in_or_out, var_index)) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's third argument must be a variable index\n"); + elseif (!(is_string (mf_name) && is_string (mf_type))) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's fourth and fifth arguments must be strings\n"); + elseif (!are_mf_params (mf_type, mf_params)) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's sixth argument must be a vector of parameters\n"); + endif + + ## Create a new membership function struct and update the FIS structure. + + new_mf = struct ('name', mf_name, 'type', mf_type, 'params', mf_params); + if (strcmp (tolower (in_or_out), 'input')) + fis.input(var_index).mf = [fis.input(var_index).mf, new_mf]; + else + fis.output(var_index).mf = [fis.output(var_index).mf, new_mf]; + endif + +endfunction Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,56 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Script File} {} addmf_demo +## +## Demonstrate the function @t{addmf} by executing the code +## given in the comment at the top of addmf.m. +## +## @seealso{addmf} +## @end deftypefn + +## Author: L. Markowsky +## Note: This example is based on an assignment written by +## Dr. Bruce Segee (University of Maine Dept. of ECE). +## Keywords: fuzzy-logic-toolkit fuzzy tests demos +## Directory: fuzzy-logic-toolkit/inst +## Filename: addmf_demo.m +## Version: 0.2 +## Last-Modified: 19 May 2011 + +## Create new FIS. +a = newfis ('Heart-Disease-Risk', 'sugeno', ... + 'min', 'max', 'min', 'max', 'wtaver'); + +## Add two inputs and their membership functions. +a = addvar (a, 'input', 'LDL-Level', [0 300]); +a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]); +a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', [90 110 120 140]); +a = addmf (a, 'input', 1, 'Borderline', 'trapmf', [120 140 150 170]); +a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', [150 170 180 200]); +a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]); + +a = addvar (a, 'input', 'HDL-Level', [0 100]); +a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]); +a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]); +a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]); + +## Plot the input membership functions. +plotmf (a, 'input', 1); +plotmf (a, 'input', 2); Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,110 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{fis} =} addrule (@var{fis}, @var{rule_matrix}) +## +## Add a list of rules to an existing FIS (Fuzzy Inference System) and return +## the updated FIS. +## +## Each row of the @var{rule_matrix} represents one rule and has the form: +## @example +## [in1_mf ... inM_mf out1_mf ... outN_mf weight connect] +## @end example +## +## @noindent +## where: +## +## @itemize @w +## @item +## in<i>_mf == membership function index for input i +## @item +## out<j>_mf == membership function index for output j +## @item +## weight == relative weight of the rule (0 <= weight <= 1) +## @item +## connect == antecedent connective (1 == and; 2 == or) +## @end itemize +## +## To express the hedge "not", prepend a minus sign to the membership function +## index. ("Not" is the only hedge supported.) To omit an input or output, use +## 0 for the membership function index. The consequent connective is always +## "and". +## +## @noindent +## For example, to express: +## @example +## "If input_1 is mf_2 or input_3 is not mf_1, +## then output_2 is mf_1." +## @end example +## +## @noindent +## with weight 1, the corresponding row of @var{rule_matrix} would be: +## @example +## [2 0 -1 0 1 1 2] +## @end example +## +## @noindent +## For a complete example that uses addrule, see commandline_demo.m. +## +## @seealso{commandline_demo, showrule} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy rule +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: addrule.m +## Version: 0.2 +## Last-Modified: 19 May 2011 + +function fis = addrule (fis, rule_matrix) + + ## If the caller did not supply 2 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 2) + puts ("Type 'help addrule' for more information.\n"); + error ("addrule requires 2 arguments\n"); + elseif (!is_fis (fis)) + puts ("Type 'help addrule' for more information.\n"); + error ("addrule's first argument must be an FIS structure\n"); + elseif (!is_real_matrix (rule_matrix)) + puts ("Type 'help addrule' for more information.\n"); + error ("addrule's second argument must be a matrix of real numbers\n"); + endif + + ## For each row in the rule_matrix, create a new rule struct and update + ## the FIS structure. + + num_inputs = columns (fis.input); + num_outputs = columns (fis.output); + + for i = 1 : rows (rule_matrix) + antecedent = rule_matrix(i, 1 : num_inputs); + consequent = rule_matrix(i, (num_inputs+1) : (num_inputs+num_outputs)); + weight = rule_matrix(i, num_inputs + num_outputs + 1); + connection = rule_matrix(i, num_inputs + num_outputs + 2); + new_rules(i) = struct ('antecedent', antecedent, ... + 'consequent', consequent, ... + 'weight', weight, ... + 'connection', connection); + endfor + + fis.rule = [fis.rule, new_rules]; + +endfunction Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,100 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{fis} =} addvar (@var{fis}, @var{in_or_out}, @var{var_name}, @var{var_range}) +## +## Add an input or output variable to an existing FIS (Fuzzy Inference System) +## structure and return the updated FIS. +## +## The types of the arguments are expected to be: +## @itemize @w +## @item +## @var{fis} - an FIS structure +## @item +## @var{in_or_out} - either 'input' or 'output' (case-insensitive) +## @item +## @var{var_name} - a string +## @item +## @var{var_range} - a vector [x1 x2] of two real numbers +## @end itemize +## +## The vector components x1 and x2, which must also satisfy x1 <= x2, +## specify the lower and upper bounds of the variable's domain. +## +## For example: +## @example +## @group +## a = newfis('Heart-Disease-Risk', 'sugeno', ... +## 'min', 'max', 'min', 'max', 'wtaver'); +## a = addvar(a, 'input', 'LDL-Level', [0 300]); +## getfis(a, 'input', 1); +## ==> Name = LDL_Level +## NumMFs = 0 +## MFLabels = +## Range = [0 300] +## @end group +## @end example +## +## @noindent +## To run this code, type @t{addvar_demo} at the Octave prompt. +## +## @seealso{addvar_demo} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy variable +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: addvar.m +## Version: 0.2 +## Last-Modified: 19 May 2011 + +function fis = addvar (fis, in_or_out, var_name, var_range) + + ## If the caller did not supply 4 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 4) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar requires 4 arguments\n"); + elseif (!is_fis (fis)) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's first argument must be an FIS structure\n"); + elseif (!(is_string (in_or_out) && ... + ismember (tolower (in_or_out), {'input', 'output'}))) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's second argument must be 'input' or 'output'\n"); + elseif (!is_string (var_name)) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's third argument must be a string\n\n"); + elseif (!are_bounds (var_range)) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's fourth argument must specify variable bounds\n"); + endif + + ## Create a new variable struct and update the FIS input or output + ## variable list. + + new_variable = struct ('name', var_name, 'range', var_range, 'mf', []); + if (strcmp (tolower (in_or_out), 'input')) + fis.input = [fis.input, new_variable]; + else + fis.output = [fis.output, new_variable]; + endif + +endfunction Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,38 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Script File} {} addvar_demo +## +## Demonstrate the function @t{addvar} by executing the code given in the +## comment at the top of addvar.m. +## +## @seealso{addvar} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy tests demos +## Directory: fuzzy-logic-toolkit/inst +## Filename: addvar_demo.m +## Version: 0.2 +## Last-Modified: 19 May 2011 + +a = newfis ('Heart-Disease-Risk', 'sugeno', ... + 'min', 'max', 'min', 'max', 'wtaver'); +a = addvar (a, 'input', 'LDL-Level', [0 300]); +getfis (a, 'input', 1); Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,103 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Script File} {} commandline_demo +## +## Demonstrate the use of command-line functions to: +## @itemize @minus +## @item +## build an FIS +## @item +## plot the input and output membership functions +## @item +## plot an output as a function of two inputs +## @item +## display information about the FIS in the Octave window +## @end itemize +## +## @seealso{addmf_demo, addvar_demo, heart_demo, mamdani_demo, tipping_demo} +## @end deftypefn + +## Author: L. Markowsky +## Note: This example is based on an assignment written by +## Dr. Bruce Segee (University of Maine Dept. of ECE). +## Keywords: fuzzy-logic-toolkit fuzzy tests demos +## Directory: fuzzy-logic-toolkit/inst +## Filename: commandline_demo.m +## Version: 0.2 +## Last-Modified: 19 May 2011 + +## Create new FIS. +a = newfis ('Heart-Disease-Risk', 'sugeno', ... + 'min', 'max', 'min', 'max', 'wtaver'); + +## Add two inputs and their membership functions. +a = addvar (a, 'input', 'LDL-Level', [0 300]); +a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]); +a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', [90 110 120 140]); +a = addmf (a, 'input', 1, 'Borderline', 'trapmf', [120 140 150 170]); +a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', [150 170 180 200]); +a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]); + +a = addvar (a, 'input', 'HDL-Level', [0 100]); +a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]); +a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]); +a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]); + +## Plot the input membership functions. +plotmf (a, 'input', 1); +plotmf (a, 'input', 2); + +## Add one output and its membership functions. +a = addvar (a, 'output', 'Heart-Disease-Risk', [0 10]); +a = addmf (a, 'output', 1, 'No-Risk', 'constant', 0); +a = addmf (a, 'output', 1, 'Low-Risk', 'constant', 2.5); +a = addmf (a, 'output', 1, 'Medium-Risk', 'constant', 5); +a = addmf (a, 'output', 1, 'High-Risk', 'constant', 7.5); +a = addmf (a, 'output', 1, 'Extreme-Risk', 'constant', 10); + +## Plot the output membership functions. +plotmf (a, 'output', 1); + +## Add 15 rules and display them in verbose format. +a = addrule (a, [1 1 3 1 1; ... + 1 2 2 1 1; ... + 1 3 1 1 1; ... + 2 1 3 1 1; ... + 2 2 2 1 1; ... + 2 3 2 1 1; ... + 3 1 4 1 1; ... + 3 2 3 1 1; ... + 3 3 2 1 1; ... + 4 1 4 1 1; ... + 4 2 4 1 1; ... + 4 3 3 1 1; ... + 5 1 5 1 1; ... + 5 2 4 1 1; ... + 5 3 3 1 1]); +puts ("\nOutput of showrule(a):\n\n"); +showrule (a); + +## Plot the output as a function of the two inputs. +gensurf (a); + +## Show the FIS in the Octave window. +puts ("\nOutput of showfis(a):\n\n"); +showfis (a); + Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m 2011-05-25 15:26:19 UTC (rev 8286) @@ -0,0 +1,250 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{crisp_x} =} defuzz (@var{x}, @var{y}, @var{defuzz_method}) +## @deftypefnx {Function File} {@var{crisp_x} =} defuzz (@var{[x1 x2 ... xn]}, @var{[y1 y2 ... yn]}, @var{defuzz_method}) +## +## Return the defuzzified (crisp) value of @var{x} using the defuzzification +## method specified by the third argument for the given domain (@var{x} or +## @var{[x1 x2 ... xn]}) and y-values (@var{y} or @var{[y1 y2 ... yn]}). +## +## The arguments @var{x} and @var{y} must be either two real numbers or +## two equal-length, non-empty vectors of reals, with the elements of @var{x} +## strictly increasing. @var{defuzz_method} must be a (case-sensitive) string +## corresponding to a defuzzification method. Defuzz handles both built-in +## and custom defuzzification methods. +## +## The built-in defuzzification methods are: +## @table @samp +## @item centroid +## Return the x-value of the centroid. +## @item bisector +## Return the x-value of the vertical bisector of the area. +## @item mom +## Return the mean x-value of the points with maximum y-values. +## @item som +## Return the smallest (absolute) x-value of the points with maximum y-values. +## @item lom +## Return the largest (absolute) x-value of the points with maximum y-values. +## @item wtaver +## Return the weighted average of the x-values, with the y-values used as +## weights. +## @item wtsum +## Return the weighted sum of the x-values, with the y-values used as weights. +## @end table +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy defuzzification +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: defuzz.m +## Version: 0.2 +## Last-Modified: 19 May 2011 + +##------------------------------------------------------------------------------ + +function crisp_x = defuzz (x, y, defuzz_method) + + ## If the caller did not supply 3 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 3) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz requires 3 arguments\n"); + elseif (!is_domain (x)) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz's first argument must be a valid domain\n"); + elseif (!(isvector (y) && isreal (y) && length (x) == length (y))) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz's second argument must be a real number or vector\n"); + elseif (!is_string (defuzz_method)) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz's third argument must be a string\n"); + endif + + ## Calculate and return the defuzzified (crisp_x) value using the method + ## specified by the argument defuzz_method. + + crisp_x = str2func (defuzz_method) (x, y); + +endfunction + +##------------------------------------------------------------------------------ +## Usage: crisp_x = centroid (x, y) +## crisp_x = centroid ([x1 x2 ... xn], [y1 y2 ... yn]) +## +## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values +## (y or [y1 y2 ... yn]), return the x-value of the centroid of the region +## described by the points (xi, yi). +## +## Both arguments are assumed to be reals or non-empty vectors of reals. +## In addition, x is assumed to be strictly increasing, and x and y are assumed +## to be of equal length. +##------------------------------------------------------------------------------ + +function crisp_x = centroid (x, y) + + crisp_x = trapz (x, x.*y) / trapz (x, y); + +endfunction + +##------------------------------------------------------------------------------ +## Usage: crisp_x = bisector (x, y) +## crisp_x = bisector ([x1 x2 ... xn], [y1 y2 ... yn]) +## +## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values +## (y or [y1 y2 ... yn]), return the x-value of a bisector of the region +## described by the points (xi, yi). +## +## Both arguments are assumed to be reals or non-empty vectors of reals. +## In addition, x is assumed to be strictly increasing, and x and y are assumed +## to be of equal length. +##------------------------------------------------------------------------------ + +function crisp_x = bisector (x, y) + + ## Find the bisector using a binary search. To ensure that the function + ## terminates, add a counter to limit the iterations to the length of the + ## vectors x and y. + + half_area = trapz (x, y) / 2; + x_len = length (x); + upper = x_len; + lower = 1; + count = 1; + + while ((lower <= upper) && (count++ < x_len)) + midpoint = round ((lower + upper)/2); + left_domain = [ones(1, midpoint), zeros(1, x_len-midpoint)]; + left_y_vals = left_domain .* y; +... [truncated message content] |
From: <ad...@us...> - 2011-06-01 19:35:43
|
Revision: 8300 http://octave.svn.sourceforge.net/octave/?rev=8300&view=rev Author: adb014 Date: 2011-06-01 19:35:33 +0000 (Wed, 01 Jun 2011) Log Message: ----------- Work in progress replacement for the galois field type in the communications package, using the Octave OOP functionality Modified Paths: -------------- trunk/octave-forge/main/gsl/doc/.ps Added Paths: ----------- trunk/octave-forge/main/galois/ trunk/octave-forge/main/galois/COPYING trunk/octave-forge/main/galois/DESCRIPTION trunk/octave-forge/main/galois/INDEX trunk/octave-forge/main/galois/Makefile trunk/octave-forge/main/galois/inst/ trunk/octave-forge/main/galois/inst/@gf/ trunk/octave-forge/main/galois/inst/@gf/all.m trunk/octave-forge/main/galois/inst/@gf/and.m trunk/octave-forge/main/galois/inst/@gf/any.m trunk/octave-forge/main/galois/inst/@gf/conv.m trunk/octave-forge/main/galois/inst/@gf/convmtx.m trunk/octave-forge/main/galois/inst/@gf/ctranspose.m trunk/octave-forge/main/galois/inst/@gf/deconv.m trunk/octave-forge/main/galois/inst/@gf/dftmtx.m trunk/octave-forge/main/galois/inst/@gf/diag.m trunk/octave-forge/main/galois/inst/@gf/display.m trunk/octave-forge/main/galois/inst/@gf/double.m trunk/octave-forge/main/galois/inst/@gf/end.m trunk/octave-forge/main/galois/inst/@gf/eq.m trunk/octave-forge/main/galois/inst/@gf/exp.m trunk/octave-forge/main/galois/inst/@gf/fft.m trunk/octave-forge/main/galois/inst/@gf/filter.m trunk/octave-forge/main/galois/inst/@gf/finite.m trunk/octave-forge/main/galois/inst/@gf/ge.m trunk/octave-forge/main/galois/inst/@gf/gf.m trunk/octave-forge/main/galois/inst/@gf/gt.m trunk/octave-forge/main/galois/inst/@gf/horzcat.m trunk/octave-forge/main/galois/inst/@gf/ifft.m trunk/octave-forge/main/galois/inst/@gf/isempty.m trunk/octave-forge/main/galois/inst/@gf/isinf.m trunk/octave-forge/main/galois/inst/@gf/isna.m trunk/octave-forge/main/galois/inst/@gf/isnan.m trunk/octave-forge/main/galois/inst/@gf/isprimitive.m trunk/octave-forge/main/galois/inst/@gf/le.m trunk/octave-forge/main/galois/inst/@gf/length.m trunk/octave-forge/main/galois/inst/@gf/log.m trunk/octave-forge/main/galois/inst/@gf/lt.m trunk/octave-forge/main/galois/inst/@gf/minpol.m trunk/octave-forge/main/galois/inst/@gf/minus.m trunk/octave-forge/main/galois/inst/@gf/mtimes.m trunk/octave-forge/main/galois/inst/@gf/ne.m trunk/octave-forge/main/galois/inst/@gf/not.m trunk/octave-forge/main/galois/inst/@gf/numel.m trunk/octave-forge/main/galois/inst/@gf/or.m trunk/octave-forge/main/galois/inst/@gf/plus.m trunk/octave-forge/main/galois/inst/@gf/power.m trunk/octave-forge/main/galois/inst/@gf/private/ trunk/octave-forge/main/galois/inst/@gf/private/cachefield.m trunk/octave-forge/main/galois/inst/@gf/private/modn.m trunk/octave-forge/main/galois/inst/@gf/private/promote_and_check.m trunk/octave-forge/main/galois/inst/@gf/rdivide.m trunk/octave-forge/main/galois/inst/@gf/reshape.m trunk/octave-forge/main/galois/inst/@gf/roots.m trunk/octave-forge/main/galois/inst/@gf/size.m trunk/octave-forge/main/galois/inst/@gf/sqrt.m trunk/octave-forge/main/galois/inst/@gf/subsasgn.m trunk/octave-forge/main/galois/inst/@gf/subsindex.m trunk/octave-forge/main/galois/inst/@gf/subsref.m trunk/octave-forge/main/galois/inst/@gf/times.m trunk/octave-forge/main/galois/inst/@gf/transpose.m trunk/octave-forge/main/galois/inst/@gf/uminus.m trunk/octave-forge/main/galois/inst/@gf/uplus.m trunk/octave-forge/main/galois/inst/@gf/vertcat.m trunk/octave-forge/main/galois/inst/convmtx.m trunk/octave-forge/main/galois/inst/cosets.m trunk/octave-forge/main/galois/inst/gftable.m trunk/octave-forge/main/galois/inst/isgalois.m trunk/octave-forge/main/galois/inst/rsdecof.m trunk/octave-forge/main/galois/inst/rsencof.m trunk/octave-forge/main/galois/inst/rsgenpoly.m trunk/octave-forge/main/galois/src/ trunk/octave-forge/main/galois/src/Makefile trunk/octave-forge/main/galois/src/__gfilter__.cc trunk/octave-forge/main/galois/src/__gmtimes__.cc trunk/octave-forge/main/galois/src/isprimitive.cc trunk/octave-forge/main/galois/src/primpoly.cc Added: trunk/octave-forge/main/galois/COPYING =================================================================== --- trunk/octave-forge/main/galois/COPYING (rev 0) +++ trunk/octave-forge/main/galois/COPYING 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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 licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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 is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. Property changes on: trunk/octave-forge/main/galois/COPYING ___________________________________________________________________ Added: svn:executable + * Added: trunk/octave-forge/main/galois/DESCRIPTION =================================================================== --- trunk/octave-forge/main/galois/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/galois/DESCRIPTION 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,12 @@ +Name: Galois Field +Version: 0.0.1 +Date: 2008-11-14 +Author: David Bateman +Maintainer: David Bateman +Title: Galois Field Test Package +Description: Test package for new implementation galois field code. +Depends: octave (>= 3.4.0) +Depends: signal (>= 1.0.0) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Property changes on: trunk/octave-forge/main/galois/DESCRIPTION ___________________________________________________________________ Added: svn:executable + * Added: trunk/octave-forge/main/galois/INDEX =================================================================== --- trunk/octave-forge/main/galois/INDEX (rev 0) +++ trunk/octave-forge/main/galois/INDEX 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,59 @@ +galois >> Galois +Galois Fields of Even Characateristic + + - = Addition and subtraction in a Galois Field. + * / \ = Matrix multiplication and division of Galois arrays. + .* ./ .\ = Element by element multiplication and division of Galois arrays. + ** ^ = Matrix exponentiation of Galois arrays. + .** .^ = Element by element matrix exponentiation of Galois arrays. + ' .' = Matrix transpose of Galois arrays. + == ~= != > >= < <= = Logical operators on Galois arrays. + all + and + any + conv + convmtx + cosets + deconv + dftmtx + diag + exp + ge + gf + gt + fft + filter + ifft + inv + inverse + isempty + isequal + isgalois + isprimitive + le + length + log + lt + minpol + mtimes + or + power + reshape + roots + polyval + primpoly + size +To be implemented + det + lu + rank + prod + sum + sumsq + ldivide + mldivide + mpower + mrdivide + bchdeco + bchenco + rsdec + rsenc Added: trunk/octave-forge/main/galois/Makefile =================================================================== --- trunk/octave-forge/main/galois/Makefile (rev 0) +++ trunk/octave-forge/main/galois/Makefile 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,29 @@ +sinclude ../../Makeconf + + +PKG_FILES = COPYING DESCRIPTION INDEX $(wildcard src/*) \ + $(wildcard inst/*) +SUBDIRS = src + +.PHONY: $(SUBDIRS) + +pre-pkg:: + @for _dir in $(SUBDIRS); do \ + $(MAKE) -C $$_dir pre-pkg; \ + done + +clean: + @for _dir in $(SUBDIRS); do \ + $(MAKE) -C $$_dir $(MAKECMDGOALS); \ + done + +build:: + @for _dir in $(SUBDIRS); do \ + $(MAKE) -C $$_dir all; \ + done + +check:: build + @$(RM) __check__.m + @find . -name "*.m" -exec grep %\! {} \; -o -name "*.cc" -exec grep %\! {} \; >> __check__.m + @octave -q --eval 'addpath("./src"); addpath("./inst"); test("__check__","normal",stdout);' + @$(RM) __check__.m Property changes on: trunk/octave-forge/main/galois/Makefile ___________________________________________________________________ Added: svn:executable + * Added: trunk/octave-forge/main/galois/inst/@gf/all.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/all.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/all.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,27 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} all (@var{x}, @var{dim}) +## For a Galois array @var{x}, return true if all of the elements along the +## dimension @var{dim} are non-zero. +## @end deftypefn + +function y = all (g, varargin) + y = all (g._x, varargin{:}); +endfunction + +%!assert (all (gf (0:3, 2)), false) +%!assert (all (gf (ones(1,4), 2)), true) Added: trunk/octave-forge/main/galois/inst/@gf/and.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/and.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/and.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,28 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} gt (@var{a}, @var{b}) +## Element-by-element logical and operator for Galois arrays. +## @end deftypefn + +function y = and (a, b) + [a, b] = promote_and_check (a, b); + y = a._x & b._x; +endfunction + +%!assert(gf(1) & gf(1), true) +%!assert(gf(0) & gf(1), false) +%!assert(gf(0) & gf(0), false) Added: trunk/octave-forge/main/galois/inst/@gf/any.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/any.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/any.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,27 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} any (@var{x}, @var{dim}) +## For a Galois array @var{x}, return true if any of the elements along the +## dimension @var{dim} are non-zero. +## @end deftypefn + +function y = any (g, varargin) + y = any (g._x, varargin{:}); +endfunction + +%!assert (any (gf (0:3, 2)), true) +%!assert (any (gf (zeros(1,4), 2)), false) Added: trunk/octave-forge/main/galois/inst/@gf/conv.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/conv.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/conv.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,90 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} conv (@var{a}, @var{b}) +## Convolve two Galois vectors. +## +## @code{y = conv (a, b)} returns a vector of length equal to +## @code{length (a) + length (b) - 1}. +## If @var{a} and @var{b} are polynomial coefficient vectors, @code{conv} +## returns the coefficients of the product polynomial. +## @end deftypefn +## @seealso{deconv} + +function y = conv (a, b) + + if (nargin != 2) + usage ("conv(a, b)"); + endif + + if (!isgalois (a) && !isgalois (b)) + error("conv: at least one argument must be a galois variable"); + elseif (!isgalois (a)) + a = gf(a, b._m, b._prim_poly); + elseif (!isgalois (b)) + b = gf(b, a._m, a._prim_poly); + elseif (a._m != b._m && a._prim_poly != b._prim_poly) + error("conv: both vectors must be in the same galois field"); + endif + + if (min(size(a)) > 1 || min(size(b)) > 1) + error("conv: both arguments must be vectors"); + endif + + la = length (a); + lb = length (b); + + ly = la + lb - 1; + + ## Ensure that both vectors are row vectors. + if (rows (a) > 1) + a = reshape (a, 1, la); + endif + if (rows (b) > 1) + b = reshape (b, 1, lb); + endif + + ## Use the shortest vector as the coefficent vector to filter. + if (la < lb) + if (ly > lb) + ## Can't concatenate galois variables like this yet + ## x = [b, (zeros (1, ly - lb))]; + x = gf([b, (zeros (1, ly - lb))], b._m, b._prim_poly); + else + x = b; + endif + y = filter (a, 1, x); + else + if(ly > la) + ## Can't concatenate galois variables like this yet + ## x = [a, (zeros (1, ly - la))]; + x = gf([a, (zeros (1, ly - la))], a._m, a._prim_poly); + else + x = a; + endif + y = filter (b, 1, x); + endif + +endfunction + +%!test +%! poly1 = gf([2,4,5,1],3); +%! poly2 = gf([1,2],3); +%! mulpoly = conv(poly1, poly2); ## multiplication +%! poly3 = [poly,remd] = deconv(mulpoly, poly2); +%! assert (isequal(poly1,poly3)) +%! assert (!any (remd)) + Added: trunk/octave-forge/main/galois/inst/@gf/convmtx.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/convmtx.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/convmtx.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,57 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} convmtx (@var{a}, @var{n}) +## +## Create matrix to perform repeated convolutions with the same vector +## in a Galois Field. If @var{a} is a column vector and @var{x} is a +## column vector of length @var{n}, in a Galois Field then +## +## @code{convmtx(@var{a}, @var{n}) * @var{x}} +## +## gives the convolution of of @var{a} and @var{x} and is the +## same as @code{conv(@var{a}, @var{x})}. The difference is if +## many vectors are to be convolved with the same vector, then +## this technique is possibly faster. +## +## Similarly, if @var{a} is a row vector and @var{x} is a row +## vector of length @var{n}, then +## +## @code{@var{x} * convmtx(@var{a}, @var{n})} +## +## is the same as @code{conv(@var{x}, @var{a})}. +## @end deftypefn +## @seealso{conv} + +function b = convmtx (a, n) + + if (!isgalois (a)) + error("convmtx: argument must be a galois variable"); + endif + + b = gf(convmtx(a._x, n), a._m, a._prim_poly); +endfunction + +%!test +%! grow = gf (0:7, 3); +%! b = gf([1,0,0,1,0,1,0,1],3); +%! a = gf([1,0,1,1],3); +%! x = gf([1,zeros(1,99)],3); +%! y1 = conv(grow+1, grow); +%! y2 = grow * convmtx(grow+1, length(grow)); +%! assert (all(y1 == y2)); + + Added: trunk/octave-forge/main/galois/inst/@gf/ctranspose.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/ctranspose.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/ctranspose.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,28 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} all (@var{x}, @var{dim}) +## Return the complex conjugate transpose of the Galois array @var{x}. +## This function is equivalent to @code{x'}. +## @end deftypefn + +function y = ctranspose (g); + y = g; + y._x = g._x '; +endfunction + +%!assert(ctranspose(gf(0:3,3)),gf([0:3]',3)) +%!assert(gf(0:3,3)',gf([0:3]',3)) Added: trunk/octave-forge/main/galois/inst/@gf/deconv.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/deconv.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/deconv.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,80 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} deconv (@var{y}, @var{a}) +## Deconvolve two Galois vectors. +## +## @code{[b, r] = deconv (y, a)} solves for @var{b} and @var{r} such that +## @code{y = gconv (a, b) + r}. +## +## If @var{y} and @var{a} are polynomial coefficient vectors, @var{b} will +## contain the coefficients of the polynomial quotient and @var{r} will be +## a remander polynomial of lowest order. +## @end deftypefn +## @seealso{gconv,deconv,conv} + +function [b, r] = deconv (y, a) + + + if (nargin != 2) + usage ("deconv(a, b)"); + endif + + if (!isgalois (y) && !isgalois (a)) + error("deconv: at least one argument must be a galois variable"); + elseif (!isgalois (y)) + y = gf(y, a._m, a._prim_poly); + elseif (!isgalois (a)) + a = gf(a, y._m, y._prim_poly); + elseif (a._m != y._m && a._prim_poly != y._prim_poly) + error("deconv: both vectors must be in the same galois field"); + endif + + if (min(size(a)) > 1 || min(size(y)) > 1) + error("deconv: both arguments must be vectors"); + endif + + la = length (a); + ly = length (y); + + lb = ly - la + 1; + + ## Ensure that both vectors are row vectors. + if (rows (a) > 1) + a = reshape (a, 1, la); + endif + if (rows (y) > 1) + y = reshape (y, 1, ly); + endif + + if (ly > la) + b = filter (y, a, [1, (zeros (1, ly - la))]); + elseif (ly == la) + b = filter (y, a, 1); + else + b = gf(0, y._m, y._prim_poly); + endif + + lc = la + length (b) - 1; + if (ly == lc) + r = y - conv (a, b); + else + ## Can't concatenate galois variables like this yet + ## r = [(zeros (1, lc - ly)), y] - conv (a, b); + r = gf([(zeros (1, lc - ly)), y], y._m, y._prim_poly) - conv (a, b); + endif + +endfunction Added: trunk/octave-forge/main/galois/inst/@gf/dftmtx.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/dftmtx.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/dftmtx.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,83 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{d} = } dftmtx (@var{a}) +## +## Form a matrix, that can be used to perform Fourier transforms in +## a Galois Field. +## +## Given that @var{a} is an element of the Galois Field GF(2^m), and +## that the minimum value for @var{k} for which @code{@var{a} ^ @var{k}} +## is equal to one is @code{2^m - 1}, then this function produces a +## @var{k}-by-@var{k} matrix representing the discrete Fourier transform +## over a Galois Field with respect to @var{a}. The Fourier transform of +## a column vector is then given by @code{dftmtx(@var{a}) * @var{x}}. +## +## The inverse Fourier transform is given by @code{dftmtx(1/@var{a})} +## @end deftypefn + +function d = dftmtx(a) + + if (nargin != 1) + error ("usage: d = dftmtx (a)"); + endif + + if (!isgalois(a)) + error("dftmtx: argument must be a galois variable"); + endif + + m = a._m; + prim = a._prim_poly; + n = 2^a._m - 1; + if (n > 255) + error ([ "dftmtx: argument must be in Galois Field GF(2^m), where" ... + " m is not greater than 8"]); + endif + + if (length(a) ~= 1) + error ("dftmtx: argument must be a scalar"); + endif + + mp = minpol(a); + if ((mp(1) ~= 1) || !isprimitive(mp)) + error("dftmtx: argument must be a primitive nth root of unity"); + endif + + step = log(a); + step = step._x; + row = exp(gf([0:n-1], m, prim)); + d = gf(zeros(n,n),m, prim); + for i=1:n; + d(i,:) = row .^ mod(step*(i-1),n); + end + +endfunction + +%!test +%! m = 3; +%! n = 2.^m - 1; +%! alph = gf(2,m); +%! x = gf(floor(2^m*rand(n,1)),m); +%! fm = dftmtx(alph); +%! ifm = dftmtx(1/alph); +%! y0 = fft(x); +%! y1 = fm * x; +%! assert(all (y0 == y1)) +%! z0 = gifft(y0); +%! z1 = ifm * y1; +%! assert(all (z0 == x)) +%! assert(all (z1 == x)) + Added: trunk/octave-forge/main/galois/inst/@gf/diag.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/diag.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/diag.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,53 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} diag (@var{v}, @var{k}) +## Return a diagonal matrix with Galois vector @var{v} on diagonal @var{k}. +## The second argument is optional. If it is positive, the vector is placed on +## the @var{k}-th super-diagonal. If it is negative, it is placed on the +## @var{-k}-th sub-diagonal. The default value of @var{k} is 0, and the +## vector is placed on the main diagonal. For example, +## +## @example +## diag (gf([1, 2, 3],2), 1) +## ans = +## GF(2^2) array. Primitive Polynomial = D^2+D+1 (decimal 7) +## +## Array elements = +## +## 0 1 0 0 +## 0 0 2 0 +## 0 0 0 3 +## 0 0 0 0 +## @end example +## @end deftypefn + +function y = diag (g, varargin) + y = g; + y._x = diag (y._x, varargin{:}); +endfunction + +%!assert(diag(gf([1; 2; 3], 3)), gf([1, 0, 0; 0, 2, 0; 0, 0, 3], 3)); +%!assert(diag (gf([1; 2; 3], 3), 1), gf([0, 1, 0, 0; 0, 0, 2, 0; 0, 0, 0, 3; 0, 0, 0, 0], 3)); +%!assert(diag (gf([1; 2; 3], 3), 2), gf([0, 0, 1, 0, 0; 0, 0, 0, 2, 0; 0, 0, 0, 0, 3; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0], 3)); +%!assert(diag (gf([1; 2; 3], 3),-1), gf([0, 0, 0, 0; 1, 0, 0, 0; 0, 2, 0, 0; 0, 0, 3, 0], 3)); +%!assert(diag (gf([1; 2; 3], 3),-2), gf([0, 0, 0, 0, 0; 0, 0, 0, 0, 0; 1, 0, 0, 0, 0; 0, 2, 0, 0, 0; 0, 0, 3, 0, 0], 3)); +%!assert(diag (gf([1, 0, 0; 0, 2, 0; 0, 0, 3], 3)), gf([1; 2; 3], 3)); +%!assert(diag (gf([0, 1, 0, 0; 0, 0, 2, 0; 0, 0, 0, 3; 0, 0, 0, 0], 3), 1), gf([1; 2; 3],3)); +%!assert(diag (gf([0, 0, 0, 0; 1, 0, 0, 0; 0, 2, 0, 0; 0, 0, 3, 0], 3), -1), gf([1; 2; 3], 3)); +%!assert(diag (gf(ones(1, 0), 3), 2), gf(zeros (2), 3)); +%!assert(diag (gf(1:3, 3), 4, 2), gf([1, 0; 0, 2; 0, 0; 0, 0], 3)); + Added: trunk/octave-forge/main/galois/inst/@gf/display.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/display.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/display.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,60 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} display (@var{g}) +## Displays a Galois array. +## @end deftypefn + +function display (g) + + if (!isempty (inputname(1))) + fprintf("%s = \n",inputname(1)); + endif + if (g._m == 1) + fprintf ("GF(2) array."); + else + fprintf ("GF(2^%d) array. Primitive Polynomial = ", g._m); + p = g._prim_poly; + m = g._m; + first = true; + for i = m + 1 : -1 : 1 + if (bitget (p, i) != 0) + if (i > 1) + if (first) + first = false; + fprintf("D") + else + fprintf("+D") + endif + if (i != 2) + fprintf("^%d", i - 1); + endif + else + if (first) + first = false; + fprintf("1"); + else + fprintf("+1"); + endif + endif + endif + endfor + fprintf (" (decimal %d)", p); + endif + fprintf("\n\nArray elements = \n\n"); + disp (g._x); + fprintf("\n"); +endfunction Added: trunk/octave-forge/main/galois/inst/@gf/double.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/double.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/double.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,23 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} double (@var{g}) +## Convert a Galois array to a double array. +## @end deftypefn + +function x = double (g) + x = double (g._x); +endfunction Added: trunk/octave-forge/main/galois/inst/@gf/end.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/end.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/end.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,34 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} end (@var{obj}, @var{ind}, @var{num}) +## Return the @code{end} index of a Galois array. +## @end deftypefn + +function r = end (obj, index_pos, num_indices) + dv = size (obj._x); + for i = (num_indices + 1) : length (dv) + dv(num_indices) *= dv(i); + endfor + if (index_pos <= length (dv)) + r = dv (index_pos); + else + r = 1; + endif +endfunction + +%!assert(gf(0:7,3)(end), gf(7,3)) +%!assert(gf([0, 1; 2, 3], 3)(end, 1:2), gf ([2, 3], 3)) Added: trunk/octave-forge/main/galois/inst/@gf/eq.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/eq.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/eq.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,27 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} eq (@var{a}, @var{b}) +## Equivalence operator for Galois arrays. +## @end deftypefn + +function y = eq (a, b) + [a, b] = promote_and_check (a, b); + y = a._x == b._x; +endfunction + +%!assert(gf(1) == gf(1), true) +%!assert(gf(0) == gf(1), false) Added: trunk/octave-forge/main/galois/inst/@gf/exp.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/exp.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/exp.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,30 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} exp (@var{x}) +## Compute the anti-logarithm for each element of @var{x} for a Galois +## array. +## @end deftypefn + +function y = exp (g) + if (any (g._x == g._n)) + warning ("exp: exp of 2^m-1 undefined in galois field"); + endif + y = g; + y._x = reshape (g._alpha_to (g._x + 1), size(g._x)); +endfunction + +%!assert(exp(gf(0:7,3)),gf([1, 2, 4, 3, 6, 7, 5, 0], 3)) Added: trunk/octave-forge/main/galois/inst/@gf/fft.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/fft.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/fft.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,50 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} fft (@var{x}) +## +## If @var{x} is a column vector, finds the FFT over the primitive element +## of the Galois Field of @var{x}. If @var{x} is in the Galois Field +## GF(2^@var{m}), then @var{x} must have @code{2^@var{m} - 1} elements. +## @end deftypefn + +function y = fft(x) + + if (nargin != 1) + error ("usage: y = fft (x)"); + endif + + if (!isgalois(x)) + error("fft: argument must be a galois variable"); + endif + + n = g._n; + if (n > 255) + error ([ "fft: argument must be in Galois Field GF(2^m), where", ... + " m is not greater than 8"]); + endif + + alph = gf(2, x._m, x._prim_poly); + [nr, nc] = size(x); + if ((nc == 1) && (nr == n)) + y = dftmtx(alph) * x; + elseif ((nc == n) && (nr == 1)) + y = (dftmtx(alph) * x')'; + else + error ("fft: argument must be a vector in GF(2^m) of length 2^m-1"); + endif + +endfunction Added: trunk/octave-forge/main/galois/inst/@gf/filter.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/filter.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/filter.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,131 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {y =} filter (@var{b}, @var{a}, @var{x}) +## @deftypefnx {Function File} {[@var{y}, @var{sf}] =} filter (@var{b}, @var{a}, @var{x}, @var{si}) +## +## Digital filtering of vectors in a Galois Field. Returns the solution to +## the following linear, time-invariant difference equation over a Galois +## Field: +## @iftex +## @tex +## $$ +## \\sum_{k=0}^N a_{k+1} y_{n-k} = \\sum_{k=0}^M b_{k+1} x_{n-k}, \\qquad +## 1 \\le n \\le P +## $$ +## @end tex +## @end iftex +## @ifinfo +## +## @smallexample +## N M +## SUM a(k+1) y(n-k) = SUM b(k+1) x(n-k) for 1<=n<=length(x) +## k=0 k=0 +## @end smallexample +## @end ifinfo +## +## @noindent +## where +## @ifinfo +## N=length(a)-1 and M=length(b)-1. +## @end ifinfo +## @iftex +## @tex +## $a \\in \\Re^{N-1}$, $b \\in \\Re^{M-1}$, and $x \\in \\Re^P$. +## @end tex +## @end iftex +## An equivalent form of this equation is: +## @iftex +## @tex +## $$ +## y_n = -\\sum_{k=1}^N c_{k+1} y_{n-k} + \\sum_{k=0}^M d_{k+1} x_{n-k}, \\qquad +## 1 \\le n \\le P +## $$ +## @end tex +## @end iftex +## @ifinfo +## +## @smallexample +## N M +## y(n) = - SUM c(k+1) y(n-k) + SUM d(k+1) x(n-k) for 1<=n<=length(x) +## k=1 k=0 +## @end smallexample +## @end ifinfo +## +## @noindent +## where +## @ifinfo +## c = a/a(1) and d = b/a(1). +## @end ifinfo +## @iftex +## @tex +## $c = a/a_1$ and $d = b/a_1$. +## @end tex +## @end iftex +## +## If the fourth argument @var{si} is provided, it is taken as the +## initial state of the system and the final state is returned as +## @var{sf}. The state vector is a column vector whose length is +## equal to the length of the longest coefficient vector minus one. +## If @var{si} is not supplied, the initial state vector is set to all +## zeros. +## @end deftypefn + +function [y, sf] = filter (b, a, x, si) + if (nargin == 3) + [a, b, x] = promote_and_check (a, b, x); + if (rows(x) == 1) + si = gf (zeros (1, max (length (a), length (b)) - 1), a._m, a._prim_poly); + else + si = gf (zeros (max (length (a), length (b)) - 1, 1), a._m, a._prim_poly); + endif + elseif (nargin > 4) + [a, b, x, si] = promote_and_check (a, b, x, si); + else + print_usage(); + endif + + if (! (isvector (a) && isvector (b) && isvector (x) && isvector (si))) + error ("filter: arguments must be vectors") + endif + + if (numel (a) > numel (b)) + if (rows (b) == 1) + b = [b, zeros(1,numel(a)-numel(b))]; + else + b = [b; zeros(numel(a)-numel(b)),1]; + endif + elseif (numel (a) < numel (b)) + if (rows (a) == 1) + a = [a, zeros(1,numel(b)-numel(a))]; + else + a = [a; zeros(numel(b)-numel(a)),1]; + endif + endif + + [y, sf] = __gfilter__ (b._x, a._x, x._x, si._x, a._m, a._alpha_to, a._index_of); + + sf = gf (sf, x._m, x._prim_poly); + y = gf (y, x._m, x._prim_poly); + +endfunction + +%!test +%! b = gf([2, 0, 0, 1, 0, 2, 0, 1], 2); +%! a = gf([2, 0, 1, 1], 2); +%! x = gf([1, zeros(1,20)], 2); +%! y = filter(b, a, x); +%! assert(y, gf([1, 0, 3, 0, 2, 3, 1, 0, 1, 3, 3, 1, 0, 1, 3, 3, 1, 0, 1, 3, 3], 2)) Added: trunk/octave-forge/main/galois/inst/@gf/finite.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/finite.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/finite.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,24 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 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/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {} finite (@var{x}) +## Returns a logical array of true values for a Galois Field as all +## elements are finite. +## @end deftypefn + +function y = finite (x) + y = true (size(x)); +endfunction Added: trunk/octave-forge/main/galois/inst/@gf/ge.m =================================================================== --- trunk/octave-forge/main/galois/inst/@gf/ge.m (rev 0) +++ trunk/octave-forge/main/galois/inst/@gf/ge.m 2011-06-01 19:35:33 UTC (rev 8300) @@ -0,0 +1,28 @@ +## Copyright (C) 2011 David Bateman +## +## 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 2 of the License, or +## (at your option) any later version. +## +## This ... [truncated message content] |
From: <lm...@us...> - 2011-06-08 18:30:31
|
Revision: 8327 http://octave.svn.sourceforge.net/octave/?rev=8327&view=rev Author: lmarkov Date: 2011-06-08 18:30:21 +0000 (Wed, 08 Jun 2011) Log Message: ----------- A fuzzy-logic-toolkit A fuzzy-logic-toolkit/DESCRIPTION A fuzzy-logic-toolkit/INDEX A fuzzy-logic-toolkit/COPYING A fuzzy-logic-toolkit/inst A fuzzy-logic-toolkit/inst/smf.m A fuzzy-logic-toolkit/inst/gauss2mf.m A fuzzy-logic-toolkit/inst/rmvar.m A fuzzy-logic-toolkit/inst/zmf.m A fuzzy-logic-toolkit/inst/writefis.m A fuzzy-logic-toolkit/inst/addvar.m A fuzzy-logic-toolkit/inst/sugeno-tip-calculator.fis A fuzzy-logic-toolkit/inst/gbellmf.m A fuzzy-logic-toolkit/inst/showrule.m A fuzzy-logic-toolkit/inst/gensurf.m A fuzzy-logic-toolkit/inst/dsigmf.m A fuzzy-logic-toolkit/inst/mamdani_demo.m A fuzzy-logic-toolkit/inst/showrule_demo.m A fuzzy-logic-toolkit/inst/addmf_demo.m A fuzzy-logic-toolkit/inst/getfis.m A fuzzy-logic-toolkit/inst/trimf.m A fuzzy-logic-toolkit/inst/showfis.m A fuzzy-logic-toolkit/inst/psigmf.m A fuzzy-logic-toolkit/inst/evalfis.m A fuzzy-logic-toolkit/inst/trapmf.m A fuzzy-logic-toolkit/inst/commandline_demo.m A fuzzy-logic-toolkit/inst/pimf.m A fuzzy-logic-toolkit/inst/newfis.m A fuzzy-logic-toolkit/inst/setfis.m A fuzzy-logic-toolkit/inst/plotmf.m A fuzzy-logic-toolkit/inst/rmmf.m A fuzzy-logic-toolkit/inst/sigmf.m A fuzzy-logic-toolkit/inst/addvar_demo.m A fuzzy-logic-toolkit/inst/gaussmf.m A fuzzy-logic-toolkit/inst/defuzz.m A fuzzy-logic-toolkit/inst/heart_demo.m A fuzzy-logic-toolkit/inst/heart-disease-risk.fis A fuzzy-logic-toolkit/inst/evalmf.m A fuzzy-logic-toolkit/inst/addmf.m A fuzzy-logic-toolkit/inst/mamdani-tip-calculator.fis A fuzzy-logic-toolkit/inst/readfis.m A fuzzy-logic-toolkit/inst/tipping_demo.m A fuzzy-logic-toolkit/inst/private A fuzzy-logic-toolkit/inst/private/is_io_vector.m A fuzzy-logic-toolkit/inst/private/is_rule_vector.m A fuzzy-logic-toolkit/inst/private/are_input_indices.m A fuzzy-logic-toolkit/inst/private/defuzzify_output_mamdani.m A fuzzy-logic-toolkit/inst/private/aggregate_output_sugeno.m A fuzzy-logic-toolkit/inst/private/is_ref_input.m A fuzzy-logic-toolkit/inst/private/is_grid_spec.m A fuzzy-logic-toolkit/inst/private/is_real_matrix.m A fuzzy-logic-toolkit/inst/private/eval_firing_strength.m A fuzzy-logic-toolkit/inst/private/is_io_struct.m A fuzzy-logic-toolkit/inst/private/is_pos_int.m A fuzzy-logic-toolkit/inst/private/is_rule_struct.m A fuzzy-logic-toolkit/inst/private/is_mf_vector.m A fuzzy-logic-toolkit/inst/private/are_bounds.m A fuzzy-logic-toolkit/inst/private/eval_rules_sugeno.m A fuzzy-logic-toolkit/inst/private/is_output_index.m A fuzzy-logic-toolkit/inst/private/is_format.m A fuzzy-logic-toolkit/inst/private/evalfis_private.m A fuzzy-logic-toolkit/inst/private/is_row_vector.m A fuzzy-logic-toolkit/inst/private/is_rule_index_list.m A fuzzy-logic-toolkit/inst/private/is_mf_index.m A fuzzy-logic-toolkit/inst/private/fuzzify_input.m A fuzzy-logic-toolkit/inst/private/is_int.m A fuzzy-logic-toolkit/inst/private/eval_rules_mamdani.m A fuzzy-logic-toolkit/inst/private/are_mf_params.m A fuzzy-logic-toolkit/inst/private/aggregate_output_mamdani.m A fuzzy-logic-toolkit/inst/private/is_string.m A fuzzy-logic-toolkit/inst/private/is_mf_struct.m A fuzzy-logic-toolkit/inst/private/is_domain.m A fuzzy-logic-toolkit/inst/private/probor.m A fuzzy-logic-toolkit/inst/private/evalmf_private.m A fuzzy-logic-toolkit/inst/private/is_var_index.m A fuzzy-logic-toolkit/inst/private/is_fis.m A fuzzy-logic-toolkit/inst/private/is_input_matrix.m A fuzzy-logic-toolkit/inst/private/is_language.m A fuzzy-logic-toolkit/inst/private/defuzzify_output_sugeno.m A fuzzy-logic-toolkit/inst/addrule.m Added Paths: ----------- trunk/octave-forge/main/fuzzy-logic-toolkit/ trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX trunk/octave-forge/main/fuzzy-logic-toolkit/inst/ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/dsigmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/evalfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/evalmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gauss2mf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gaussmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gbellmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/gensurf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/getfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/heart-disease-risk.fis trunk/octave-forge/main/fuzzy-logic-toolkit/inst/heart_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/mamdani-tip-calculator.fis trunk/octave-forge/main/fuzzy-logic-toolkit/inst/mamdani_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/newfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/pimf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/plotmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/aggregate_output_mamdani.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/aggregate_output_sugeno.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/are_bounds.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/are_input_indices.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/are_mf_params.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/defuzzify_output_mamdani.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/defuzzify_output_sugeno.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/eval_firing_strength.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/eval_rules_mamdani.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/eval_rules_sugeno.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/evalfis_private.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/evalmf_private.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/fuzzify_input.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_domain.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_fis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_format.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_grid_spec.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_input_matrix.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_int.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_io_struct.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_io_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_language.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_mf_index.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_mf_struct.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_mf_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_output_index.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_pos_int.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_real_matrix.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_ref_input.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_row_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_rule_index_list.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_rule_struct.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_rule_vector.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_string.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/is_var_index.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/private/probor.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/psigmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/readfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/rmmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/rmvar.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/setfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/showfis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/showrule.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/showrule_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/sigmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/smf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/sugeno-tip-calculator.fis trunk/octave-forge/main/fuzzy-logic-toolkit/inst/tipping_demo.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/trapmf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/trimf.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/writefis.m trunk/octave-forge/main/fuzzy-logic-toolkit/inst/zmf.m Added: trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/COPYING 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,337 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 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 licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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 is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. Added: trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/DESCRIPTION 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,11 @@ +Name: fuzzy-logic-toolkit +Version: 0.2.1 +Date: 2011-6-8 +Author: L. Markowsky <lm...@us...> +Maintainer: L. Markowsky <lm...@us...> +Title: Octave Fuzzy Logic Toolkit +Description: A mostly MATLAB-compatible fuzzy logic toolkit for Octave. +Depends: octave (>= 3.2.4) +Autoload: yes +License: GPL version 2 or later +Url: http://octave.sf.net Added: trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/INDEX 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,51 @@ +fuzzy-logic-toolkit >> Octave Fuzzy Logic Toolkit + +Evaluation + defuzz + evalfis + evalmf + +Plotting + gensurf + plotmf + +File Input/Output of Fuzzy Inference Systems + readfis + writefis + +Command-Line Creation and Modification of Fuzzy Inference Systems + addmf + addrule + addvar + newfis + rmmf + rmvar + setfis + +Text Representation of Fuzzy Inference Systems + getfis + showfis + showrule + +Membership Functions (with Demos) + dsigmf + gauss2mf + gaussmf + gbellmf + pimf + psigmf + sigmf + smf + trapmf + trimf + zmf + +Fuzzy Inference System Demos + addmf_demo + addvar_demo + commandline_demo + heart_demo + mamdani_demo + showrule_demo + tipping_demo + Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf.m 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,136 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{fis} =} addmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf_name}, @var{mf_type}, @var{mf_params}) +## +## Add a membership function to an existing FIS (Fuzzy Inference System) +## structure and return the updated FIS. +## +## The types of the arguments are expected to be: +## @itemize @w +## @item @var{fis}: +## an FIS structure +## @item @var{in_or_out}: +## 'input' or 'output' (case-insensitive) +## @item @var{var_index}: +## valid index of an FIS input/output variable +## @item @var{mf_name}: +## a string +## @item @var{mf_type}: +## a string +## @item @var{mf_params}: +## a vector +## @end itemize +## +## If @var{mf_type} is one of the built-in membership functions, then the +## number and values of the parameters must satisfy the membership function +## requirements for the specified @var{mf_type}. +## +## Note that addmf will allow the user to add membership functions or +## membership function names for a given input or output variable that +## duplicate mfs or mf names already entered. +## +## Also, constant and linear membership functions are not restricted to FIS +## structure outputs or to Sugeno-type FIS structures, and the result of using +## them for FIS inputs or Mamdani-type FIS outputs has not yet been tested. +## +## For example, the following code produces two figures, each showing a term +## set for one of the FIS input variables: +## +## @example +## @group +## ## Create new FIS. +## a = newfis ('Heart-Disease-Risk', 'sugeno', ... +## 'min', 'max', 'min', 'max', 'wtaver'); +## +## ## Add two inputs and their membership functions. +## a = addvar (a, 'input', 'LDL-Level', [0 300]); +## a = addmf (a, 'input', 1, 'Low', 'trapmf', ... +## [-1 0 90 110]); +## a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', ... +## [90 110 120 140]); +## a = addmf (a, 'input', 1, 'Borderline', 'trapmf', ... +## [120 140 150 170]); +## a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', ... +## [150 170 180 200]); +## a = addmf (a, 'input', 1, 'High', 'trapmf', ... +## [180 200 300 301]); +## +## a = addvar (a, 'input', 'HDL-Level', [0 100]); +## a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', ... +## [-1 0 35 45]); +## a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', ... +## [35 45 55 65]); +## a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', ... +## [55 65 100 101]); +## +## ## Plot the input membership functions. +## plotmf (a, 'input', 1); +## plotmf (a, 'input', 2); +## @end group +## @end example +## +## @noindent +## To run this code, type @t{addmf_demo} at the Octave prompt. +## +## @seealso{addmf_demo, rmmf, setfis} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy membership-function membership +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: addmf.m +## Last-Modified: 8 Jun 2011 + +function fis = addmf (fis, in_or_out, var_index, mf_name, mf_type, mf_params) + + ## If the caller did not supply 6 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 6) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf requires 6 arguments\n"); + elseif (!is_fis (fis)) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's first argument must be an FIS structure\n"); + elseif (!(is_string (in_or_out) && ... + ismember (tolower (in_or_out), {'input', 'output'}))) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's second argument must be 'input' or 'output'\n"); + elseif (!is_var_index (fis, in_or_out, var_index)) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's third argument must be a variable index\n"); + elseif (!(is_string (mf_name) && is_string (mf_type))) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's fourth and fifth arguments must be strings\n"); + elseif (!are_mf_params (mf_type, mf_params)) + puts ("Type 'help addmf' for more information.\n"); + error ("addmf's sixth argument must be a vector of parameters\n"); + endif + + ## Create a new membership function struct and update the FIS structure. + + new_mf = struct ('name', mf_name, 'type', mf_type, 'params', mf_params); + if (strcmp (tolower (in_or_out), 'input')) + fis.input(var_index).mf = [fis.input(var_index).mf, new_mf]; + else + fis.output(var_index).mf = [fis.output(var_index).mf, new_mf]; + endif + +endfunction Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addmf_demo.m 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,55 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Script File} {} addmf_demo +## +## Demonstrate the function @t{addmf} by executing the code +## given in the comment at the top of addmf.m. +## +## @seealso{addmf} +## @end deftypefn + +## Author: L. Markowsky +## Note: This example is based on an assignment written by +## Dr. Bruce Segee (University of Maine Dept. of ECE). +## Keywords: fuzzy-logic-toolkit fuzzy tests demos +## Directory: fuzzy-logic-toolkit/inst +## Filename: addmf_demo.m +## Last-Modified: 8 Jun 2011 + +## Create new FIS. +a = newfis ('Heart-Disease-Risk', 'sugeno', ... + 'min', 'max', 'min', 'max', 'wtaver'); + +## Add two inputs and their membership functions. +a = addvar (a, 'input', 'LDL-Level', [0 300]); +a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]); +a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', [90 110 120 140]); +a = addmf (a, 'input', 1, 'Borderline', 'trapmf', [120 140 150 170]); +a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', [150 170 180 200]); +a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]); + +a = addvar (a, 'input', 'HDL-Level', [0 100]); +a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]); +a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]); +a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]); + +## Plot the input membership functions. +plotmf (a, 'input', 1); +plotmf (a, 'input', 2); Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addrule.m 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,109 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{fis} =} addrule (@var{fis}, @var{rule_matrix}) +## +## Add a list of rules to an existing FIS (Fuzzy Inference System) and return +## the updated FIS. +## +## Each row of the @var{rule_matrix} represents one rule and has the form: +## @example +## [in1_mf ... inM_mf out1_mf ... outN_mf weight connect] +## @end example +## +## @noindent +## where: +## +## @itemize @w +## @item +## in<i>_mf == membership function index for input i +## @item +## out<j>_mf == membership function index for output j +## @item +## weight == relative weight of the rule (0 <= weight <= 1) +## @item +## connect == antecedent connective (1 == and; 2 == or) +## @end itemize +## +## To express the hedge "not", prepend a minus sign to the membership function +## index. ("Not" is the only hedge supported.) To omit an input or output, use +## 0 for the membership function index. The consequent connective is always +## "and". +## +## @noindent +## For example, to express: +## @example +## "If input_1 is mf_2 or input_3 is not mf_1, +## then output_2 is mf_1." +## @end example +## +## @noindent +## with weight 1, the corresponding row of @var{rule_matrix} would be: +## @example +## [2 0 -1 0 1 1 2] +## @end example +## +## @noindent +## For a complete example that uses addrule, see commandline_demo.m. +## +## @seealso{commandline_demo, showrule} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy rule +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: addrule.m +## Last-Modified: 19 May 2011 + +function fis = addrule (fis, rule_matrix) + + ## If the caller did not supply 2 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 2) + puts ("Type 'help addrule' for more information.\n"); + error ("addrule requires 2 arguments\n"); + elseif (!is_fis (fis)) + puts ("Type 'help addrule' for more information.\n"); + error ("addrule's first argument must be an FIS structure\n"); + elseif (!is_real_matrix (rule_matrix)) + puts ("Type 'help addrule' for more information.\n"); + error ("addrule's second argument must be a matrix of real numbers\n"); + endif + + ## For each row in the rule_matrix, create a new rule struct and update + ## the FIS structure. + + num_inputs = columns (fis.input); + num_outputs = columns (fis.output); + + for i = 1 : rows (rule_matrix) + antecedent = rule_matrix(i, 1 : num_inputs); + consequent = rule_matrix(i, (num_inputs+1) : (num_inputs+num_outputs)); + weight = rule_matrix(i, num_inputs + num_outputs + 1); + connection = rule_matrix(i, num_inputs + num_outputs + 2); + new_rules(i) = struct ('antecedent', antecedent, ... + 'consequent', consequent, ... + 'weight', weight, ... + 'connection', connection); + endfor + + fis.rule = [fis.rule, new_rules]; + +endfunction Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar.m 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,99 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{fis} =} addvar (@var{fis}, @var{in_or_out}, @var{var_name}, @var{var_range}) +## +## Add an input or output variable to an existing FIS (Fuzzy Inference System) +## structure and return the updated FIS. +## +## The types of the arguments are expected to be: +## @itemize @w +## @item +## @var{fis} - an FIS structure +## @item +## @var{in_or_out} - either 'input' or 'output' (case-insensitive) +## @item +## @var{var_name} - a string +## @item +## @var{var_range} - a vector [x1 x2] of two real numbers +## @end itemize +## +## The vector components x1 and x2, which must also satisfy x1 <= x2, +## specify the lower and upper bounds of the variable's domain. +## +## For example: +## @example +## @group +## a = newfis('Heart-Disease-Risk', 'sugeno', ... +## 'min', 'max', 'min', 'max', 'wtaver'); +## a = addvar(a, 'input', 'LDL-Level', [0 300]); +## getfis(a, 'input', 1); +## ==> Name = LDL_Level +## NumMFs = 0 +## MFLabels = +## Range = [0 300] +## @end group +## @end example +## +## @noindent +## To run this code, type @t{addvar_demo} at the Octave prompt. +## +## @seealso{addvar_demo} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy variable +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: addvar.m +## Last-Modified: 8 Jun 2011 + +function fis = addvar (fis, in_or_out, var_name, var_range) + + ## If the caller did not supply 4 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 4) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar requires 4 arguments\n"); + elseif (!is_fis (fis)) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's first argument must be an FIS structure\n"); + elseif (!(is_string (in_or_out) && ... + ismember (tolower (in_or_out), {'input', 'output'}))) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's second argument must be 'input' or 'output'\n"); + elseif (!is_string (var_name)) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's third argument must be a string\n\n"); + elseif (!are_bounds (var_range)) + puts ("Type 'help addvar' for more information.\n"); + error ("addvar's fourth argument must specify variable bounds\n"); + endif + + ## Create a new variable struct and update the FIS input or output + ## variable list. + + new_variable = struct ('name', var_name, 'range', var_range, 'mf', []); + if (strcmp (tolower (in_or_out), 'input')) + fis.input = [fis.input, new_variable]; + else + fis.output = [fis.output, new_variable]; + endif + +endfunction Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/addvar_demo.m 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,37 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Script File} {} addvar_demo +## +## Demonstrate the function @t{addvar} by executing the code given in the +## comment at the top of addvar.m. +## +## @seealso{addvar} +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy tests demos +## Directory: fuzzy-logic-toolkit/inst +## Filename: addvar_demo.m +## Last-Modified: 8 Jun 2011 + +a = newfis ('Heart-Disease-Risk', 'sugeno', ... + 'min', 'max', 'min', 'max', 'wtaver'); +a = addvar (a, 'input', 'LDL-Level', [0 300]); +getfis (a, 'input', 1); Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/commandline_demo.m 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,104 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Script File} {} commandline_demo +## +## Demonstrate the use of command-line functions to build and evaluate an FIS. +## +## The demo: +## @itemize @minus +## @item +## builds an FIS +## @item +## plots the input and output membership functions +## @item +## plots an output as a function of two inputs +## @item +## displays information about the FIS in the Octave window +## @end itemize +## +## @seealso{addmf_demo, addvar_demo, heart_demo, mamdani_demo, tipping_demo} +## @end deftypefn + +## Author: L. Markowsky +## Note: This example is based on an assignment written by +## Dr. Bruce Segee (University of Maine Dept. of ECE). +## Keywords: fuzzy-logic-toolkit fuzzy tests demos +## Directory: fuzzy-logic-toolkit/inst +## Filename: commandline_demo.m +## Last-Modified: 7 Jun 2011 + +## Create new FIS. +a = newfis ('Heart-Disease-Risk', 'sugeno', ... + 'min', 'max', 'min', 'max', 'wtaver'); + +## Add two inputs and their membership functions. +a = addvar (a, 'input', 'LDL-Level', [0 300]); +a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]); +a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', [90 110 120 140]); +a = addmf (a, 'input', 1, 'Borderline', 'trapmf', [120 140 150 170]); +a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', [150 170 180 200]); +a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]); + +a = addvar (a, 'input', 'HDL-Level', [0 100]); +a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]); +a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]); +a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]); + +## Plot the input membership functions. +plotmf (a, 'input', 1); +plotmf (a, 'input', 2); + +## Add one output and its membership functions. +a = addvar (a, 'output', 'Heart-Disease-Risk', [0 10]); +a = addmf (a, 'output', 1, 'No-Risk', 'constant', 0); +a = addmf (a, 'output', 1, 'Low-Risk', 'constant', 2.5); +a = addmf (a, 'output', 1, 'Medium-Risk', 'constant', 5); +a = addmf (a, 'output', 1, 'High-Risk', 'constant', 7.5); +a = addmf (a, 'output', 1, 'Extreme-Risk', 'constant', 10); + +## Plot the output membership functions. +plotmf (a, 'output', 1); + +## Add 15 rules and display them in verbose format. +a = addrule (a, [1 1 3 1 1; ... + 1 2 2 1 1; ... + 1 3 1 1 1; ... + 2 1 3 1 1; ... + 2 2 2 1 1; ... + 2 3 2 1 1; ... + 3 1 4 1 1; ... + 3 2 3 1 1; ... + 3 3 2 1 1; ... + 4 1 4 1 1; ... + 4 2 4 1 1; ... + 4 3 3 1 1; ... + 5 1 5 1 1; ... + 5 2 4 1 1; ... + 5 3 3 1 1]); +puts ("\nOutput of showrule(a):\n\n"); +showrule (a); + +## Plot the output as a function of the two inputs. +gensurf (a); + +## Show the FIS in the Octave window. +puts ("\nOutput of showfis(a):\n\n"); +showfis (a); + Added: trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m =================================================================== --- trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m (rev 0) +++ trunk/octave-forge/main/fuzzy-logic-toolkit/inst/defuzz.m 2011-06-08 18:30:21 UTC (rev 8327) @@ -0,0 +1,248 @@ +## Copyright (C) 2011 L. Markowsky <lm...@us...> +## +## This file is part of the fuzzy-logic-toolkit. +## +## The fuzzy-logic-toolkit 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. +## +## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, +## see <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{crisp_x} =} defuzz (@var{x}, @var{y}, @var{defuzz_method}) +## @deftypefnx {Function File} {@var{crisp_x} =} defuzz (@var{[x1 x2 ... xn]}, @var{[y1 y2 ... yn]}, @var{defuzz_method}) +## +## Return the defuzzified (crisp) value of @var{x} using the defuzzification +## method specified by the third argument for the given domain and y-values. +## +## The arguments @var{x} and @var{y} must be either two real numbers or +## two equal-length, non-empty vectors of reals, with the elements of @var{x} +## strictly increasing. @var{defuzz_method} must be a (case-sensitive) string +## corresponding to a defuzzification method. Defuzz handles both built-in +## and custom defuzzification methods. +## +## The built-in defuzzification methods are: +## @table @samp +## @item centroid +## Return the x-value of the centroid. +## @item bisector +## Return the x-value of the vertical bisector of the area. +## @item mom +## Return the mean x-value of the points with maximum y-values. +## @item som +## Return the smallest (absolute) x-value of the points with maximum y-values. +## @item lom +## Return the largest (absolute) x-value of the points with maximum y-values. +## @item wtaver +## Return the weighted average of the x-values, with the y-values used as +## weights. +## @item wtsum +## Return the weighted sum of the x-values, with the y-values used as weights. +## @end table +## @end deftypefn + +## Author: L. Markowsky +## Keywords: fuzzy-logic-toolkit fuzzy defuzzification +## Directory: fuzzy-logic-toolkit/inst/ +## Filename: defuzz.m +## Last-Modified: 7 Jun 2011 + +##------------------------------------------------------------------------------ + +function crisp_x = defuzz (x, y, defuzz_method) + + ## If the caller did not supply 3 argument values with the correct types, + ## print an error message and halt. + + if (nargin != 3) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz requires 3 arguments\n"); + elseif (!is_domain (x)) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz's first argument must be a valid domain\n"); + elseif (!(isvector (y) && isreal (y) && length (x) == length (y))) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz's second argument must be a real number or vector\n"); + elseif (!is_string (defuzz_method)) + puts ("Type 'help defuzz' for more information.\n"); + error ("defuzz's third argument must be a string\n"); + endif + + ## Calculate and return the defuzzified (crisp_x) value using the method + ## specified by the argument defuzz_method. + + crisp_x = str2func (defuzz_method) (x, y); + +endfunction + +##------------------------------------------------------------------------------ +## Usage: crisp_x = centroid (x, y) +## crisp_x = centroid ([x1 x2 ... xn], [y1 y2 ... yn]) +## +## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values +## (y or [y1 y2 ... yn]), return the x-value of the centroid of the region +## described by the points (xi, yi). +## +## Both arguments are assumed to be reals or non-empty vectors of reals. +## In addition, x is assumed to be strictly increasing, and x and y are assumed +## to be of equal length. +##------------------------------------------------------------------------------ + +function crisp_x = centroid (x, y) + + crisp_x = trapz (x, x.*y) / trapz (x, y); + +endfunction + +##------------------------------------------------------------------------------ +## Usage: crisp_x = bisector (x, y) +## crisp_x = bisector ([x1 x2 ... xn], [y1 y2 ... yn]) +## +## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values +## (y or [y1 y2 ... yn]), return the x-value of a bisector of the region +## described by the points (xi, yi). +## +## Both arguments are assumed to be reals or non-empty vectors of reals. +## In addition, x is assumed to be strictly increasing, and x and y are assumed +## to be of equal length. +##------------------------------------------------------------------------------ + +function crisp_x = bisector (x, y) + + ## Find the bisector using a binary search. To ensure that the function + ## terminates, add a counter to limit the iterations to the length of the + ## vectors x and y. + + half_area = trapz (x, y) / 2; + x_len = length (x); + upper = x_len; + lower = 1; + count = 1; + + while ((lower <= upper) && (count++ < x_len)) + midpoint = round ((lower + upper)/2); + left_domain = [ones(1, midpoint), zeros(1, x_len-midpoint)]; + left_y_vals = left_domain .* y; + left_area = trapz (x, left_y_vals); + error = left_area - half_area; + + if (error > 0) + upper = midpoint; + else + lower = midpoint; + endif + endwhile + + crisp_x = midpoint; + +endfunction + +##------------------------------------------------------------------------------ +## Usage: crisp_x = mom (x, y) +## crisp_x = mom ([x1 x2 ... xn], [y1 y2 ... yn]) +## +## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values +## (y or [y1 y2 ... yn]), return the "Mean of Maximum"; that is, return the +## average of the x-values corresponding to the maximum y-value in y. +## +## Both arguments are assumed to be reals or non-empty vectors of reals. +## In addition, x is assumed to be strictly increasing, and x and y are assumed +## to be of equal length. +##------------------------------------------------------------------------------ + +function crisp_x = mom (x, y) + + max_y = max (y); + y_val = @(y_val) if (y_val == max_y) 1 else 0 endif; + max_y_locations = arrayfun (y_val, y); + crisp_x = sum (x .* max_y_locations) / sum (max_y_locations); + +endfunction + +##------------------------------------------------------------------------------ +## Usage: crisp_x = som (x, y) +## crisp_x = som ([x1 x2 ... xn], [y1 y2 ... yn]) +## +## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values +## (y or [y1 y2 ... yn]), return the "Smallest of Maximum"; that is, return the +## smallest x-value corresponding to the maximum y-value in y. +## +## Both arguments are assumed to be reals or non-empty vectors of reals. +## In addition, x is assumed to be strictly increasing, and x and y are assumed +## to be of equal length. +##------------------------------------------------------------------------------ + +function crisp_x = som (x, y) + + max_y = max (y); + y_val = @(y_val) if (y_val == max_y) 1 else (NaN) endif; + max_y_locations = arrayfun (y_val, y); + crisp_x = min (x .* max_y_locations); + +endfunction + +##------------------------------------------------------------------------------ +## Usage: crisp_x = lom (x, y) +## crisp_x = lom ([x1 x2 ... xn], [y1 y2 ... yn]) +## +## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values +## (y or [y1 y2 ... yn]), return the "Largest of Maximum"; that is, return the +## largest x-value corresponding to the maximum y-value in y. +## +#... [truncated message content] |
From: <car...@us...> - 2011-09-26 16:32:54
|
Revision: 8604 http://octave.svn.sourceforge.net/octave/?rev=8604&view=rev Author: carandraug Date: 2011-09-26 16:32:47 +0000 (Mon, 26 Sep 2011) Log Message: ----------- Bill Denney has stepped down as maintainer of his packages Modified Paths: -------------- trunk/octave-forge/main/bioinfo/DESCRIPTION trunk/octave-forge/main/financial/DESCRIPTION trunk/octave-forge/main/missing-functions/DESCRIPTION trunk/octave-forge/main/time/DESCRIPTION Modified: trunk/octave-forge/main/bioinfo/DESCRIPTION =================================================================== --- trunk/octave-forge/main/bioinfo/DESCRIPTION 2011-09-26 15:05:52 UTC (rev 8603) +++ trunk/octave-forge/main/bioinfo/DESCRIPTION 2011-09-26 16:32:47 UTC (rev 8604) @@ -2,7 +2,7 @@ Version: 0.1.2 Date: 2009-05-06 Author: Bill Denney <bi...@de...> -Maintainer: Bill Denney <bi...@de...> +Maintainer: Octave Community Title: Bioinformatics Description: Bioinformatics manipulation Categories: Bioinformatics Modified: trunk/octave-forge/main/financial/DESCRIPTION =================================================================== --- trunk/octave-forge/main/financial/DESCRIPTION 2011-09-26 15:05:52 UTC (rev 8603) +++ trunk/octave-forge/main/financial/DESCRIPTION 2011-09-26 16:32:47 UTC (rev 8604) @@ -2,7 +2,7 @@ Version: 0.3.2 Date: 2008-08-17 Author: Bill Denney <bi...@de...>, Kurt Hornik <Kur...@wu...> -Maintainer: Bill Denney <bi...@de...> +Maintainer: Octave Community Title: Financial Description: Financial manipulation and plotting functions Categories: Financial Modified: trunk/octave-forge/main/missing-functions/DESCRIPTION =================================================================== --- trunk/octave-forge/main/missing-functions/DESCRIPTION 2011-09-26 15:05:52 UTC (rev 8603) +++ trunk/octave-forge/main/missing-functions/DESCRIPTION 2011-09-26 16:32:47 UTC (rev 8604) @@ -2,7 +2,7 @@ Version: 1.0.2 Date: 2009-05-06 Author: Bill Denney <bi...@de...> -Maintainer: Bill Denney <bi...@de...> +Maintainer: Octave Community Title: Missing Functions Description: Find functions that are in Matlab but not in Octave. Categories: Missing Modified: trunk/octave-forge/main/time/DESCRIPTION =================================================================== --- trunk/octave-forge/main/time/DESCRIPTION 2011-09-26 15:05:52 UTC (rev 8603) +++ trunk/octave-forge/main/time/DESCRIPTION 2011-09-26 16:32:47 UTC (rev 8604) @@ -2,7 +2,7 @@ Version: 1.0.9 Date: 2009-05-03 Author: Bill Denney <bi...@de...> -Maintainer: Bill Denney <bi...@de...> +Maintainer: Octave Community Title: Time and Dates Description: Additional date manipulation tools. Categories: Time This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |