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

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

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

#include "fintrf.h"

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

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

Библиотека MEX

Используйте функции MEX API на языке Фортран для выполнения операций в среде 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 не работает правильно.

См. также

| | | | |