API-интерфейс Fortran Matrix и API-интерфейс Fortran MEX описывают функции, которые можно использовать в шлюзе, и вычислительные процедуры, которые взаимодействуют с программами MATLAB ® и данными в рабочей области MATLAB.
Чтобы использовать эти функции, включите fintrf заголовок, который объявляет точку входа и процедуры интерфейса. Файл находится в вашем папка. Поместите эту инструкцию в исходный файл:matlabroot\extern\include
#include "fintrf.h"
Передача функций Fortran Matrix API mxArray, тип MATLAB, используемый для хранения массивов, в файлы MEX и из них. Примеры использования этих функций см. в разделе .matlabroot/extern/examples/mx
Используйте функции API Fortran MEX для выполнения операций в среде MATLAB. Примеры использования этих функций см. в разделе .matlabroot/extern/examples/mex
В отличие от функций MATLAB, файловые функции MEX не имеют собственной переменной рабочей области. Функции файлов MEX работают в рабочей области вызывающего абонента. Чтобы вычислить строку, используйте mexEvalString. Чтобы получить и поместить переменные в рабочую область вызывающей стороны, используйте mexGetVariable и mexPutVariable функции.
Библиотеки Matrix и MEX используют макросы препроцессора MATLAB
mwSize и mwIndex для межплатформенной гибкости. mwSize представляет значения размера, такие как размеры массива и количество элементов. mwIndex представляет значения индекса, например индексы в массивы.
MATLAB имеет дополнительный макрос препроцессора для файлов Fortran, mwPointer. MATLAB использует уникальный тип данных, mxArray. Поскольку в Fortran невозможно создать тип данных, MATLAB передает специальный идентификатор, созданный mwPointer макрос препроцессора в программу Fortran. Вот как вы получаете информацию о mxArray в собственном типе данных Fortran. Например, можно узнать размер mxArray, определите, является ли она строкой, и посмотрите на содержимое массива. Использовать mwPointer для создания независимого от платформы кода.
Препроцессор Fortran преобразует mwPointer кому integer*4 при создании двоичных MEX-файлов на 32-разрядных платформах и integer*8 при построении на 64-разрядных платформах.
Примечание
Объявление указателя неверным размером может привести к сбою программы.
%val КонструкцияФортран %val( конструкция указывает, что аргумент, arg)arg, передается по значению, а не по ссылке. Большинство, но не все компиляторы Fortran поддерживают %val конструкция.
Если компилятор не поддерживает %val скопируйте значения массива во временный истинный массив Fortran с помощью mxCopy* процедуры (например, mxCopyPtrToReal8).
%val Пример конструкцииЕсли компилятор поддерживает %val конструкция, вы можете использовать подпрограммы, которые указывают непосредственно на данные (то есть указатель, возвращаемый типизированными функциями доступа к данным, как mxGetDoubles или mxGetComplexDoubles). Вы можете использовать %val для передачи содержимого этого указателя в подпрограмму, где он объявляется как матрица двойной точности Фортрана.
Например, рассмотрим подпрограмму шлюза, которая вызывает ее вычислительную подпрограмму, yprimeоколо:
call yprime(%val(yp), %val(t), %val(y))
Если компилятор Fortran не поддерживает %val конструкция, вы бы заменили вызов вычислительной подпрограммы на:
C Copy array pointers to local arrays.
call mxCopyPtrToReal8(t, tr, 1)
call mxCopyPtrToReal8(y, yr, 4)
C
C Call the computational subroutine.
call yprime(ypr, tr, yr)
C
C Copy local array to output array pointer.
call mxCopyReal8ToPtr(ypr, yp, 4)Необходимо также добавить следующую строку объявления в верхней части подпрограммы шлюза:
real*8 ypr(4), tr, yr(4)
Если вы используете mxCopyPtrToReal8 или любой другой mxCopy*, размер массивов, объявленных в подпрограмме шлюза Fortran, должен быть больше или равен размеру входов в MEX-файл, поступающий из MATLAB. В противном случае mxCopyPtrToReal8 работает неправильно.
API матрицы Fortran | Fortran MEX API | mwIndex | mwPointer | mwSize | mxArray