You are on page 1of 24

Lecture 2: Programming basics in MATLAB

September 7
Announcements

Announcements
HW 1 Due next Tuesday in class:
Schedule:
lectures on 9/9 and 9/14 (on 9/14 Simon will replace me).
no lectures on 9/16, 9/21.
back to the usual schedule on 9/23.
Office Hours:
Tomorrow as usual 787 Evans.
On 9/15 and 9/22, Simon will receive you in 1046 Evans.
Useful tips

Interrupting and output


To interrupt an execution of a command in Matlb press
Control-C
Try x1=linspace(0,1,1000000)
Useful tips

Interrupting and output


To interrupt an execution of a command in Matlb press
Control-C
Try x1=linspace(0,1,1000000)
To supress output of an operation add semicolon. Try
x2=linspace(0,1,1000000);.
Newton algorithm

Reminder - Newton algorithm


To find an approximate root(zero point) of a function f , we
setup an iteration procedure

f (xn )
xn+1 = xn − .
f 0 (xn )

we will use that to find 5, i.e. the zero of f (x) = x2 − 5,
therefore, our procedure is

x2n − 5 xn 5
xn+1 = xn − = + .
2xn 2 2xn
In Matlab code

First four iterations of Newton in Matlab


Here how the first four iterations of Newton would look like
x0=2
x1=x0/2+5/(2*x0)
x2=x1/2+5/(2*x1)
x3=x2/2+5/(2*x2)
x4=x3/2+5/(2*x3)
Writing a script

A script
Let’s open the editor window.

We will write the following:


% This script runs four iteration of the Newton algorithm
% to find square root of 5 with starting guess x0=2.
x0=2
x1=x0/2+5/(2*x0)
x2=x1/2+5/(2*x1)
x3=x2/2+5/(2*x2)
x4=x3/2+5/(2*x3)

Save it as, say ’NewtScr.m’ and then write ’NewScr’ in the


command line.
The symbol % comments out the rest of the line.
Scripts

Scripts are good


Can run them over and over, don’t have to retype everything.
Can document what we did using comments.
%USE A LOT OF COMMENTS!
Scripts

Scripts are good


Can run them over and over, don’t have to retype everything.
Can document what we did using comments.
%USE A LOT OF COMMENTS!

Scripts are bad


No flexibility, have to edit the script to change something.
Mess up the workspace.
Functions

Let’s modify our script file


Open the script and add the following line
We need to change our comments, too.
To run it, we write Y=NewtFn in the command line.
Functions

Let’s modify our script file


Open the script and add the following line
We need to change our comments, too.
To run it, we write Y=NewtFn in the command line.

Input
Let’s modify the the first line to function x4=NewtFn2(x0)
and delete x0=2 line.
A good practice is to write end in the last line (more on that
coming)% Save the work, obviously.
To invoke now we write Y=NewtFn2(2).
Now we have a function that accepts the initial guess as an
input.
Functions

Multiple inputs and outputs


To have multiple inputs, we just write function
Output=MyFun(inp1, inp2,.., inpk) and supply k inputs when
invoking the function.
Multiple outputs have the following syntax function [Out1,
Out2]=MyFun(inp1) and then when we invoke we write
[Y1,Y2]=MyFun(x).
’for’ iteration

for
We obviously repeat the same operation. Let’s use the four
loop in order not to type everything again.
Here is the syntax to use ’For’ loop.
for i=1:4
Comands...
end
for starts a new block in our program, which has to be
terminated with end. Lot’s of times we have to nest these
blocks, which is perfectly reasonable. In fact we already
nested the for block in the main block of the function.
Newton with ’for’ loop

Newton with a ’for’ loop


function x=fnNewt3(x0)
xold=x0;
for i=1:4
xnew=xold/2+5/(2*xold);
end
x=xnew; end
Debugging

Debugging
Bugs are programming mistakes in the code. Debugging refers
to correcting programming mistakes.
If you wish to debug a small program, sometimes the easiest
way is just output all the variables.

Serious debugging in Matlab


Let’s debug ’fnNewt3.m’. Open it in the Editor window.
Put a break point on xnew=xold/2+5/(2*xold); line.
Invoke the function in command window. It will stop on the
break point.
Now you have the workspace of the function in front of you.
Use who command to see what variables you have.
Debugging

Using debugger
You can use the buttons in the Editor window.
You also have the following commands:
dbstep to execute one more command in the code.
dbcont to continue to the next break point.
dbquit to stop the execution and quit debuggin.
More flow control

Flaw in fnNewt
There is a flaw in ’fnNewt3.m’.
We can correct it using the ’if’ statement.
First we need to understand how Matlab works with logical
statements and statements.

Boolean expressions
We form boolean expressions from comparison operators
<, >, ==,˜=, <=, >=. There is also a plethora of
is-functions, like isreal.
Such expression will return 0 for if false and 1 if true.
We use the logical operators &&, || and ˜ to form more
complicated expressions.
% Don’t forget to have the parenthesis right.
if, else, elseif
if statement
if condition
expression
end
Executes statement if condition is true.

if..else statement
if condition
expression1
else
expression2
end
Executes statement1 if condition is true, executes statement2 if
condition is false.

More elaborate flow control


Nested if statements.
Newton with input verification

fnNewt5.m
function x=fnNewt5(x0)
if x0==0
fprintf(’Error, input not allowed’)
xnew=nan;
else
xold=x0;
for i=1:4
xnew=xold/2+5/(2*xold);
xold=xnew;
end
end
x=xnew;
end
’while’ loop

while syntax
while condition
expression
end
will repeat expression while the condition holds.
’while’ loop

while syntax
while condition
expression
end
will repeat expression while the condition holds.

while what should really happen


Think how to initialize the variables before you enter the loop.
Before the end of the iteration, think how to advance all the
variables for the next iteration.
For the while loop, make sure that the termination condition
gets updated or you won’t exit the loop.
Exercises

Exercise 1
Rewrite your Newton function to accept as an input the number of
iterations it should perform. What would be a good thing to check
and how would you check it?

Exercise 2
Rewrite your Newton function to run until x2n − 5 ≤ 10−10 .
Additionaly, try to output the number of iterations it took.

More on the next slide


Exercises (continued)
Exercise 3
Design a program that computes n!

Exercise 4
Pn 2.
Design a program that computes k=1 1/k

Exercise 5
The Fibonacci sequence Fn = Fn−1 + Fn−2 for n ≥ 2, where
F0 = 0, F1 = 1, has the explicit formula
√ !n √ !n !
1 1+ 5 1− 5
Fn = √ − .
5 2 2

What could go wrong with programming this in directly?

More on the next slide


Exercises (continued)

Exercise 6
Below is supposed to be a routine to compute the nth term of the
FIbonacci sequence. Use the debugger to find what is wrong with
this program.
————————————————————
function Fn=Fibonnaci(n) Fnminus2=0;
Fnminus1=1;
if (n == 0)||(n == 1)
Fn=n;
else
for i=2:n
Fnminus2=Fnminus1;
Fn=Fnminus1+Fnminus2;
Fnminus1=Fn;
end
end