How to code a MEX file for a function with logical tests on array values

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?

 채택된 답변

David
David 2014년 4월 3일

0 개 추천

Solved my problem - used the C math library exp() and log() functions in the MEX .c file. Seemed like cheating to not call the Matlab functions, but it works.

추가 답변 (1개)

Jan
Jan 2014년 4월 3일
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

카테고리

도움말 센터File Exchange에서 Write C Functions Callable from MATLAB (MEX Files)에 대해 자세히 알아보기

제품

태그

질문:

2014년 4월 3일

답변:

Jan
2014년 4월 3일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by