1 / 26

COMP 116: Introduction to Scientific Programming - PowerPoint PPT Presentation

COMP 116: Introduction to Scientific Programming . Lecture 37: Final Review. Functions. Writing Simple function. function [o1, o2]= funcName ( i1, i2 ) % Function Comments … % Body (implementation) end %optional. Can have multiple inputs (i1) and multiple outputs (o2)

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

PowerPoint Slideshow about 'COMP 116: Introduction to Scientific Programming' - pete

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

COMP 116: Introduction to Scientific Programming

Lecture 37: Final Review

Functions

function [o1, o2]=funcName( i1, i2 )

… % Body (implementation)

end %optional

• Can have multiple inputs (i1) and multiple outputs (o2)

• function [] = funcName()

• function o1 = funcName()

• function o1 = funcName( i1 )

• function o1 = funcName( i1, i2 )

• function [o1, o2] = funcName( i1, i2, i3)

WorkspaceGlobal vs. Local Storage

• Global Workspace

• Shared by Command Window and script commands

• Local Workspace

• Created locally on entry to each function

• Disappears on exit from function call.

% This is a script

area = pi .* radius .^2;

area = pi .* radius .^ 2;

% Call function in workspace

my_area = circ_area( 10 );

Looping

Loops: for loop statementthe counted loop solution

for <varindex> = <start>:<stop>

<Body: do some work>

end

for <idx> = <start>:<step>:<stop>

<Body: do some work>

end

function ret=my_sum(A)

% find minimum in the vector A

ret=0;

for i=1:length(A)

ret=ret+A(i);

end

end

Find minimum will be very similar

function elem=find_first(A,k)

elem=0;

for i=1:length(A)

if (A(i)==k)

elem=i;

break;

end

end

• Find the minimum value in a matrix

• Given an array, check if any two elements of the array sum to zero

Loops: while loop statementthe conditional loop solution

while <test>

<Body: do some work>

<Update:make progress towards exiting loop>

end

• While loops are great if we don’t know how many times we need to loop, but if we can write a test for when we’re done

• For this to work properly, the test needs to evaluate to a logical value

• The while loop will run as long as test evaluates to true

• The while loop does not have a built-in counter like the for-loop (if you want to count something, you need to implement the counter yourself)

• Golden ratio is the solution of x^2-x-1=0

• For any positive number x, sqrt(x+1) is a better approximation of golden ration than x. Use this rule in a while loop to find the some x such that abs(x^2-x-1) is less than 0.000001

eps=0.000001;

x=100;

while abs(x^2-x-1) > eps

x=sqrt(x+1);

end

Strings

Strings as a vector of chars

• Can be manipulated like any other vector

s1 = 'The quick brown fox '

s2 = 'jumped over the lazy dog'

s = [s1, s2] % concatenate strings

s(5) % ans = q

s(17:19) % ans = fox

jIdx = find( s == 'j' )

jStr= s(jIdx:jIdx+3) % ans = jump

• Avoid normal comparison operators!

• s1 == s2, s1 < s3, s1 >= s3

• Operators work element by element (on characters)

• Thus, strings (i.e., the vector of chars) must be same length

• Use string comparison functions instead

• strcmp(), string comparison

• strcmpi, string comparison while ignoring case

• strncmp, strncmpi:

• Similar, but compares first n characters only

• strfind

• Search for a string inside another string

• returns indices to start of each instance

strVal = [‘with great power comes great responsibility.’];

strfind( strVal, ‘great’)

% ans = [6 24]

• strrep

strVal = [‘with great power comes great responsibility.’];

strrep( strVal, ‘great’, ‘no’)

Cell Arrays and Structures

Basically, think of cell arrays as being more flexible data structures than the ‘standard’ arrays.

• Crucial distinction between {} and () operators

Example:

A = { false, rand(3); 4.0, ‘This is a string’ };

• A{1} or A{1,1} extracts the logical value false

• A(2) or A(2,1) extracts a 1x1 cell-array containing 4.0

• A(2,:) extracts a 1x2 cell-array containing the bottom row

• A{:,2} extracts the values of the second column as separate entities; use: [a,b] = A{:,2} for proper assignment

Indices work just as for ‘standard’ arrays.

Structures are very convenient data types when storing

Information belonging to one organizational unit, e.g.,

Name

Age

Date of Birth

Height

Weight

• Use named ‘fields’ for each variable

alex.name = 'Alexander the Great';

alex.occupation = 'Conqueror';

alex.birth = 356;

alex.fictional = false;

• Use named ‘fields’ for each variable

• Use the struct() function, with name-value pairs

alex.name = 'Alexander the Great';

alex.occupation = 'Conqueror';

alex.birth = 356;

alex.fictional = false;

alex = struct('name', 'Alexander the Great',...

'occupation', 'Conqueror', ...

'birth', 356, ...

'fictional' = false);

• One way to initialize is to use a ‘template’

% create structure layout

% note the use of default values and empty arrays

template = struct( 'name', 'no name', ...

'nickname', 'no name', ...

'emails', [], ...

'department', 'undeclared', ...

'year', 1 );

% create structure array

students = repmat( template, 1, 30 );

% now fill in each structure in the array

File I/O

• Opening a file:

• help fopen

• Open in read, write or append mode

• Always close your open files with fclose

• Text files:

• Writing: fprintf

• MATLAB data files:

• Writing: save