# Working with functions

## Contents

# Introduction

One of the great things about Rave is that it can work not only with static data sets, but with functions of variables that appear in data sets. For example, if you load a data set that contains a variable called "Weight (lbs)", you can easily create a new variable called "Weight (kg)" whose values are equal to Weight (lbs) / 2.2046. If later the values for the variable Weight (lbs) change, the values for Weight (kg) will automatically update to reflect that change, because the two are functionally related.

The above example is an extremely simple function. In general there is no limit to how complicated your function can be, although if the function takes a long time to run it may be impractical for some applications. Functions can have multiple variables as inputs, and may have other functional variables as inputs as well (for example, y = f(x), z = g(y)).

An important limitation, however, is that the relations between your variables must form a "directed acyclic graph". Put simply, this means that each functional variable must be able to be represented as a function of only independent variables in the data set (although as described above, your actual implementation may involve other functional variables). Functions that form a "circular logic" loop are not allowed (for example y=f(z), z=g(y) ).

# Functions vs. Functional Variables

A **functional variable** is a variable in Rave whose value is calculated by a function. A "function" in this context is a MATLAB .m function file, in particular it is a MATLAB file that calculates the functional variable as one of its outputs. You create functional variables in Rave by loading functions into Rave or by creating functions using Rave. Note that if you create the function using Rave, the actual MATLAB function file will get created "behind the scenes" and you will typically never directly view or edit the function file.

The sections below describe the two ways of creating functional variables: loading functions, and creating functions.

# Loading Functions into Rave

Rave can load two types of functions: plain text functions, and MATLAB .m file functions. Plain text functions are limited to fairly simple mathematical expressions, whereas MATLAB .m file functions can do almost anything.

In either case, the functions must be of the form: [one ore more functional variables ] = *function of*(one or more Rave variables)

The important thing here is that the inputs to the function must be variables that exist in your data set at the time you load the function. This limitation automatically ensures that your network of functions obeys the "directed acyclic graph" constraint. For example, it is impossible to load two functions y=f(z) and z=g(y), because the input variable of whichever function you attempt to load first would not yet exist as a variable in Rave.

In all cases, functions are loaded from the Model Tab. Follow the link to the model tab for a description of the buttons that appear on that tab.

- See User-Supplied Matlab Function Formats for information on using Matlab functions in Rave.
- See User-Supplied Plain Text Function Formats for information on using plain text functions in Rave.

# Creating Functions within Rave

Rave can create functions from your data. These functions are called "surrogate models". See the Surrogate modeling page for more information.

# Objective Functions

Objective functions are a special type of function whose inputs include not only variables in your data set, but also preferences and targets for those variables. Objective functions are used in multi-attribute decision making applications. Generally, objective functions are relatively simple algebraic functions of variables in your data set that aggregate physically meaningful variables such as "Weight" and "Cost" into more abstract ranking variables such as "Overall Goodness".

Objective functions can be created by clicking the "Create New Objective Fcn" button on the Model Tab. This opens the "Create New Objective Fcn" gui, which comes with built-in templates that help you automatically generate code for these functions.

Objective functions are similar to general user-supplied functions, with the following exceptions:

- Objective functions get recalculated whenever the user changes the data set, the preferences or the targets. General user-supplied functions only get recalculated when the user changes the data set. Consequently, any function that uses Preferences or Targets should be set as an Objective function.

# Modifying Functions

If you need to modify the function that is used to calculate a variable:

- Go to the main table view.
- On the View tab, ensure that the correct data set is selected and that the functional variable whose function you want to modify is displayed in the table.
- The column headers of functional variables are blue. Double click any blue variable name in a column header to open its function in the MATLAB editor.
- Make any changes to the function and save the function.
- On the Manage tab, open the Manage data GUI.
- Select the appropriate data set from the menu in the bottom half of the window.
- Click the "Reevaluate functions" button.