tables the matlab unit testing framework€¦ · 2 my favorite new features in matlab tables the...

Post on 06-Aug-2020

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1 © 2014 The MathWorks, Inc.

What’s New in MATLAB

Joe Hicklin

2

My Favorite New Features in MATLAB

Tables

The MATLAB unit testing framework

3

What is a table?

A new fundamental type in MATLAB

What are they for?

– You have several variables

– The N’th elements of each variable are related to one another

4

What is a table?

Database tables

5

What is a table?

Database tables

Excel tables

6

What is a table?

Database tables

Excel tables

Files with Comma

Separated Values

(CSV)

7

What is a table?

Database tables

Excel tables

CSV files

A very common data format.

– Each column is like a variable.

– They are grouped because they are related.

8

A MATLAB Table

T =

LastName Gender Age Smoker Systolic Diastolic Status

__________ ________ ___ ______ ________ _________ ___________

'Smith' 'Male' 38 1 124 93 'Excellent'

'Johnson' 'Male' 43 0 109 77 'Fair'

'Williams' 'Female' 38 0 125 83 'Good'

'Jones' 'Female' 40 0 117 75 'Fair'

'Brown' 'Female' 49 0 122 80 'Good'

'Davis' 'Female' 46 0 121 70 'Good'

'Miller' 'Female' 33 1 130 88 'Good'

'Wilson' 'Male' 40 0 115 82 'Good'

'Moore' 'Male' 28 0 115 78 'Excellent'

'Taylor' 'Female' 31 0 118 86 'Excellent‘

>>

9

A Table in the

Variable Editor

10

What is a “fundamental type”?

We strive for both simplicity and power.

History of new fundamental types

– Array MATLAB 1.0

– Structures MATLAB 5.0

– Cell Arrays MATLAB 5.0

– Tables MATLAB R2013b

11

Homogeneous --------------------- Heterogeneous

X Y Z

1 'A' [2,3;

4 'B' 5,6;

7 'C' 7,8]

Table

{ 1 2 'X';

4 'A' 6;

[1 2] 8 9 }

Cell Array

[ 1 2 3;

4 5 6;

7 8 9 ]

Array

12

Irregular ------------------ Rectangular

X: [1 2 3 4 5]

Y: [1 2]

Z: 'lowPass'

Struct

X Y Z

1 'A' [2,3;

4 'B' 5,6;

7 'C' 7,8]

Table

13

Making a Table

From workspace data

From an Excel file

From a file of Comma Separated Values (CSV)

14

>> firstName = { 'Joe'; 'Mary'; 'Bob'; 'Susan' }

15

>> firstName = { 'Joe'; 'Mary'; 'Bob'; 'Susan' }

firstName =

'Joe'

'Mary'

'Bob'

'Susan'

16

>> Age = [ 34; 32; 54; 34 ]

17

>> Age = [ 34; 32; 54; 34 ]

Age =

34

32

54

34

18

>> Gender = { 'Male'; 'Female'; 'Male'; 'Female' }

19

>> Gender = { 'Male'; 'Female'; 'Male'; 'Female' }

Gender =

'Male'

'Female'

'Male'

'Female'

20

>> T = table( firstName, Gender, Age )

21

>> T = table( firstName, Gender, Age )

T =

firstName Gender Age

_________ ________ ___

'Joe' 'Male' 34

'Mary' 'Female' 32

'Bob' 'Male' 54

'Susan' 'Female' 34

22

Making a Table

From workspace data

From an Excel file

From a file of Comma Separated Values (CSV)

23

% T = readtable('patients.xls')

T = readtable('patients.csv')

24

% T = readtable('patients.xls')

T = readtable('patients.csv')

T =

LastName Gender Age Location Height Weight Smoker

____________ ________ ___ ___________________________ ______ ______ ______

'Smith' 'Male' 38 'County General Hospital' 71 176 1

'Johnson' 'Male' 43 'VA Hospital' 69 163 0

'Williams' 'Female' 38 'St. Mary's Medical Center' 64 131 0

'Jones' 'Female' 40 'VA Hospital' 67 133 0

'Brown' 'Female' 49 'County General Hospital' 64 119 0

'Davis' 'Female' 46 'St. Mary's Medical Center' 68 142 0

'Miller' 'Female' 33 'VA Hospital' 64 142 1

'Wilson' 'Male' 40 'VA Hospital' 68 180 0

'Moore' 'Male' 28 'St. Mary's Medical Center' 68 183 0

'Taylor' 'Female' 31 'County General Hospital' 66 132 0

'Anderson' 'Female' 45 'County General Hospital' 68 128 0

'Thomas' 'Female' 42 'St. Mary's Medical Center' 66 137 0

'Jackson' 'Male' 25 'VA Hospital' 71 174 0

'White' 'Male' 39 'VA Hospital' 72 202 1

'Harris' 'Female' 36 'St. Mary's Medical Center' 65 129 0

'Martin' 'Male' 48 'VA Hospital' 71 181 1

25

Indexing

MATLAB has three kinds of indexing:

–A( )

–A.foo

–A{ }

Tables support all three!

Plus a new kind, “named indexing”

26

>> T = T(1:10,:)

27

>> T = T(1:10,:)

T =

LastName Gender Age Location Height Weight Smoker

__________ ________ ___ ___________________________ ______ ______ ______

'Smith' 'Male' 38 'County General Hospital' 71 176 1

'Johnson' 'Male' 43 'VA Hospital' 69 163 0

'Williams' 'Female' 38 'St. Mary's Medical Center' 64 131 0

'Jones' 'Female' 40 'VA Hospital' 67 133 0

'Brown' 'Female' 49 'County General Hospital' 64 119 0

'Davis' 'Female' 46 'St. Mary's Medical Center' 68 142 0

'Miller' 'Female' 33 'VA Hospital' 64 142 1

'Wilson' 'Male' 40 'VA Hospital' 68 180 0

'Moore' 'Male' 28 'St. Mary's Medical Center' 68 183 0

'Taylor' 'Female' 31 'County General Hospital' 66 132 0

28

>> T.Age

29

>> T.Age

ans =

38

43

38

40

49

46

33

40

28

31

30

T =

LastName Gender Age Location Height Weight Smoker

__________ ________ ___ ___________________________ ______ ______ ______

'Smith' 'Male' 38 'County General Hospital' 71 176 1

'Johnson' 'Male' 43 'VA Hospital' 69 163 0

'Williams' 'Female' 38 'St. Mary's Medical Center' 64 131 0

'Jones' 'Female' 40 'VA Hospital' 67 133 0

'Brown' 'Female' 49 'County General Hospital' 64 119 0

'Davis' 'Female' 46 'St. Mary's Medical Center' 68 142 0

'Miller' 'Female' 33 'VA Hospital' 64 142 1

'Wilson' 'Male' 40 'VA Hospital' 68 180 0

'Moore' 'Male' 28 'St. Mary's Medical Center' 68 183 0

'Taylor' 'Female' 31 'County General Hospital' 66 132 0

31

>> T.Location = []

32

>> T.Location = []

T =

LastName Gender Age Height Weight Smoker

__________ ________ ___ ______ ______ ______

'Smith' 'Male' 38 71 176 1

'Johnson' 'Male' 43 69 163 0

'Williams' 'Female' 38 64 131 0

'Jones' 'Female' 40 67 133 0

'Brown' 'Female' 49 64 119 0

'Davis' 'Female' 46 68 142 0

'Miller' 'Female' 33 64 142 1

'Wilson' 'Male' 40 68 180 0

'Moore' 'Male' 28 68 183 0

'Taylor' 'Female' 31 66 132 0

33

Body Mass Index = 703 * weight/(height^2)

34

>> T.BMI = 703 * T.Weight ./ (T.Height .^ 2)

35

>> T.BMI = 703 * T.Weight ./ (T.Height .^ 2)

T =

LastName Gender Age Height Weight Smoker BMI

__________ ________ ___ ______ ______ ______ ______

'Smith' 'Male' 38 71 176 1 24.544

'Johnson' 'Male' 43 69 163 0 24.068

'Williams' 'Female' 38 64 131 0 22.484

'Jones' 'Female' 40 67 133 0 20.828

'Brown' 'Female' 49 64 119 0 20.424

'Davis' 'Female' 46 68 142 0 21.589

'Miller' 'Female' 33 64 142 1 24.372

'Wilson' 'Male' 40 68 180 0 27.366

'Moore' 'Male' 28 68 183 0 27.822

'Taylor' 'Female' 31 66 132 0 21.303

36

>> T{:,[4,5,7]}

37

>> T{:,[4,5,7]}

ans =

71.0000 176.0000 24.5443

69.0000 163.0000 24.0683

64.0000 131.0000 22.4836

67.0000 133.0000 20.8285

64.0000 119.0000 20.4241

68.0000 142.0000 21.5887

64.0000 142.0000 24.3716

68.0000 180.0000 27.3659

68.0000 183.0000 27.8220

66.0000 132.0000 21.3030

38

>> T{:,{‘Height’, ‘Width’, ‘BMI’} }

39

>> T{:,{‘Height’, ‘Width’, ‘BMI’} }

ans =

71.0000 176.0000 24.5443

69.0000 163.0000 24.0683

64.0000 131.0000 22.4836

67.0000 133.0000 20.8285

64.0000 119.0000 20.4241

68.0000 142.0000 21.5887

64.0000 142.0000 24.3716

68.0000 180.0000 27.3659

68.0000 183.0000 27.8220

66.0000 132.0000 21.3030

40

T =

LastName Gender Age Height Weight Smoker BMI

__________ ________ ___ ______ ______ ______ ______

'Smith' 'Male' 38 71 176 1 24.544

'Johnson' 'Male' 43 69 163 0 24.068

'Williams' 'Female' 38 64 131 0 22.484

'Jones' 'Female' 40 67 133 0 20.828

'Brown' 'Female' 49 64 119 0 20.424

'Davis' 'Female' 46 68 142 0 21.589

'Miller' 'Female' 33 64 142 1 24.372

'Wilson' 'Male' 40 68 180 0 27.366

'Moore' 'Male' 28 68 183 0 27.822

'Taylor' 'Female' 31 66 132 0 21.303

41

>> T = T(:,{'Height','Weight','BMI','Smoker','Age','Gender'})

42

>> T = T(:,{'Height','Weight','BMI','Smoker','Age','Gender'})

T =

Height Weight BMI Smoker Age Gender

______ ______ ______ ______ ___ ________

71 176 24.544 1 38 'Male'

69 163 24.068 0 43 'Male'

64 131 22.484 0 38 'Female'

67 133 20.828 0 40 'Female'

64 119 20.424 0 49 'Female'

68 142 21.589 0 46 'Female'

64 142 24.372 1 33 'Female'

68 180 27.366 0 40 'Male'

68 183 27.822 0 28 'Male'

66 132 21.303 0 31 'Female'

43

>> T = T(:,{'Height','Weight','BMI','Smoker','Age','Gender'})

T =

Height Weight BMI Smoker Age Gender

______ ______ ______ ______ ___ ________

71 176 24.544 1 38 'Male'

69 163 24.068 0 43 'Male'

64 131 22.484 0 38 'Female'

67 133 20.828 0 40 'Female'

64 119 20.424 0 49 'Female'

68 142 21.589 0 46 'Female'

64 142 24.372 1 33 'Female'

68 180 27.366 0 40 'Male'

68 183 27.822 0 28 'Male'

66 132 21.303 0 31 'Female‘

>> T = T(:,[4, 5, 7, 6, 3, 2])

44

Other Features

Sorting

Cat [ , ] [ ; ]

Join

45

>> T.Age = sort(T.Age)

46

>> T.Age = sort(T.Age)

Disaster!

47

>> T = sortrows(T,{'Age','Height'})

48

>> T = sortrows(T,{'Age','Height'})

T =

Height Weight BMI Smoker Age Gender

______ ______ ______ ______ ___ ________

68 183 27.822 0 28 'Male'

66 132 21.303 0 31 'Female'

64 142 24.372 1 33 'Female'

64 131 22.484 0 38 'Female'

71 176 24.544 1 38 'Male'

67 133 20.828 0 40 'Female'

68 180 27.366 0 40 'Male'

69 163 24.068 0 43 'Male'

68 142 21.589 0 46 'Female'

64 119 20.424 0 49 'Female'

49

>> T1 = T(:,1:3)

>> T2 = T(:,4:end)

T1 =

Height Weight BMI

______ ______ ______

71 176 24.544

69 163 24.068

64 131 22.484

64 119 20.424

67 133 20.828

64 142 24.372

68 142 21.589

68 180 27.366

68 183 27.822

66 132 21.303

T2 =

Smoker Age Gender

______ ___ ________

1 28 'Male'

0 31 'Male'

0 33 'Female'

0 38 'Female'

0 38 'Female'

1 40 'Female'

0 40 'Female'

0 43 'Male'

0 46 'Male'

0 49 'Female'

50

>> T = [T1,T2]

T =

Height Weight BMI Smoker Age Gender

______ ______ ______ ______ ___ ________

71 176 24.544 1 28 'Male'

69 163 24.068 0 31 'Male'

64 131 22.484 0 33 'Female'

64 119 20.424 0 38 'Female'

67 133 20.828 0 38 'Female'

64 142 24.372 1 40 'Female'

68 142 21.589 0 40 'Female'

68 180 27.366 0 43 'Male'

68 183 27.822 0 46 'Male'

66 132 21.303 0 49 'Female'

51

>> T1 = T(1:5,:)

>> T2 = T(6:end,:)

T1 =

Height Weight BMI Smoker Age Gender

______ ______ ______ ______ ___ ________

71 176 24.544 1 28 'Male'

69 163 24.068 0 31 'Male'

64 131 22.484 0 33 'Female'

64 119 20.424 0 38 'Female'

67 133 20.828 0 38 'Female'

T2 =

Height Weight BMI Smoker Age Gender

______ ______ ______ ______ ___ ________

64 142 24.372 1 40 'Female'

68 142 21.589 0 40 'Female'

68 180 27.366 0 43 'Male'

68 183 27.822 0 46 'Male'

66 132 21.303 0 49 'Female'

52

>> T = [T1;T2]

T =

Height Weight BMI Smoker Age Gender

______ ______ ______ ______ ___ ________

71 176 24.544 1 28 'Male'

69 163 24.068 0 31 'Male'

64 131 22.484 0 33 'Female'

64 119 20.424 0 38 'Female'

67 133 20.828 0 38 'Female'

64 142 24.372 1 40 'Female'

68 142 21.589 0 40 'Female'

68 180 27.366 0 43 'Male'

68 183 27.822 0 46 'Male'

66 132 21.303 0 49 'Female'

53

Joining Two Tables

T1 =

SearchTerm IpAddress Time

________________________ ________________ ________

'iOS 7' '105.116.17.117' 2:51 AM

'lolcat' '81.13.36.71' 3:54 AM

'HTML' '123.124.21.125' 5:22 AM

'Manchester Uninted' '123.63.103.19' 6:37 AM

'cute Kitty' '81.13.36.71' 8:10 AM

'MATLAB' '105.116.17.117' 11:57 AM

'I Can Has Cheezburger?' '81.13.36.71' 2:02 PM

'BT Sport' '84.22.91.5' 3:43 PM

'Americas Cup' '36.6.13.106' 4:18 PM

'funny cat videos' '81.13.36.71' 5:01 PM

'Miley Cyrus' '105.116.17.117' 6:06 PM

'Gareth Bale' '24.63.58.83' 11:02 PM

54

Joining Two Tables

T2 =

IpAddress Name

________________ ________________

'24.63.58.83' 'Samuel Clemens'

'36.6.13.106' 'Niels Bohr'

'81.13.36.71' 'Jos Martin'

'123.63.103.19' 'Mic Jagger'

'84.22.91.5' 'SpongeBob'

'105.116.17.117' 'Nicola Tesla'

'123.124.21.125' 'Ted Cruz'

55

Joining Two Tables

T2 =

IpAddress Name

________________ ________________

'24.63.58.83' 'Samuel Clemens'

'36.6.13.106' 'Niels Bohr'

'81.13.36.71' 'Jos Martin'

'123.63.103.19' 'Mic Jagger'

'84.22.91.5' 'SpongeBob'

'105.116.17.117' 'Nicola Tesla'

'123.124.21.125' 'Ted Cruz'

T1 =

SearchTerm IpAddress Time

________________________ ________________ ________

'iOS 7' '105.116.17.117' 2:51 AM

'lolcat' '81.13.36.71' 3:54 AM

'HTML' '123.124.21.125' 5:22 AM

'Manchester Uninted' '123.63.103.19' 6:37 AM

'cute Kitty' '81.13.36.71' 8:10 AM

'MATLAB' '105.116.17.117' 11:57 AM

'I Can Has Cheezburger?' '81.13.36.71' 2:02 PM

'BT Sport' '84.22.91.5' 3:43 PM

'Americas Cup' '36.6.13.106' 4:18 PM

'funny cat videos' '81.13.36.71' 5:01 PM

'Miley Cyrus' '105.116.17.117' 6:06 PM

'Gareth Bale' '24.63.58.83' 11:02 PM

56

>> T = join(T1,T2)

57

>> T = join(T1,T2)

T =

SearchTerm IpAddress Time Name

________________________ ________________ ________ ________________

'iOS 7' '105.116.17.117' 2:51 AM 'Nicola Tesla'

'lolcat' '81.13.36.71' 3:54 AM 'Jos Martin'

'HTML' '123.124.21.125' 5:22 AM 'Ted Cruz'

'Manchester Uninted' '123.63.103.19' 6:37 AM 'Mic Jagger'

'cute Kitty' '81.13.36.71' 8:10 AM 'Jos Martin'

'MATLAB' '105.116.17.117' 11:57 AM 'Nicola Tesla'

'I Can Has Cheezburger?' '81.13.36.71' 2:02 PM 'Jos Martin'

'BT Sport' '84.22.91.5' 3:43 PM 'SpongeBob'

'Americas Cup' '36.6.13.106' 4:18 PM 'Niels Bohr'

'funny cat videos' '81.13.36.71' 5:01 PM 'Jos Martin'

'Miley Cyrus' '105.116.17.117' 6:06 PM 'Nicola Tesla'

'Gareth Bale' '24.63.58.83' 11:02 PM 'Samuel Clemens'

58

>> sortrows(T,{'Name'})

59

>> sortrows(T,{'Name'})

ans =

SearchTerm IpAddress Time Name

________________________ ________________ ________ ________________

'lolcat' '81.13.36.71' 3:54 AM 'Jos Martin'

'cute Kitty' '81.13.36.71' 8:10 AM 'Jos Martin'

'I Can Has Cheezburger?' '81.13.36.71' 2:02 PM 'Jos Martin'

'funny cat videos' '81.13.36.71' 5:01 PM 'Jos Martin'

'Manchester Uninted' '123.63.103.19' 6:37 AM 'Mic Jagger'

'iOS 7' '105.116.17.117' 2:51 AM 'Nicola Tesla'

'MATLAB' '105.116.17.117' 11:57 AM 'Nicola Tesla'

'Miley Cyrus' '105.116.17.117' 6:06 PM 'Nicola Tesla'

'Americas Cup' '36.6.13.106' 4:18 PM 'Niels Bohr'

'Gareth Bale' '24.63.58.83' 11:02 PM 'Samuel Clemens'

'BT Sport' '84.22.91.5' 3:43 PM 'SpongeBob'

'HTML' '123.124.21.125' 5:22 AM 'Ted Cruz'

60

>> sortrows(T,{'Name'})

ans =

SearchTerm IpAddress Time Name

________________________ ________________ ________ ________________

'lolcat' '81.13.36.71' 3:54 AM 'Jos Martin'

'cute Kitty' '81.13.36.71' 8:10 AM 'Jos Martin'

'I Can Has Cheezburger?' '81.13.36.71' 2:02 PM 'Jos Martin'

'funny cat videos' '81.13.36.71' 5:01 PM 'Jos Martin'

'Manchester Uninted' '123.63.103.19' 6:37 AM 'Mic Jagger'

'iOS 7' '105.116.17.117' 2:51 AM 'Nicola Tesla'

'MATLAB' '105.116.17.117' 11:57 AM 'Nicola Tesla'

'Miley Cyrus' '105.116.17.117' 6:06 PM 'Nicola Tesla'

'Americas Cup' '36.6.13.106' 4:18 PM 'Niels Bohr'

'Gareth Bale' '24.63.58.83' 11:02 PM 'Samuel Clemens'

'BT Sport' '84.22.91.5' 3:43 PM 'SpongeBob'

'HTML' '123.124.21.125' 5:22 AM 'Ted Cruz'

61

Try out tables!

Tables are a new kind of variable

Use them when you have arrays of “related” data

Many more features that I haven’t shown:

– stack and unstack

– summary

– ismissing and standardizeMissing

– varfun and rowfun

– VariableUnits, Description, VariableDescriptions, …

62

We Love Testing

Quality

Confidence

Productivity

63

MATLAB Unit Test Framework

Based on x-Unit (SUnit, JUnit, CppUnit …)

Parts

– Test case

– Test suite

– Test runner

64

function tests = TestTableIndexing

tests = functiontests(localfunctions);

end

function testDotIndex (testCase)

T = readtable('patients.csv');

byDot = T.Age;

byIndex = T{:,3};

verifyEqual(testCase,byDot,byIndex);

end

function testNameIndex (testCase)

T = readtable('patients.csv');

byName = T{:,'Age'};

byIndex = T{:,3};

verifyEqual(testCase,byName,byIndex);

end

65

function tests = TestTableIndexing

tests = functiontests(localfunctions);

end

function testDotIndex (testCase)

T = readtable('patients.csv');

byDot = T.Age;

byIndex = T{:,3};

verifyEqual(testCase,byDot,byIndex);

end

function testNameIndex (testCase)

T = readtable('patients.csv');

byName = T{:,'Age'};

byIndex = T{:,3};

verifyEqual(testCase,byName,byIndex);

end

66

function tests = TestTableIndexing

tests = functiontests(localfunctions);

end

function testDotIndex (testCase)

T = readtable('patients.csv');

byDot = T.Age;

byIndex = T{:,3};

verifyEqual(testCase,byDot,byIndex);

end

function testNameIndex (testCase)

T = readtable('patients.csv');

byName = T{:,'Age'};

byIndex = T{:,3};

verifyEqual(testCase,byName,byIndex);

end

67

function tests = TestTableIndexing

tests = functiontests(localfunctions);

end

function testDotIndex (testCase)

T = readtable('patients.csv');

byDot = T.Age;

byIndex = T{:,3};

verifyEqual(testCase,byDot,byIndex);

end

function testNameIndex (testCase)

T = readtable('patients.csv');

byName = T{:,'Age'};

byIndex = T{:,3};

verifyEqual(testCase,byName,byIndex);

end

68

function tests = TestTableIndexing

tests = functiontests(localfunctions);

end

function testDotIndex (testCase)

T = readtable('patients.csv');

byDot = T.Age;

byIndex = T{:,3};

verifyEqual(testCase,byDot,byIndex);

end

function testNameIndex (testCase)

T = readtable('patients.csv');

byName = T{:,'Age'};

byIndex = T{:,3};

verifyEqual(testCase,byName,byIndex);

end

69

>> runtests TestTableIndexing.m

70

>> runtests TestTableIndexing.m

Running TestTableIndexing

..

71

>> runtests TestTableIndexing.m

Running TestTableIndexing

..

Done TestTableIndexing

__________

ans =

1x2 TestResult array with properties:

Name

Passed

Failed

Incomplete

Duration

Totals:

2 Passed, 0 Failed, 0 Incomplete.

0.089878 seconds testing time.

72

Why Testing Might Be For You

Testing saves development time.

Testing makes development more enjoyable.

– Your time is spent making things, not fixing things.

– You are a designer, not a detective.

– Fewer nasty surprises and opportunities to look stupid

The framework is not trivial, but easily learnable.

– Well worth the effort if you maintain software.

73

I’ve talked about…

Tables: a new fundamental type in MATLAB

The MATLAB unit testing framework

74 © 2014 The MathWorks, Inc.

© 2014 The MathWorks, Inc.

Mixed-Integer Linear Programming in

MATLAB

Seth DeLand

Why are integer variables important?

Need a solver that finds

integer-feasible solutions

Mixed-integer linear programming

Mixed-integer linear programming

Continuous and integer variables

𝑥1 ∈ 0, 100 𝑥2 ∈ {1,2,3,4,5}

Linear objective and constraints

min𝑥

−𝑥1 − 2𝑥2

𝑥1 + 4𝑥2 ≤ 20 𝑥1 + 𝑥2 = 10

such that

Traveling Salesman Problem

Problem

How to find the shortest path through a series of points?

Solution

Calculate distances between all combinations of points

Solve an optimization problem where variables correspond to trips

between two points

1

1 1

0

1

1

0

0

0

0

For more information

Mixed-integer linear programming

www.mathworks.com/products/optimization/

>> doc optim

Web maps

www.mathworks.com/products/mapping/

>> webmap

© 2014 The MathWorks, Inc.

Questions?

top related