﻿

# c# pdf library github : Change pdf metadata control software platform web page windows asp.net web browser Wiley%20Advanced%20Modelling%20in%20Finance%20using%20Excel%20and%20VBA4-part599

33
2.13 MATRIX ALGEBRA AND RELATED FUNCTIONS
Matrix notation is widely used in algebra, as it provides a compact form of expression
for systems of similarly structured equations. Operations with matrices look surprisingly
like ordinary algebraic operations, but in particular multiplication of matrices is more
complex. Excel contains useful matrix functions, in the Math category, which require a
little background knowledge of how matrices behave to get full beneﬁt from them. The
following sections explain matrix notation, and describe the operations of transposing,
adding, multiplying and inverting matrices. The examples illustrating these operations are
in the MatDef sheet of the AMFEXCEL workbook. If you are conversant with matrices,
you may wish to jump straight to the summary of matrix functions (section 2.13.7).
2.13.1 Introduction to Matrices
In algebra, rectangular arrays of numbers are referred to as matrices. A single column
matrix is usually called a column vector; similarly a single row matrix is called a row
vector. In Excel, rectangular blocks of cells are called arrays. All the following blocks of
numbers can be considered as matrices:
2
4
j6 7j
3
2
7
2 20 19
7
9 21
3
2
7
2 20 19
7
9 21
0 13
3
where the brackets j j are merely notational. Calling these matrices x, y, A, and B respec-
tively, x is a column vector and y a row vector. Matrix A has three rows and three
columns and hence is a square matrix. B is not square since it has four rows and three
columns, i.e. B is a 4 by 3 matrix. The numbers of rows, r, and of columns, c, give the
dimensions of a matrix sometimes written as r ð c. For example, if:
xD
2
4
and y D
j
6 7
j
then x has dimensions 2 ð 1 whereas y has dimensions 1 ð 2.
2.13.2 Transposing a Matrix
Transposition of a matrix converts rows into columns (and vice versa). Clearly the trans-
pose of column vector x will be a row vector, denoted as x
T
Figure 2.32 shows the transposes of column vector x and row vector y.
The TRANSPOSE function applied to the cells of an array returns its transpose. For
example, the transpose of the 2 by 1 vector x in cells C4:C5 will have dimensions 1ð2.
To use the TRANSPOSE function, select the cell range I4:J4 and key in the formula:
DTRANSPOSE(C4:C5)
ﬁnishing with CtrlCShiftCEnter pressed simultaneously. The result is shown in
Figure 2.32.
Enable VB.NET Users to Read, Write, Edit, Delete and Update PDF Document Metadata
34
1
2
3
4
5
6
7
8
9
10
11
12
13
A
B
C
D
E
F
G
H
I
J
K
Array Manipulation:
n:
Transposes
s
array:
:
dim
array:
:
dim
x
(2x1)
2
x
T
(1x2)
)
2
4
4
y
(1x2)
6
7
y
T
(2x1)
)
6
7
Array Multiplication
xy
(2x2)
12
14
(xy)
)
T
(2x2)
)
12
24
24
28
14
28
yx
(1x1)
40
(yx)
T
(1x1)
40
Figure 2.32 Matrix operations illustrated in the MatDef sheet
Adding two matrices involves adding their corresponding entries. For this to make sense,
the arrays being added must have the same dimensions. Whereas x and y cannot be
T
do have the same dimensions, 2 by 1, and therefore they can be added,
the result being:
xC y
T
D
2
4
C
6
7
D
8
11
Dz say
To multiply vector y by 10 say, every entry of y is multiplied by 10. Thus:
10y D 10 Ł j6 7 j D j60 70j
This is comparable to adding y to itself 10 times.
2.13.4 Multiplying Matrices
For two matrices to be multiplied they have to have a common dimension, that is, the
number of columns for one must equal the number of rows for the other. The shorthand
expression for this is ‘dimensional conformity’. For the product xy the columns of x must
match the rows of y, 2ð1 times 1ð2, resulting in a 2ð2 matrix as output.
In Figure 2.32, the product xy in cells C10:D11 has elements calculated from:
2
4
j6 7j D
2Ł 6 2 Ł 7
4Ł 6 4 Ł 7
D
12 14
24 28
i.e. the row 1, column 1 element of product xy comes from multiplying the individual
elements of row 1 of x by the elements of column 1 of y, etc.
In contrast, the product yx has dimensions 1ð2 times 2ð1, that is 1ð1, i.e.
it consists of a single element. Looking at product yx in cell C13, this element is
computed as:
j6 7j
2
4
Dj6 Ł 2 C 7 Ł 4j D j40j
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Document and metadata. outputFilePath = Program.RootPath + "\\" 3_optimized.pdf"; 'create optimizing TargetResolution = 150.0F 'to change image compression
How to C#: Modify Image Metadata (tag)
Merge PDF Files; Split PDF Document; Remove Password from PDF; Change PDF Permission Settings. in PDF, C#.NET edit PDF bookmark, C#.NET edit PDF metadata, C#.NET
35
These results demonstrate that for matrices, xy is not the same as yx. The order of
multiplication is critical.
The MMULT array function returns the product of two matrices, called array1 and
array2. So to get the elements of the 2ð2 matrix product xy, select the 2 by 2 cell
range, C10:D11 and key in or use the Paste Function button and build the expression in
the Formula palette:
=MMULT(C4:C5,C7:D7)
remembering to enter it with CtrlCShiftCEnter.
If ranges C4:C5 and C7:D7 are named x and y respectively, then the formula to be
keyed in simpliﬁes to:
=MMULT(x,y)
Consider two more arrays:
CD
12
4
3 13
and D D
16 19 2
5 12 14
The dimensions of C and D are 2ð2 and 2ð3 respectively, so since the number of
columns in C is matched by the number of rows in D, the product CD can be obtained,
its dimensions being 2ð3. So:
CD D
12 Ł 16 C 4 Ł 5 12Ł 19 C 4 Ł 12 12Ł 2C 4 Ł 14
3 Ł 16 C 13 Ł 5 3 Ł 19C 13 Ł 12 3 Ł 2 C 13 Ł 14
D
212 276
32
113 213 176
However, the product DC cannot be formed because of incompatible dimensions (the
number of columns in D does not equal the number of rows in C). In general, the
multiplication of matrices is not commutative, so that usually CD 6D DC, as in this case.
If C and D are the names of the 2 by 2 and the 2 by 3 arrays respectively, then the
cell formula:
=MMULT(C,D)
will produce the elements of the 2 by 3 product array.
2.13.5 Matrix Inversion
Asquare matrix I with ones for all its diagonal entries and zeros for all its off-diagonal
elements is called an identity matrix. Thus:
ID
1
0
0
ÐÐÐ 0
0
1
0
ÐÐÐ 0
0
0
1
ÐÐÐ 0
ÐÐÐ ÐÐÐ ÐÐÐ ÐÐÐ ÐÐÐ
0
0
0
ÐÐÐ 1
is an identity matrix
Suppose D is the 2ð3 matrix used above, and I is the 2ð2 identity matrix, then:
ID D
1 0
0 1
Ł
16 19 2
5 12 14
D
16 19 2
5 12 14
DD
VB.NET PDF Library SDK to view, edit, convert, process PDF file
PDF Metadata Edit. Offer professional PDF document metadata editing APIs, using which VB.NET developers can redact, delete, view and save PDF metadata.
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Document and metadata. All object data. Program.RootPath + "\\" 3_optimized.pdf"; // create optimizing TargetResolution = 150F; // to change image compression
36
Multiplying any matrix by an identity matrix of appropriate dimension has no effect on
the original matrix (and is therefore similar to multiplying by one).
Now suppose A is a square matrix of dimension n, that is an n by n matrix. Then, the
square matrix A
1
(also of dimension n) is called the inverse of A if:
A
1
1
DI
For example, if:
3
2
7
2 20 19
7
9 21
then A
1
D
0.175 0.015
0.072
0.064
0.079 0.050
0.086 0.029
0.045
and
AA
1
DI D
1 0 0
0 1 0
0 0 1
Finding the inverse of a matrix can be a lot of work. Fortunately, the MINVERSE function
does this for us. For example, to get the inverse of matrix A shown in the spreadsheet
extract in Figure 2.33, select the 3 by 3 cell range I17:K19 and enter the array formula:
=MINVERSE(C17:E19)
You can check that the result is the inverse of A by performing the matrix multiplica-
tion AA
1
.
16
17
18
19
20
21
22
23
24
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
array: dim
m
array: dim
m
A (3x3)
-3
2
7
A
-1
(3x3)
)
-0.175 -0.015 0.072
AA
-1
1.00
0.00
0.00
2
20
19
-0.064 0.079 -0.050
0.00
1.00
0.00
7
9
21
0.086 -0.029 0.045
0.00
0.00
1.00
b (3x1)
20
x = A
-1
b (3x1) -3.4355
55
-5
-1.6772
0
1.8640
Figure 2.33 Matrix inversion shown in the MatDef sheet
2.13.6 Solving Systems of Simultaneous Linear Equations
One use for the inverse of a matrix is in solving a set of equations such as the following:
3x
1
C2x
2
C7x
3
D20
2x
1
C20x
2
C19x
3
D5
7x
1
C9x
2
C21x
3
D0
These can be written in matrix notation as Ax D b where:
3
2
7
2 20 19
7
9 21
bD
20
5
0
and x D
x
1
x
2
x
3
C# PDF Library SDK to view, edit, convert, process PDF file for C#
accordingly. Multiple metadata types of PDF file can be easily added and processed in C#.NET Class. Capable C#.NET: Edit PDF Metadata. PDF SDK
C# TIFF - Edit TIFF Metadata in C#.NET. Allow Users to Read and Edit Metadata Stored in Tiff Image in C#.NET Application. How to Get TIFF XMP Metadata in C#.NET.
37
The solution is given by premultiplying both sides of the equation by the inverse of A:
A
1
Ax D A
1
b, so Ix D A
1
b i.e. x D A
1
b
In Figure 2.33, the solution vector x is obtained from the matrix multiplication function
in cell range I21:I23 in the form:
=MMULT(I17:K19,C21:C23)
Not every system of linear equations has a solution, and in special cases there may be
many solutions. The set Ax D b has a unique solution only if the matrix A is square and
has an inverse A
1
.In general, the solution is given by x D A
1
b.
2.13.7 Summary of Excel’s Matrix Functions
In summary, Excel has functions to transpose matrices, to multiply matrices and to invert
square matrices. The relevant functions are these:
TRANSPOSE(array)
returns the transpose of an array
MMULT(array1, array2)
returns the matrix product of two arrays
MINVERSE(array)
returns the matrix inverse of an array
Because these functions produce arrays as outputs, the size of the resulting array must be
assessed in advance. Having ‘selected’ an appropriately sized range of cells, the formula
is keyed in (or obtained via the Paste Function button and built in the Formula palette).
It is entered in the selected cell range with the combination of keys CtrlCShiftCEnter
(instead of simply Enter). If this fails, keep the output range of cells ‘selected’, press the
Edit key (F2), edit the formula if necessary, then press CtrlCShiftCEnter again.
To consolidate, try the matrix exercises in the sheet MatExs.
We make extensive use of the matrix functions in the Equities part of the book, both
for calculations in the spreadsheet and as part of VBA user-deﬁned functions.
SUMMARY
Excel has an extensive range of functions and procedures. These include mathematical,
statistical and lookup functions, as well as much-used procedures such as setting up Data
Tables and displaying results in XY charts.
Access to the functions is handled through the Paste Function button and the function
inputs speciﬁed on the Formula palette. The use of range names simpliﬁes the speciﬁcation
of cell ranges, especially when the ranges are sizeable. Range names can be used on the
Formula palette.
Facilities on the Auditing toolbar, in particular the Trace Precedents, Trace Dependents
and Remove Arrows buttons are invaluable in examining formula cells.
It helps to be familiar with the range of Excel functions because they can easily be
incorporated into user-deﬁned functions, economising on the amount of VBA code that
has to be written.
Care is required in using array functions. It helps to decide in advance the size of the
cell range appropriate for the array results. Then having selected the correct cell range,
the formula is entered with the keystroke combination CtrlCShiftCEnter.
Able to change password on adobe PDF document in C#.NET. To C# Sample Code: Change and Update PDF Document Password in C#.NET. In
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
Able to edit and change PDF annotation properties such as font size or color. Abilities to draw markups on PDF document or stamp on PDF file.
38
The built-in functions are volatile, that is they update if their input data changes. In
contrast, procedures such as Goal Seekand Solver and the routines in the Analysis ToolPak
are static. The results form a ‘data dump’ not linked to the originating data. Therefore if
the input data changes, the procedures have to be repeated.
3
Introduction to VBA
This chapter introduces the use of VBA and macros within Excel, and attempts to do so
in the context of examples where VBA enhances spreadsheet functionality. Whilst not
intended as a full introduction to programming in VBA, it argues the case for mastering
some VBA, touches on the ‘object-oriented’ focus of the language, and suggests an
incremental approach to mastering the code. Most of the examples in this chapter involve
simple code, the ﬁrst ‘hands-on’ examples being in section 3.3.3. However, in section 3.6,
several applications are developed more fully and some fruitful areas for macros identiﬁed.
These include subroutines to produce charts, to calculate and display normal probability
plots, and to generate the efﬁcient frontier. A related workbook, VBSUB.xls, contains the
examples discussed in the chapter and can be used for reference. However, the reader
is advised to start by entering code in a new workbook (without opening the VBSUB
workbook).
Throughout the book, the VBA coding used for routines is reviewed. The functions
and macros developed in subsequent chapters build on the basic foundations laid down
in this and the next chapter.
Macros form an important part of an experienced user’s palette for two main reasons: they
are an excellent way to control repeated calculations, and they can be written to assist
third-party users who might have less familiarity with spreadsheets. From our perspective,
the main objective of mastering VBA is to be able to automate calculations using functions
and macros. Spreadsheet models are more robust if complicated sequences of calculations
are replaced by function entries. Excel provides an excellent range of functions and VBA
can be used to extend that range. In addition, VBA macros are a useful way to produce
charts and to automate repeated operations, such as simulation. In both instances, the
resulting procedures are programs in VBA, but in the ﬁrst case, they are user-deﬁned
functions and in the second, macros (or subroutines). Whilst the code is largely common
to both types of procedure, this chapter focuses on writing macros, whereas Chapter 4
deals solely with user-deﬁned functions.
The programming language used in Excel is called Visual Basic for Applications or
VBA for short. The word basic conﬁrms that the program is derived from the ancient
BASIC mainframe language, which means VBA tends to be relatively inefﬁcient for tasks
involving very large volumes of computations. As PCs become ever more powerful and
computational packages has become blurred. The question to pose at this stage is what
is the best way to achieve a task, such as ﬁnding the ‘efﬁcient frontier’, or simulating
the performance of a stock, or evaluating the ‘eigenvectors’ of a matrix. The answer will
depend on the aims of the user. The spreadsheet will be slower, but the calculation process
will be easier to follow. In contrast, the dedicated package will be faster, but the process
of calculation more remote and less comprehensible.
40
It is important to match your usage of VBA to the task in hand, and to be selective
in the parts of VBA that you use, bearing in mind that spreadsheets do not provide the
answer to all questions. Using VBA subroutines to automate repetitive tasks is efﬁcient
programming; using VBA to create your own simple functions is efﬁcient; but trying
to program bullet-proof interaction for a novice user accessing a complex spreadsheet
model seems like the road to misery. Whilst seasoned applications programmers can
probably tackle this task, the pertinent question is should you? VBA is not a panacea
for all programming tasks, and should be used selectively since more efﬁcient computing
methods exist for some computationally intensive tasks.
Excel’s macro recorder translates user keystrokes into VBA code and can be used to
suggest appropriate coding. While it is possible to use the recorder and remain ignorant
of the underlying VBA code, the aim of this chapter is to provide some explanations and
demonstrate practical applications, thus allowing you to become a more efﬁcient user of
the whole Excel package. Probably the best approach at ﬁrst is to use the recorder to
generate rudimentary code, then to selectively edit (or rewrite) the results as you become
more familiar with VBA.
It is important to be aware of the distinction between VBA subroutines and functions.
Whilst both are distinct, named blocks of source code, the raison d’
ˆ
etre of functions is
to return values. Typically subroutines accept no inputs, but they carry out a sequence of
spreadsheet commands (which may use values from cells in the spreadsheet, and change
the values in particular cells). In contrast, functions can accept inputs (or ‘arguments’),
they carry out a series of predominantly numerical calculations away from the spreadsheet,
and return a single value (or a single array). However, for both subroutines and functions,
the spreadsheet is the ﬁrst development tool.
3.2 OBJECT-ORIENTED ASPECTS OF VBA
Afew concepts that you need to grasp follow from the fact that VBA is an ‘object-
oriented’ programming language. Each Excel object represents a feature or a piece of
functionality in Excel, e.g. workbooks, worksheets, ranges, charts, scenarios, etc. are
all Excel objects as is Excel itself (the Application object). You program in VBA to
manipulate the properties and apply methods to Excel objects.
Many statements can be made about objects and VBA, but essentially they can be
condensed into four rather cryptic statements. Textbooks and VBA help screens abound
with explanations, but overall, these tend to be confusing.
The ﬁrst statement is Objects come in collections. For example, the Workbooks collec-
tion consists of all open workbooks, similarly the Worksheets (or Sheets) collection (all
the sheets in a workbook), the Scenarios collection (all scenarios associated with a partic-
ular sheet), the Charts collection (all the charts on a sheet), etc. However, some objects
come as singular objects (i.e. collections of one member only), for example, Excel has
only one Application object (itself) and for any cell on the spreadsheet there is only one
Font object (although this object has several properties, such as Name, Size, etc.). These
are singular objects that are referenced directly, e.g. by simply writing Application. or
Font.(theobjectfollowedbya‘fullstop’).Individualobjectsincollectionsarereferenced
by indexing the collection either by number 1, 2, 3... or by name, e.g.Workbooks(1).
orSheets(“inputs”). The Range object is by deﬁnition a singular object, but notice that it
is referenced in a way that is similar to that of a collection, either by name or by address,
e.g.Range(“data”). orRange(“A1:B20”).
Introduction to VBA
41
The second statement is Objects are arranged in a hierarchy. The following sequence
illustrates the hierarchy of objects in Excel. It shows how the cell range named ‘data’ in
sheet ‘inputs’ of the Model.xls workbook is referenced via its position in the hierarchy:
Application.Workbooks(“Model.xls”).Sheets(“inputs”).Range(“data”)
It is not necessary to use the full hierarchy, as long as the identiﬁcation of the cell range
(here named ‘data’) is unique. If the Model.xls workbook is the active book when the
VBA code is executing, thenSheets(“inputs”).Range(“data”)is adequate; or referencing
the active workbook explicitly:
ActiveWorkbook.Sheets(“inputs”).Range(“data”)
Similarly, if only the Model.xls book is open and the ‘inputs’ sheet is currently active,
thenActiveSheet.Range(“data”)is adequate and simpler to write.
The third statement is Objects have properties. Properties are the attributes of an object,
the values or settings that describe the object. VBA can be used either to set a property
or to get a property setting. Property values are usually numbers, text, True or False
and so on. You can control Excel objects by using VBA to change their properties. An
example is:
Application.ScreenUpdating = False
This line of code stops the Excel screenupdating during the running of a macro. ScreenUp-
dating is a property of the Application object, taking values True/False.
Another pair of examples is:
Range(“B23”).Name = “month2”
Range(“B23”).Value = 4000
which gives cell B23 the name ‘month2’ and value 4000. The syntax follows the
‘Object.Property’ style. In these examples, ‘Application’ and ‘Range’ refer to objects,
whereas ‘ScreenUpdating’, ‘Name’ and ‘Value’ are properties of the objects. The
following example takes a setting from a spreadsheet cell, and assigns it to variable
‘ﬁrstval’:
ﬁrstval = Range(“B23”).Value
The fourth statement is Objects have methods. Methods are a set of predeﬁned activities
that an object can carry out or have applied to it. Here are some examples of methods
applied to Range objects:
Range(“A1:B3”).Select
which selects the cell range A1:B3
Range(“A1:B10”).Copy
which copies the cell range A1:B10
Range(“storerange”).PasteSpecial
which pastes the contents of the
Clipboard from the previous command to
cell ‘storerange’
The syntax follows the ‘Object.Method’ style. In the above examples, the objects are
instances of the ‘Range’ object while ‘Select’, ‘Copy’ and ‘PasteSpecial’ are methods
which act on the objects. Workbook objects and Worksheet objects also have methods,
42
for example:
Workbooks(“Model.xls”).Activate
makes Model.xls the active workbook
Sheets(“inputs”).Delete
deletes the sheet called ‘inputs’
There are some minor exceptions to the above explanation. But if you record your
code, you never need to worry about the distinction between properties and methods. You
can also refer to the Excel Object Browser in the Visual Basic Editor to check the correct
syntax to accompany speciﬁc objects.
3.3 STARTING TO WRITE VBA MACROS
Mastering any language is a cumulative process, part formal learning of rules, part
informal experimenting and testing out coding ideas. VBA code is developed in the
Visual Basic Editor, Excel’s code writing environment. Since Excel 97, this has been
enlarged and enhanced somewhat from the Excel 5/7 version, providing more support for
writing code. We start by examining the code for some simple examples. VBA’s MsgBox
function is introduced as it provides a simple mechanism for displaying calculated values
and feeding back simple diagnostic messages. We show how to generate code using the
recorder and contrast the results with written code. The advantages of the dual approach
of recording and editing are outlined.
3.3.1 Some Simple Examples of VBA Subroutines
A subroutine is a standalone segment of VBA code; it constitutes the basic building
block in programming. The subroutine performs actions and consists of a series of VBA
statements enclosed by Sub and End Sub statements. Its name is followed by empty
parentheses (unless it takes an argument passed to it from another subroutine).
For example, the LinkOne() subroutine links the contents of one cell to another on
the active sheet. The code starts with the Sub keyword, followed by the macro name,
LinkOne. A comment statement outlines the purpose of the macro. (Text preceded by an
apostrophe is ignored in processing, so this is a useful way to add explanatory comments
to the code.) The ﬁrst statement uses the Value property of the Range object, the second
the Formula property: