Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to arrange matlab code?

Tags:

matlab

Let's say I have some MATLAB code that uses some functions. I don't want to define the functions in the same file as the code that uses the functions.

On the other hand, the solution of making an m file for each function is also not good for me because I don't want a lot of files. What I want is something like a utils file that holds those functions, from which I can import the functions like we do in python, for example.

What would you recommend?

like image 400
yaron Avatar asked Oct 23 '15 11:10

yaron


2 Answers

What you probably want is to use a package, which is kind of like a python module in that it is a folder that can hold multiple files. You do this by putting a + at the beginning of the folder name, like +mypackage. You can then access the functions and classes in the folder using package.function notation similar to Python without it polluting the global list of functions (only the package is added to the global list, rather than every function in it). You can also import individual functions or classes. However, you always have to use the full function path, there is no such thing as relative paths like in Python.

However, if you really want multiple functions per file, probably the best you can do is create a top-level function that returns a struct of function handles for the other functions in the file, and then access the function handles from that struct. Since MATLAB doesn't require the use of () with functions that don't require any inputs, this would superficially behave similarly to a python module (although I don't know how it will affect performance).

I know this is a pain in the neck. There is no reason mathworks couldn't allow using files as packages like they currently do for folders, such as by putting + at the beginning of the file name. But they don't.

like image 187
TheBlackCat Avatar answered Oct 06 '22 03:10

TheBlackCat


A solution close to what you are looking for could be the use of classes. A class contains methods that can be public (visible from outside) or private (only visible from inside). Implementations of the methods of a class can be either in multiple files or in the same file.

Here is a simplistic example

classdef Class1
    methods (Static)
        function Hello
            disp('hello');
        end

        function x = Add(a,b)
            x = Class1.AddInternal(a,b);
        end
    end

    methods (Static, Access=private)
        function x = AddInternal(a,b)
            x = a+ b;
        end
    end
end

Example of use-:

>> Class1.Hello
hello
>> Class1.Add(1,2)

ans =

     3

>> Class1.AddInternal(2,3)
Error using Class1.AddInternal
Cannot access method 'AddInternal' in class 'Class1'.
like image 20
gregswiss Avatar answered Oct 06 '22 04:10

gregswiss