Матричная Библиотека и Библиотека MEX описывают функции, которые можно использовать в шлюзе и вычислительных процедурах, которые взаимодействуют с программами MATLAB® и данными в MATLAB workspace. Эти библиотеки являются частью C/C++ MATLAB и библиотеки Fortran API Reference.
Чтобы использовать эти функции, включайте заголовок fintrf
, который объявляет точку входа и интерфейсные стандартные программы. Файл находится в вашей папке
. Поместите этот оператор в свой исходный файл:matlabroot\extern\include
#include "fintrf.h"
Используйте Матричные Библиотечные функции Фортрана, чтобы передать mxArray
, тип использование MATLAB, чтобы сохранить массивы, к и от файлов MEX. Для примеров с помощью этих функций смотрите
.matlabroot/extern/examples/mx
Используйте Библиотечные функции MEX, чтобы выполнить операции в среде MATLAB. Для примеров с помощью этих функций смотрите
.matlabroot/extern/examples/mex
В отличие от функций MATLAB, функции файла MEX не имеют своей собственной переменной рабочей области. Функции файла MEX действуют в рабочей области вызывающей стороны. Чтобы оценить строку, используйте mexEvalString
. Чтобы получить и поместить переменные в рабочую область вызывающей стороны, используйте функции mexPutVariable
и mexGetVariable
.
Библиотеки Matrix и MEX используют макросы препроцессора 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
, можно использовать стандартные программы, которые указывают непосредственно на данные (то есть, указатель, возвращенный mxGetPr
или mxGetPi
). Можно использовать %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
не работает правильно.
C API MEX | Матричный API Фортрана | mwIndex
| mwPointer
| mwSize
| mxArray