For example, a stock portfolio has three different stocks and their closing prices today are:. The vectors are 1 -by- 3 and 3 -by- 1 ; the resulting vector is 1 -by- 1 , a scalar. Multiplying these vectors thus means multiplying each closing price by its respective number of shares and summing the result.
In matrix algebra, if X and Y are vectors of the same length. It is an exception to the commutative rule. Be sure that the two vectors have the same dimensions. To illustrate, use the previous vectors. As expected, the value in these cases matches the PortfValue computed previously.
Multiplying vectors and matrices follows the matrix multiplication rules and process. For example, a portfolio matrix contains closing prices for a week. A second matrix vector contains the stock quantities in the portfolio. The prices matrix is 5 -by- 3 , the quantity matrix vector is 3 -by- 1 , so the resulting matrix vector is 5 -by- 1.
Matrix multiplication also follows the rules of matrix algebra. In matrix algebra notation, if A is an m -by- n matrix and B is an n -by- p matrix. To illustrate, assume that there are two portfolios of the same three stocks previously mentioned but with different quantities. Multiplying the 5 -by- 3 week's closing prices matrix by the 3 -by- 2 portfolios matrix yields a 5 -by- 2 matrix showing each day's closing value for both portfolios.
Monday's values result from multiplying each Monday closing price by its respective number of shares and summing the result for the first portfolio, then doing the same for the second portfolio. Tuesday's values result from multiplying each Tuesday closing price by its respective number of shares and summing the result for the first portfolio, then doing the same for the second portfolio.
And so on, through the rest of the week. Multiplying a matrix by a scalar is an exception to the dimension and commutative rules. It just operates element-by-element. Matrix division is useful primarily for solving equations, and especially for solving simultaneous linear equations see Solving Simultaneous Linear Equations.
In formal matrix algebra, the solution involves matrix inversion. In general,. In general, matrix A must be a nonsingular square matrix; that is, it must be invertible and it must have the same number of rows and columns. Generally, a matrix is invertible if the matrix times its inverse equals the identity matrix.
To understand the theory and proofs, consult a textbook on linear algebra such as Elementary Linear Algebra by Hill listed in Bibliography. Matrix division is especially useful in solving simultaneous linear equations. Consider this problem: Given two portfolios of mortgage-based instruments, each with certain yields depending on the prime rate, how do you weight the portfolios to achieve certain annual cash flows? The answer involves solving two linear equations. It is a linear equation because it describes a line in the xy -plane.
A system of linear equations is a set of linear equations that you usually want to solve at the same time; that is, simultaneously. A basic principle for exact answers in solving simultaneous linear equations requires that there be as many equations as there are unknowns.
To get exact answers for x and y , there must be two equations. For example, to solve for x and y in the system of linear equations. Matrix algebra represents this system as an equation involving three matrices: A for the left-side constants, X for the variables, and B for the right-side constants. Solving the system simultaneously means solving for X. In general, you can use matrix algebra to solve any system of linear equations such as.
Matrices can easily be "pasted" together in this manner -- a process that is both simple and easily understood by anyone reading a procedure including its author. Of course, the sizes of the matrices must be compatible. Frequently one wishes to reference only a portion of a matrix. To reference a part of a matrix, give the matrix name followed by parentheses with expressions indicating the portion desired.
The simplest case arises when only one element is wanted. For example, using d in the previous section:. In every case the first parenthesized expression indicates the row or rows , while the second expression indicates the column or columns. If a matrix is, in fact, a vector, a single expression may be given to indicate the desired element, but it is often wise to give both row and column information explicitly, even in such cases.
To indicate "all the rows" use a colon for the first expression. To indicate "all the columns", use a colon for the second expression. Thus, with:. In fact, you may use any expression in this manner as long as it evaluates to a vector of valid row or column numbers. Particularly useful in this context and others is the construct that uses a colon to produce a string of consecutive integers. It deals with text but you can tell that its heart isn't in it.
Thus the number 32 represents a space, the number 65 a capital A, etc.. To create a string variable, enclose a string of characters in "single" quotation marks actually, apostrophes , thus:. Since a string variable is in fact a row vector of numbers, it is possible to create a list of strings by creating a matrix in which each row is a separate string.
As with all standard matrices, the rows must be of the same length. The Mathworks uses the term matrix operation to refer to standard procedures such as matrix multiplication. The term array operation is reserved for element-by-element computations.
Matrix transposition is as easy as adding a prime apostrophe to the name of the matrix. To subtract one matrix from another of the same size, use a minus - sign. If a matrix needs to be "turned around" to conform, use its transpose. There is one case in which addition or subtraction works when the components are of different sizes.
If one is a scalar, it is added to or subtracted from all the elements in the other. With one exception the usual rules apply: the inner dimensions of the two operands must be the same. If they are not, you will be told so. The one allowed exception covers the case in which one of the components is a scalar. In this instance, the scalar value is multiplied by every element in the matrix, resulting in a new matrix of the same size.
MATLAB provides two notations for "matrix division" that provide rapid solutions to simultaneous equation or linear regression problems. They are better discussed in the context of such problems. To indicate an array element-by-element operation, precede a standard operator with a period dot. You may divide all the elements in one matrix by the corresponding elements in another, producing a matrix of the same size, as in:. In each case, one of the operands may be a scalar. This proves handy when you wish to raise all the elements in a matrix to a power.
Array addition and subtraction are not needed and in fact are not allowed , since they would simply duplicate the operations of matrix addition and subtraction. Some provide one matrix answer; others provide two or more. You may use any function in an expression.
If it returns one answer, that answer will be used. The sum function provides an example:. Some functions, such as max provide more than one answer. If such a function is included in an expression, only the first answer will be used. To get all the answers from a function that provides more than one, use a multiple assignment statement in which the variables that are to receive the answers are listed to the left of the equal sign, enclosed in square brackets, and the function is on the right.
Many of MATLAB's built-in functions, such as sum , min , max , and mean have natural interpretations when applied to a vector. If a matrix is given as an argument to such a function, its procedure is applied separately to each column , and a row vector of results returned.
Some functions provide no answers per se. For example, to plot a vector y against a vector x, simply use the statement:. Note that in this case, two arguments the items in the parentheses after the function name were provided as inputs to the function. Each function needs a specific number of inputs. However, some have been programmed to react appropriately when fewer are given. For example, to plot y against 1,2, Among them, the following are particularly useful for Macro-Investment Analysis: ones ones matrix zeros zeros matrix size size of a matrix diag diagonal elements of a matrix inv matrix inverse rand uniformly distributed random numbers randn normally distributed random numbers cumprod cumulative product of elements cumsum cumulative sum of elements max largest component min smallest component sum sum of elements mean average or mean value median median value std standard deviation sort sort in ascending order find find indices of nonzero entries corrcoef correlation coefficients cov covariance matrix Not listed, but of great use, are the many functions that provide plots of data in either two or three dimensions, as well as a number of more specialized functions.
However, this list should serve to whet the Analyst's appetite. The former is a logical relation, the latter an assignment statement. Whenever MATLAB encounters a relational operator, it produces a one if the expression is true and a zero if the expression is false. Relational operators can be used on matrices, as long as they are of the same size.
Operations are performed element-by-element, resulting a matrix with ones in positions for which the relation was true and zeros in positions for which the relation was false. Relational and logical operators are used frequently with If statements described below and scalar variables, as in more mundane programming languages. But the ability to use them with matrices offers major advantages in some Investment applications. To sort a matrix in ascending order, use the sort function.
If the argument is a vector, the result will be a new vector with the items in the desired order. If it is a matrix, the result will be a new matrix in which each column will contain the contents of the corresponding column from the old matrix, in ascending order.
Note that in the latter case, each column is, in effect, sorted separately. To obtain a record of the rows from which each of the sorted elements came, use a multiple assignment to get the second output of the function. For the case above:. It is possible to do a great deal in MATLAB by simply executing statements involving matrix expressions, one after the other, However, there are cases in which one simply must substitute some non-sequential order.
The most common use of a For Loop arises when a set of statements is to be repeated a fixed number of times, as in:. A While Loop contains statements to be executed as long as a stated condition remains true, as in:. It is, of course, crucial that at some point a statement will be executed that will cause the condition in the While statement to be false. If this is not the case, you have created an infinite loop -- one that will go merrily on until you pull the plug.
Of course, somewhere in the While loop there should be a statement that will at some point set done equal to true. A If Statement provides a method for executing certain statements if a condition is true and other statements or none if the condition is false. In this case, if x is greater than 0. All three of these structures allow nesting , in which one type of structure lies within another.
The indentation is for the reader's benefit, but highly recommended in this and other situations. MATLAB will pair up end statements with preceding for , while , or if statements in a last-come-first-served manner. It is up to the programmer to ensure that this will give the desired results.
Indenting can help, but hardly guarantees success on every occasion. While it is tempting for those with experience in traditional programming languages to take the easy way out, using For and While loops for mathematical operations, this temptation should be resisted strenuously. For example, instead of:. The latter is more succinct, far clearer, and will run much faster. MATLAB performs matrix operations at blinding speed, but can be downright glacial at times when loops are to be executed a great many times, since it must do a certain amount of translation of each statement every time it is encountered.
Once a function m-file is written, debugged, and placed in an appropriate directory, it is for all practical purposes part of your version of MATLAB. A function file starts with a line declaring the function, its arguments and its outputs. There follow the statements required to produce the outputs from the inputs arguments. That's it. Of course, this will only work if the holdings and prices vectors or matrices are compatible for matrix multiplication.
Update 2: Thank you all for suggestions, however I should have specified beforehand, precision AND speed are both an integral factor here, I may have to look into going back to my original method before trying 3-d arrays and re-evaluate the method for importing the data. Use cell arrays. This has an advantage over 3D arrays in that it does not require a contiguous memory space to store all the matrices. In fact, each matrix can be stored in a different space in memory, which will save you from Out-of-Memory errors if your free memory is fragmented.
Here is a sample function to create your matrices in a cell array:. If you can't know the number of matrices in advance, you could simply use MATLAB's dynamic indexing to make the array as large as you need. The performance overhead will be proportional to the size of the cell array, and is not affected by the size of the matrices themselves.
For example:. If all of the matrices are going to be the same size i. If each matrix is not going to be the same size, you would need to use cell arrays like Hosam suggested. EDIT: I missed the part about running out of memory. I'm guessing your nUnknown is fairly large.
You may have to switch the data type of the matrices single or even a uintXX type if you are using integers. You can do this in the call to zeros:. If you're running out of memory throw more RAM in your system, and make sure you're running a 64 bit OS. Also try reducing your precision do you really need doubles or can you get by with singles?
I was doing some volume rendering in octave matlab clone and building my 3D arrays ie an array of 2d slices using. Memory consumption seemed to be efficient. However it has been a while since I last used matlab. Stack Overflow for Teams — Start collaborating and sharing organizational knowledge. Create a free Team Why Teams? Learn more.
Asked 13 years, 5 months ago. Modified 3 years, 1 month ago. Viewed k times. Are there any ways to achieve this? I guess using cell matrices will not affect performance at all. Since they essentially contain pointers to the actual matrices, expanding them even with dynamic indexing should not incur performance overheads except for minimally reallocating an array of pointers, which is negligible.
Add a comment. Sorted by: Reset to default. Highest score default Date modified newest first Date created oldest first. Hosam Aly Hosam Aly HosamAly I was creating 2D array of matrices based on your proposal. Then, I was proposed to create a single 4D array which outperforms the former by 9x, but I get a memory limit problem with big matrix sizes.
In this section, we will discuss some functions that create some special arrays. For all these functions, a single argument creates a square array, double arguments create rectangular array. A magic square is a square that produces the same sum, when its elements are added row-wise, column-wise or diagonally.
The magic function creates a magic square array. It takes a singular argument that gives the size of the square. The argument must be a scalar greater than or equal to 3. Generally to generate a multidimensional array, we first create a two-dimensional array and extend it. We can also use the cat function to build multidimensional arrays.
Cell arrays are arrays of indexed cells where each cell can store an array of a different dimensions and data types.