Матричный API Фортрана и API Фортрана MEX описывают функции, которые можно использовать в шлюзе и вычислительных процедурах, которые взаимодействуют с программами MATLAB® и данными в рабочем пространстве MATLAB.
Чтобы использовать эти функции, включайте fintrf
заголовок, который объявляет точку входа и интерфейсные стандартные программы. Файл находится в вашем
папка. Поместите этот оператор в свой исходный файл:matlabroot
\extern\include
#include "fintrf.h"
Используйте Матричные API-функции Фортрана, чтобы передать mxArray
, тип использование MATLAB, чтобы сохранить массивы, к и от файлов MEX. Для примеров с помощью этих функций смотрите
.matlabroot
/extern/examples/mx
Используйте API-функции Фортрана MEX, чтобы выполнить операции в среде MATLAB. Для примеров с помощью этих функций смотрите
.matlabroot
/extern/examples/mex
В отличие от функций MATLAB, функции файла MEX не имеют своей собственной переменной рабочей области. Функции файла MEX действуют в рабочей области вызывающей стороны. Чтобы оценить строку, использовать mexEvalString
. Чтобы получить и поместить переменные в рабочую область вызывающей стороны, используйте mexGetVariable
и mexPutVariable
функции.
Библиотеки Matrix и MEX используют preprocessor macros MATLAB
mwSize
и mwIndex
для кросс-платформенной гибкости. mwSize
представляет значения размера, такие как измерения массива и число элементов. mwIndex
представляет значения индекса, такие как индексы в массивы.
MATLAB имеет дополнительный макрос препроцессора для файлов Фортрана, mwPointer
. MATLAB использует уникальный тип данных, mxArray
. Поскольку вы не можете создать тип данных на Фортране, MATLAB передает специальный идентификатор, созданный mwPointer
макрос препроцессора, к программе Фортрана. Это - то, как вы получаете информацию о mxArray
в нативном типе данных Фортрана. Например, можно узнать размер mxArray
, определите, является ли это строкой, и посмотрите на содержимое массива. Использование mwPointer
создавать платформенно независимый код.
Препроцессор Фортрана преобразует mwPointer
к integer*4
при создании бинарных файлов MEX на 32-битных платформах и к integer*8
при построении на 64-битных платформах.
Примечание
Объявление, что указатель неправильный размер, может заставить вашу программу отказывать.
%val
Фортрана
СоздатьФортран %val (
построение указывает что аргумент, arg
)arg
, должен быть передан значением, вместо ссылкой. Большинство, но не все, компиляторы Фортрана поддерживает %val
создать.
Если ваш компилятор не поддерживает %val
создайте, скопируйте значения массивов во временный истинный массив Фортрана с помощью mxCopy
* стандартные программы (например, mxCopyPtrToReal8
).
%val
Создайте примерЕсли ваш компилятор поддерживает %val
создайте, можно использовать стандартные программы, которые указывают непосредственно на данные (то есть, указатель, возвращенный введенными функциями доступа к данным как mxGetDoubles
или mxGetComplexDoubles
). Можно использовать %val
передать содержимое этого указателя на стандартную подпрограмму, где это объявляется как Фортран матрица с двойной точностью.
Например, рассмотрите стандартную программу шлюза, которая вызывает ее вычислительную процедуру, yprime
:
call yprime(%val(yp), %val(t), %val(y))
Если ваш компилятор Фортрана не поддерживает %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
* стандартные программы, размер массивов, объявленных в стандартной программе шлюза Фортрана, должен быть больше или быть равен размеру входных параметров к файлу MEX, входящему из MATLAB. В противном случае, mxCopyPtrToReal8
не работает правильно.
Матричный API Фортрана | API Фортрана MEX | mwIndex
| mwPointer
| mwSize
| mxArray