• Nenhum resultado encontrado

INF040 - MathLab-Tranpar. 3

N/A
N/A
Protected

Academic year: 2021

Share "INF040 - MathLab-Tranpar. 3"

Copied!
34
0
0

Texto

(1)

Introduction to M

ATLAB

Programming

(2)

Programming - 2

Introduction to M

ATLAB

Section Outline

Script Files

Flow Control & Array Operations

EVAL Command

Functions

Structural Syntax

Variables & Workspaces

Subfunctions and Private Functions

(3)

Programming - 3

Introduction to M

ATLAB

The MATLAB Path

MATLAB Path:

List of directories searched by MATLAB.

(Includes \toolbox directories)

Path Cache:

List of \toolbox files & locations.

Created at startup to increase speed.

Only updated when PATH command is called.

Working with the Path:

Path Browser (PATHTOOL)

(4)

Programming - 4

Introduction to M

ATLAB

MATLAB Editor/Debugger

(5)

Programming - 5

Introduction to M

ATLAB

Script M-files

Standard ASCII text files

Contain a series of MATLAB expressions

(Typed as you would at the command line)

Commands parsed & executed in order

% Comments start with "%" character

pause % Suspend execution - hit any key to continue. keyboard % Pause & return control to command line.

% Type "return" to continue.

break % Terminate execution of current loop/file. return % Exit current function

% Return to invoking function/command line. % Comments start with "%" character

pause % Suspend execution - hit any key to continue.

keyboard % Pause & return control to command line.

% Type "return" to continue.

break % Terminate execution of current loop/file. return % Exit current function

(6)

Programming - 6

Introduction to M

ATLAB

Flow Control Constructs

Logic Control:

IF / ELSEIF / ELSE

SWITCH / CASE / OTHERWISE

Iterative Loops:

FOR

(7)

Programming - 7

Introduction to M

ATLAB

The if, elseif and else statements

if I == J

A(I,J) = 2;

elseif abs(I-J) == 1

A(I,J) = -1;

else

A(I,J) = 0;

end

if

I == J

A(I,J) = 2;

elseif

abs(I-J) == 1

A(I,J) = -1;

else

A(I,J) = 0;

end

»if_examp

Works on Conditional

statements

Short-circuited in MATLAB

- once a condition is true,

the sequence terminates.

(8)

Programming - 8

Introduction to M

ATLAB

Switch, Case, and Otherwise

switch input_num

case -1

input_str = 'minus one';

case 0

input_str = 'zero';

case 1

input_str = 'plus one';

case {-10,10}

input_str = '+/- ten';

otherwise

input_str = 'other value';

end

switch

input_num

case

-1

input_str =

'minus one'

;

case

0

input_str =

'zero'

;

case

1

input_str =

'plus one'

;

case

{-10,10}

input_str =

'+/- ten'

;

otherwise

input_str =

'other value'

;

end

More efficient than elseif

statements

Only the first matching

case is executed

(9)

Programming - 9

Introduction to M

ATLAB

Similar to other

programming languages

Repeats loop a set number

of times (based on index)

Can be nested

The for loop

N=10;

for I = 1:N

for J = 1:N

A(I,J) = 1/(I+J-1);

end

end

N=10;

for I = 1:N

for J = 1:N

A(I,J) = 1/(I+J-1);

end

end

»for_examp

(10)

Programming - 10

Introduction to M

ATLAB

The while loop

I=1; N=10;

while I<=N

J=1;

while J<=N

A(I,J)=1/(I+J-1);

J=J+1;

end

I=I+1;

end

I=1; N=10;

while I<=N

J=1;

while J<=N

A(I,J)=1/(I+J-1);

J=J+1;

end

I=I+1;

end

»while_examp

Similar to other

programming languages

Repeats loop until logical

condition returns FALSE.

(11)

Programming - 11

Introduction to M

ATLAB

Recall: Array Operations

Using Array Operations:

Using Loops:

[rows, cols] = size(M);

for I = 1:rows

for J = 1:cols

Density(I,J) = M(I,J)/(L(I,J)*W(I,J)*H(I,J));

end

end

[rows, cols] = size(M);

for I = 1:rows

for J = 1:cols

Density(I,J) = M(I,J)/(L(I,J)*W(I,J)*H(I,J));

end

end

Density = Mass(I,J)/(Length.*Width.*Height);

Density = Mass(I,J)/(Length.*Width.*Height);

»array_vs_loops

(12)

Programming - 12

Introduction to M

ATLAB

EVAL Command

% This file creates the first N magic matrices.

% Each matrix is saved as a variable: "magic#".

N = 10;

for I = 1:N

eval(['magic', num2str(I), ' = magic(I)']);

end

% This file creates the first N magic matrices.

% Each matrix is saved as a variable: "magic#".

N = 10;

for

I = 1:N

eval(['magic', num2str(I), ' = magic(I)']);

end

»eval_examp

Evaluates the MATLAB expression specified by

the input string.

(13)

Programming - 13

Introduction to M

ATLAB

Exercise: Script M-files

Write a script file to monitor process variation:

Load data:

>> data = load('script_data.txt');

(M-by-N process data matrix - M parts per shift, N shifts)

For each shift:

Calculate the mean & standard deviation.

Save the data, mean & SD to the workspace.

(Use a separate variable for each shift: data1, data2, ...)

Plot the data in a new figure window.

Plot lines showing the mean and up to +/- 3 STD.

(14)

Programming - 14

Introduction to M

ATLAB

(15)

Programming - 15

Introduction to M

ATLAB

Solution: Script M-files

[parts, shifts]=size(data); for I=1:shifts

DATA = data(:,I);

MEAN = mean(DATA); % Calculating mean & Std. deviation STDEV = std(DATA);

figure(I); clf; hold on % Creating plots plot(1:parts, DATA, 'b'); plot([0 parts], [0 0], 'k:',... [0 parts], [1 1]*MEAN, 'r-.',... [0 parts], [1 1]*(MEAN-STDEV), 'r:',... [0 parts], [1 1]*(MEAN+STDEV), 'r:',... ); % ...etc.

% Writing variables to workspace

eval(['data', num2str(I), '=data(:,I);']); eval(['mean', num2str(I), '=means(I);']); eval(['stdev', num2str(I), '=stdev(I);']); end

[parts, shifts]=size(data);

for I=1:shifts

DATA = data(:,I);

MEAN = mean(DATA); % Calculating mean & Std. deviation

STDEV = std(DATA);

figure(I); clf; hold on % Creating plots plot(1:parts, DATA, 'b'); plot([0 parts], [0 0], 'k:',... [0 parts], [1 1]*MEAN, 'r-.',... [0 parts], [1 1]*(MEAN-STDEV), 'r:',... [0 parts], [1 1]*(MEAN+STDEV), 'r:',... ); % ...etc.

% Writing variables to workspace

eval(['data', num2str(I), '=data(:,I);']); eval(['mean', num2str(I), '=means(I);']); eval(['stdev', num2str(I), '=stdev(I);']);

end

(16)

Programming - 16

Introduction to M

ATLAB

Functions

Core MATLAB (Built-in) Functions

sin, abs, exp, ...

MATLAB-supplied M-file Functions

mean, stat, …

User-created M-file Functions

?????

Differences between Script & Function M-files:

Structural Syntax

(17)

Programming - 17

Introduction to M

ATLAB

function y = mean(x)

% MEAN Average or mean value.

% For vectors, MEAN(x) returns the mean value.

% For matrices, MEAN(x) is a row vector

% containing the mean value of each column.

[m,n] = size(x);

if m == 1

m = n;

end

y = sum(x)/m;

function y = mean(x)

% MEAN Average or mean value.

% For vectors, MEAN(x) returns the mean value.

% For matrices, MEAN(x) is a row vector

% containing the mean value of each column.

[m,n] = size(x);

if m == 1

m = n;

end

y = sum(x)/m;

Structure of a Function M-file

Keyword: function

Function Name (same as file name .m)

Output Argument(s)

Input Argument(s)

Online Help

MATLAB

Code

(18)

Programming - 18

Introduction to M

ATLAB

Multiple Input & Output Arguments

function r = ourrank(X,tol) % OURRANK Rank of a matrix s = svd(X); if (nargin == 1) tol = max(size(X))*s(1)*eps; end r = sum(s > tol); function r = ourrank(X,tol) % OURRANK Rank of a matrix s = svd(X);

if (nargin == 1)

tol = max(size(X))*s(1)*eps; end

r = sum(s > tol); function [mean,stdev] = ourstat(x) % OURSTAT Mean & std. deviation [m,n] = size(x);

if m == 1 m = n; end

mean = sum(x)/m;

stdev = sqrt(sum(x.^2)/m – mean.^2); function [mean,stdev] = ourstat(x) % OURSTAT Mean & std. deviation [m,n] = size(x);

if m == 1 m = n; end

mean = sum(x)/m;

stdev = sqrt(sum(x.^2)/m – mean.^2);

Multiple Input

Arguments ( , )

Multiple Output

Arguments [ , ]

»RANK = ourrank(rand(5),0.1);

»[MEAN,STDEV] = ourstat(1:99);

(19)

Programming - 19

Introduction to M

ATLAB

Workspaces in MATLAB

MATLAB (or Base) Workspace:

For command line and script file variables.

Function Workspaces:

Each function has its own workspace for local variables.

Communicate to Function Workspace via inputs & outputs.

(Promotes structured coding & prevents name conflicts.)

Global Workspace:

Global variables can be shared by multiple workspaces.

(Must be initialized in all relevant workspaces.)

(20)

Programming - 20

Introduction to M

ATLAB

Global

Workspace

Function

Workspace

Inter-Workspace Communication

Function inputs

and outputs

Global variables

(AVOID THESE)

MATLAB

Workspace

Initialize global variables in

all relevant workspaces:

»global variable_name

Initialize global variables in

the “source” workspace

before referring to them

from other workspaces.

(21)

Programming - 21

Introduction to M

ATLAB

Tips for using Global Variables

DON’T USE THEM

If you absolutely must use them:

Avoid name conflicts

whos global

clear global

(22)

Programming - 22

Introduction to M

ATLAB

Exercise: Function M-files

Let’s go back to the process monitoring exercise:

Start with your script file (or the given solution)

>> edit script_soln

Create a function which replicates as much of the

code inside the for loop as possible.

(NOTE: It may not make sense to replace everything)

Now modify your script file to call your function.

(23)

Programming - 23

Introduction to M

ATLAB

(24)

Programming - 24

Introduction to M

ATLAB

Solution: Function M-files (1)

% Modified Script file % ====================

% This solution sets the figure#, overwrites the title, & % writes the workspace variables outside the function.

shifts=size(data,2);

for I=1:shifts DATA = data(:,I);

figure(I)

% Function Call

[MEAN, STDEV] = func_plot(DATA);

% Writing variables to workspace

eval(['data', num2str(I), '=DATA;']); eval(['mean', num2str(I), '=MEAN;']); eval(['stdev', num2str(I), '=STDEV;']); end

% Modified Script file % ====================

% This solution sets the figure#, overwrites the title, & % writes the workspace variables outside the function.

shifts=size(data,2);

for I=1:shifts DATA = data(:,I);

figure(I)

% Function Call

[MEAN, STDEV] = func_plot(DATA);

% Writing variables to workspace

eval(['data', num2str(I), '=DATA;']); eval(['mean', num2str(I), '=MEAN;']); eval(['stdev', num2str(I), '=STDEV;']);

end

(25)

Programming - 25

Introduction to M

ATLAB

Solution: Function M-files (2)

function [MEAN, STDEV] = func_plot(data)

% FUNC_PLOT Calculates mean & std. deviation & plots data DATA = data(:);

parts= length(DATA);

MEAN = mean(DATA); % Calculating mean & Std. deviation STDEV = std(DATA);

clf; hold on % Creating plots plot(1:parts, DATA, 'b'); plot([0 parts], [0 0], 'k:',... [0 parts], [1 1]*MEAN, 'r-.',... [0 parts], [1 1]*(MEAN-STDEV), 'r:',... [0 parts], [1 1]*(MEAN+STDEV), 'r:',... ); % ...etc. xlabel('Part Number');

ylabel('Deviation from Spec. (mm)');

function [MEAN, STDEV] = func_plot(data)

% FUNC_PLOT Calculates mean & std. deviation & plots data

DATA = data(:);

parts= length(DATA);

MEAN = mean(DATA); % Calculating mean & Std. deviation

STDEV = std(DATA);

clf; hold on % Creating plots

plot(1:parts, DATA, 'b'); plot([0 parts], [0 0], 'k:',... [0 parts], [1 1]*MEAN, 'r-.',... [0 parts], [1 1]*(MEAN-STDEV), 'r:',... [0 parts], [1 1]*(MEAN+STDEV), 'r:',... ); % ...etc.

xlabel('Part Number');

ylabel('Deviation from Spec. (mm)');

(26)

Programming - 26

Introduction to M

ATLAB

Subfunctions

Allows more than one function to be within the

same M-file (modularize code)

M-file must have the name of the first (

primary

)

function

Subfunctions can only be called from within the

same M-file

(27)

Programming - 27

Introduction to M

ATLAB

Example: Subfunctions

function [totalsum,average] = subfunc (input_vector) % SUBFUNC Calculates cumulative total & average

totalsum = sum(input_vector);

average = ourmean(input_vector); %Call to subfunction

function y = ourmean(x)

% (OURMEAN) Calculates average [m,n] = size(x);

if m == 1 m = n; end

y = sum(x)/m;

function [totalsum,average] = subfunc (input_vector)

% SUBFUNC Calculates cumulative total & average

totalsum = sum(input_vector);

average = ourmean(input_vector); %Call to subfunction

function y = ourmean(x)

% (OURMEAN) Calculates average

[m,n] = size(x); if m == 1

m = n; end

y = sum(x)/m;

»[SUM, MEAN] = subfunc(rand(1,50))

Primary

Function

(28)

Programming - 28

Introduction to M

ATLAB

Private Functions

Reside in a subdirectory named "private"

Only accessible to functions in parent directory

Only accessible

to functions in

parent directory.

private

(29)

Programming - 29

Introduction to M

ATLAB

MATLAB Calling Priority

High

variable

built-in function

subfunction

private function

MEX-file

P-file

M-file

Low

» cos='This string.'; » cos(8) ans = r » clear cos » cos(8) ans = -0.1455 » cos='This string.'; » cos(8) ans = r » clear cos » cos(8) ans = -0.1455

(30)

Programming - 30

Introduction to M

ATLAB

Visual Debugging

Set Breakpoint

Clear Breaks

Step In

Single Step

Continue

Quit Debugging

»[SUM, MEAN] = subfunc(rand(1,50))

Select

Workspace

Set

Auto-Breakpoints

(31)

Programming - 31

Introduction to M

ATLAB

Example: Visual Debugging

Set up your debugger to stop if an error occurs

(32)

Programming - 32

Introduction to M

ATLAB

Example: Visual Debugging (2)

Editor/Debugger opens the relevant file and

identifies the line where the error occurred.

Current

Location

Current

Workspace

(Function)

(33)

Programming - 33

Introduction to M

ATLAB

Example: Visual Debugging (3)

Error message

Error message

Access to

Function’s

Workspace

Access to

Function’s

Workspace

Debug

Mode

Debug

Mode

(34)

Programming - 34

Introduction to M

ATLAB

Section Summary

Script Files

Flow Control & Array Operations

EVAL Command

Functions

Structural Syntax

Variables & Workspaces

Subfunctions and Private Functions

Referências

Documentos relacionados

Para cadastrar um novo motivo de inatividade clique na ferramenta Cadastro no painel Motivos de Inatividade. O operador

pathtool – janela para configuração da lista de diretórios de busca workspace – janela do workspace.. path / matlabpath – exibem path de

Introduction to M ATLAB »workspace Command line variables saved in MATLAB workspace Workspace Browser... Introduction to M ATLAB »openvar ans Array Editor double-click / Open

object Figure object UIControl objects UIMenu objects Axes object Figure object Surface object Line objects Text objects UIControl objects UIMenu objects Axes object Figure

Table 1 shows the workspace and trajectory data where the first column indicates the number of cells n C of the quantified workspace and the other two columns show the initial and

SUBS(S) replaces all the variables in the symbolic expression S with values obtained from the calling function, or the MATLAB workspace.. SUBS(S,NEW) replaces the free

O Workspace ONE Intelligence permite que você configure o monitoramento e a automação dos desktops com Windows 10 e se integra ao Workspace ONE UEM para fornecer

Diante disso, o presente texto apresenta um relato sobre algumas atividades desenvolvidas no projeto, submetido ao Programa Núcleos de Ensino, intitulado “O acaso é por