½ Day Introduction to MATLAB as a General Modelling and Simulation Tool … · 2016-12-21 ·...

Post on 28-May-2020

2 views 0 download

transcript

SHORT COURSE (2)

½ Day – Introduction to MATLAB as a

General Modelling and Simulation Tool

Masoud Jamei, PhD, SMIEEE M.Jamei@simcyp.com, M.Jamei@Shef.ac.uk

Senior Scientific Advisor and Head of M&S at Simcyp Honorary Lecturer, School of Medicine, The University of Sheffield

Module MED603 - Data Analysis in PKPD - Introduction to MATLAB Masoud Jamei 2

14:50 Overview and MATLAB syntax 15:40 Break 15:50 Programming In MATLAB 16:40 Break 16:50 Visualisation, algorithm and ordinary

differential equations 17:50 End of the short course

AGENDA

5th January 2009

Lecture 1 – Overview and MATLAB Syntax

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 3

MATLAB can be accessed via the University managed computers

MATLAB and Simulink Student Version Release 2007 (£40-£50) Some limitations, such as the allowable size of a matrix

MATLAB is a program for doing technical computing.

MATLAB (MATrix LABoratory) History

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 4

(pre-MATLAB) Fortran subroutines for solving linear

(LINPACK) and eigenvalue (EISPACK) problems

MATLAB developed as an interactive system to access

LINPACK and EISPACK

In the 1980’s, MATLAB was rewritten in C with more

functionality (such as plotting routines)

The Mathworks, Inc. was created in 1984

What Applications MATLAB is Used For

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 5

Control Design

Signal Processing and Communications

Image Processing

Test and Measurement

Financial Modeling

Statistics, optimization and curve fitting

Add-on toolboxes

Bioinformatics

PK/PD Modelling

Advantages & Disadvantages

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 6

Relatively easy to learn

Its code is optimized to be relatively quick when performing matrix operations

Can be used like a calculator or as a programming language

Since interpreted, errors are easier to find and fix

Primarily procedural, though it has some object-oriented elements

It is NOT a general purpose programming language

Since it is an interpreted language (generally slower than a compiled language such as C++)

MATLAB Windows

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 7

Command window

Editor window

Command History window

Current Directory and Workspace

windows

Figure window

Help window

Array Editor window

Command Window

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 8

MATALB can be used as a calculator

>> 5+2 ans = 7

>> 5*4+2^3-9 ans = 19

>> 5*4^2+3 ans = 83

>> 4/5*3 ans = 2.4000

>> (5*4)+(2^3)-9 ans = 19

>> 4/(5*3) ans = 0.2667

Variables

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 9

MATLAB allows you to assign a value to a variable

x=10 - Should be read as: “x is assigned a value of 10”

Variables are case sensitive, X is not the same as x!

You can use the variables in subsequent calculations

Unassigned variables cause the following error:

??? Undefined function or variable 'z'.

Data Types

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 10

Array

Logical Char Numeric

Double

Single

int8, uint8,

int16, uint16,

int32, uint32

int64, uint64

Cell Structure

User classes

Java classes Function handle

MATLAB Special Variables

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 11

ans Default variable name for results

pi Value of π

eps Smallest incremental number (2.2204e-016)

inf Infinity

NaN Not a number e.g. 0/0

realmin The smallest usable positive real number (1.7977e+308)

realmax The largest usable positive real number (2.2251e-308)

Variables

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 12

>> x=3 x = 3

>> x+3 ans = 6

>> x=x*3 x = 9

>>y= x ^ 2 y = 81

Variable names must start with a letter

It can be a combination of letters, underscore, numbers

Some names are reserved MATLAB commands/variables, for

example pi, if, for, etc

White space between calculations does not matter – can be used

to make them clear

Variables - Matrices

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 13

Almost all variables in MATLAB are matrices

Group of numbers arranged into rows and columns

Single value or scalar means a matrix with one row and one

column

A vector is a one dimensional matrix either one row or one

column

A matrix is usually two dimensional but can have more!

Variables - Matrices

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 14

>> x=[1 2 3] x = 1 2 3

>> x=[1,2,3] x = 1 2 3

>> x=[1;2;3] x = 1 2 3

>> x=1:3 x = 1 2 3

>> x=1:1:3 x = 1 2 3

>> x=[1 2 3 ] x = 1 2 3

>> x=[1 2 3; 4 5 6] x = 1 2 3 4 5 6

>> x=[1 2 3 4 5 6] x = 1 2 3 4 5 6

>> x(1,2) ans = 2

>> x(1:2, 2:3) ans = 2 3 5 6

Variables - Matrices

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 15

>> x=ones(2) x = 1 1 1 1

>> x=ones(2,3) x = 1 1 1 1 1 1

>> x=zeros(2) x = 0 0 0 0

>> y=zeros(2,3, 2) y(:,:,1) = 0 0 0 0 0 0 y(:,:,2) = 0 0 0 0 0 0

>> [r, c, d]=size(y) r=2 c=3 d=2

>> size(y,2) ans = 3

>> x=diag([2;3]) x = 2 0 0 3

MATLAB Windows

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 16

.mat files

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 17

Saved version of MATLAB variables

MATLAB-specific

save(‘MyData.mat’);

save MyData x z

load(‘MyData.mat’);

load MyData

Arithmetic Operators

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 18

Plus +

Minus -

Matrix multiply *

Array multiply .*

Matrix power ^

Array power .^

Slash or right matrix divide /

Right array divide ./

Relational and Logical Operators

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 19

Equal ==

Not equal ~=

Less than <

Greater than >

Less than or equal <=

Greater than or equal >=

Element-wise logical AND &

Element-wise logical OR |

Logical NOT ~

Built-in Elementary Functions

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 20

square root sqrt(x)

real nth root nthroot(x,n)

base 10 log log10(x)

natural log log(x)

absolute value abs(x)

exponential (ex) exp(x)

sign of x sign (x)

round towards infinity

ceil(x)

round towards minus infinity

floor(x)

sin(x) cos(x) tan(x) asin(x) sinh(x)

Trigonometric Functions Elementary Math Functions

Lecture 2 – Programming in MATLAB

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 21

MATLAB can be used for specific tasks such as:

• Performing calculations for different sets of parameters

• Visualisation and plot of data

• Statistical analysis

• Solving differential equations simulating models

• Parameter estimation and fitting models to data

Programming is the preparation of a step-by-step instruction for a computer to follow.

Structured Programming

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 22

MATLAB starts executing each statement from beginning to the end.

However, we in certain condition need to change the execution sequence.

Sometime we need to repeat a specific segment of statements over and over again.

We may also need to repeat a specific segment of statements over and over again but for different sets of parameters.

Elements of MATLAB Programming Language

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 23

Expressions

Flow Control blocks

Conditional

Loops (Iterations)

Scripts

Functions

Programming in MATLAB

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 24

Use the input command to accept information

Use disp and fprintf to control the output

>> CL=input('Enter CL ?') Enter CL ? 4 CL = 4

The fprintf command is more flexible than the disp command, and allows you to put both variables and text onto the same line

>> fprintf('CL= %2.2f \n',CL) CL= 4.00

>> disp(CL) 4

Flow Control-if Statement

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 25

A>B C<1

An if statement is used to determine the computing path based on a given condition.

x=2;y=4 if x<y disp(x) else disp(y) end

x=2;y=4; if x<y disp(x) elseif x==y disp([x,y]) else disp(y) end

D~=2 E>1 & E<5

When a variable represents an array, the if statement is only true if all the members of the array meet the criteria.

Flow Control-switch Statement

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 26

Switch among several cases based on expression.

switch switch_expr case case_expr, statement, ..., statement case {case_expr1, case_expr2, case_expr3,...} statement, ..., statement ... otherwise, statement, ..., statement end

method = 'Bilinear'; switch lower(method) case {'linear','bilinear'} disp('Method is linear') case 'cubic' disp('Method is cubic') case 'nearest' disp('Method is nearest') otherwise disp('Unknown method.') end Method is linear

Flow Control- for Loops

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 27

A for loop allows you to repeat a set of statements for a specified number of times.

for variable = expr statement; ... statement; end

A = ones(4,8); sum = 0; for i = 1:4 for j = [1:4, 5,7:8] sum = sum + A(i,j); end end fprintf(’sum = %d\n’,sum);

Flow Control- while Loops

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 28

A while loop allows you to repeat a set of statements until a specific condition is met.

while expr statement; ... statement; end

A = ones(4,8); sum = 0; while i <= 4 while j < 6 sum = sum + A(i,j); j = j+1; end i = i+1; end fprintf(’sum = %d\n’,sum);

Avoid loops whenever you can!

Scripts

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 29

A script is a set of statements/commands without input arguments, they do not return any value.

A = ones(4,8); sum = 0; while i <= 4 while j < 6 sum = sum + A(i,j); j = j+1; end i = i+1; end fprintf(’sum = %d\n’,sum);

M Files

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 30

m-files contain scripts or functions to do some tasks.

If you want to keep your work, you need to create an m-file

File->New->m-file (or any other simple editor like notepad)

M Files

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 31

Type your commands in the edit window that opens

m-files are called by their names and they can be nested

Give m-files suitable names

m-files can be groups in different folders (should be added to the

MATLAB path)

Avoid having m-files with the same name in your folders

Don’t forget to save your m file (after any modifications it should

be saved again)

M Files – An Example

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 32

Set Path

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 33

MATALB looks for functions in its path, so don’t forget to use “Set Path” command to add your function location.

Functions

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 34

Functions are reusable building blocks for more complex programs

Functions are useful to modularise your code

MATALB has many built-in functions

Some of the MATALB functions belong to specific toolboxes

User-defined functions can be added to MATLAB

Usually one file for each function is defined

Two important types of MATLAB functions are:

Named functions defined in m-files

Anonymous function defined via function handles

User Defined Functions

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 35

User defined functions consist of

• Name

• Input argument(s)

• Output

All variables defined inside a function are ONLY locally known

Functions are ONLY aware of the input arguments

Functions name follow the same rules as variables

Save the function in an m-file using the function name

A function can be called inside another function

User Defined Functions

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 36

function s=myFunc(x) % This function double the input values % of an array x s=x*2;

Input variable which can be an array

The output (return) variable which should be assigned inside the function

The function name

A Function Example

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 37

function [avg, stdev, num] = sum_stat(X, Y) Z=X+Y; avg= mean(Z); stdev= std(Z); num = length(Z);

>> sum_stat(3,4) ans = 7

If output variables are not defined then only the first one is shown.

>> [a b c]=sum_stat(3,4) a = 7 b = 0 c = 1

A Function Example

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 38

>> [a b c]=sum_stat(3,4) a = 7 b = 0 c = 1

The original output parameter names defined in the function is of NO significance. New variable names are defined as the function is called! The ORDER of the parameters is key!!!!

>> Z=3; [a b c]=sum_stat(Z,4);

Some input parameters can of course be variables

Z outside the function is independent of Z inside the function. The scope (the range of validity of variables) of internal parameters is limited to inside the function.

Anonymous Functions

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 39

kel= @(CL, V) CL/V

Parameter list Name of function handle

Function body Function handle constructor

>> kel(10,20) ans = 0.5000

Note: Avoid using too much anonymous functions

Lecture 3 – Visualisation, Algorithm and ODE

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 40

Figures

Axes

Handles (a handle is a variable that refers to an object)

If you can see it, it has a handle.

Some things you can’t see have handles, too.

Can use handles to manipulate properties.

Overview of MATLAB Graphics

Handles & Properties

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 41

Figures, axes, and graphics have handles

These objects have properties

These properties can be altered

The figure window is erased every time a new graph is drawn

Use the hold on command to draw additional plots onto an existing graph

Don’t forget using hold off!

MATALB Graphs

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 42

2D line plots

Pseudocolor Images

Histograms

3D shapes

2D Plots

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 43

>> plot([1:10])

plot(x, y) x=1:50; plot(x, x.^2 )

x=1:50; plot(x, x.^2,'r', x, 10*x, '*')

title('This is my figure') xlabel('X') ylabel('Y') axis([1 10 -1 30])

2D Plots

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 44

x=[1 1 1 2 3 3 4 4 5 6 6 6 6 7 7 7 ]; hist(x,7)

hist(x, m) produces a histogram bar plot of the results - where m is a scalar, uses m bins

x = -2.9:0.2:2.9; bar(x,exp(-x.*x));

t=0:.01:2*pi; polar(t,abs(sin(2*t).*cos(2*t)));

x=-2:0.1:2; y=sin(x); e = rand(size(x))/8; errorbar(x,y,e);

3D Plots

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 45

Surface plots z=peaks(25); surf(z); colormap(jet);

Surface plots with shading z=peaks(25); surfl(z); shading interp; colormap(pink);

Mesh plots z=peaks(25); mesh(z); colormap(hsv)

Contour

Slice

010

2030

0

10

20

30-10

-5

0

5

10

010

2030

0

10

20

30-10

-5

0

5

10

010

2030

0

10

20

30-10

-5

0

5

10

Other Handy Functions

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 46

subplot(rows,columns,number)

axis([xmin xmax ymin max])

set(handle,’PropertyName’,value, . . .);

get(handle,’PropertyName’)

Figure(#) %creates new figure window

Logarithmic Plots

• semilogx

• semilogy

• loglog

Algorithm

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 47

Flow chart: a graphic representation of the logical sequence of instructions.

Algorithm: a sequence of instructions designed to solve a specific problem.

Process

Decision

Terminal

X=0;

X>2

Start

Algorithm

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 48

Start

Input X

X>0

X=X/2

X=X*2

end

Output X

X=input(‘enter X? ‘); If (X>0) X=X*2; else X=X/2; end disp(X);

Yes

No

Solving Linear First Order Differential Equations

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 49

Generally, a system of differential equations looks like:

yi’(t)= fi (y1, y2, ..., yn, t) i=1 ...n

SaS Ak

dt

dA AS(0) = Dose

AS’(t)= -kaAS The objective is to find As(t)?

tk

SSae)0(AA

Solving ODE

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 50

Two well-known numerical methods to solver ODE: Euler Method Runge-Kutta Methods

The most commonly used one is the 4th order Runge-Kutta method.

Runge-Kutta methods are implemented in MATLAB as ODE23 and ODE45 functions.

Using MATLAB to Solve ODE

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 51

Define your ODE in a function and save it in an m-file.

Call ode45 (ode23) using the function handle: [t, As]=ode45(@oral, [0, 10], [10]);

function dAs=oral(t,As) dAs=-2*As;

Plot the results: Plot(t, As);

Using MATLAB to Solve a Two-Compartment Model

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 52

A2 = C2V2 A1 = C1V1

R k12

k21

k10

dA1/dt = R + k21A2 – k12A1 – k10A1

dA2/dt = k12A1 – k21A2

Using MATLAB to Solve a Two-Compartment Model

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 53

>> [t, As]=ode45(@two_comp, [0, 10], [0 0]); >> plot(t, As) >> xlabel ('time (h)') >> ylabel('Amount in both compartments (mg)')

function dA=two_comp(t,A) k10=1; k12=1; k21=.1; dA = zeros(2,1); % a column vector dA(1) = 1 + k21*A(2)- k12*A(1)- k10*A(1); dA(2)= k12*A(1)-k21*A(2);

Using MATLAB to Solve a Two-Compartment Model

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 54

Using MATLAB to Solve a Two-Compartment Model

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 55

0 2 4 6 8 100

0.5

1

1.5

2

2.5

3

3.5

4

time (h)

Am

ount

in b

oth

com

part

ments

(m

g)

Using MATLAB to Solve a Two-Compartment Model

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 56

function dA=two_comp(t,A) k10=1; k12=1; k21=.1; dA = zeros(2,1); % a column vector if (t>4); R=0; else R=1; end dA(1) = R + k21*A(2)- k12*A(1)- k10*A(1); dA(2)= k12*A(1)-k21*A(2);

>> [t, As]=ode45(@two_comp, [0, 10], [0 0]); plot(t, As(:,1))

Outputs on Separate Graphs

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 57

0 1 2 3 4 5 6 7 8 9 100

0.2

0.4

0.6

0.8

Am

ount

in c

om

part

ment

1 (

mg)

0 1 2 3 4 5 6 7 8 9 100

0.5

1

1.5

2

Time (h)

Am

ount

in c

om

part

ment

2 (

mg)

Passing Parameters into ode45

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 58

function dA=two_comp(t,A, flag, InfusionDuration) k10=1; k12=1; k21=.1; dA = zeros(2,1); % a column vector if (t> InfusionDuration); R=0; else R=1; end dA(1) = R + k21*A(2)- k12*A(1)- k10*A(1); dA(2)= k12*A(1)-k21*A(2);

An indicator for defining parameters

An input parameter

>> *t, As+=ode45(‘two_comp’, *0, 10+, *0 0+, [], 4);

(an empty array)

Input parameter

Don’t function use handler anymore

End of Short Course 2

Masoud Jamei Module MED603 - Data Analysis in PKPD - Introduction to MATLAB 60

If you have any more questions drop me an email at:

M.Jamei@simcyp.com, M.Jamei@Shef.ac.uk