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

Матричная Библиотека и Библиотека MEX описывают функции, которые можно использовать в шлюзе и вычислительных процедурах, которые взаимодействуют с программами MATLAB® и данными в рабочем пространстве MATLAB. Эти библиотеки являются частью C/C++ MATLAB и библиотеки Fortran API Reference.

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

#include "fintrf.h"

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

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

Библиотека MEX

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

В отличие от функций MATLAB, функции файла MEX не имеют своей собственной переменной рабочей области. Функции файла MEX действуют в рабочей области вызывающей стороны. Чтобы оценить строку, используйте mexEvalString. Чтобы получить и поместить переменные в рабочую область вызывающей стороны, используйте функции mexPutVariable и mexGetVariable.

Макросы препроцессора

Библиотеки 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 не работает правильно.

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

| | | | |