18
Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

Embed Size (px)

Citation preview

Page 1: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

1

Programming For Nuclear Engineers

Lecture 12MATLAB (3)

Page 2: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

2

1- M-Files2- Script M-Files2.1- Echoing Commands2.2- Adding Comments2.3- Structuring Script M-Files3- Function M-Files 4- Loops5- Fine-Tuning Your M-Files6- Branching with if

Page 3: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

3

1- M-Files

For complicated problems, the simple editing tools provided by the Command

Window and its history mechanism are insufficient.

A much better approach is to create an M-file. There are two different kinds

of M-files: script M-files and function M-files.

M-files are ordinary text files containing MATLAB commands. You can create

and modify them using any text editor or word processor that is capable of

saving files as plain ASCII text. (Such text editors include notepad in Windows).

More conveniently, you can use the built-in Editor/Debugger, which you can start

by typing edit, either by itself (to edit a new file) or followed by the name of an

existing M-file in the current working directory. You can also use the File menu or

the two leftmost buttons on the tool bar to start the Editor/Debugger, either to

create a new file or to open an existing file. Double-clicking on an M-file in the

Current Directory browser will also open it in the Editor/Debugger.

Page 4: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

4

2- Script M-Files

Suppose you want to calculate the values of:

sin(0.1)/0.1, sin(0.01)/0.01, and sin(0.001)/0.001

to 15 digits.

Such a simple problem can be worked directly in the Command Window.

Here is a typical first try at a solution, together with the response that MATLAB

displays in the Command Window:

>> x = [0.1, 0.01, 0.001];>> y = sin(x)./xy =0.9983 1.0000 1.0000

After completing a calculation, you will often realize that the result is not

what you intended. The commands above displayed only 5 digits, not 15. To

display 15 digits, you need to type the command format long and then

repeat the line that defines y.

Page 5: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

5

In this case you could simply retype the latter line, but in general retyping is time

consuming and error prone, especially for complicated problems. How can you

modify a sequence of commands without retyping them?

You could construct a script M-file to solve the mathematical problem described

earlier.

Create a file containing the following lines:

format longx = [0.1, 0.01, 0.001];y = sin(x)./x

Save this file with the name task1.m in your working directory, or in some

directory on your path.

You can name the file any way you like (subject to the usual naming restrictions on

your operating system), but the “.m” suffix is mandatory.

Page 6: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

6

You can tell MATLAB to run (or execute) this script by typing task1 in

the Command Window. (You must not type the “.m” extension here; MATLAB

automatically adds it when searching for M-files.)

The output — but not the commands that produce them — will be displayed in the

Command Window.

Now the sequence of commands can easily be changed by modifying the M-file

task1.m.For example, if you also wish to calculate sin(0.0001)/0.0001, you can modify the

M-file to read

format longx = [0.1, 0.01, 0.001, 0.0001];y = sin(x)./x

and then run the modified script by typing task1. Be sure to save your

changes to task1.m first; otherwise, MATLAB will not recognize them.

Page 7: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

7

2.1- Echoing Commands

The commands in a script M-file will not automatically be displayed in the

Command Window.

If you want the commands to be displayed along with the results, use echo:

echo onformat longx = [0.1, 0.01, 0.001];y = sin(x)./xecho off

2.2- Adding Comments

It is worthwhile to include comments in a lengthly script M-file.

These comments might explain what is being done in the calculation, or they might

interpret the results of the calculation.

Page 8: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

8

Any line in a script M-file that begins with a percent sign is treated as a comment

and is not executed by MATLAB.

Here is our new version of task1.m with a few comments added:

echo on% Turn on 15 digit displayformat longx = [0.1, 0.01, 0.001];y = sin(x)./x% These values illustrate the fact that the limit of% sin(x)/x as x approaches 0 is 1.echo off

When adding comments to a script M-file, remember to put a percent sign at

the beginning of each line. This is particularly important if your editor starts

a new line automatically while you are typing a comment. If you use echoon in a script M-file, then MATLAB will also echo the comments, so they will

appear in the Command Window.

Page 9: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

9

2.3- Structuring Script M-Files

For the results of a script M-file to be reproducible, the script should be self-

contained, unaffected by other variables that you might have defined elsewhere in

the MATLAB session, and uncorrupted by leftover graphics.

With this in mind, you can type the line clear all at the beginning of the

script, to ensure that previous definitions of variables do not affect the results.

You can also include the close all command at the beginning of a script M-

file that creates graphics, to close all graphics windows and start with a clean slate.

Here is our example of a complete, careful, commented solution to the problem

described above:

% Remove old variable definitionsclear all% Remove old graphics windowsclose all% Display the command lines in the command windowecho on% Turn on 15 digit displayformat long

Page 10: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

10

% Define the vector of values of the independent variable

x = [0.1, 0.01, 0.001];% Compute the desired valuesy = sin(x)./x% These values illustrate the fact that the limit of% sin(x)/x as x approaches 0 is equal to 1.echo off

Sometimes you may need to type, either in the Command Window or in an

M-file, a command that is too long to fit on one line. If so, when you get near

the end of a line you can type ... (that is, three successive periods) followed

by ENTER, and continue the command on the next line. In the Command

Window, you will not see a command prompt on the new line.

Page 11: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

11

3- Function M-Files

You often need to repeat a process several times for different input values of a

parameter. For example, you can provide different inputs to a built-in function

to find an output that meets a given criterion. As you have already seen, you

can use inline to define your own functions. In many situations, however,

it is more convenient to define a function using an M-file instead of an inline

function.

Let us return to the problem described above, where we computed some

values of sin(x)/x with x = 10 -b for several values of b. Suppose, in addition, that

you want to find the smallest value of b for which sin(10-b )/(10-b ) and 1 agree to

15 digits.

Here is a function M-file called sinelimit.m designed to solve that problem:

Page 12: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

12

function y = sinelimit(c)% SINELIMIT computes sin(x)/x for x = 10ˆ(-b),% where b = 1, ..., c.format longb = 1:c;x = 10.ˆ(-b);y = (sin(x)./x)’;

Like a script M-file, a function M-file is a plain text file that should reside in your

MATLAB working directory.

The first line of the file contains a function statement, which identifies the file as a

function M-file.

The first line specifies the name of the function and describes both its input

arguments (or parameters) and its output values.

In this example, the function is called sinelimit. The file name and the

function name should match.

Page 13: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

13

The function sinelimit takes one input argument and returns one output

value, called c and y (respectively) inside the M-file.

When the function finishes executing, its output will be assigned to ans (by

default) or to any other variable you choose, just as with a built-in function.

The remaining lines ofthe M-file define the function. In this example, b is a row vector consisting

of the integers from 1 to c.

The vector y contains the results of computing sin(x)/x where x = 10-b ; the prime

makes y a column vector.

Notice that the output of the lines defining b, x, and y is suppressed with a

semicolon.

In general, the output of intermediate calculations in a function M-file should be

suppressed.

Page 14: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

14

Here is an example that shows how to use the function sinelimit:

>> sinelimit(5)ans =0.998334166468280.999983333416670.999999833333340.999999998333330.99999999998333

None of the values of b from 1 to 5 yields the desired answer, 1, to 15 digits.

Judging from the output, you can expect to find the answer to the question

we posed above by typing sinelimit(10). Try it!

Page 15: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

15

4- Loops

A loop specifies that a command or group of commands should be repeated

several times. The easiest way to create a loop is to use a for statement.

Here is a simple example that computes and displays 10! = 10 · 9 · 8 · · · 2 · 1:

f = 1;for n = 2:10f = f*n;endf

The loop begins with the for statement and ends with the end statement. The

command between those statements is executed a total of nine times, once for

each value of n from 2 to 10. We used a semicolon to suppress intermediate

output within the loop. To see the final output, we then needed to type f after

the end of the loop. Without the semicolon, MATLAB would display each of

the intermediate values 2!, 3!, . . . .

Page 16: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

16

5- Fine-Tuning Your M-Files

You can edit your M-file repeatedly until it produces the desired output. Generally,

you will run the script each time you edit the file. If the program is long

or involves complicated calculations or graphics, it could take a while each

time. Then you need a strategy for debugging.

Here are some general tips:

1- Include clear all and close all at the beginning of the M-file.

2- Use echo on early in your M-file so that you can see “cause” as well as “effect”.

3- If you are producing graphics, use hold on and hold off carefully.

In general, you should put a pause statement after each hold off. Otherwise, the

next graphics command will obliterate the current one, and you won’t see it.

4- Do not include bare print statements in your M-files. Instead, print to a file.

5-Make liberal use of pause.

Page 17: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

17

6- Finally, remember that you can stop a running M-file by typing CTRL+C.

This is useful if, at a pause or input statement, you realize that you want to stop

execution completely.

6- Branching with if

For a simple illustration of branching with if, consider the following function

M-file absval.m, which computes the absolute value of a real number:

function y = absval(x)if x >= 0y = x;elsey = -x;end

Page 18: Programming For Nuclear Engineers Lecture 12 MATLAB (3) 1

18

The first line of this M-file states that the function has a single input x and

a single output y.

If the input x is nonnegative, the if statement is determined by MATLAB to be

true. Then the command between the if and the else statements is executed to

set y equal to x, while MATLAB skips the command between the else and end

statements.

However, if x is negative, then MATLAB skips to the else statement and

executes the succeeding command, setting y equal to -x.

In general, if must be followed on the same line by an expression that MATLAB

will test to be true or false.