mx? a programming language for scientific computation. related languages: matlab idl maple, mathcad,...

20
Mx? A programming language for scientific computation. Related Languages: Matlab IDL Maple, Mathcad, Mathematica

Post on 20-Dec-2015

240 views

Category:

Documents


6 download

TRANSCRIPT

Mx?

A programming language for scientific computation.

Related Languages:MatlabIDL Maple, Mathcad,

Mathematica

Goals

Portability - interpreted and executed by a java interpreter.

Efficiency - greatly improves programming efficiency. Program involving many matrix and vector operations are very short in Mx.

Ease of use - very simple and quick to start

What can the language do?

Basic matrix operations – addition, multiplication…

Advanced operations – matrix slicing and masking.

Internal functions – Print, input, load, save, plot, paint

Operations and RelationsOperations and Relations

Arithmetic OperationsArithmetic Operations *, /, %, /’, ‘, +, -*, /, %, /’, ‘, +, -

Logical OperationsLogical Operations not and ornot and or

Relational OperationsRelational Operations >, >=, <, <=, ==, !>, >=, <, <=, ==, !==

Array and RangeArray and Range

Range SpecifierRange Specifier ::

i.e.. A[1:10, 1:2]i.e.. A[1:10, 1:2]

::::

i.e.. A[1::2]i.e.. A[1::2]

Array Constructor Array Constructor [1,2;3,4] [1,2;3,4]

StatementsStatements

Block Statement Block Statement {}{}

iteration iteration for (n = 1:100);for (n = 1:100);

loop loop

Assignments Assignments ==

Conditional StatementsConditional Statements if (exp) <stat>;if (exp) <stat>;

if (exp) <stat> else if (exp) <stat> else <stat><stat>

Break and ContinueBreak and Continue break;break;

continue;continue;

Functions and Function callFunctions and Function call

Self Defined Self Defined FunctionsFunctions

func <id> (para-list) func <id> (para-list) = exp;= exp;

func <id> (para-list)func <id> (para-list){}{}

Function CallFunction Call id(para-list);id(para-list);

Note: can either be Note: can either be stand-lone or right stand-lone or right value depends on if it value depends on if it has returned valuehas returned value

Internal functionsInternal functions•Console output

print() print arguments to the standard output one by one.•Picture drawing

paint() draws a matrix in a new window as an imageplot() takes a matrix and plots it as a graph

•Colorcolor() sets the current color (in RGB)colormap() take a matrix with rows as RGB, and sets a colormap.

•File I/O functionsload( file, type, m, n )save( matrix, file, type )

•Matrix generatorzeros( m, n )random( m, n )

•matrix operatorinv( matrix )flip( matrix )

Example 1: Example 1: Mr. PotatoMr. Potato

A = load( "potato.dat", "byte", 128,128 );colormap(1);paint( [ A, flip(A), mirror(A), flip(mirror(A));A', flip(A'), mirror(A'), flip(mirror(A'))] );return 0;

Overview of the interpreterOverview of the interpreterCurrently the Mx programming language is implemented Currently the Mx programming language is implemented interpretively.interpretively.

The interpreter parses and executes the user input or The interpreter parses and executes the user input or programs in files, and generates printed output and/or programs in files, and generates printed output and/or pictures.pictures.

The parser of the interpreter is written in Antlr, and the rest The parser of the interpreter is written in Antlr, and the rest routines are in Java.routines are in Java.

For a small portion of our code, we tried macro expansion in For a small portion of our code, we tried macro expansion in Java.Java.

Adequate functionalities made our project quite large, Adequate functionalities made our project quite large, luckily most of the functions are tested and work well luckily most of the functions are tested and work well (maybe we have forgotten the existences of some (maybe we have forgotten the existences of some functions?)functions?)

Code StatisticsCode Statistics

Parts Front-end

Interpreter

Matrix class

test code

Statistics(lines)

481 2090 2731 941

Total 5891 lines (generated code not included)

(partial, currently in CVS)

Why another matrix class?Why another matrix class?

•The Mx programming language has important functionalities: in-place matrix slicing and masking

•Existing Java matrix classes do not support these

What can we do in Mx with slicing What can we do in Mx with slicing and masking?and masking?

A = zeros(256,256);

A[10:40,:] = 1;

A[25::50,60::50] = random(50,50);

A[A>=0.75 or A<=0.25] = 0.5;

A[100:199,100:199] = random(100,100) + A[0::100,0::100]*A[0::100, 100::100] ;

An example of masking: paint An example of masking: paint selected entriesselected entries

A = load( "mri-anat.sdt", "short", 256, 256 ); B = load( "mri-func.fdt", "float", 256, 256 );

A = flip(A'); B = flip(B'); paint( A ); colormap(4); opaint( B, B>0.7, 0, 0, 0.7, 1.0 );

The features of our matrix classThe features of our matrix class

Arithmetic operations: + - * / ...Arithmetic operations: + - * / ... Sharing data between matricesSharing data between matrices Matrix slicing and maskingMatrix slicing and masking Inversion and solving linear equationsInversion and solving linear equations Comparing matricesComparing matrices Painting and plottingPainting and plotting Transpose, flipping and mirroringTranspose, flipping and mirroring And more...And more...

The type systemThe type system

Testing PlanTesting Plan

• 3 Stages:3 Stages:

• Unit TestingUnit Testing Creation of our own library using Matlab as Creation of our own library using Matlab as

guidance. guidance. Library contains its own unit testing program.Library contains its own unit testing program.

• Regressive TestingRegressive Testing Creation of a script to automate regressive testing Creation of a script to automate regressive testing

written in tclwritten in tcl Takes a database of one or more *.mx programsTakes a database of one or more *.mx programs See exampleSee example

Example of the Testing DatabaseExample of the Testing Database

;;; samples.tdb: a sample of testing;;; samples.tdb: a sample of testing;;; database for the Mx;;; database for the Mx

;; assign;; assign1 2 3 4 { a = [1,2;3.4]; return a; }1 2 3 4 { a = [1,2;3.4]; return a; };; transpose;; transpose1 3 2 4 { a = [1.2;3,4]’ ; return a;}1 3 2 4 { a = [1.2;3,4]’ ; return a;};; transpose transpose;; transpose transpose1 2 3 4 { a = [1,2;3,4]’’ ; return a;}1 2 3 4 { a = [1,2;3,4]’’ ; return a;};; triple transposes;; triple transposes1 2 4 { return [1;2;4]’’’ ; }1 2 4 { return [1;2;4]’’’ ; };; matrix add;; matrix add1 2 3 4 { return [1,1;1,1] + [0,1;2,3]; }1 2 3 4 { return [1,1;1,1] + [0,1;2,3]; }

Testing PlanTesting Plan

• Advanced TestingAdvanced TestingNecessity for larger testing programsNecessity for larger testing programs

Integrated all the examples from the Integrated all the examples from the tutorial and used them as our tutorial and used them as our advanced testing examples.advanced testing examples.

Lessons LearnedLessons Learned

1.1. Fully investigate the feasibility of the Fully investigate the feasibility of the supporting toolssupporting tools

Original Matrix classes lacked many Original Matrix classes lacked many functionsfunctions

Plotting, painting, masking, etc.Plotting, painting, masking, etc.

2.2. Get advice from experienced Get advice from experienced

3.3. When an easier method of implementing When an easier method of implementing classes of function exists, use itclasses of function exists, use it