Mercurial > hg > octave-nkf
annotate doc/faq/OctaveFAQ.texi @ 15271:648dabbb4c6b
build: Refactor liboctave into multiple subdirectories. Move libcruft into liboctave.
* array/Array-C.cc, array/Array-b.cc, array/Array-ch.cc, array/Array-d.cc,
array/Array-f.cc, array/Array-fC.cc, array/Array-i.cc, array/Array-idx-vec.cc,
array/Array-s.cc, array/Array-str.cc, array/Array-util.cc, array/Array-util.h,
array/Array-voidp.cc, array/Array.cc, array/Array.h, array/Array2.h,
array/Array3.h, array/ArrayN.h, array/CColVector.cc, array/CColVector.h,
array/CDiagMatrix.cc, array/CDiagMatrix.h, array/CMatrix.cc, array/CMatrix.h,
array/CNDArray.cc, array/CNDArray.h, array/CRowVector.cc, array/CRowVector.h,
array/CSparse.cc, array/CSparse.h, array/DiagArray2.cc, array/DiagArray2.h,
array/MArray-C.cc, array/MArray-d.cc, array/MArray-decl.h, array/MArray-defs.h,
array/MArray-f.cc, array/MArray-fC.cc, array/MArray-i.cc, array/MArray-s.cc,
array/MArray.cc, array/MArray.h, array/MArray2.h, array/MArrayN.h,
array/MDiagArray2.cc, array/MDiagArray2.h, array/MSparse-C.cc,
array/MSparse-d.cc, array/MSparse-defs.h, array/MSparse.cc, array/MSparse.h,
array/Matrix.h, array/MatrixType.cc, array/MatrixType.h, array/PermMatrix.cc,
array/PermMatrix.h, array/Range.cc, array/Range.h, array/Sparse-C.cc,
array/Sparse-b.cc, array/Sparse-d.cc, array/Sparse.cc, array/Sparse.h,
array/boolMatrix.cc, array/boolMatrix.h, array/boolNDArray.cc,
array/boolNDArray.h, array/boolSparse.cc, array/boolSparse.h,
array/chMatrix.cc, array/chMatrix.h, array/chNDArray.cc, array/chNDArray.h,
array/dColVector.cc, array/dColVector.h, array/dDiagMatrix.cc,
array/dDiagMatrix.h, array/dMatrix.cc, array/dMatrix.h, array/dNDArray.cc,
array/dNDArray.h, array/dRowVector.cc, array/dRowVector.h, array/dSparse.cc,
array/dSparse.h, array/dim-vector.cc, array/dim-vector.h, array/fCColVector.cc,
array/fCColVector.h, array/fCDiagMatrix.cc, array/fCDiagMatrix.h,
array/fCMatrix.cc, array/fCMatrix.h, array/fCNDArray.cc, array/fCNDArray.h,
array/fCRowVector.cc, array/fCRowVector.h, array/fColVector.cc,
array/fColVector.h, array/fDiagMatrix.cc, array/fDiagMatrix.h,
array/fMatrix.cc, array/fMatrix.h, array/fNDArray.cc, array/fNDArray.h,
array/fRowVector.cc, array/fRowVector.h, array/idx-vector.cc,
array/idx-vector.h, array/int16NDArray.cc, array/int16NDArray.h,
array/int32NDArray.cc, array/int32NDArray.h, array/int64NDArray.cc,
array/int64NDArray.h, array/int8NDArray.cc, array/int8NDArray.h,
array/intNDArray.cc, array/intNDArray.h, array/module.mk,
array/uint16NDArray.cc, array/uint16NDArray.h, array/uint32NDArray.cc,
array/uint32NDArray.h, array/uint64NDArray.cc, array/uint64NDArray.h,
array/uint8NDArray.cc, array/uint8NDArray.h:
Moved from liboctave dir to array subdirectory.
* cruft/Makefile.am, cruft/amos/README, cruft/amos/cacai.f, cruft/amos/cacon.f,
cruft/amos/cairy.f, cruft/amos/casyi.f, cruft/amos/cbesh.f, cruft/amos/cbesi.f,
cruft/amos/cbesj.f, cruft/amos/cbesk.f, cruft/amos/cbesy.f, cruft/amos/cbinu.f,
cruft/amos/cbiry.f, cruft/amos/cbknu.f, cruft/amos/cbuni.f, cruft/amos/cbunk.f,
cruft/amos/ckscl.f, cruft/amos/cmlri.f, cruft/amos/crati.f, cruft/amos/cs1s2.f,
cruft/amos/cseri.f, cruft/amos/cshch.f, cruft/amos/cuchk.f, cruft/amos/cunhj.f,
cruft/amos/cuni1.f, cruft/amos/cuni2.f, cruft/amos/cunik.f, cruft/amos/cunk1.f,
cruft/amos/cunk2.f, cruft/amos/cuoik.f, cruft/amos/cwrsk.f,
cruft/amos/dgamln.f, cruft/amos/gamln.f, cruft/amos/module.mk,
cruft/amos/xzabs.f, cruft/amos/xzexp.f, cruft/amos/xzlog.f,
cruft/amos/xzsqrt.f, cruft/amos/zacai.f, cruft/amos/zacon.f,
cruft/amos/zairy.f, cruft/amos/zasyi.f, cruft/amos/zbesh.f, cruft/amos/zbesi.f,
cruft/amos/zbesj.f, cruft/amos/zbesk.f, cruft/amos/zbesy.f, cruft/amos/zbinu.f,
cruft/amos/zbiry.f, cruft/amos/zbknu.f, cruft/amos/zbuni.f, cruft/amos/zbunk.f,
cruft/amos/zdiv.f, cruft/amos/zkscl.f, cruft/amos/zmlri.f, cruft/amos/zmlt.f,
cruft/amos/zrati.f, cruft/amos/zs1s2.f, cruft/amos/zseri.f, cruft/amos/zshch.f,
cruft/amos/zuchk.f, cruft/amos/zunhj.f, cruft/amos/zuni1.f, cruft/amos/zuni2.f,
cruft/amos/zunik.f, cruft/amos/zunk1.f, cruft/amos/zunk2.f, cruft/amos/zuoik.f,
cruft/amos/zwrsk.f, cruft/blas-xtra/cconv2.f, cruft/blas-xtra/cdotc3.f,
cruft/blas-xtra/cmatm3.f, cruft/blas-xtra/csconv2.f, cruft/blas-xtra/dconv2.f,
cruft/blas-xtra/ddot3.f, cruft/blas-xtra/dmatm3.f, cruft/blas-xtra/module.mk,
cruft/blas-xtra/sconv2.f, cruft/blas-xtra/sdot3.f, cruft/blas-xtra/smatm3.f,
cruft/blas-xtra/xcdotc.f, cruft/blas-xtra/xcdotu.f, cruft/blas-xtra/xddot.f,
cruft/blas-xtra/xdnrm2.f, cruft/blas-xtra/xdznrm2.f, cruft/blas-xtra/xerbla.f,
cruft/blas-xtra/xscnrm2.f, cruft/blas-xtra/xsdot.f, cruft/blas-xtra/xsnrm2.f,
cruft/blas-xtra/xzdotc.f, cruft/blas-xtra/xzdotu.f, cruft/blas-xtra/zconv2.f,
cruft/blas-xtra/zdconv2.f, cruft/blas-xtra/zdotc3.f, cruft/blas-xtra/zmatm3.f,
cruft/daspk/datv.f, cruft/daspk/dcnst0.f, cruft/daspk/dcnstr.f,
cruft/daspk/ddasic.f, cruft/daspk/ddasid.f, cruft/daspk/ddasik.f,
cruft/daspk/ddaspk.f, cruft/daspk/ddstp.f, cruft/daspk/ddwnrm.f,
cruft/daspk/dfnrmd.f, cruft/daspk/dfnrmk.f, cruft/daspk/dhels.f,
cruft/daspk/dheqr.f, cruft/daspk/dinvwt.f, cruft/daspk/dlinsd.f,
cruft/daspk/dlinsk.f, cruft/daspk/dmatd.f, cruft/daspk/dnedd.f,
cruft/daspk/dnedk.f, cruft/daspk/dnsd.f, cruft/daspk/dnsid.f,
cruft/daspk/dnsik.f, cruft/daspk/dnsk.f, cruft/daspk/dorth.f,
cruft/daspk/dslvd.f, cruft/daspk/dslvk.f, cruft/daspk/dspigm.f,
cruft/daspk/dyypnw.f, cruft/daspk/module.mk, cruft/dasrt/ddasrt.f,
cruft/dasrt/drchek.f, cruft/dasrt/droots.f, cruft/dasrt/module.mk,
cruft/dassl/ddaini.f, cruft/dassl/ddajac.f, cruft/dassl/ddanrm.f,
cruft/dassl/ddaslv.f, cruft/dassl/ddassl.f, cruft/dassl/ddastp.f,
cruft/dassl/ddatrp.f, cruft/dassl/ddawts.f, cruft/dassl/module.mk,
cruft/fftpack/cfftb.f, cruft/fftpack/cfftb1.f, cruft/fftpack/cfftf.f,
cruft/fftpack/cfftf1.f, cruft/fftpack/cffti.f, cruft/fftpack/cffti1.f,
cruft/fftpack/fftpack.doc, cruft/fftpack/module.mk, cruft/fftpack/passb.f,
cruft/fftpack/passb2.f, cruft/fftpack/passb3.f, cruft/fftpack/passb4.f,
cruft/fftpack/passb5.f, cruft/fftpack/passf.f, cruft/fftpack/passf2.f,
cruft/fftpack/passf3.f, cruft/fftpack/passf4.f, cruft/fftpack/passf5.f,
cruft/fftpack/zfftb.f, cruft/fftpack/zfftb1.f, cruft/fftpack/zfftf.f,
cruft/fftpack/zfftf1.f, cruft/fftpack/zffti.f, cruft/fftpack/zffti1.f,
cruft/fftpack/zpassb.f, cruft/fftpack/zpassb2.f, cruft/fftpack/zpassb3.f,
cruft/fftpack/zpassb4.f, cruft/fftpack/zpassb5.f, cruft/fftpack/zpassf.f,
cruft/fftpack/zpassf2.f, cruft/fftpack/zpassf3.f, cruft/fftpack/zpassf4.f,
cruft/fftpack/zpassf5.f, cruft/lapack-xtra/crsf2csf.f,
cruft/lapack-xtra/module.mk, cruft/lapack-xtra/xclange.f,
cruft/lapack-xtra/xdlamch.f, cruft/lapack-xtra/xdlange.f,
cruft/lapack-xtra/xilaenv.f, cruft/lapack-xtra/xslamch.f,
cruft/lapack-xtra/xslange.f, cruft/lapack-xtra/xzlange.f,
cruft/lapack-xtra/zrsf2csf.f, cruft/link-deps.mk, cruft/misc/blaswrap.c,
cruft/misc/cquit.c, cruft/misc/d1mach-tst.for, cruft/misc/d1mach.f,
cruft/misc/f77-extern.cc, cruft/misc/f77-fcn.c, cruft/misc/f77-fcn.h,
cruft/misc/i1mach.f, cruft/misc/lo-error.c, cruft/misc/lo-error.h,
cruft/misc/module.mk, cruft/misc/quit.cc, cruft/misc/quit.h,
cruft/misc/r1mach.f, cruft/mkf77def.in, cruft/odepack/cfode.f,
cruft/odepack/dlsode.f, cruft/odepack/ewset.f, cruft/odepack/intdy.f,
cruft/odepack/module.mk, cruft/odepack/prepj.f, cruft/odepack/scfode.f,
cruft/odepack/sewset.f, cruft/odepack/sintdy.f, cruft/odepack/slsode.f,
cruft/odepack/solsy.f, cruft/odepack/sprepj.f, cruft/odepack/ssolsy.f,
cruft/odepack/sstode.f, cruft/odepack/stode.f, cruft/odepack/svnorm.f,
cruft/odepack/vnorm.f, cruft/ordered-qz/README, cruft/ordered-qz/dsubsp.f,
cruft/ordered-qz/exchqz.f, cruft/ordered-qz/module.mk,
cruft/ordered-qz/sexchqz.f, cruft/ordered-qz/ssubsp.f, cruft/quadpack/dqagi.f,
cruft/quadpack/dqagie.f, cruft/quadpack/dqagp.f, cruft/quadpack/dqagpe.f,
cruft/quadpack/dqelg.f, cruft/quadpack/dqk15i.f, cruft/quadpack/dqk21.f,
cruft/quadpack/dqpsrt.f, cruft/quadpack/module.mk, cruft/quadpack/qagi.f,
cruft/quadpack/qagie.f, cruft/quadpack/qagp.f, cruft/quadpack/qagpe.f,
cruft/quadpack/qelg.f, cruft/quadpack/qk15i.f, cruft/quadpack/qk21.f,
cruft/quadpack/qpsrt.f, cruft/quadpack/xerror.f, cruft/ranlib/Basegen.doc,
cruft/ranlib/HOWTOGET, cruft/ranlib/README, cruft/ranlib/advnst.f,
cruft/ranlib/genbet.f, cruft/ranlib/genchi.f, cruft/ranlib/genexp.f,
cruft/ranlib/genf.f, cruft/ranlib/gengam.f, cruft/ranlib/genmn.f,
cruft/ranlib/genmul.f, cruft/ranlib/gennch.f, cruft/ranlib/gennf.f,
cruft/ranlib/gennor.f, cruft/ranlib/genprm.f, cruft/ranlib/genunf.f,
cruft/ranlib/getcgn.f, cruft/ranlib/getsd.f, cruft/ranlib/ignbin.f,
cruft/ranlib/ignlgi.f, cruft/ranlib/ignnbn.f, cruft/ranlib/ignpoi.f,
cruft/ranlib/ignuin.f, cruft/ranlib/initgn.f, cruft/ranlib/inrgcm.f,
cruft/ranlib/lennob.f, cruft/ranlib/mltmod.f, cruft/ranlib/module.mk,
cruft/ranlib/phrtsd.f, cruft/ranlib/qrgnin.f, cruft/ranlib/randlib.chs,
cruft/ranlib/randlib.fdoc, cruft/ranlib/ranf.f, cruft/ranlib/setall.f,
cruft/ranlib/setant.f, cruft/ranlib/setgmn.f, cruft/ranlib/setsd.f,
cruft/ranlib/sexpo.f, cruft/ranlib/sgamma.f, cruft/ranlib/snorm.f,
cruft/ranlib/tstbot.for, cruft/ranlib/tstgmn.for, cruft/ranlib/tstmid.for,
cruft/ranlib/wrap.f, cruft/slatec-err/fdump.f, cruft/slatec-err/ixsav.f,
cruft/slatec-err/j4save.f, cruft/slatec-err/module.mk,
cruft/slatec-err/xerclr.f, cruft/slatec-err/xercnt.f,
cruft/slatec-err/xerhlt.f, cruft/slatec-err/xermsg.f,
cruft/slatec-err/xerprn.f, cruft/slatec-err/xerrwd.f,
cruft/slatec-err/xersve.f, cruft/slatec-err/xgetf.f, cruft/slatec-err/xgetua.f,
cruft/slatec-err/xsetf.f, cruft/slatec-err/xsetua.f, cruft/slatec-fn/acosh.f,
cruft/slatec-fn/albeta.f, cruft/slatec-fn/algams.f, cruft/slatec-fn/alngam.f,
cruft/slatec-fn/alnrel.f, cruft/slatec-fn/asinh.f, cruft/slatec-fn/atanh.f,
cruft/slatec-fn/betai.f, cruft/slatec-fn/csevl.f, cruft/slatec-fn/d9gmit.f,
cruft/slatec-fn/d9lgic.f, cruft/slatec-fn/d9lgit.f, cruft/slatec-fn/d9lgmc.f,
cruft/slatec-fn/dacosh.f, cruft/slatec-fn/dasinh.f, cruft/slatec-fn/datanh.f,
cruft/slatec-fn/dbetai.f, cruft/slatec-fn/dcsevl.f, cruft/slatec-fn/derf.f,
cruft/slatec-fn/derfc.in.f, cruft/slatec-fn/dgami.f, cruft/slatec-fn/dgamit.f,
cruft/slatec-fn/dgamlm.f, cruft/slatec-fn/dgamma.f, cruft/slatec-fn/dgamr.f,
cruft/slatec-fn/dlbeta.f, cruft/slatec-fn/dlgams.f, cruft/slatec-fn/dlngam.f,
cruft/slatec-fn/dlnrel.f, cruft/slatec-fn/dpchim.f, cruft/slatec-fn/dpchst.f,
cruft/slatec-fn/erf.f, cruft/slatec-fn/erfc.in.f, cruft/slatec-fn/gami.f,
cruft/slatec-fn/gamit.f, cruft/slatec-fn/gamlim.f, cruft/slatec-fn/gamma.f,
cruft/slatec-fn/gamr.f, cruft/slatec-fn/initds.f, cruft/slatec-fn/inits.f,
cruft/slatec-fn/module.mk, cruft/slatec-fn/pchim.f, cruft/slatec-fn/pchst.f,
cruft/slatec-fn/r9gmit.f, cruft/slatec-fn/r9lgic.f, cruft/slatec-fn/r9lgit.f,
cruft/slatec-fn/r9lgmc.f, cruft/slatec-fn/xacosh.f, cruft/slatec-fn/xasinh.f,
cruft/slatec-fn/xatanh.f, cruft/slatec-fn/xbetai.f, cruft/slatec-fn/xdacosh.f,
cruft/slatec-fn/xdasinh.f, cruft/slatec-fn/xdatanh.f,
cruft/slatec-fn/xdbetai.f, cruft/slatec-fn/xderf.f, cruft/slatec-fn/xderfc.f,
cruft/slatec-fn/xdgami.f, cruft/slatec-fn/xdgamit.f, cruft/slatec-fn/xdgamma.f,
cruft/slatec-fn/xerf.f, cruft/slatec-fn/xerfc.f, cruft/slatec-fn/xgamma.f,
cruft/slatec-fn/xgmainc.f, cruft/slatec-fn/xsgmainc.f:
Moved from top-level libcruft to cruft directory below liboctave.
* numeric/CmplxAEPBAL.cc, numeric/CmplxAEPBAL.h, numeric/CmplxCHOL.cc,
numeric/CmplxCHOL.h, numeric/CmplxGEPBAL.cc, numeric/CmplxGEPBAL.h,
numeric/CmplxHESS.cc, numeric/CmplxHESS.h, numeric/CmplxLU.cc,
numeric/CmplxLU.h, numeric/CmplxQR.cc, numeric/CmplxQR.h, numeric/CmplxQRP.cc,
numeric/CmplxQRP.h, numeric/CmplxSCHUR.cc, numeric/CmplxSCHUR.h,
numeric/CmplxSVD.cc, numeric/CmplxSVD.h, numeric/CollocWt.cc,
numeric/CollocWt.h, numeric/DAE.h, numeric/DAEFunc.h, numeric/DAERT.h,
numeric/DAERTFunc.h, numeric/DASPK-opts.in, numeric/DASPK.cc, numeric/DASPK.h,
numeric/DASRT-opts.in, numeric/DASRT.cc, numeric/DASRT.h,
numeric/DASSL-opts.in, numeric/DASSL.cc, numeric/DASSL.h, numeric/DET.h,
numeric/EIG.cc, numeric/EIG.h, numeric/LSODE-opts.in, numeric/LSODE.cc,
numeric/LSODE.h, numeric/ODE.h, numeric/ODEFunc.h, numeric/ODES.cc,
numeric/ODES.h, numeric/ODESFunc.h, numeric/Quad-opts.in, numeric/Quad.cc,
numeric/Quad.h, numeric/SparseCmplxCHOL.cc, numeric/SparseCmplxCHOL.h,
numeric/SparseCmplxLU.cc, numeric/SparseCmplxLU.h, numeric/SparseCmplxQR.cc,
numeric/SparseCmplxQR.h, numeric/SparseQR.cc, numeric/SparseQR.h,
numeric/SparsedbleCHOL.cc, numeric/SparsedbleCHOL.h, numeric/SparsedbleLU.cc,
numeric/SparsedbleLU.h, numeric/base-aepbal.h, numeric/base-dae.h,
numeric/base-de.h, numeric/base-lu.cc, numeric/base-lu.h, numeric/base-min.h,
numeric/base-qr.cc, numeric/base-qr.h, numeric/bsxfun-decl.h,
numeric/bsxfun-defs.cc, numeric/bsxfun.h, numeric/dbleAEPBAL.cc,
numeric/dbleAEPBAL.h, numeric/dbleCHOL.cc, numeric/dbleCHOL.h,
numeric/dbleGEPBAL.cc, numeric/dbleGEPBAL.h, numeric/dbleHESS.cc,
numeric/dbleHESS.h, numeric/dbleLU.cc, numeric/dbleLU.h, numeric/dbleQR.cc,
numeric/dbleQR.h, numeric/dbleQRP.cc, numeric/dbleQRP.h, numeric/dbleSCHUR.cc,
numeric/dbleSCHUR.h, numeric/dbleSVD.cc, numeric/dbleSVD.h,
numeric/eigs-base.cc, numeric/fCmplxAEPBAL.cc, numeric/fCmplxAEPBAL.h,
numeric/fCmplxCHOL.cc, numeric/fCmplxCHOL.h, numeric/fCmplxGEPBAL.cc,
numeric/fCmplxGEPBAL.h, numeric/fCmplxHESS.cc, numeric/fCmplxHESS.h,
numeric/fCmplxLU.cc, numeric/fCmplxLU.h, numeric/fCmplxQR.cc,
numeric/fCmplxQR.h, numeric/fCmplxQRP.cc, numeric/fCmplxQRP.h,
numeric/fCmplxSCHUR.cc, numeric/fCmplxSCHUR.h, numeric/fCmplxSVD.cc,
numeric/fCmplxSVD.h, numeric/fEIG.cc, numeric/fEIG.h, numeric/floatAEPBAL.cc,
numeric/floatAEPBAL.h, numeric/floatCHOL.cc, numeric/floatCHOL.h,
numeric/floatGEPBAL.cc, numeric/floatGEPBAL.h, numeric/floatHESS.cc,
numeric/floatHESS.h, numeric/floatLU.cc, numeric/floatLU.h, numeric/floatQR.cc,
numeric/floatQR.h, numeric/floatQRP.cc, numeric/floatQRP.h,
numeric/floatSCHUR.cc, numeric/floatSCHUR.h, numeric/floatSVD.cc,
numeric/floatSVD.h, numeric/lo-mappers.cc, numeric/lo-mappers.h,
numeric/lo-specfun.cc, numeric/lo-specfun.h, numeric/module.mk,
numeric/oct-convn.cc, numeric/oct-convn.h, numeric/oct-fftw.cc,
numeric/oct-fftw.h, numeric/oct-norm.cc, numeric/oct-norm.h,
numeric/oct-rand.cc, numeric/oct-rand.h, numeric/oct-spparms.cc,
numeric/oct-spparms.h, numeric/randgamma.c, numeric/randgamma.h,
numeric/randmtzig.c, numeric/randmtzig.h, numeric/randpoisson.c,
numeric/randpoisson.h, numeric/sparse-base-chol.cc, numeric/sparse-base-chol.h,
numeric/sparse-base-lu.cc, numeric/sparse-base-lu.h, numeric/sparse-dmsolve.cc:
Moved from liboctave dir to numeric subdirectory.
* operators/Sparse-diag-op-defs.h, operators/Sparse-op-defs.h,
operators/Sparse-perm-op-defs.h, operators/config-ops.sh, operators/mk-ops.awk,
operators/module.mk, operators/mx-base.h, operators/mx-defs.h,
operators/mx-ext.h, operators/mx-inlines.cc, operators/mx-op-decl.h,
operators/mx-op-defs.h, operators/mx-ops, operators/sparse-mk-ops.awk,
operators/sparse-mx-ops, operators/vx-ops:
Moved from liboctave dir to operators subdirectory.
* system/dir-ops.cc, system/dir-ops.h, system/file-ops.cc, system/file-ops.h,
system/file-stat.cc, system/file-stat.h, system/lo-sysdep.cc,
system/lo-sysdep.h, system/mach-info.cc, system/mach-info.h, system/module.mk,
system/oct-env.cc, system/oct-env.h, system/oct-group.cc, system/oct-group.h,
system/oct-openmp.h, system/oct-passwd.cc, system/oct-passwd.h,
system/oct-syscalls.cc, system/oct-syscalls.h, system/oct-time.cc,
system/oct-time.h, system/oct-uname.cc, system/oct-uname.h, system/pathlen.h,
system/sysdir.h, system/syswait.h, system/tempnam.c, system/tempname.c:
Moved from liboctave dir to system subdirectory.
* util/base-list.h, util/byte-swap.h, util/caseless-str.h, util/cmd-edit.cc,
util/cmd-edit.h, util/cmd-hist.cc, util/cmd-hist.h, util/data-conv.cc,
util/data-conv.h, util/f2c-main.c, util/functor.h, util/glob-match.cc,
util/glob-match.h, util/kpse.cc, util/lo-array-gripes.cc,
util/lo-array-gripes.h, util/lo-cieee.c, util/lo-cutils.c, util/lo-cutils.h,
util/lo-ieee.cc, util/lo-ieee.h, util/lo-macros.h, util/lo-math.h,
util/lo-traits.h, util/lo-utils.cc, util/lo-utils.h, util/module.mk,
util/oct-alloc.cc, util/oct-alloc.h, util/oct-base64.cc, util/oct-base64.h,
util/oct-binmap.h, util/oct-cmplx.h, util/oct-glob.cc, util/oct-glob.h,
util/oct-inttypes.cc, util/oct-inttypes.h, util/oct-locbuf.cc,
util/oct-locbuf.h, util/oct-md5.cc, util/oct-md5.h, util/oct-mem.h,
util/oct-mutex.cc, util/oct-mutex.h, util/oct-refcount.h, util/oct-rl-edit.c,
util/oct-rl-edit.h, util/oct-rl-hist.c, util/oct-rl-hist.h, util/oct-shlib.cc,
util/oct-shlib.h, util/oct-sort.cc, util/oct-sort.h, util/oct-sparse.h,
util/pathsearch.cc, util/pathsearch.h, util/regexp.cc, util/regexp.h,
util/singleton-cleanup.cc, util/singleton-cleanup.h, util/sparse-sort.cc,
util/sparse-sort.h, util/sparse-util.cc, util/sparse-util.h, util/statdefs.h,
util/str-vec.cc, util/str-vec.h, util/sun-utils.h:
Moved from liboctave dir to util subdirectory.
* Makefile.am: Eliminate reference to top-level liboctave directory.
* autogen.sh: cd to new liboctave/operators directory to run config-ops.sh.
* build-aux/common.mk: Eliminate LIBCRUFT references.
* configure.ac: Eliminate libcruft top-level references. Switch test
programs to find files in liboctave/cruft subdirectory.
* OctaveFAQ.texi, install.txi, mkoctfile.1: Eliminate references to libcruft in
docs.
* libgui/src/Makefile.am, libinterp/Makefile.am, src/Makefile.am: Update
include file locations. Stop linking against libcruft.
* libinterp/corefcn/module.mk: Update location of OPT_INC files which are
now in numeric/ subdirectory.
* libinterp/dldfcn/config-module.awk: Stop linking against libcruft.
* libinterp/interpfcn/toplev.cc: Remove reference to LIBCRUFT.
* libinterp/link-deps.mk, liboctave/link-deps.mk:
Add GNULIB_LINK_DEPS to link dependencies.
* libinterp/oct-conf.in.h: Remove reference to OCTAVE_CONF_LIBCRUFT.
* liboctave/Makefile.am: Overhaul to use convenience libraries in
subdirectories.
* scripts/miscellaneous/mkoctfile.m: Eliminate reference to LIBCRUFT.
* src/mkoctfile.in.cc, src/mkoctfile.in.sh: Stop linking againt libcruft.
Eliminate references to LIBCRUFT.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 31 Aug 2012 20:00:20 -0700 |
parents | c3fd61c59e9c |
children |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
12704
diff
changeset
|
1 % Copyright (C) 1997-2012 John W. Eaton |
7018 | 2 % |
3 % This file is part of Octave. | |
4 % | |
5 % Octave is free software; you can redistribute it and/or modify it | |
6 % under the terms of the GNU General Public License as published by the | |
7 % Free Software Foundation; either version 3 of the License, or (at | |
8 % your option) any later version. | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
9 % |
7018 | 10 % Octave is distributed in the hope that it will be useful, but WITHOUT |
11 % ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
12 % FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
13 % for more details. | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
14 % |
7018 | 15 % You should have received a copy of the GNU General Public License |
16 % along with Octave; see the file COPYING. If not, see | |
17 % <http://www.gnu.org/licenses/>. | |
18 | |
2866 | 19 \input texinfo.tex @c -*-texinfo-*- |
20 | |
9794
0d4613a736e9
convert build system to use automake and libtool
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
21 @setfilename OctaveFAQ.info |
2866 | 22 @settitle Frequently asked questions about Octave (with answers) |
23 | |
24 @setchapternewpage off | |
5099 | 25 @direntry |
9794
0d4613a736e9
convert build system to use automake and libtool
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
26 * OctaveFAQ: (OctaveFAQ). Frequently asked questions about Octave |
5099 | 27 @end direntry |
2866 | 28 @titlepage |
29 @title Octave FAQ | |
30 @subtitle Frequently asked questions about Octave | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
31 @subtitle @today{} |
2866 | 32 @sp 1 |
6900 | 33 @author John W. Eaton and David Bateman |
2866 | 34 @page |
35 @end titlepage | |
36 | |
5423 | 37 @ifnottex |
4830 | 38 @node Top |
2866 | 39 @top |
40 @unnumbered Preface | |
41 @cindex FAQ for Octave, latest version | |
5423 | 42 @end ifnottex |
2866 | 43 |
44 This is a list of frequently asked questions (FAQ) for Octave users. | |
45 | |
6584 | 46 We are always looking for new questions (@emph{with} answers), better |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
47 answers, or both. Please send suggestions to |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
48 @url{http://bugs.octave.org}. If you have general questions about |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
49 Octave, or need help for something that is not covered by the Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
50 manual or the FAQ, please use the @email{help@@octave.org} mailing list. |
2866 | 51 |
52 This FAQ is intended to supplement, not replace, the Octave manual. | |
6584 | 53 Before posting a question to the @email{help@@octave.org} mailing list, |
54 you should first check to see if the topic is covered in the manual. | |
2866 | 55 |
56 @menu | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
57 * What is Octave?:: |
9076 | 58 * Licensing Issues:: |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
59 * How can I cite Octave?:: |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
60 * Series 3.4.N:: |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
61 * Octave Features:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
62 * Learning more about Octave:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
63 * Getting Octave:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
64 * Installation:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
65 * Common problems:: |
12631
0c956011c35c
OctaveFAQ.texi: Fix texinfo in FAQ I broke earlier
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12630
diff
changeset
|
66 * Using Octave:: |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
67 * @sc{Matlab} compatibility:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
68 * Index:: |
2866 | 69 @end menu |
70 | |
4830 | 71 @node What is Octave? |
2866 | 72 @chapter What is Octave? |
73 | |
74 Octave is a high-level interactive language, primarily intended for | |
75 numerical computations that is mostly compatible with | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
76 @sc{Matlab}.@footnote{@sc{Matlab} is a registered trademark of The |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
77 MathWorks, Inc.} |
2866 | 78 |
6583 | 79 Octave can do arithmetic for real, complex or integer-valued scalars |
80 and matrices, solve sets of nonlinear algebraic equations, integrate | |
81 functions over finite and infinite intervals, and integrate systems of | |
82 ordinary differential and differential-algebraic equations. | |
2866 | 83 |
84 Octave uses the GNU readline library to handle reading and editing | |
85 input. By default, the line editing commands are similar to the | |
86 cursor movement commands used by GNU Emacs, and a vi-style line | |
87 editing interface is also available. At the end of each session, the | |
88 command history is saved, so that commands entered during previous | |
89 sessions are not lost. | |
90 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
91 The Octave distribution includes a 650+ page Texinfo manual. Access to |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
92 the complete text of the manual is available via the @code{doc} command |
2866 | 93 at the Octave prompt. |
94 | |
6583 | 95 @menu |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
96 * Who develops Octave?:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
97 * Why GNU Octave?:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
98 * What version should I use?:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
99 * On what platforms does Octave run?:: |
6583 | 100 @end menu |
101 | |
102 @node Who develops Octave? | |
103 @section Who develops Octave? | |
104 | |
6584 | 105 Discussions about writing the software that would eventually become |
106 Octave started in about 1988 with James B. Rawlings and John W. Eaton at | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
107 the University of Texas. John W. Eaton was the original author of |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
108 Octave, starting full-time development in February 1992. He is still the |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
109 primary maintainer. The community of users/developers has in addition |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
110 contributed some code and fuels the discussion on the mailing lists |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
111 @email{help@@octave.org} (user forum), @email{maintainers@@octave.org} |
6584 | 112 (development issues), and @email{octave-dev@@lists.sourceforge.net} (all |
113 things related to the Octave Forge repository of user-contributed | |
114 functions). | |
6583 | 115 |
6584 | 116 @node Why GNU Octave? |
117 @section Why GNU Octave? | |
6583 | 118 |
6584 | 119 The GNU Project was launched in 1984 to develop a complete Unix-like |
120 operating system which is free software: the GNU system. | |
121 | |
122 GNU is a recursive acronym for ``GNU's Not Unix''; it is pronounced | |
123 guh-noo, approximately like canoe. | |
6583 | 124 |
6584 | 125 The Free Software Foundation (FSF) is the principal organizational |
126 sponsor of the GNU Project. | |
127 | |
128 Octave became GNU Octave in 1997 (beginning with version 2.0.6). This | |
129 meant agreeing to consider Octave a part of the GNU Project and support | |
130 the efforts of the FSF. However, Octave is not and has never been | |
131 developed by the FSF. | |
132 | |
133 For more information about the GNU project, see @url{www.gnu.org}. | |
6583 | 134 |
135 @cindex FSF [Free Software Foundation] | |
136 @cindex GNU [GNU's not unix] | |
137 | |
138 @node What version should I use? | |
139 @section What version should I use? | |
140 | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
141 In general, you will find the latest version on |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
142 @url{http://www.octave.org/download.html}. It is recommended to use the |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
143 ``stable'' version of octave for general use, and the ``development'' |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
144 version if you want the latest features. |
6583 | 145 |
146 A list of user-visible changes since the last release is available in | |
147 the file @file{NEWS}. The file @file{ChangeLog} in the source | |
148 distribution contains a more detailed record of changes made since the | |
149 last release. | |
150 | |
151 @node On what platforms does Octave run? | |
152 @section On what platforms does Octave run? | |
153 | |
6584 | 154 Octave runs on various Unices---at least Linux and Solaris, Mac OS X, |
155 Windows and anything you can compile it on. Binary distributions exist | |
6583 | 156 at least for Debian, Suse, Fedora and RedHat Linuxes (Intel and AMD |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
157 @c Does Vista work? I get the feeling that even Windows users are trying |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
158 @c to forget Vista like a bad nightmare. Tatsuro only confirmed XP and |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
159 @c 7. I am tentatively assuming that Vista also works. |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
160 CPUs, at least), for Mac OS X and Windows' 98, 2000, XP, Vista, and 7. |
6583 | 161 |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
162 Two and three dimensional plotting is fully supported using gnuplot and |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
163 an experimental OpenGL backend. |
2866 | 164 |
165 The underlying numerical solvers are currently standard Fortran ones | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
166 like LAPACK, LINPACK, ODEPACK, the BLAS, etc., packaged in a library |
2866 | 167 of C++ classes. If possible, the Fortran subroutines are compiled |
168 with the system's Fortran compiler, and called directly from the C++ | |
169 functions. If that's not possible, you can still compile Octave if | |
170 you have the free Fortran to C translator f2c. | |
171 | |
172 Octave is also free software; you can redistribute it and/or modify it | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
173 under the terms of the GNU General Public License, version 3, as |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
174 published by the Free Software Foundation, or at your option any later |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
175 version. |
2866 | 176 |
9076 | 177 @node Licensing Issues |
178 @chapter Licensing Issues | |
179 | |
180 @menu | |
181 * If I write code using Octave do I have to release it under the GPL?: GPL | |
182 * Since the MEX interface allows plugins to be distributed under terms that are incompatible with the GPL, does this mean that you are encouraging people to to write non-free software for Octave?: Licensing MEX Files | |
183 * I wrote a program that links with Octave libraries and I don't want to release it under the terms of the GPL. Will you change the license of the Octave libraries for me?: Requesting License Changes | |
184 @end menu | |
185 | |
186 @node GPL | |
187 @section If I write code using Octave do I have to release it under the GPL? | |
188 | |
189 The answer depends on precisely how the code is written and how it works. | |
190 | |
191 Code written entirely in the scripting language of Octave | |
192 (interpreted code in .m files) may be released under the terms of | |
193 whatever license you choose. | |
194 | |
195 Code written using Octave's native plug-in interface (also known | |
196 as a .oct file) necessarily links with Octave internals and is | |
197 considered a derivative work of Octave and therefore must be | |
198 released under terms that are compatible with the GPL. | |
199 | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
200 Code written using Octave's implementation of the @sc{Matlab} MEX |
9076 | 201 interface may be released under the terms of whatever license you |
202 choose, provided that the following conditions are met: | |
203 | |
204 @enumerate | |
205 @item | |
206 The plugin should not use any bindings that are specific to Octave. In | |
207 other words, the MEX file must use the MEX interface only, and not also | |
208 call on other Octave internals. It should be possible in principle to | |
209 use the MEX file with other programs that implement the MEX interface | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
210 (e.g., @sc{Matlab}). |
9076 | 211 |
212 @item | |
213 The MEX file should not be distributed together with Octave in such a | |
214 way that they effectively create a single work. For example, you should | |
215 not distribute the MEX file and Octave together in a single package such | |
216 that Octave automatically loads and runs the MEX file when it starts up. | |
217 There are other possible ways that you might effectively create a single | |
218 work; this is just one example. | |
219 @end enumerate | |
220 | |
221 A program that embeds the Octave interpreter (e.g., by calling the | |
222 "octave_main" function), or that calls functions from Octave's | |
15271
648dabbb4c6b
build: Refactor liboctave into multiple subdirectories. Move libcruft into liboctave.
Rik <rik@octave.org>
parents:
14856
diff
changeset
|
223 libraries (e.g., liboctinterp or liboctave) is |
9076 | 224 considered a derivative work of Octave and therefore must be |
225 released under terms that are compatible with the GPL. | |
226 | |
227 @node Licensing MEX Files | |
228 @section Since the MEX interface allows plugins to be distributed under terms that are incompatible with the GPL, does this mean that you are encouraging people to to write non-free software for Octave? | |
229 | |
230 No. The original reason for implementing the MEX interface for Octave | |
231 was to allow Octave to run free software that uses MEX files (the | |
232 particular goal was to run SundialsTB in Octave). The intent was to | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
233 liberate that software from @sc{Matlab} and increase the amount of free |
9076 | 234 software available to Octave users, not to enable people to write |
235 proprietary code for Octave. For the good of the community, we strongly | |
236 encourage users of Octave to release the code they write for Octave | |
237 under terms that are compatible with the GPL. | |
238 | |
239 @node Requesting License Changes | |
240 @section I wrote a program that links with Octave libraries and I don't want to release it under the terms of the GPL. Will you change the license of the Octave libraries for me? | |
241 | |
242 No. Instead of asking us to change the licensing terms for Octave, we | |
243 recommend that you release your program under terms that are compatible | |
244 with the GPL so that the free software community can benefit from your | |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
245 work the same as you have benefited from the work of all the people who |
9076 | 246 have contributed to Octave. |
247 | |
4830 | 248 @node How can I cite Octave? |
249 @chapter How can I cite Octave? | |
4831 | 250 |
251 Pointing to @url{http://www.octave.org} is good, because that gives | |
252 people a direct way to find out more. If citation of a URL is not | |
253 allowed by a publisher, or if you also want to point to a traditional | |
254 reference, then you can cite the Octave manual: | |
4830 | 255 |
256 @example | |
257 @group | |
8334 | 258 @@BOOK@{eaton:2008, |
259 author = "John W. Eaton and David Bateman and Søren Hauberg", | |
260 title = "GNU Octave Manual Version 3", | |
6584 | 261 publisher = "Network Theory Limited", |
8334 | 262 year = "2008", |
263 isbn = "0-9546120-6-X" | |
6584 | 264 @} |
4830 | 265 @end group |
266 @end example | |
267 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
268 @node Series 3.4.N |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
269 @chapter What's new in version series 3.4.N and 3.5.N of Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
270 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
271 The 3.4.N series has enough new features to justify a minor version |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
272 number change. The full details are in the @file{NEWS} file, but in |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
273 brief 3.4.N series brings: |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
274 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
275 @c This list is distilled from the NEWS file. Does it have enough |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
276 @c things? Does it have too many? |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
277 @itemize @bullet |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
278 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
279 @item ARPACK now distributed with Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
280 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
281 @item Indexing optimisations |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
282 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
283 @item FTP object using @file{libcurl} |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
284 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
285 @item Better consistency with ismatrix, issquare, and issymetric |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
286 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
287 @item Function handles aware of overloaded functions |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
288 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
289 @item More efficient matrix division by making a single LAPACK call |
6583 | 290 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
291 @item Other optimisations in matrix operations |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
292 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
293 @item @code{bsxfun} optimised for basic arithmetic functions |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
294 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
295 @item @sc{Matlab}-style ignoring of output arguments using @samp{~} |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
296 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
297 @item Many optimisations of the @code{accumarray} function |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
298 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
299 @item Sparse matrix indexing has been rewritten for speed |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
300 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
301 @item Configuration pseudo-variables like @code{page_screen_output} |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
302 accept a ``local'' option argument to limit their scope to function |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
303 scope |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
304 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
305 @item The @code{pkg} command now accepts a @code{-forge} option to pull |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
306 packages directly from Octave-forge |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
307 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
308 @item Several @code{dlmread} improvements |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
309 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
310 @item Octave now uses gnulib for better cross-platform compatibility |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
311 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
312 @end itemize |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
313 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
314 Here are some features that have been around since 3.2.N |
6583 | 315 |
316 @itemize @bullet | |
317 | |
318 @item integer types | |
319 | |
320 @item fixed point arithmetic | |
321 | |
322 @item sparse matrices | |
323 | |
324 @item Linear programming code based on GLPK | |
325 | |
326 @item 64-bit compilation support | |
327 | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
328 @item gzipped files and stream and consequently support of @sc{Matlab} v7 files |
2866 | 329 |
6583 | 330 @item better support for both msvc and mingw |
331 | |
7116 | 332 @item a fully compatible MEX interface |
6583 | 333 |
6606 | 334 @item many many other minor features and compatibility changes |
6583 | 335 |
11576
8ac9687dbe9f
rename backend to graphics_toolkit
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
336 @item OpenGL graphics toolkit |
8128 | 337 |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
338 An experimental OpenGL graphics toolkit to replace gnuplot. |
8128 | 339 |
340 @item Object Orient Programming | |
341 | |
342 @item Block comments | |
343 | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
344 @item imwrite and imread |
8128 | 345 |
346 The functions are based on the GraphicsMagick library. | |
347 | |
348 @item Lazy transpose | |
349 | |
350 Special treatment in the parser of things like "a' * b", where the | |
351 transpose is never explicitly formed but a flag is rather passed to the | |
352 underlying LAPACK code. | |
353 | |
354 @item Single precision type | |
8292 | 355 |
356 @item Improved array indexing | |
357 The underlying code used for indexing of arrays has been completely | |
358 rewritten and so the indexing of arrays is now significantly faster. | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
359 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
360 @end itemize |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
361 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
362 Here are some older features that have been around since 2.1.N: |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
363 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
364 @itemize @bullet |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
365 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
366 @item NDarrays |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
367 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
368 @item cells |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
369 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
370 @end itemize |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
371 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
372 The 3.5.N series is the current development release and will become a |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
373 3.6.N release in the future. This series brings the following new |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
374 features: |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
375 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
376 @itemize |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
377 @item Perl-compatible regular expressions are now part of Octave |
8128 | 378 @end itemize |
379 | |
380 | |
4830 | 381 @node Octave Features |
2866 | 382 @chapter What features are unique to Octave? |
383 | |
384 @menu | |
6583 | 385 * Functions defined on the command-line:: |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
386 * Comments with #:: |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
387 * Strings delimited by double quotes ":: |
6583 | 388 * Line continuation by backslash:: |
389 * Informative block closing:: | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
390 * Coherent syntax:: |
6583 | 391 * Exclamation mark as not operator:: |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
392 * Increment and decrement operators:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
393 * Unwind-protect:: |
6583 | 394 * Built-in ODE and DAE solvers:: |
2866 | 395 @end menu |
396 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
397 This section refers to @sc{Matlab} R2010b and Octave 3.4.0. |
2866 | 398 |
6583 | 399 @node Functions defined on the command-line |
400 @section Functions defined on the command-line | |
2866 | 401 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
402 Functions can be defined by entering code on the command line, a feature |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
403 not supported by @sc{Matlab}. For example, you may type: |
2866 | 404 |
405 @example | |
406 @group | |
6583 | 407 octave:1> function s = hello_string (to_who) |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
408 > ## Say hello |
6583 | 409 > if nargin<1, to_who = "World"; end |
410 > s = ["Hello ",\ | |
411 > to_who]; | |
412 > endfunction | |
413 octave:2> hello_string ("Moon") | |
414 ans = Hello Moon | |
2866 | 415 @end group |
416 @end example | |
417 | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
418 @node Comments with # |
6583 | 419 @section Comments with # |
420 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
421 The pound character, @samp{#}, may be used to start comments, in |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
422 addition to @samp{%}. See the previous example. The major advantage of |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
423 this is that as @samp{#} is also a comment character for unix script |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
424 files, any file that starts with a string like @samp{#! /usr/bin/octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
425 -q} will be treated as an octave script and be executed by octave. |
2866 | 426 |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
427 @node Strings delimited by double quotes " |
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
428 @section Strings delimited by double quotes " |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
429 The double quote, @samp{"}, may be used to delimit strings, in addition |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
430 to the single quote @samp{'}. See the previous example. Also, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
431 double-quoted strings include backslash interpretation (like C++, C, and |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
432 Perl) while single quoted are uninterpreted (like @sc{Matlab} and Perl). |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
433 |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
434 @node Line continuation by backslash |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
435 @section Line continuation by backslash |
6583 | 436 |
6584 | 437 Lines can be continued with a backslash, @samp{\}, in addition to three |
438 points @samp{@dots{}}. See the previous example. | |
6583 | 439 |
440 @node Informative block closing | |
441 @section Informative block closing | |
442 | |
6584 | 443 You may close @code{function}, @code{for}, @code{while}, @code{if}, |
444 @dots{} blocks with @code{endfunction}, @code{endfor}, @code{endwhile}, | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
445 @dots{} keywords in addition to using @code{end}. As with @sc{Matlab}, the |
6584 | 446 @code{end} (or @code{endfunction}) keyword that marks the end of a |
447 function defined in a @file{.m} file is optional. | |
2866 | 448 |
6583 | 449 @node Coherent syntax |
450 @section Coherent syntax | |
451 | |
452 Indexing other things than variables is possible, as in: | |
453 @example | |
454 @group | |
455 octave:1> [3 1 4 1 5 9](3) | |
456 ans = 4 | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
457 octave:2> cos ([0 pi pi/4 7])(3) |
6583 | 458 ans = 0.70711 |
459 @end group | |
460 @end example | |
461 | |
462 @node Exclamation mark as not operator | |
463 @section Exclamation mark as not operator | |
464 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
465 The exclamation mark @samp{!} (aka ``Bang!'') is a negation operator, just |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
466 like the tilde @samp{~}: |
2866 | 467 |
468 @example | |
469 @group | |
6583 | 470 octave:1> if ! strcmp (program_name, "octave"), |
471 > "It's an error" | |
472 > else | |
473 > "It works!" | |
474 > end | |
475 ans = It works! | |
2866 | 476 @end group |
477 @end example | |
478 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
479 @noindent |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
480 Note however that @sc{Matlab} uses the @samp{!} operator for shell |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
481 escapes, for which Octave requires using the @code{system} command. |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
482 |
4830 | 483 @node Increment and decrement operators |
2866 | 484 @section Increment and decrement operators |
485 | |
486 @cindex Increment operators | |
487 @cindex Decrement operators | |
488 @cindex Operators, increment | |
489 @cindex Operators, decrement | |
490 | |
6584 | 491 If you like the @samp{++}, @samp{+=} etc operators, rejoice! |
2866 | 492 Octave includes the C-like increment and decrement operators @samp{++} |
6583 | 493 and @samp{--} in both their prefix and postfix forms, in addition to |
494 @samp{+=}, @samp{-=}, @samp{*=}, @samp{/=}, @samp{^=}, @samp{.*=}, | |
495 @samp{./=}, and @samp{.^=}. | |
2866 | 496 |
497 For example, to pre-increment the variable @var{x}, you would write | |
498 @code{++@var{x}}. This would add one to @var{x} and then return the new | |
499 value of @var{x} as the result of the expression. It is exactly the | |
500 same as the expression @code{@var{x} = @var{x} + 1}. | |
501 | |
6584 | 502 To post-increment a variable @var{x}, you would write @code{x++}. |
2866 | 503 This adds one to the variable @var{x}, but returns the value that |
504 @var{x} had prior to incrementing it. For example, if @var{x} is equal | |
6584 | 505 to 2, the result of the expression @code{x++} is 2, and the new |
2866 | 506 value of @var{x} is 3. |
507 | |
508 For matrix and vector arguments, the increment and decrement operators | |
509 work on each element of the operand. | |
510 | |
4830 | 511 @node Unwind-protect |
2866 | 512 @section Unwind-protect |
513 | |
514 @cindex Unwind-protect | |
515 | |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
516 Octave supports a limited form of exception handling modeled after the |
2866 | 517 unwind-protect form of Lisp. The general form of an |
518 @code{unwind_protect} block looks like this: | |
519 | |
520 @example | |
521 @group | |
522 unwind_protect | |
523 @var{body} | |
524 unwind_protect_cleanup | |
525 @var{cleanup} | |
526 end_unwind_protect | |
527 @end group | |
528 @end example | |
529 | |
530 @noindent | |
531 Where @var{body} and @var{cleanup} are both optional and may contain any | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
532 Octave expressions or commands. The statements in @var{cleanup} are |
2866 | 533 guaranteed to be executed regardless of how control exits @var{body}. |
534 | |
535 The @code{unwind_protect} statement is often used to reliably restore | |
536 the values of global variables that need to be temporarily changed. | |
537 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
538 @sc{Matlab} can be made to do something similar with their |
12492
5b1654bc5012
Small FAQ fixes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12490
diff
changeset
|
539 @code{OnCleanUp} function that was introduced in 2008a. Octave also has |
5b1654bc5012
Small FAQ fixes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12490
diff
changeset
|
540 @code{onCleanup} since version 3.4.0. |
8128 | 541 |
4830 | 542 @node Built-in ODE and DAE solvers |
2866 | 543 @section Built-in ODE and DAE solvers |
544 | |
545 @cindex DASSL | |
546 @cindex LSODE | |
547 | |
548 Octave includes LSODE and DASSL for solving systems of stiff ordinary | |
549 differential and differential-algebraic equations. These functions are | |
550 built in to the interpreter. | |
551 | |
6583 | 552 @node Learning more about Octave |
553 @chapter What documentation exists for Octave? | |
554 | |
555 @menu | |
556 * Documentation:: | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
557 * Getting additional help:: |
6583 | 558 * User community:: |
559 * Bug reports:: | |
560 @end menu | |
561 | |
4830 | 562 @node Documentation |
6583 | 563 @section What documentation exists for Octave? |
2866 | 564 |
565 @cindex Octave, documentation | |
566 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
567 The Octave distribution includes a 650+ page manual that is also |
2866 | 568 distributed under the terms of the GNU GPL. |
6583 | 569 It is available on the web at |
570 @url{http://www.octave.org/docs.html} and you will also | |
571 find there instructions on how to order a paper version. | |
572 | |
573 The complete text of the Octave manual is also available using the GNU | |
574 Info system via the GNU Emacs, info, or xinfo programs, or by using | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
575 the @samp{doc} command to start the GNU info browser directly from |
6583 | 576 the Octave prompt. |
577 | |
578 If you have problems using this documentation, or find that some topic | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
579 is not adequately explained, indexed, or cross-referenced, please report |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
580 it on @url{http://bugs.octave.org}. |
2866 | 581 |
6583 | 582 @node Getting additional help |
583 @section Getting additional help | |
584 | |
585 @cindex Additional help | |
586 @cindex Mailing lists, help-octave | |
587 | |
6584 | 588 If you can't find an answer to your question, the |
589 @email{help@@octave.org} mailing list is available for questions related | |
590 to using, installing, and porting Octave that are not adequately | |
591 answered by the Octave manual or by this document. | |
6583 | 592 |
593 @node User community | |
594 @section User community | |
595 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
596 To subscribe to the list, go to @url{http://www.octave.org/archive.html} |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
597 and follow the link to the subscription page for the list. |
2866 | 598 |
6653 | 599 @strong{Please do not} send requests to be added or removed from the |
6583 | 600 mailing list, or other administrative trivia to the list itself. |
601 | |
602 An archive of old postings to the help-octave mailing list is maintained | |
603 on @url{http://www.octave.org/archive.html}. | |
604 | |
6584 | 605 You will also find some user advice and code spread over the web. Good |
6583 | 606 starting points are the Octave Wiki @url{http://wiki.octave.org} and |
7483
fb66330b2608
don't special case SH_LD for FreeBSD and OpenBSD
John W. Eaton <jwe@octave.org>
parents:
7116
diff
changeset
|
607 Octave-Forge @url{http://octave.sourceforge.net} |
6583 | 608 |
609 @node Bug reports | |
610 @section I think I have found a bug in Octave. | |
611 | |
612 @cindex Bug in Octave, newly found | |
613 | |
614 ``I think I have found a bug in Octave, but I'm not sure. How do I know, | |
615 and who should I tell?'' | |
2866 | 616 |
6583 | 617 @cindex Manual, for Octave |
618 | |
619 First, see the section on bugs and bug reports in the Octave manual. | |
620 When you report a bug, make sure to describe the type of computer you | |
621 are using, the version of the operating system it is running, and the | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
622 version of Octave that you are using. Also provide enough code and |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
623 configuration details of your operating system so that the Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
624 maintainers can duplicate your bug. |
2866 | 625 |
4830 | 626 @node Getting Octave |
6583 | 627 @chapter Getting Octave |
2866 | 628 |
629 @menu | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
630 * Source code:: |
6583 | 631 * Pre-compiled binary packages:: |
632 * Octave for other platforms:: | |
2866 | 633 @end menu |
634 | |
6583 | 635 @node Source code |
636 @section Source code | |
637 @cindex Source code | |
2866 | 638 |
6583 | 639 Source code is available on the Octave development site, where you are |
640 sure to get the latest version. | |
2866 | 641 |
6583 | 642 @itemize @bullet |
643 @item @url{http://www.octave.org/download.html} | |
644 @item @url{ftp://ftp.octave.org/pub/octave/} | |
645 @end itemize | |
2866 | 646 |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
647 Since Octave is distributed under the terms of the GPL, you can get |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
648 Octave from a friend who has a copy, or from the Octave website. |
2866 | 649 |
6583 | 650 @node Pre-compiled binary packages |
651 @section Pre-compiled binary packages | |
652 @cindex Pre-compiled binary packages | |
653 @cindex Binaries | |
2866 | 654 |
6584 | 655 The Octave project does not distribute binary packages, but other |
656 projects do. For an up-to-date listing of packagers, see: | |
2866 | 657 |
6583 | 658 @itemize @bullet |
659 @item @url{http://www.octave.org/download.html} | |
660 @item @url{http://wiki.octave.org/wiki.pl?CategoryInstall} | |
661 @end itemize | |
2866 | 662 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
663 As of today, Octave binaries are available at least on Debian, Ubuntu, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
664 RedHat, Suse and Fedora GNU/Linuxen, Mac OS X, Windows' 98, 2000 and XP, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
665 Vista, and 7. |
2866 | 666 |
4830 | 667 @node Octave for other platforms |
2866 | 668 @section How do I get a copy of Octave for (some other platform)? |
669 | |
670 @cindex VMS support | |
671 @cindex VAX | |
672 @cindex MS-DOS support | |
3154 | 673 @cindex Windows support |
2866 | 674 @cindex DJGPP |
675 @cindex EMX | |
676 @cindex OS/2 support | |
677 | |
6879 | 678 Octave currently runs on Unix-like systems, Mac OS X, and Windows. |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
679 It should be possible to make Octave work on other systems as well. |
6879 | 680 If you are interested in porting Octave to other systems, please contact |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
681 @email{maintainers@@octave.org}. |
2866 | 682 |
6583 | 683 @c @menu |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
684 @c * Octave for Unix:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
685 @c * Octave for other platforms:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
686 @c * latest versions:: |
6583 | 687 @c @end menu |
2866 | 688 |
6583 | 689 @c @cindex Octave, ordering |
690 @c @cindex Octave, getting a copy | |
2866 | 691 |
4830 | 692 @node Installation |
2866 | 693 @chapter Installation Issues and Problems |
694 | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
695 @cindex Octave, building |
2866 | 696 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
697 Octave 3.4 require approximately 1.3 GB of disk storage to unpack and |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
698 compile from source (considerably less if you don't compile with |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
699 debugging symbols). Once installed, Octave requires approximately 355 MB |
6584 | 700 of disk space (again, considerably less if you don't compile with |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
701 debugging symbols, approximately 50 MB). |
2866 | 702 |
703 @menu | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
704 * What else do I need?:: |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
705 * Other C++ compilers?:: |
2866 | 706 @end menu |
707 | |
4830 | 708 @node What else do I need? |
2866 | 709 @section What else do I need? |
710 | |
711 @cindex GNU gcc | |
712 @cindex GNU g++ | |
713 @cindex libg++ | |
714 @cindex GNU Make | |
715 @cindex Flex | |
716 @cindex GNU Bison | |
717 | |
3154 | 718 To compile Octave, you will need a recent version of GNU Make. You |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
719 will also need GCC 4.3 or later, although GCC 4.4 or later is |
6584 | 720 recommended. |
3154 | 721 |
6584 | 722 @strong{You must have GNU Make to compile octave}. Octave's Makefiles |
3154 | 723 use features of GNU Make that are not present in other versions of make. |
724 GNU Make is very portable and easy to install. | |
2866 | 725 |
4830 | 726 @node Other C++ compilers? |
2866 | 727 @section Can I compile Octave with another C++ compiler? |
728 | |
6584 | 729 Yes, but development is done primarily with GCC, so you may hit some |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
730 incompatibilities. Octave is intended to be portable to any standard |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
731 conforming compiler. If you have difficulties that you think are bugs, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
732 please report them to the @url{http://bugs.octave.org} bug tracker, or |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
733 ask for help on the @email{help@@octave.org} mailing list. |
2866 | 734 |
4830 | 735 @node Common problems |
2866 | 736 @chapter Common problems |
737 | |
738 This list is probably far too short. Feel free to suggest additional | |
739 questions (preferably with answers!) | |
740 | |
741 @itemize @bullet | |
742 @item | |
743 Octave takes a long time to find symbols. | |
744 | |
6606 | 745 Octave uses the @code{genpath} function to recursively add directories |
6900 | 746 to the list of directories searched for function files. Check the list |
6606 | 747 of directories with the @code{path} command. If the path list is very |
748 long check your use of the @code{genpath} function. | |
6735 | 749 |
750 @item | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
751 When plotting Octave occasionally gives me errors like @samp{gnuplot> 9 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
752 0.735604 line 26317: invalid command}. |
6735 | 753 |
754 There is a known bug in gnuplot 4.2 that can cause an off by one error | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
755 while piping data to gnuplot. It has been fixed in gnuplot 4.4. |
6735 | 756 |
757 If you have obtained your copy of Octave from a distribution please file | |
758 a bug report requesting that the fix reported in the above bug report be | |
759 included. | |
8215
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
760 |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
761 @item |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
762 I cannot install a package. Octave complains about a missing |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
763 @code{mkoctfile}. |
8215
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
764 |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
765 Most distributions split Octave into several packages. The script |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
766 @code{mkoctfile} is then part of a separate package: |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
767 @itemize @minus |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
768 @item |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
769 Debian/Ubuntu |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
770 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
771 @c This will work once we upload the Octave packages without a version |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
772 @c in their name to Debian. |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
773 @code{aptitude install octave-headers} |
8215
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
774 |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
775 @item |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
776 Fedora |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
777 |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
778 @code{yum install octave-devel} |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
779 |
518789a0539d
FAQ entry about split development packages in distributions
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8130
diff
changeset
|
780 @end itemize |
2866 | 781 @end itemize |
782 | |
12630
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
783 @node Using Octave |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
784 @chapter Using Octave |
2866 | 785 |
6583 | 786 @menu |
787 * How do I set the number of displayed decimals?:: | |
12631
0c956011c35c
OctaveFAQ.texi: Fix texinfo in FAQ I broke earlier
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12630
diff
changeset
|
788 * How does Octave solve linear systems?:: |
6583 | 789 @end menu |
2866 | 790 |
6583 | 791 @cindex Tips and tricks |
12630
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
792 @cindex Using Octave |
2866 | 793 |
6583 | 794 @node How do I set the number of displayed decimals? |
795 @section How do I set the number of displayed decimals? | |
2866 | 796 |
797 @example | |
798 @group | |
6583 | 799 octave:1> format long |
800 octave:2> pi | |
801 pi = 3.14159265358979 | |
802 octave:3> format short | |
803 octave:4> pi | |
804 pi = 3.1416 | |
2866 | 805 @end group |
806 @end example | |
807 | |
12631
0c956011c35c
OctaveFAQ.texi: Fix texinfo in FAQ I broke earlier
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12630
diff
changeset
|
808 @node How does Octave solve linear systems? |
0c956011c35c
OctaveFAQ.texi: Fix texinfo in FAQ I broke earlier
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12630
diff
changeset
|
809 @section How does Octave solve linear systems? |
12630
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
810 |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
811 @cindex backslash operator |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
812 |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
813 In addition to consulting Octave's source for the precise details, the |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
814 Octave manual contains a complete high-level description of the |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
815 algorithm that Octave uses to decide how to solve a particular linear |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
816 system, e.g. how the backslash operator @code{A\x} will be interpreted. |
12631
0c956011c35c
OctaveFAQ.texi: Fix texinfo in FAQ I broke earlier
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12630
diff
changeset
|
817 Sections ``Techniques Used for Linear Algebra'' and ``Linear Algebra on |
12630
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
818 Sparse Matrices'' from the manual describe this procedure. |
f154bef3cf61
OctaveFAQ.texi: Add a pointer to the manual concerning the backslash operator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12492
diff
changeset
|
819 |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
820 @node @sc{Matlab} compatibility |
2866 | 821 @chapter Porting programs from @sc{Matlab} to Octave |
822 | |
823 @cindex @sc{Matlab} compatibility | |
824 @cindex Compatibility with @sc{Matlab} | |
825 | |
6612 | 826 People often ask |
827 | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
828 @quotation |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
829 I wrote some code for @sc{Matlab}, and I want to get it running under |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
830 Octave. Is there anything I should watch out for? |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
831 @end quotation |
2866 | 832 |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
833 @noindent |
6612 | 834 or alternatively |
835 | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
836 @quotation |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
837 I wrote some code in Octave, and want to share it with @sc{Matlab} |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
838 users. Is there anything I should watch out for? |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
839 @end quotation |
6612 | 840 |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
841 @noindent |
6900 | 842 which is not quite the same thing. There are still a number of |
6612 | 843 differences between Octave and @sc{Matlab}, however in general |
844 differences between the two are considered as bugs. Octave might | |
845 consider that the bug is in @sc{Matlab} and do nothing about it, but | |
846 generally functionality is almost identical. If you find a difference | |
847 between Octave behavior and @sc{Matlab}, then you should send a | |
848 description of this difference (with code illustrating the difference, | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
849 if possible) to @url{http://bugs.octave.org}. |
6612 | 850 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
851 Furthermore, Octave adds a few syntactical extensions to @sc{Matlab} |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
852 that might cause some issues when exchanging files between @sc{Matlab} |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
853 and Octave users. As both Octave and @sc{Matlab} are under constant |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
854 development the information in this section is subject to change at |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
855 anytime. |
6612 | 856 |
857 You should also look at the page | |
858 @url{http://octave.sourceforge.net/packages.html} and | |
859 @url{http://octave.sourceforge.net/doc/} that has a function reference | |
860 that is up to date. You can use this function reference to see the | |
861 number of octave function that are available and their @sc{Matlab} | |
862 compatibility. | |
863 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
864 The major differences between Octave 3.4.N and @sc{Matlab} R2010b are: |
6612 | 865 |
866 @itemize @bullet | |
867 @item Nested Functions | |
868 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
869 Octave has limited support for nested functions. That is |
2866 | 870 |
6612 | 871 @example |
872 @group | |
873 function y = foo (x) | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
874 y = bar (x) |
6900 | 875 function y = bar (x) |
876 y = @dots{}; | |
877 end | |
6612 | 878 end |
879 @end group | |
880 @end example | |
881 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
882 is equivalent to |
6612 | 883 |
884 @example | |
885 @group | |
886 function y = foo (x) | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
887 y = bar (x) |
6612 | 888 end |
889 function y = bar (x) | |
890 y = @dots{}; | |
891 end | |
892 @end group | |
893 @end example | |
894 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
895 The main difference with @sc{Matlab} is a matter of scope. While nested |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
896 functions have access to the parent function's scope in @sc{Matlab}, no |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
897 such thing is available in Octave, due to how Octave essentially |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
898 ``un-nests'' nested functions. |
6612 | 899 |
900 The authors of Octave consider the nested function scoping rules of | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
901 @sc{Matlab} to be more problems than they are worth as they introduce |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
902 difficult to find bugs as inadvertently modifying a variable in a |
6612 | 903 nested function that is also used in the parent is particularly easy. |
904 | |
905 @item Differences in core syntax | |
906 There a few core @sc{Matlab} syntaxes that are not accepted by Octave, | |
907 these being | |
908 | |
909 @itemize @bullet | |
2866 | 910 @item |
6612 | 911 Some limitations on the use of function handles. The major difference is |
6879 | 912 related to nested function scoping rules (as above) and their use with |
6612 | 913 function handles. |
2866 | 914 |
915 @item | |
6612 | 916 Some limitations of variable argument lists on the LHS of an expression, |
917 though the most common types are accepted. | |
918 | |
2866 | 919 @item |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
920 @sc{Matlab} classdef object oriented programming is not yet supported, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
921 though work is underway and when development more on to Octave 3.5 this |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
922 will be included in the development tree. |
6612 | 923 @end itemize |
924 | |
925 @item Differences in core functions | |
926 A large number of the @sc{Matlab} core functions (ie those that are in | |
927 the core and not a toolbox) are implemented, and certainly all of the | |
928 commonly used ones. There are a few functions that aren't implemented, | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
929 usually to do with specific missing Octave functionality (GUI, DLL, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
930 Java, ActiveX, DDE, web, and serial functions). Some of the core |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
931 functions have limitations that aren't in the @sc{Matlab} version. For |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
932 example the @code{sprandn} function can not force a particular condition |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
933 number for the matrix like @sc{Matlab} can. |
6612 | 934 |
935 @item Just-In-Time compiler | |
936 @sc{Matlab} includes a "Just-In-Time" compiler. This compiler allows the | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
937 acceleration of for-loops in @sc{Matlab} to almost native performance |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
938 with certain restrictions. The JIT must know the return type of all |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
939 functions called in the loops and so you can't include user functions in |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
940 the loop of JIT optimized loops. Octave doesn't have a JIT and so to |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
941 some might seem slower than @sc{Matlab}. For this reason you must |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
942 vectorize your code as much as possible. The MathWorks themselves have a |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
943 good document discussing vectorization at |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
944 @c It would be nice if we had our own guide for this instead of relying |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
945 @c on Matlab documentation. |
6612 | 946 @url{http://www.mathworks.com/support/tech-notes/1100/1109.html}. |
947 | |
948 @item Compiler | |
949 On a related point, there is no Octave compiler, and so you can't | |
950 convert your Octave code into a binary for additional speed or | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
951 distribution. There have been several aborted attempts at creating an |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
952 Octave compiler. Should the JIT compiler above ever be implemented, an |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
953 Octave compiler should be more feasible. |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
954 @c Should we mention here any of the efforts to create a compiler? There |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
955 @c used to be a dead link here to http://www.stud.tu-ilmenau.de/~rueckn/ |
6612 | 956 |
957 @item Graphic Handles | |
958 Up to Octave 2.9.9 there was no support for graphic handles in Octave | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
959 itself. In the 3.2.N versions of Octave and beyond the support for |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
960 graphics handles is converging towards full compatibility. The |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
961 @code{patch} function is currently limited to 2-D patches, due to an |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
962 underlying limitation in gnuplot, but the experimental OpenGL backend is |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
963 starting to see an implementation of 3-D patches. |
6612 | 964 |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
965 @item GUI |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
966 There are no @sc{Matlab} compatible GUI functions. There are a number of |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
967 bindings from Octave to Tcl/Tk, VTK and Zenity included in the Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
968 @c Is it too early to mention here the nascent fltk UI buttons? |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
969 Forge project (@url{http://octave.sourceforge.net}) for example that can |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
970 be used for a GUI, but these are not @sc{Matlab} compatible. Work on a |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
971 @sc{Matlab} compatible GUI is in an alpha stage in the JHandles package |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
972 @c Is Jhandles still usable? I thought Michael Goffioul had more or less |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
973 @c already disowned it. |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
974 (@url{http://octave.sourceforge.net/jhandles/index.html}). This might be |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
975 an issue if you intend to exchange Octave code with @sc{Matlab} users. |
6612 | 976 |
977 @item Simulink | |
978 Octave itself includes no Simulink support. Typically the simulink | |
979 models lag research and are less flexible, so shouldn't really be used | |
6900 | 980 in a research environment. However, some @sc{Matlab} users that try to |
981 use Octave complain about this lack. There is a similar package to | |
982 simulink for the Octave and R projects available at | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
983 @c is this project in any state of usability? |
6900 | 984 @url{http://www.scicraft.org/} |
6612 | 985 |
986 @item Mex-Files | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
987 Octave includes an API to the @sc{Matlab} MEX interface. However, as MEX |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
988 is an API to the internals of @sc{Matlab} and the internals of Octave |
6900 | 989 differ from @sc{Matlab}, there is necessarily a manipulation of the data |
990 to convert from a MEX interface to the Octave equivalent. This is | |
991 notable for all complex matrices, where @sc{Matlab} stores complex | |
992 arrays as real and imaginary parts, whereas Octave respects the C99/C++ | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
993 standards of co-locating the real/imag parts in memory. Also due to the |
6900 | 994 way @sc{Matlab} allows access to the arrays passed through a pointer, |
995 the MEX interface might require copies of arrays (even non complex | |
8128 | 996 ones). |
6612 | 997 |
998 @item Block comments | |
8128 | 999 Block comments denoted by "%@{" and "%@}" markers are supported by |
1000 Octave with some limitations. The major limitation is that block | |
8292 | 1001 comments are not supported within [] or @{@}. |
6612 | 1002 |
1003 @item Mat-File format | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1004 There are some differences in the mat v5 file format accepted by Octave. |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1005 @sc{Matlab} recently introduced the "-V7.3" save option which is an HDF5 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1006 format which is particularly useful for 64-bit platforms where the |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1007 standard @sc{Matlab} format can not correctly save variables. Octave |
6900 | 1008 accepts HDF5 files, but is not yet compatible with the "-v7.3" versions |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
1009 produced by @sc{Matlab}. |
6612 | 1010 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1011 Although Octave can load inline function handles saved by @sc{Matlab}, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1012 it can not yet save them. |
6612 | 1013 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1014 Finally, Some multi-byte Unicode characters aren't yet treated in |
6612 | 1015 mat-files. |
1016 | |
1017 @item Profiler | |
1018 Octave doesn't have a profiler. Though there is a patch for a flat | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1019 profiler, that might become a real profiler sometime in the future. See |
6612 | 1020 the thread |
1021 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1022 @c Did this idea go anywhere? Should it be mentioned? |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1023 @url{http://octave.1599824.n4.nabble.com/Octave-profiler-td1641945.html#a1641947} |
6612 | 1024 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1025 for more details. |
6612 | 1026 |
1027 @item Toolboxes | |
1028 Octave is a community project and so the toolboxes that exist are | |
6900 | 1029 donated by those interested in them through the Octave Forge website |
6612 | 1030 (@url{http://octave.sourceforge.net}). These might be lacking in certain |
1031 functionality relative to the @sc{Matlab} toolboxes, and might not | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
1032 exactly duplicate the @sc{Matlab} functionality or interface. |
6612 | 1033 |
1034 @item Short-circuit & and | operators | |
6900 | 1035 The @code{&} and @code{|} operators in @sc{Matlab} short-circuit when |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
1036 included in an if statement and not otherwise. In Octave only the |
6900 | 1037 @code{&&} and @code{||} short circuit. Note that this means that |
6612 | 1038 |
1039 @example | |
1040 @group | |
1041 if (a | b) | |
1042 @dots{} | |
1043 end | |
1044 @end group | |
1045 @end example | |
1046 | |
1047 and | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1048 |
6612 | 1049 @example |
1050 @group | |
1051 t = a | b; | |
1052 if t | |
1053 @dots{} | |
1054 end | |
1055 @end group | |
1056 @end example | |
1057 | |
6900 | 1058 @noindent |
6612 | 1059 are different in @sc{Matlab}. This is really a @sc{Matlab} bug, but |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1060 there is too much code out there that relies on this behaviour to change |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1061 it. Prefer the || and && operators in if statements if possible. If you |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1062 need to use code written for @sc{Matlab} that depends on this buggy |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1063 behaviour, you can enable it since Octave 3.4.0 with the following |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1064 command: |
2866 | 1065 |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1066 @example |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1067 @group |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1068 do_braindead_shortcircuit_evaluation (1) |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1069 @end group |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1070 @end example |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1071 |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1072 Note that the difference with @sc{Matlab} is also significant when |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1073 either argument is a function with side effects or if the first argument |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1074 is a scalar and the second argument is an empty matrix. For example, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1075 note the difference between |
6612 | 1076 |
1077 @example | |
1078 @group | |
1079 t = 1 | []; ## results in [], so... | |
1080 if (t) 1, end ## in if ([]), this is false. | |
1081 @end group | |
1082 @end example | |
1083 | |
1084 and | |
1085 | |
1086 @example | |
1087 if (1 | []) 1, end ## short circuits so condition is true. | |
1088 @end example | |
1089 | |
1090 Another case that is documented in the @sc{Matlab} manuals is that | |
1091 | |
1092 @example | |
1093 @group | |
1094 t = [1, 1] | [1, 2, 3]; ## error | |
1095 if ([1, 1] | [1, 2, 3]) 1, end ## OK | |
1096 @end group | |
1097 @end example | |
1098 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1099 Also @sc{Matlab} requires the operands of && and || to be scalar values |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1100 but Octave does not (it just applies the rule that for an operand to be |
6612 | 1101 considered true, every element of the object must be nonzero or |
1102 logically true). | |
1103 | |
1104 Finally, note the inconsistence of thinking of the condition of an if | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1105 statement as being equivalent to @code{all (X(:))} when @var{X} is a |
6612 | 1106 matrix. This is true for all cases EXCEPT empty matrices: |
1107 | |
1108 @example | |
1109 @group | |
1110 if ([0, 1]) == if (all ([0, 1])) ==> i.e., condition is false. | |
1111 if ([1, 1]) == if (all ([1, 1])) ==> i.e., condition is true. | |
1112 @end group | |
1113 @end example | |
1114 | |
1115 However, | |
1116 | |
1117 @example | |
1118 if ([]) != if (all ([])) | |
1119 @end example | |
1120 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1121 because @code{samp ([]) == 1} because, despite the name, it is really |
6612 | 1122 returning true if none of the elements of the matrix are zero, and since |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1123 there are no elements, well, none of them are zero. This is an example |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1124 of vacuous truth. But, somewhere along the line, someone decided that if |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1125 @code{([])} should be false. Mathworks probably thought it just looks |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1126 wrong to have @code{[]} be true in this context even if you can use |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1127 logical gymnastics to convince yourself that "all" the elements of a |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1128 matrix that doesn't actually have any elements are nonzero. Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1129 however duplicates this behavior for if statements containing empty |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1130 matrices. |
6612 | 1131 |
8292 | 1132 @item Solvers for singular, under- and over-determined matrices |
1133 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1134 @sc{Matlab}'s solvers as used by the operators mldivide (\) and mrdivide |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1135 (/), use a different approach than Octave's in the case of singular, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1136 under-, or over-determined matrices. In the case of a singular matrix, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1137 @sc{Matlab} returns the result given by the LU decomposition, even |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1138 though the underlying solver has flagged the result as erroneous. Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1139 has made the choice of falling back to a minimum norm solution of |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1140 matrices that have been flagged as singular which arguably is a better |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1141 result for these cases. |
8292 | 1142 |
1143 In the case of under- or over-determined matrices, Octave continues to | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1144 use a minimum norm solution, whereas @sc{Matlab} uses an approach that |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1145 is equivalent to |
8292 | 1146 |
1147 @example | |
1148 @group | |
1149 function x = mldivide (A, b) | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1150 [Q, R, E] = qr (A); |
8292 | 1151 x = [A \ b, E(:, 1:m) * (R(:, 1:m) \ (Q' * b))] |
1152 end | |
1153 @end group | |
1154 @end example | |
1155 | |
1156 @noindent | |
1157 While this approach is certainly faster and uses less memory than | |
1158 Octave's minimum norm approach, this approach seems to be inferior in | |
1159 other ways. | |
1160 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1161 A numerical question arises: how big can the null space component |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1162 become, relative to the minimum-norm solution? Can it be nicely bounded, |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1163 or can it be arbitrarily big? Consider this example: |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1164 OctaveFAQ.texi |
8292 | 1165 @example |
1166 @group | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
1167 m = 10; |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
1168 n = 10000; |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1169 A = ones (m, n) + 1e-6 * randn (m,n); |
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1170 b = ones (m, 1) + 1e-6 * randn (m,1); |
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1171 norm (A \ b) |
8292 | 1172 @end group |
1173 @end example | |
1174 | |
1175 @noindent | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1176 while Octave's minimum-norm values are around 3e-2, @sc{Matlab}'s |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1177 results are 50-times larger. For another issue, try this code: |
8292 | 1178 |
1179 @example | |
1180 @group | |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
1181 m = 5; |
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
1182 n = 100; |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1183 j = floor (m * rand (1, n)) + 1; |
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1184 b = ones (m, 1); |
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1185 A = zeros (m, n); |
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1186 A(sub2ind (size (A),j,1:n)) = 1; |
12479
c741c1f2789e
Minor proofreading in FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12478
diff
changeset
|
1187 x = A \ b; |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1188 [dummy,p] = sort (rand (1,n)); |
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1189 y = A(:,p) \ b; |
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1190 norm (x(p)-y) |
8292 | 1191 @end group |
1192 @end example | |
1193 | |
1194 @noindent | |
12478
b4138a75eecc
Uniformise "Matlab" typesetting in FAQ.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
11576
diff
changeset
|
1195 It shows that unlike in Octave, mldivide in @sc{Matlab} is not invariant |
8292 | 1196 with respect to column permutations. If there are multiple columns of |
1197 the same norm, permuting columns of the matrix gets you different | |
1198 result than permuting the solution vector. This will surprise many | |
1199 users. | |
1200 | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1201 Since the mldivide (\) and mrdivide (/) operators are often part of a |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1202 more complex expression, where there is no room to react to warnings or |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1203 flags, it should prefer intelligence (robustness) to speed, and so the |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1204 Octave developers are firmly of the opinion that Octave's approach for |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1205 singular, under- and over-determined matrices is a better choice that |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1206 @sc{Matlab}'s |
8292 | 1207 |
6612 | 1208 @item Octave extensions |
1209 The extensions in Octave over @sc{Matlab} syntax are | |
1210 very useful, but might cause issues when sharing with @sc{Matlab} users. | |
1211 A list of the major extensions that should be avoided to be compatible | |
1212 with @sc{Matlab} are | |
1213 | |
1214 @itemize @bullet | |
1215 @item | |
6900 | 1216 Comments in octave can be marked with @samp{#}. This allows POSIX |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1217 systems to have the first line as @samp{#! octave -q} and mark the |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1218 script itself executable. @sc{Matlab} doesn't have this feature due to |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1219 the absence of comments starting with @samp{#}". |
2866 | 1220 |
6612 | 1221 @item |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1222 Code blocks like @code{if}, @code{for}, @code{while}, etc can be |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1223 terminated with block specific terminations like @code{endif}. |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1224 @sc{Matlab} doesn't have this and all blocks must be terminated with |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1225 @code{end}. |
6612 | 1226 |
1227 @item | |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1228 Octave has a lisp like @code{unwind_protect} block that allows blocks of |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1229 code that terminate in an error to ensure that the variables that are |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1230 touched are restored. You can do something similar with |
6900 | 1231 @code{try}/@code{catch} combined with @samp{rethrow (lasterror ())} in |
12490
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1232 @sc{Matlab}, however rethrow and lasterror are only available in Octave |
30f2a3b1d236
Major update to FAQ
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12479
diff
changeset
|
1233 2.9.10 and later. @sc{Matlab} 2008a also introduced @code{OnCleanUp} |
12492
5b1654bc5012
Small FAQ fixes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12490
diff
changeset
|
1234 that is similar to @code{unwind_protect}, except that the object created |
5b1654bc5012
Small FAQ fixes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12490
diff
changeset
|
1235 by this function has to be explicitly cleared in order for the cleanup |
5b1654bc5012
Small FAQ fixes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12490
diff
changeset
|
1236 code to run. |
6612 | 1237 |
6900 | 1238 Note that using @code{try}/@code{catch} combined with @samp{rethrow |
8325
b93ac0586e4b
spelling corrections
Brian Gough<bjg@network-theory.co.uk>
parents:
8292
diff
changeset
|
1239 (lasterror ())} can not guarantee that global variables will be |
6900 | 1240 correctly reset, as it won't catch user interrupts with Ctrl-C. For |
1241 example | |
6612 | 1242 |
1243 @example | |
1244 @group | |
1245 global a | |
1246 a = 1; | |
1247 try | |
1248 _a = a; | |
1249 a = 2 | |
1250 while true | |
1251 end | |
1252 catch | |
1253 fprintf ('caught interrupt\n'); | |
1254 a = _a; | |
1255 rethrow (lasterror()); | |
1256 end | |
1257 @end group | |
1258 @end example | |
1259 | |
1260 @noindent | |
1261 compared to | |
1262 | |
1263 @example | |
1264 @group | |
1265 global a | |
1266 a = 1; | |
1267 unwind_protect | |
1268 _a = a; | |
1269 a = 2 | |
1270 while true | |
1271 end | |
1272 unwind_protect_cleanup | |
1273 fprintf ('caught interrupt\n'); | |
1274 a = _a; | |
1275 end | |
1276 @end group | |
1277 @end example | |
1278 | |
1279 Typing Ctrl-C in the first case returns the user directly to the | |
6879 | 1280 prompt, and the variable "a" is not reset to the saved value. In the |
6900 | 1281 second case the variable "a" is reset correctly. Therefore @sc{Matlab} |
12492
5b1654bc5012
Small FAQ fixes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12490
diff
changeset
|
1282 gives no safe way of temporarily changing global variables. |
6612 | 1283 |
1284 @item | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1285 Indexing can be applied to all objects in Octave and not just a |
6612 | 1286 variable. Therefore @code{sin(x)(1:10);} for example is perfectly valid |
1287 in Octave but not @sc{Matlab}. To do the same in @sc{Matlab} you must do | |
14856
c3fd61c59e9c
maint: Use Octave coding conventions for cuddling parentheses in doc directory
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1288 @code{y = sin (x); y = y([1:10]);} |
6612 | 1289 |
1290 @item | |
6900 | 1291 Octave has the operators "++", "--", "-=", "+=", "*=", etc. As |
6612 | 1292 @sc{Matlab} doesn't, if you are sharing code these should be avoided. |
1293 | |
1294 @item | |
6900 | 1295 Character strings in Octave can be denoted with double or single |
1296 quotes. There is a subtle difference between the two in that escaped | |
1297 characters like @code{\n} (newline), @code{\t} (tab), etc are | |
1298 interpreted in double quoted strings but not single quoted strings. This | |
1299 difference is important on Windows platforms where the "\" character is | |
1300 used in path names, and so single quoted strings should be used in | |
1301 paths. @sc{Matlab} doesn't have double quoted strings and so they should | |
12702
013cd94d8d7f
doc: Spelling fixes for various documentation files
John Bradshaw <john@johnbradshaw.org>
parents:
12492
diff
changeset
|
1302 be avoided if the code will be transferred to a @sc{Matlab} user. |
6612 | 1303 @end itemize |
1304 | |
1305 @end itemize | |
2866 | 1306 |
4830 | 1307 @node Index |
2866 | 1308 @appendix Concept Index |
1309 | |
1310 @printindex cp | |
1311 | |
1312 @page | |
1313 @contents | |
1314 @bye |