Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Manejar los datos complejos de Fortran

Para copiar valores de datos complejos entre una matriz Fortran y una matriz, llame a las funciones.MATLAB®mxCopyComplex16ToPtrmxCopyPtrToComplex16mxCopyComplex8ToPtrmxCopyPtrToComplex8 El ejemplo convec.F toma dos vectores de fila y los convoluciona.COMPLEX*16 Este ejemplo utiliza la versión compleja intercalada de la API de Fortran Matrix y asume una comprensión básica de los archivos MEX como se describe en.Crear archivo Fortran Source MEX

Estas instrucciones copian datos definidos por matrices de entrada y en variables de Fortran y se definen como matrices.prhs(1)prhs(2)xycomplex*16

C     Load the data into Fortran arrays(native COMPLEX data).       status =       +   mxCopyPtrToComplex16(mxGetComplexDoubles(prhs(1)),x,nx)       if (status .ne. 1) then             call mexErrMsgIdAndTxt (      +              'MATLAB:convec:CopyingFailed',      +              'Could not copy from prhs(1) to complex*16.')       endif        status =      +   mxCopyPtrToComplex16(mxGetComplexDoubles(prhs(2)),y,ny)        if (status .ne. 1) then             call mexErrMsgIdAndTxt (      +              'MATLAB:convec:CopyingFailed',      +              'Could not copy from prhs(2) to complex*16.')       endif 

Llama a la subrutina.convec

      call convec(x,y,z,nx,ny)

Copie los resultados en la matriz de salida.MATLABplhs(1)

C     Load the output into a MATLAB array.       status =      +   mxCopyComplex16ToPtr(z,mxGetComplexDoubles(plhs(1)),nz)       if (status .ne. 1) then             call mexErrMsgIdAndTxt (      +              'MATLAB:convec:CopyingFailed',      +              'Could not copy from complex*16 to plhs(1).')       endif 

Compile y pruebe

Compruebe que tiene instalado un compilador de Fortran.

mex -setup fortran

Copie el archivo en una carpeta de escritura.convec.F

copyfile(fullfile(matlabroot,'extern','examples','refbook','convec.F'),'.','f')

Compile el archivo.

mex -R2018a convec.F

Pruebe el archivo MEX.

x = [3.000 - 1.000i, 4.000 + 2.000i, 7.000 - 3.000i]; y = [8.000 - 6.000i, 12.000 + 16.000i, 40.000 - 42.000i]; z = convec(x,y)
z =    1.0e+02 *  Columns 1 through 4   0.1800 - 0.2600i 0.9600 + 0.2800i 1.3200 - 1.4400i 3.7600 - 0.1200i  Column 5   1.5400 - 4.1400i

Compare los resultados con la función incorporada.MATLABconv

conv(x,y)

Consulte también

Temas relacionados