# User-Supplied Matlab Function Formats

Rave can run any MATLAB function as long as it obeys some not-very-constraining rules about the function definition line, (i.e. the first line of the function).

Otherwise, you have complete freedom regarding what happens in the body of the function. You can even call external programs, for example using the "system" function, and you can read/write files if necessary.

The constraints Rave places on the function definition line relate to how you specify the inputs to the function. This is because Rave needs to be able to parse your function and determine what data to send it and how to send the data.

You have three options for what you use as the function definition line. Regardless of which option you use, the functional variable names must appear as outputs of the function. Rave will use the names of the function's outputs as the names of the corresponding functional variables. The name of the function itself (i.e. the .m file name) does not matter as long as it is a legal matlab function name (i.e. must begin with a letter and cannot contain spaces or symbols other than _ ).

The three options are:

#### Variable Names as Inputs

You can use the input variable's names as the inputs to the function. An obvious constraint in this case is that the variable names must be legal MATLAB variable names. For example, the following function definition would work:

function [y,z]=myFunction(x1,x2)

This function calculates two functional variables (y, z) as functions of two existing variables, x1,x2. The order in which the input variables are listed does not matter. You could also use:

function [y,z]=myFunction(x2,x1)

The order of the outputs matters insofar as any time Rave lists the variable names they will appear in the same order in which they appeared in the function definition.

#### Single-Input Format

An alternative option is to specify a single input to the function. When you import the function, Rave will ask which variables to use as inputs to the function. The actual input data that Rave sends the function will then be an array in which each column represents one variable in your data set.

The benefit of this format is that it places no restrictions on your variable names; they do not need to be legal MATLAB variable names. However it can be more difficult to implement this type of function because you need to ensure that your code correctly deals the columns of the input array to variables.

**Example:**

Consider the data set:

Case Number,Thrust,Payload,Range1,Range2,FPR,LPCPR,OPR,T4max,Vratio,Loading,HPT Stages 1,28000,39000,250,2000,1.5,2.2,30,3125,1.8,0.2,1 2,28000,39000,250,2000,1.5,2.2,30,3125,1.8,0.3,1 3,28000,39000,250,2000,1.5,2.2,30,3125,1.87,0.2,1 ... ... ... ... ... ... ... ... ... ... ... ... ...

And suppose we have a function that calculates five output variables

Fan_Diameter Max_Range TOFL TSFC Engine_Weight

as functions of six of the independent variables:

FPR, LPCPR, OPR, T4max, Vratio, Loading

The function definition using the Variable Names as Inputs syntax would look like:

function [Fan_Diameter Max_Range TOFL TSFC Engine_Weight]=myFunction(FPR,LPCPR,OPR,T4max,Vratio,Loading)

The function definition using the Single Inputs syntax would look like:

function [Fan_Diameter Max_Range TOFL TSFC Engine_Weight]=myFunction(inputs)

where we have chosen to name the array of input data "inputs". (You can use any name you like, as long as it is not also the name of a variable in the data set. For example we could not have called it "FPR" in this example.)

Later in the function, you would need to turn the columns of *inputs* into individual variables. The variables appear in the columns that match their order in the data set. Referring to the data set excerpt above, we see that FPR is the 6th variable (after Case Number,Thrust,Payload,Range1,Range2) thus the values of FPR will be in the 6th column of the *inputs* array.

FPR=inputs(:,6); LPCPR=inputs(:,7); OPR=inputs(:,8); T4max=inputs(:,9); Vratio=inputs(:,10); Loading=inputs(:,11);