MATLAB библиотеки API Фортрана

Матричный API Фортрана и API Фортрана MEX описывают функции, которые можно использовать в шлюзе и вычислительных процедурах, которые взаимодействуют с программами MATLAB® и данными в рабочем пространстве MATLAB.

Чтобы использовать эти функции, включайте fintrf заголовок, который объявляет точку входа и интерфейсные стандартные программы. Файл находится в вашем matlabroot\extern\include папка. Поместите этот оператор в свой исходный файл:

#include "fintrf.h"

Матричная библиотека

Используйте Матричные API-функции Фортрана, чтобы передать mxArray, тип использование MATLAB, чтобы сохранить массивы, к и от файлов MEX. Для примеров с помощью этих функций смотрите matlabroot/extern/examples/mx.

Библиотека MEX

Используйте 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 не работает правильно.

Смотрите также

| | | | |