В MATLAB каждый MEX-файл реализует одну функцию MATLAB.Однако вы можете написать свою функцию MEX-файла так, чтобы она принимала в качестве первого аргумента строку, которая указывает, какую из ваших функций Fortran вы хотели бы вызвать.Например, у вас будет команда:
out = my_mex_gate('function1', arg1, arg2);
Если вам не нравится синтаксис (я не удивлюсь), поместите этот MEX-файл в подкаталог с именем private
такой, что он недоступен извне каталога, и напишите функции M-файла, которые вызывают ваши личные MEX-файлы:
function out = function1(arg1,arg2)
out = my_mex_gate('function1',arg1,arg2);
Вам все еще нужно написать один M-файл для каждой функции, которую вы хотитевыставлять.Но поскольку эти M-файлы должны содержать также документацию для каждой функции, эти файлы полезны не только для упрощения синтаксиса.
Ваша структура каталогов будет выглядеть следующим образом:
Ftoolbox/
+- function1.m
+- function2.m
+- function3.m
+- private/
+- my_mex_gate.mex
Выберите осмысленное имявместо Ftoolbox
.Затем вы добавляете этот каталог в путь к MATLAB:
addpath /path/to/Ftoolbox
, делая все эти функции доступными в MATLAB, независимо от текущего каталога.
Внутри MEX-файлаточка входа (mexFunction
) проверяет только первый входной аргумент.Исходя из его значения, он будет вызывать одну из ряда внутренних функций.Каждый из этих проверяет и преобразует остальные входные аргументы и вызывает соответствующую функцию Fortran.Эти функции более или менее похожи на индивидуальные mexFunction
s.Следовательно, для различных функций Fortran не требуется иметь одинаковые наборы входных аргументов.
Это пример такого MEX-файла в C ++ , в Fortran вы можете сделать точното же самое.