0001 function y = tanh(xin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 if ~isreal(xin)
0014 tr = tanh(real(xin));
0015 ti = i*tan(imag(xin));
0016 y = (tr + ti)./(1 + tr.*ti);
0017
0018
0019 else
0020
0021
0022
0023
0024 xbig = 18.715;
0025 xmid = 0.5493061443340549;
0026 xsmall = 1.49e-8;
0027 x = abs(xin);
0028 y = zeros(size(x));
0029
0030
0031 k = find(xbig <= x);
0032 if ~isempty(k)
0033 y(k) = ones(size(find(k)));
0034 end
0035
0036
0037 k = find((xmid < x) & (x < xbig));
0038 if ~isempty(k)
0039 y(k) = 1 - 2./(exp(2*x(k))+1);
0040 end
0041
0042
0043 k = find((xsmall < x) & (x <= xmid));
0044 if ~isempty(k)
0045 p = [-0.16134119023996228e4 -0.99225929672236083e2 -0.96437492777225470];
0046 q = [0.48402357071988689e4 0.22337720718962313e4 0.11274474380534949e3];
0047 xx = x(k).^2;
0048 y(k) = x(k) + x(k).*(xx.*(((p(3)*xx + p(2)).*xx + p(1))) ./ ...
0049 (((xx + q(3)).*xx + q(2)).*xx + q(1)));
0050 end
0051
0052
0053 k = find((x <= xsmall) | isnan(x));
0054 if ~isempty(k)
0055 y(k) = x(k);
0056 end
0057
0058 y = sign(xin).*y;
0059 end