How to code a MEX file for a function with logical tests on array values
Mostrar comentarios más antiguos
I have the following function coded as an m-file:
_______
function y = phiabs(x)
% returns log((e^|x| + 1)/(e^|x| - 1))
if x < 0
x = -x;
end
if (x >= 1e-12) && (x <= 30.)
z = exp(-x);
y = log((1. + z)/(1. - z));
elseif x > 30
y = 2. * exp(-x);
else
y = log(2./(x + 1e-100));
end
______
If I try to apply it to an array or matrix, the "if" tests give trouble. To code it as a MEX file would involve individual calls to log() and exp() via mexCallMATLAB() for each element. Is there a more efficient way?
Respuesta aceptada
Más respuestas (1)
Jan
el 3 de Abr. de 2014
Instead of calling a MEX function, you could get rid of the problems occurring for the IF statement when processing arrays:
function y = phiabs(x)
x = abs(x);
y = zeros(size(x));
idx = (x > 30);
y(idx) = 2.0 * exp(-x(idx));
idx = ~idx & x >= 1e-12;
z = exp(-x(idx));
y(idx) = log((1 + z) ./ (1 - z));
idx = (x < 1e-12);
y(idx) = log(2 / (x(idx) + 1e-100));
end
Categorías
Más información sobre Write C Functions Callable from MATLAB (MEX Files) en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!