EF 105 Fall 2006 Week 10
1.
• Define the problem clearly • Work hand examples • Develop the Algorithm (Steps to follow) • Document the Algorithm with a FLOWCHART • Implement the Algorithm (Write computer program) • Test the Implementation (Run the Program) • Evaluate the Results
• Divide and Conquer • Break Problem into smaller tasks.
• Define the interaction between tasks.
• Recursively solve the individual tasks.
• Build up the overall solution from the pieces.
Structured Programming • Combination of – Sequences – Selections – Loops Sequences • Series of operations that are performed in order.
Selections • Choose one path from two or more possible paths.
Loops • Execute a block of code repeatedly as long as some condition is met.
Arrows show the flow - cannot diverge but can converge.
Entry Point Execution Block Selection Block start task Exit Point Input/Output Block test?
F T I/O task stop
• Selectively choose one path of execution.
– Based on the evaluation of a test.
– Logical Test outcome is either TRUE or FALSE.
if() if()...else
test?
F T if_code test?
F T if_code else_code
Special case of Selection Statement
• One branch eventually leads back to the original selection statement.
• Permits a block of code to be executed repeatedly as long as some test condition is satisfied.
ini_co de test?
F T loop_cod e inc_code next_cod e
Entry Exit Task I/O Q?
F T
Compute a sum of all integers from 1 to 100 and displays the result Step 1: Understand the problem: Computes a sum of all integers from 1 to 100 Step 2: What is the input? Start from 1, stop if reach 100 or (1 and 100) Step 3: What is the output? Sum
Step 4: How do we compute the output? (first solution) Step 4.1: Start with the current integer: 1 Step 4.2: Sum starts with 0 Step 4.3: Add the current integer to Sum Step 4.4: If the current integer is less than 100, keep on adding the current integer to sum and increase It by 1(i.e, go back to 4.3). Step 4.5:Otherwise, print out the sum
Start Step 4.1: Start with the first integer: 1 Step 4.2: Sum starts with 0 Step 4.3: Add the current integer to Sum Step 4.4: If the current integer is less than 100, go to next integer and keep on adding the current integer to sum (i.e, go back to 4.3).
Increase Current Integer by 1 Step 4.5:Otherwise, print out the sum Current Integer=1 Sum=0 Sum = Sum + Current Integer Current Integer < 100 Print Sum Stop
Inside Matlab This is what you should see once Matlab has loaded. The three most useful areas in the Matlab window are: 1. Right ‘command’ window is used for inputting commands 2. Top left ‘workspace’ window notes size of matrices used 3. Bottom left ‘command history’ window maintains a sequential list of past commands.
Workspace
The following are three ways to access Matlab’s help files: 1. a. From options at top of Matlab window select Help Matlab Help b. Select ‘Index’ tab c. Type topic to be searched in box 2. In Matlab window type a command preceded by ‘help’ or 'doc' For example,the following commands would produce a help file for the ‘plot’ command.
>> help plot or >>doc plot 3. a. Double click command for which you want help b. Right-click on command c. Select ‘Help on Selection’
A. To create a new ‘M-file’ do one of the following: 1. In top left corner of Matlab window select File M-file 2. Select ‘New M-file’ New shortcut button located at the top left corner of Matlab screen B. Typing the following clears the command window: >> clc C. Typing a semicolon at the end of a command suppresses output. Note the difference between typing the following commands: >> x=0:0.5:10 >> x=0:0.5:10;
Go to MATLAB command window File-New-M-File M-file is an Editor window Write your program in M-file Save in temp/ or your Disk.
In command window, Run this file.
• • • • • + * / ^ addition subtraction multiplication right division power
Operation Algebraic Form
addition subtraction multiplication division exponentiation
Precedence
a + b a – b a x b a ÷ b a b
Operation
1 2 3 4
Matlab Scalar
a + b a – b a * b a / b a ^ b Parenthesis, innermost first.
Exponentiation, left to right Multiplication & division, left to right Addition & subtraction, left to right
Use Parentheses to Override Operator Precedence
• Normal evaluation of expressions – Left-to-Right if same level and no parentheses
e.g. 3^3-8/4+7-5*2 = 27-2+7-10 = 25+7-10 = 32-10 = 22
• Use parentheses to override
e.g. (3^3-8)/4+(7-5)*2 = (9-8)/4+2*2 = 1/4+4 = 4.25
• Variables are names used to hold values that may change throughout the program.
• MatLab variables are created when they appear on the left of an equal sign. • >>
variable = expression
creates the "variable'' and assigns to it the value of the expression on the right hand side. You do not need to define or declare a variable before it is used. • >>
x = 2 % creates a scalar
• The variable is x and % indicates a comment
f
x
2
x
3 2
x
2 0.05005
x
6.3
3.14
In MatLab, enter the following: >> x = 1.4; >> numerator = x^3 - 2*x^2 + x - 6.3; >> denominator = x^2 + 0.05005*x – 3.14; >> f = numerator / denominator
• Naming Rules – must begin with a letter, cannot contain blank spaces – can contain any combination of letters, numbers and underscore (_) – must be unique in the first 31 characters • MatLab is case sensitive: “name”, “Name” and “NAME” are considered different variables • Never use a variable with the same name as a MatLab command (see next slide) • Naming convention: – Usually use
all_lowercase_letters
– -or-
camelNotation
("hump" in middle)
• MatLab has some special (reserved) words that you may not use as variable names:
break case catch catch continue else elseif end for function global if otherwise persistent return switch try while
– who: lists the names of defined variables – whos: lists the names and sizes of defined variables – what: l ists all your m-files stored in memory.
– clear: clears all variables, reset the default values of special variables .
– clear name: clears the variable named – clc: clears the command window – clf: clears the current figure and the graph window.
• In MatLab, a scalar and one column. is a variable with one row • A vector is a matrix with only one row OR only one column. The distinction between
row and column vectors is crucial.
• When working with MatLab you will need to understand how to properly perform linear algebra using scalars, vectors and matrices. MatLab enforces rules on the use of each of these variables
• Scalars are the simple variables that we use and manipulate in simple algebraic equations. • To create a scalar you simply introduce it on the left hand side of an equal sign. – >>
x = 1;
– >>
y = 2;
– >>
z = x + y;
• A row vector in MATLAB can be created by an explicit list, starting with a left bracket, entering the values separated by spaces (or commas) and closing the vector with a right bracket.
• A column vector can be created the same way, and the rows are separated by semicolons.
• Example:
>> x = [ 0 0.25*pi 0.5*pi 0.75*pi pi ] x = y = 0 0.7854 1.5708 2.3562 3.1416
>> y = [ 0; 0.25*pi; 0.5*pi; 0.75*pi; pi ] 0 0.7854
1.5708
2.3562
3.1416
x is a row vector.
y is a column vector.
x = start:end x = start:increment:end linspace(start,end,number) length(x) y = x' create row vector x starting with start, counting by one, ending at end create row vector x starting with start, counting by increment, ending at or before end create row vector x starting with start, ending at end, having number elements returns the length of vector x transpose of vector x (row to column, or columnn to row)
>> a = 1:10 time >> b = 0:0.1:1 % leave off semi-colon to see what you get each >> c = [7 8 9] >> d = [10; 11; 12] >> length(b) >> linspace(0,100,21)
% Plotting a function using vector math x = linspace(0, 20, 100); % define 100 x values (from 0 to 20) y = 5*exp(-0.3*x).*sin(x); % compute y vector plot(x,y), xlabel( 'X' ), ylabel( 'Y' ), title( 'Vector calc' )
y
5
e
0.3
x
• linspace( ) function can be very effective for creating the x vector…
• A = [1 2 3; 4 5 6; 7 8 9] OR • A = [1 2 3 4 5 6 7 8 9] • Must be enclosed in brackets • Elements must be separated by commas or spaces • Matrix rows must be separated by semicolons or a return • Matlab is case sensitive
• x = [-1.3 sqrt(3) (1+2+3)*4/5]; – Output -> x = -1.3000 1.7321 4.8000
• Matrix Manipulation: – x(5) = abs(x(1)); – Let r = [1 2 3 4 5]; – xx = [x;r]; – z = xx(2,2); – T = xx(2,1:3); %row 2, col. 1-3 • Semicolon at the end of a line means don’t print to the command window.
• Format short – 1.3333 0.0000
• Format short e – 1.3333E+000 1.2345E-006 • Format long – 1.333333333333338 0.000001234500000
• Format long e – 1.33333333333333E+000 1.234500000000003E 006 • Format hex – 3FF555555555555 3EB4B6231ABFD271 • Defaults to format short.
• Transpose: • A = [1 2 3; 4 5 6; 7 8 9]; • C = A’; • D = [-1 0 2]’;
• The term array operations refer to element-by element operations.
• Preceding an operator (*, /, ^, ‘) by a period indicates an element-by-element operation.
• The addition and subtraction, matrix and array operations are the same and don’t need a period before these operators.
• Example: – X = [1 2 3]; Y=[4 5 6]; – W = X.*Y; % to mult. X and Y arrays
• Most often used for a time vector.
• time = 0.0:100.0; • Time = 10.0:0.5:100.0; • B_time = 100.0:-0.5:50.0; • Variable = first:increment:last
• Empty Matrix • E = []; • EE([2 4],:) = []; – Empties rows 2 & 4 and all columns in rows 2 & 4.
• Zeros – Ze = zeros(2,3); – Creates a 2 x 3 matrix consisting all of zeros.
• Ones – O = ones(3,3); – Creates a 3 x 3 matrix consisting all of ones.
• Eye – I = eye(3,3); – Creates a 3 x 3 matrix consisting of an identity matrix. (I’s on diagonal and 0’s elsewhere)
Transpose – (indicated by `)new matrix created by exchanging rows and columns of original matrix
h = [1 2 3]; h'
(nothing)
ans = 1 2 3
Switches from row to column vector.
h * h' h .* h ans = 14 ans = 1 4 9
* is matrix multiplication, and so the dimensions must line up correctly. (more on this later) .* is entry-by-entry multiplication.
• Most Matlab functions will work equally well with both scalars and arrays (of any dimension)
>> A=[1 2 3 4 5]; >> sin (A) ans = 0.8415 0.9093 0.1411 -0.7568 -0.9589
>> sqrt (A) ans = 1.0000 1.4142 1.7321 2.0000 2.2361
• MatLab variables may also contain strings, which are vectors of individual characters. There is no typographical difference in appearance between numerical variables and string variables. • The type of variable (numerical or string) is determined when the variable is created. – >> x = 5.2
% numeric
– >> y = 'Chewbacca'
% string
Example:
» C = ' Hello '; %C is a 1x5 character array.
» D = 'Hello there' ; %D is a 1x11 character array.
» A = 43; %A is a 1x1 double array.
» T = 'How about this character string?' » size(T) ans = 1 32 » whos % What do you observe?
Name Size Bytes Class A 1x1 8 double array C 1x5 10 char array D 1x11 22 char array T 1x32 64 char array ans 1x2 16 double array Grand total is 51 elements using 120 bytes
>> h = 'Hello'; >> w = 'World'; >> [h ', ' w] % called concatenation
•
MATLAB performs all computations in double precision)
The format command described below switches among different display formats.
•
Command format short format long format short e format long e format short g format bank format rat Result 5 digit scaled fixed point 15 digit scaled fixed point 5 digit floating-point 15 digit floating-point general purpose Fixed dollars and cents Ratio of small integers Example 3.1416 3.14159265358979 3.1416e+00 3.141592653589793e+00 5 or 1.25 or 3.0e-12 7.95 355/113 format compact Suppresses excess line feeds. format loose Add line feeds.
p=0:20; format short e % exponential [p' pow2(p)' pow2(-p)'] format short g % general purpose [p' pow2(p)' pow2(-p)']
• • •
Do the following in MatLab
– Create a matrix with the form:
[2 3] [5 1]
– Create a row (or "horizontal") vector of 2 elements, 3 and 4 (inclusive). – Create a second column (or 'vertical') vector with the elements 2 and 1 in that
order.
– Type 'whos' to view your variables. It should read (for example): – >> whos Name Size Elements Bytes Density Complex
a 2 by 2 4 32 Full b 1 by 2 2 16 Full No No c 2 by 1 2 16 Full No Grand total is 14 elements using 112 bytes Here, a is the matrix, b is the first vector, and c is the second vector. Now complete the following exercise:
– Multiply your matrix by your first vector, above. – Perform element by element division of your resulting vector, divided by your
second vector transposed. (The result should be a two element horizontal vector with 13 as each entry. )
– Type 'clear' to clear all variables from the workspace.
Add your name as % comment , print Command Window and turn in
• Be sure you have the correct Current Directory set • clear , clc – clear workspace and command window to start • assign and calc a few values • save file_name – saves file_name.mat in current directory – saves all defined variables • clear; load file_name – brings workspace back
• First make sure your workspace is clear, and that your Current Directory is set to "My Documents" subfolder with your username (e.g. Djackson) • Create a few scalars and vectors • check workspace window for variables • >> save demo -OR- click corresponding button • look at your folder in My Documents subfolder • • Clear workspace, check Workspace then Reload variables, check Workspace
• Scripts allow us to group and save MatLab commands for future use • If we make an error, we can edit statements and commands • Can modify later to solve other related problems • Script is the MatLab terminology for a program • NOTE: Scripts may use variables already defined in the workspace. – This can lead to unexpected results. – It is a good idea to clear the workspace (and the command window) at the beginning of all scripts.
• clear, clc
• A Script is the simplest example of an M-file .
• When a script-file is invoked, MatLab simply executes the commands found in the file.
• Any variables created in the script are added to the MatLab Workspace.
• Scripts are particularly useful for automating long sequences of command.
• File New M-File • usually start with:
compact clear, clc, format
• comments after % – for in-class exercises include at least: • Course, date,section & # (e.g. EF105, Monday 8:00 ) • a short title • your name • semi-colons to suppress variable initialization – omit semi-colons to display results – You can leave off ALL semi-colons to trace a program
commands
Color keyed text with auto indents tabbed sheets for other files being edited
• Always check Current Directory Window – Set to
MyDocuments\username
• Running scripts – from editor window, click "Save and run" button – -or just type
filename
: – -or type
run filename
(factorial) • File New M-File %fact_n – Compute n-factorial, n!=1*2*...*n % by DFJ fact = prod(1:n) % no semi-colon so fact displays • File Save As ...
fact_n
• Operates on a variable in " global " workspace – Variable n must exist in workspace – Variable fact is created (or over-written)
>> n=5;
>> fact_n
-OR-
>> n=10; >> run fact_n
• To list code, use
type
command
>> type fact_n
• The
help
command displays first
>>
consecutive comment lines
help fact_n
• See the Word document for this
exercise and perform at end of class on your own!!