468 pág.

# An Introduction to Programming and Numerical Methods in MATLAB

Pré-visualização50 páginas

at the answer shows that MATLAB has returned a vector containing the elements [a1b1, a2b2, a3b3]. The . indicates to MATLAB to perform the operation term by term and the * indicates we require a multiplication. We can also do a term by term division with >> a = [1 2 3]; >> b = [4 5 6]; >> a./b ans = 0.2500 0.4000 0.5000 The result is, as we would expect,[ a1 b1 , a2 b2 , a3 b3 ] . Example 1.11 We shall create two vectors running from one to six and from six to one and then demonstrate the use of the dot arithmetical operations: 16 1. Simple Calculations with MATLAB \ufffd \ufffd \ufffd \ufffd s = 1:6; t = 6:-1:1; s+t s-t s.*t s./t s.\u2c62 1./s s/2 s+1 This produces the output >> s+t ans = 7 7 7 7 7 7 >> s-t ans = -5 -3 -1 1 3 5 >> s.*t ans = 6 10 12 12 10 6 >> s./t ans = 0.1667 0.4000 0.7500 1.3333 2.5000 6.0000 >> s.\u2c62 ans = 1 4 9 16 25 36 1.5 Setting Up Mathematical Functions 17 >> 1./s ans = 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 >> s/2 ans = 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 >> s+1 ans = 2 3 4 5 6 7 These represent most of the simple operations which we may want to use. We note that in order for these operations to be viable the vectors need to be of the same size (unless one of them is a scalar \u2013 as in the last three examples). 1.5 Setting Up Mathematical Functions Following on from the previous section we discuss how one might evaluate a function. It is crucial that you understand this section before you proceed. We revisit the topics introduced in the previous section and discuss the ways in which you can set up the input to the function Example 1.12 Set up a vector x which contains the values from zero to one in steps of one tenth. This can be done in a variety of ways: 18 1. Simple Calculations with MATLAB \ufffd \ufffd \ufffd \ufffd % Firstly just list all the values: x = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]; % Use the colon construction x = 0:0.1:1.0; % Or use the command linspace x = linspace(0,1,11); As noted previously we note that there are eleven values between zero and one (inclusive) for a step length of one tenth. You may want to try linspace(0,1,10) and see what values you get. Each of these methods are equally valid (and more importantly will produce the same answer) but the latter two are probably preferable, since they are easily extended to more elements. We now wish to set up a simple mathematical function, say for instance y = x2. Initially you may want to type x\u2c62 but this will generate the error message ??? Error using ==> \u2c6 Matrix must be square. This is because this operation is trying to perform the mathematical operation x× x and this operation is not possible. Instead we need to use y=x.\u2c62 which gives >> y = x.\u2c62 y = Columns 1 through 7 0 0.0100 0.0400 0.0900 0.1600 0.2500 0.3600 Columns 8 through 11 0.4900 0.6400 0.8100 1.0000 Here we see that each element of x has been squared and stored in the array y. Equivalently we could use y = x.*x;. Example 1.13 Construct the polynomial y = (x+ 2)2(x3 + 1) for values of x from minus one to one in steps of 0.1. 1.5 Setting Up Mathematical Functions 19 Here it would be laborious to type out all the elements of the vector so instead we use the colon construction. We shall also de\ufb01ne f = (x+2) and g = x3 +1, so that we have the code: \ufb03 \ufb01 \ufb02 x = -1:0.1:1; f = x+2; g = x.\u2c63+1; y = (f.\u2c62).*(g); In the construction of g we have used the dot arithmetic to cube each element and then add one to it. When constructing y we \ufb01rstly square each element of f (with f.\u2c62) and then multiply each element of this by the corresponding element of g. You should make sure that you are able to understand this example. Example 1.14 Construct the function y = x2 x3 + 1 for values of x from one to two in steps of 0.01. Here we merely give the solution: \ufb03 \ufb01 \ufb02 x = 1:0.01:2; f = x.\u2c62; g = x.\u2c63+1; y = f./g; (We could have combined the last three lines into the single expression y = x.\u2c62./(x.\u2c63+1);). For the moment it may be a good idea to use intermediate functions when constructing complicated functions. Example 1.15 Construct the function y(x) = sin ( x cosx x2 + 3x + 1 ) , for values of x from one to three in steps of 0.02. Here, again, we use the idea of intermediate functions 20 1. Simple Calculations with MATLAB \ufb03 \ufb01 \ufb02 x = 1:0.02:3; f = x.*cos(x); g = x.\u2c62+3*x+1; y = sin(f./g); NB MATLAB will actually calculate f/g and in this case it will return a scalar value of \u22120.1081. Unfortunately this will not generate an error but it will mean that the answer is not a vector as we should be expecting. 1.6 Some MATLAB Speci\ufb01c Commands We shall now introduce a couple of commands which can be used to make cal- culations where the input can take a variety of forms. The \ufb01rst command is polyval. This command takes two inputs, namely the coe\ufb03cients of a polyno- mial and the values at which you want to evaluate it. In the following example we shall use a cubic but hopefully you will be able to see how this generalises to polynomials of other orders. Example 1.16 Evaluate the cubic y = x3 + 3x2 \u2212 x \u2212 1 at the points x = (1, 2, 3, 4, 5, 6). We provide the solution to this example as a commented code:\ufffd \ufffd \ufffd \ufffd % Firstly set up the points at which the polynomial % is to be evaluated x = 1:6; % Enter the coefficients of the cubic (note that % these are entered starting with the % coefficient of the highest power first c = [1 3 -1 -1]; % Now perform the evaluation using polyval y = polyval(c,x) Note that in this short piece of code everything after the % is treated by MAT- LAB as a comment and so is ignored. It is good practice to provide brief, but meaningful, comments at important points within your code. 1.6 Some MATLAB Speci\ufb01c Commands 21 It is important that you remember to enter the coe\ufb03cients of the poly- nomial starting with the one associated with the highest power and that zeros are included in the sequence. Important Point We might want to plot the results of this calculation and this can be simply accomplished using the plot command. Consider the following example: Example 1.17 Plot the polynomial y = x4+x2 \u22121 between x = \u22122 and x = 2 (using \ufb01fty points). \ufb03 \ufb01 \ufb02 x = linspace(-2,2,50); c = [1 0 1 0 -1]; y = polyval(c,x); plot(x,y) This produces the output \u22122 \u22121.5 \u22121 \u22120.5 0 0.5 1 1.5 2 \u22125 0 5 10 15 20 In the next chapter we shall discuss plotting in more detail and show how plots can be customised. There are many other commands which allow us to manipulate polynomials: perhaps one of the most useful ones is the roots. The polynomial is de\ufb01ned in the same way as in the previous examples. The input to the routine is simply these coe\ufb03cients and the output is the roots of the polynomial. Example 1.18 Find the roots of the polynomial y = x3 \u2212 3x2 + 2x using the 22 1. Simple Calculations with MATLAB command roots.\ufffd \ufffd \ufffd \ufffd c = [1 -3 2 0]; r = roots(c) This returns the answers as zero, two and one. In fact the converse command also exists, which is poly. This takes the roots and generates the coe\ufb03cients of the polynomial having those roots (which is monic, that is the coe\ufb03cient of the highest term is unity). 1.6.1 Looking at Variables and Their Sizes Before we proceed we mention a couple of useful commands for seeing which variables are de\ufb01ned. To list the variables which are currently de\ufb01ned we can use the command whos. This will give a list of the variables which are currently de\ufb01ned (a shorter output can be obtained by using the command who). This command can be used to list certain variables only, for instance