OpenModelica/C2/Array-Functions-and-Operations/English

From Script | Spoken-Tutorial
Revision as of 13:22, 19 March 2016 by Kaushik Datta (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Visual Cue Narration
Slide:

Title Slide

Welcome to the Spoken Tutorial on Array Functions and Operations.
Slide:

Learning Objectives

In this tutorial, we are going to learn:
  • how to use OMShell
  • how to use array construction functions.
  • how to perform arithmetic operations on vectors and matrices.
  • how to use conversion functions.
Slide:

System Requirements

To record this tutorial, I am using
  • OpenModelica 1.9.2
  • Ubuntu Operating System version 14.04 and
  • gedit

Windows users may use any text editor like Notepad instead of gedit.

Slide:

Prerequisites

To understand and practice this tutorial, you need
  • knowledge of function and array declaration in Modelica.
  • Prerequisite tutorials are mentioned on our website.
Slide:

OMShell

OMShell is an interactive command line tool. It is a part of OpenModelica.

OpenModelica compiler can be invoked using commands typed in OMShell.

It can be used for loading classes and simulating them.

Functions can also be called in OMShell.

We shall now use classes named polynomialEvaluatorUsingVectors and functionTester to demonstrate OMShell.

These classes were discussed in the previous tutorials.

For more information on these classes, please watch the prerequisite tutorials.

All the commands to be used in this tutorial are provided in a file named OMShell-commands.txt.

You may locate and download all the code files available on our website.

Please save all these code files in one directory for easy access.

Click on Search icon in Icon Tray. Let me launch OMShell.

To open OMShell on Ubuntu Operating System,

Click on Dash Home icon at top left in the launcher.

Type OMShell in the address box. Type OMShell in the address box.

Click on OMShell icon.

In Windows, you may find it in Start menu.

/* OMShell */ OMShell has now opened.

Let me resize the window for better visibility.

Let us learn a few useful commands.

Now, go to the location where you saved the text file named OMShell-commands.txt and open it.

Note that this file has all the commands to be used in this tutorial.

Hence, you may refer to this file whenever in doubt.

Let me switch to OMshell.

Type // cd() // Type cd open and close parentheses.

Press Enter to display the result produced on execution of the command.

This prints the path to current directory.
Type // cd(“path”) // Change current directory to the location where you have saved the code files.

Let me change directory on my system.

Type cd(open and close parentheses) (within double quotes) .

Specify the path and press Enter.

Note that a Windows path uses forward slash unlike the backward slash in Ubuntu.

Windows users need to be cautious of this fact.

Type // loadFile(“polynomialEvaluatorUsingVectors.mo”) // Let us load polynomialEvaluatorUsingVectors function.

Type loadFile (within parentheses) (within double quotes).

Type polynomialEvaluatorUsingVectors.mo.

Note that F is upper-case in loadFile() command.

loadFile command can be used to load class or model files with a file extension of .mo and press Enter.

// true // If the file is found, OMShell returns true.
Type // polynomialEvaluatorUsingVectors(10) // Let us call this function interactively.

Type polynomialEvaluatorUsingVectors (with an argument of) 10.

Press Enter.

This command takes an input argument of 10 units and displays the result.
Type // loadFile(“functionTester.mo”) // Let me load functionTester class.

Type loadFile(functionTester.mo)

Type // simulate(functionTester,startTime=0,stopTime=1) // Let us simulate functionTester.

Type simulate (within brackets) functionTester (comma) startTime (equals) 0 (comma) stopTime (equals) 1 and press Enter.

The simulation is complete.

Let us plot variable z from functionTester class.

Type // plot({z}) // Type plot (within parentheses) (within curly braces) z and press Enter.

This generates a plot of variable z vs time.

Let me go back to the slides.
Slide:

Array Construction Functions

  • fill()
  • zeros()
  • identity()
Array construction functions are used to construct arrays of given size.

Now let us take a look at a few array construction functions.

We will also practice them using OMShell.

fill() is used to construct arrays with all the elements same.

The syntax for fill is as shown.

First argument represents the number which fills the array.

Remaining arguments represent the size of each dimension of the array.

zeros() function is used to create an array filled with zeros.

Syntax for zeros() function is as shown.

Arguments represent the size of each dimension.

identity() function creates an identity matrix.

It takes one argument that represents the size of both dimensions.

Let me demonstrate these functions using OMShell.

Let me go back to OMShell.

/* OMShell */

Type // fill(5,2,2) //

Type fill(within parentheses) 5 (comma) 2 (comma) 2.

This command generates a two by two matrix with all its elements 5.

The first arguments represents element to be filled.

The second argument represents first dimension of the array.

whereas the third argument, that is, 2, represents second dimension of the array.

Hence, using the function fill, one may generate arrays of any dimension with a given number.
Type // zeros(2,2) // Let us use zeros() function to create a (two by two) matrix with all its elements zero.

Type zeros (within parentheses) 2 (comma) and press Enter.

The result is as expected.

Type // identity(3) // Let us now try identity function.

Type identity(3) and press Enter.

Note that it creates a 3 (by) 3 identity matrix.

We can also perform arithmetic operations and use assignment statements in OMShell.
Type // a:=[1,2;3,4] // Let us create two matrices and perform arithmetic operations on them.

Type a (colon) (equals) (within square brackets) 1 (comma) 2 (semicolon) 3 (comma) 4 and press Enter.

Comma is used to separate elements in a row whereas semi-colon is uses to separate rows themselves.

Type // b:=identity(2) // Type b (colon) (equals) identity (within brackets) 2 and press Enter.
Type // a + b // Type a (plus) b and press Enter.

This performs matrix addition.

Type // a * b // Type a (asterisk) b and press Enter.

This performs matrix multiplication.

Type // a .* b // Type a (dot) (asterisk) b.

Press Enter.

This performs element-wise multiplication of the two matrices.

Note that it is not necessary to define data-types of variables used in OMShell.
Let me switch back to the slides.
Slide:

Reduction Functions

Reduction functions take an array as input and return scalar as output.

min() function returns the minimum value in an array.

max() function returns the maximum value in an array.

sum() function returns the sum of all elements in an array.

product() function returns the product of all elements in an array.

Let me switch to OMShell to demonstrate these functions.
x = [3,4;5,6] Let me create a new matrix x.

Type x (colon)(equals) 3 (comma) 4 (semicolon) 5 (comma) 6.

Type // min(x) // Let us apply each one of those functions on x.

Type min (within brackets) x and press Enter.

It returns the minimum value in x.

Type // max(x) // Type max (within brackets) x and press Enter.

It returns the maximum value in x.

Type // sum(x) // Type sum (within brackets) x.

Press Enter.

It returns the sum of all elements in x.

Type // product(x) // Type product (within brackets) x.

Press Enter

It returns the product of all elements in x.

Let me go back to the slides.
Slide:

Miscellaneous functions

Let us now discuss various other functions that take an array as input.

abs() is a function that returns an array with the absolute values of all its elements.

size() returns a vector with the size of each dimension.

ndims() function returns the number of dimensions in an array.

This brings us to the end of this tutorial.

In this tutorial, we used OMShell to interactively demonstrate array functions.

These functions are part of Modelica language specification.

Hence, they may be used while writing classes in OMEdit as well.

Slide:

Assignment

As an assignment, apply abs(), size() and ndims() to an array..

Secondly, we have used a two-dimensional array or matrix as an argument to most of the functions.

As an assignment, implement all these functions with higher dimensional arrays.

This brings us to the end of this tutorial.
Slide:

About the Spoken Tutorial project

Watch the video available at the link shown below.

http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial

Slide:

Spoken Tutorial Workshops

We conducts workshops using spoken tutorials.

Give certificates.

Please contact us.

Slide:

Forum to answer questions

If you have questions in this tutorial, please visit the webpage mentioned.
Slide:

Textbook Companion Project

We coordinate coding of solved examples from popular books.

We give honorarium to contributors.

Please visit our website.

Slide:

Lab Migration Project

We help migrate labs from commercial simulators to OpenModelica.
Slide:

Acknowledgements

Spoken Tutorial Project is supported by NMEICT, MHRD Government of India.
Slide:

Thanks

We thank OpenModelica development team for their support.
Thank you for joining me in this tutorial.

Goodbye!

Contributors and Content Editors

Kaushik Datta, Nancyvarkey