Path: utzoo!attcan!uunet!lll-winken!lll-tis!helios.ee.lbl.gov!pasteur!ames!mailrus!bbn!ulowell!page From: page@swan.ulowell.edu (Bob Page) Newsgroups: comp.sources.amiga Subject: v02i049: matlab - matrix laboratory, Part09/11 (help02/02) Message-ID: <10024@swan.ulowell.edu> Date: 2 Nov 88 21:52:41 GMT Organization: University of Lowell, Computer Science Dept. Lines: 393 Approved: page@swan.ulowell.edu Submitted-by: strovink%galaxy-43@afit-ab.arpa (Mark A. Strovink) Posting-number: Volume 2, Issue 49 Archive-name: applications/matlab/help.2 # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # help-2 # This archive created: Wed Nov 2 16:19:36 1988 cat << \SHAR_EOF > help-2 FOR J = 1:N, V = A(:,J); ... except J is also set here. FUN For matrix arguments X , the functions SIN, COS, ATAN, SQRT, LOG, EXP and X**p are computed using eigenvalues D and eigenvectors V . If = EIG(X) then f(X) = V*f(D)/V . This method may give inaccurate results if V is badly conditioned. Some idea of the accuracy can be obtained by comparing X**1 with X . For vector arguments, the function is applied to each component. HESS Hessenberg form. The Hessenberg form of a matrix is zero below the first subdiagonal. If the matrix is symmetric or Hermitian, the form is tridiagonal. = HESS(A) produces a unitary matrix P and a Hessenberg matrix H so that A = P*H*P'. By itself, HESS(A) returns H. HILB Inverse Hilbert matrix. HILB(N) is the inverse of the N by N matrix with elements 1/(i+j-1), which is a famous example of a badly conditioned matrix. The result is exact for N less than about 15, depending upon the computer. IF Conditionally execute statements. Simple form... IF expression rop expression, statements where rop is =, <, >, <=, >=, or <> (not equal) . The statements are executed once if the indicated comparison between the real parts of the first components of the two expressions is true, otherwise the statements are skipped. Example. IF ABS(I-J) = 1, A(I,J) = -1; More complicated forms use END in the same way it is used with FOR and WHILE and use ELSE as an abbreviation for END, IF expression not rop expression . Example FOR I = 1:N, FOR J = 1:N, ... IF I = J, A(I,J) = 2; ELSE IF ABS(I-J) = 1, A(I,J) = -1; ... ELSE A(I,J) = 0; An easier way to accomplish the same thing is A = 2*EYE(N); FOR I = 1:N-1, A(I,I+1) = -1; A(I+1,I) = -1; IMAG IMAG(X) is the imaginary part of X . INV INV(X) is the inverse of the square matrix X . A warning message is printed if X is badly scaled or nearly singular. KRON KRON(X,Y) is the Kronecker tensor product of X and Y . It is also denoted by X .*. Y . The result is a large matrix formed by taking all possible products between the elements of X and those of Y . For example, if X is 2 by 3, then X .*. Y is < x(1,1)*Y x(1,2)*Y x(1,3)*Y x(2,1)*Y x(2,2)*Y x(2,3)*Y > The five-point discrete Laplacian for an n-by-n grid can be generated by T = diag(ones(n-1,1),1); T = T + T'; I = EYE(T); A = T.*.I + I.*.T - 4*EYE; Just in case they might be useful, MATLAB includes constructions called Kronecker tensor quotients, denoted by X ./. Y and X .\. Y . They are obtained by replacing the elementwise multiplications in X .*. Y with divisions. LINES An internal count is kept of the number of lines of output since the last input. Whenever this count approaches a limit, the user is asked whether or not to suppress printing until the next input. Initially the limit is 25. LINES(N) resets the limit to N . LOAD LOAD('file') retrieves all the variables from the file . See FILE and SAVE for more details. To prepare your own file for LOADing, change the READs to WRITEs in the code given under SAVE. LOG LOG(X) is the natural logarithm of X . See FUN . Complex results are produced if X is not positive, or has nonpositive eigenvalues. LONG Determine output format. All computations are done in complex arithmetic and double precision if it is available. SHORT and LONG merely switch between different output formats. SHORT Scaled fixed point format with about 5 digits. LONG Scaled fixed point format with about 15 digits. SHORT E Floating point format with about 5 digits. LONG E Floating point format with about 15 digits. LONG Z System dependent format, often hexadecimal. LU Factors from Gaussian elimination. = LU(X) stores a upper triangular matrix in U and a 'psychologically lower triangular matrix', i.e. a product of lower triangular and permutation matrices, in L , so that X = L*U . By itself, LU(X) returns the output from CGEFA . MACRO The macro facility involves text and inward pointing angle brackets. If STRING is the source text for any MATLAB expression or statement, then t = 'STRING'; encodes the text as a vector of integers and stores that vector in t . DISP(t) will print the text and >t< causes the text to be interpreted, either as a statement or as a factor in an expression. For example t = '1/(i+j-1)'; disp(t) for i = 1:n, for j = 1:n, a(i,j) = >t<; generates the Hilbert matrix of order n. Another example showing indexed text, S = <'x = 3 ' 'y = 4 ' 'z = sqrt(x*x+y*y)'> for k = 1:3, >S(k,:)< It is necessary that the strings making up the "rows" of the "matrix" S have the same lengths. MAGIC Magic square. MAGIC(N) is an N by N matrix constructed from the integers 1 through N**2 with equal row and column sums. NORM For matrices.. NORM(X) is the largest singular value of X . NORM(X,1) is the 1-norm of X . NORM(X,2) is the same as NORM(X) . NORM(X,'INF') is the infinity norm of X . NORM(X,'FRO') is the F-norm, i.e. SQRT(SUM(DIAG(X'*X))) . For vectors.. NORM(V,P) = (SUM(V(I)**P))**(1/P) . NORM(V) = NORM(V,2) . NORM(V,'INF') = MAX(ABS(V(I))) . ONES All ones. ONES(N) is an N by N matrix of ones. ONES(M,N) is an M by N matrix of ones . ONES(A) is the same size as A and all ones . ORTH Orthogonalization. Q = ORTH(X) is a matrix with orthonormal columns, i.e. Q'*Q = EYE, which span the same space as the columns of X . PINV Pseudoinverse. X = PINV(A) produces a matrix X of the same dimensions as A' so that A*X*A = A , X*A*X = X and AX and XA are Hermitian . The computation is based on SVD(A) and any singular values less than a tolerance are treated as zero. The default tolerance is NORM(SIZE(A),'inf')*NORM(A)*EPS. This tolerance may be overridden with X = PINV(A,tol). See RANK. PLOT PLOT(X,Y) produces a plot of the elements of Y against those of X . PLOT(Y) is the same as PLOT(1:n,Y) where n is the number of elements in Y . PLOT(X,Y,P) or PLOT(X,Y,p1,...,pk) passes the optional parameter vector P or scalars p1 through pk to the plot routine. The default plot routine is a crude printer-plot. It is hoped that an interface to local graphics equipment can be provided. An interesting example is t = 0:50; PLOT( t.*cos(t), t.*sin(t) ) POLY Characteristic polynomial. If A is an N by N matrix, POLY(A) is a column vector with N+1 elements which are the coefficients of the characteristic polynomial, DET(lambda*EYE - A) . If V is a vector, POLY(V) is a vector whose elements are the coefficients of the polynomial whose roots are the elements of V . For vectors, ROOTS and POLY are inverse functions of each other, up to ordering, scaling, and roundoff error. ROOTS(POLY(1:20)) generates Wilkinson's famous example. PRINT PRINT('file',X) prints X on the file using the current format determined by SHORT, LONG Z, etc. See FILE. PROD PROD(X) is the product of all the elements of X . QR Orthogonal-triangular decomposition. = QR(X) produces an upper triangular matrix R of the same dimension as X and a unitary matrix Q so that X = Q*R . = QR(X) produces a permutation matrix E , an upper triangular R with decreasing diagonal elements and a unitary Q so that X*E = Q*R . By itself, QR(X) returns the output of CQRDC . TRIU(QR(X)) is R . RAND Random numbers and matrices. RAND(N) is an N by N matrix with random entries. RAND(M,N) is an M by N matrix with random entries. RAND(A) is the same size as A . RAND with no arguments is a scalar whose value changes each time it is referenced. Ordinarily, random numbers are uniformly distributed in the interval (0.0,1.0) . RAND('NORMAL') switches to a normal distribution with mean 0.0 and variance 1.0 . RAND('UNIFORM') switches back to the uniform distribution. RAND('SEED') returns the current value of the seed for the generator. RAND('SEED',n) sets the seed to n . RAND('SEED',0) resets the seed to 0, its value when MATLAB is first entered. RANK Rank. K = RANK(X) is the number of singular values of X that are larger than NORM(SIZE(X),'inf')*NORM(X)*EPS. K = RANK(X,tol) is the number of singular values of X that are larger than tol . RCOND RCOND(X) is an estimate for the reciprocal of the condition of X in the 1-norm obtained by the LINPACK condition estimator. If X is well conditioned, RCOND(X) is near 1.0 . If X is badly conditioned, RCOND(X) is near 0.0 . = RCOND(A) sets R to RCOND(A) and also produces a vector Z so that NORM(A*Z,1) = R*NORM(A,1)*NORM(Z,1) So, if RCOND(A) is small, then Z is an approximate null vector. RAT An experimental function which attempts to remove the roundoff error from results that should be "simple" rational numbers. RAT(X) approximates each element of X by a continued fraction of the form a/b = d1 + 1/(d2 + 1/(d3 + ... + 1/dk)) with k <= len, integer di and abs(di) <= max . The default values of the parameters are len = 5 and max = 100. RAT(len,max) changes the default values. Increasing either len or max increases the number of possible fractions. = RAT(X) produces integer matrices A and B so that A ./ B = RAT(X) Some examples: long T = hilb(6), X = inv(T) = rat(X) H = A ./ B, S = inv(H) short e d = 1:8, e = ones(d), A = abs(d'*e - e'*d) X = inv(A) rat(X) display(ans) REAL REAL(X) is the real part of X . RETURN From the terminal, causes return to the operating system or other program which invoked MATLAB. From inside an EXEC, causes return to the invoking EXEC, or to the terminal. RREF RREF(A) is the reduced row echelon form of the rectangular matrix. RREF(A,B) is the same as RREF() . ROOTS Find polynomial roots. ROOTS(C) computes the roots of the polynomial whose coefficients are the elements of the vector C . If C has N+1 components, the polynomial is C(1)*X**N + ... + C(N)*X + C(N+1) . See POLY. ROUND ROUND(X) rounds the elements of X to the nearest integers. SAVE SAVE('file') stores all the current variables in a file. SAVE('file',X) saves only X . See FILE . The variables may be retrieved later by LOAD('file') or by your own program using the following code for each matrix. The lines involving XIMAG may be eliminated if everything is known to be real. attach lunit to 'file' REAL or DOUBLE PRECISION XREAL(MMAX,NMAX) REAL or DOUBLE PRECISION XIMAG(MMAX,NMAX) READ(lunit,101) ID,M,N,IMG DO 10 J = 1, N READ(lunit,102) (XREAL(I,J), I=1,M) IF (IMG .NE. 0) READ(lunit,102) (XIMAG(I,J),I=1,M) 10 CONTINUE The formats used are system dependent. The following are typical. See SUBROUTINE SAVLOD in your local implementation of MATLAB. 101 FORMAT(4A1,3I4) 102 FORMAT(4Z18) 102 FORMAT(4O20) 102 FORMAT(4D25.18) SCHUR Schur decomposition. = SCHUR(X) produces an upper triangular matrix T , with the eigenvalues of X on the diagonal, and a unitary matrix U so that X = U*T*U' and U'*U = EYE . By itself, SCHUR(X) returns T . SHORT See LONG . SEMI Semicolons at the end of lines will cause, rather than suppress, printing. A second SEMI restores the initial interpretation. SIN SIN(X) is the sine of X . See FUN . SIZE If X is an M by N matrix, then SIZE(X) is . Can also be used with a multiple assignment, = SIZE(X) . SQRT SQRT(X) is the square root of X . See FUN . Complex results are produced if X is not positive, or has nonpositive eigenvalues. STOP Use EXIT instead. SUM SUM(X) is the sum of all the elements of X . SUM(DIAG(X)) is the trace of X . SVD Singular value decomposition. = SVD(X) produces a diagonal matrix S , of the same dimension as X and with nonnegative diagonal elements in decreasing order, and unitary matrices U and V so that X = U*S*V' . By itself, SVD(X) returns a vector containing the singular values. = SVD(X,0) produces the "economy size" decomposition. If X is m by n with m > n, then only the first n columns of U are computed and S is n by n . TRIL Lower triangle. TRIL(X) is the lower triangular part of X. TRIL(X,K) is the elements on and below the K-th diagonal of X. K = 0 is the main diagonal, K > 0 is above the main diagonal and K < 0 is below the main diagonal. TRIU Upper triangle. TRIU(X) is the upper triangular part of X. TRIU(X,K) is the elements on and above the K-th diagonal of X. K = 0 is the main diagonal, K > 0 is above the main diagonal and K < 0 is below the main diagonal. USER Allows personal Fortran subroutines to be linked into MATLAB . The subroutine should have the heading SUBROUTINE USER(A,M,N,S,T) REAL or DOUBLE PRECISION A(M,N),S,T The MATLAB statement Y = USER(X,s,t) results in a call to the subroutine with a copy of the matrix X stored in the argument A , its column and row dimensions in M and N , and the scalar parameters s and t stored in S and T . If s and t are omitted, they are set to 0.0 . After the return, A is stored in Y . The dimensions M and N may be reset within the subroutine. The statement Y = USER(K) results in a call with M = 1, N = 1 and A(1,1) = FLOAT(K) . After the subroutine has been written, it must be compiled and linked to the MATLAB object code within the local operating system. WHAT Lists commands and functions currently available. WHILE Repeat statements an indefinite number of times. WHILE expr rop expr, statement, ..., statement, END where rop is =, <, >, <=, >=, or <> (not equal) . The END at the end of a line may be omitted. The comma before the END may also be omitted. The commas may be replaced by semicolons to avoid printing. The statements are repeatedly executed as long as the indicated comparison between the real parts of the first components of the two expressions is true. Example (assume a matrix A is already defined). E = 0*A; F = E + EYE; N = 1; WHILE NORM(E+F-E,1) > 0, E = E + F; F = A*F/N; N = N + 1; E WHO Lists current variables. WHY Provides succinct answers to any questions. // SHAR_EOF # End of shell archive exit 0 -- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page Have five nice days.