The code performs original two tailed Mann-Kendall test. It tests the null hypothesis of trend absence in the vector V, against the alternative of trend.
The result of the test is returned in H = 1 indicates a rejection of the null hypothesis at the alpha significance level. H = 0 indicates a failure to reject the null hypothesis at the alpha significance level.

Hi everyone! I'm working with a 34 years of annual rainfall data. I have 11299 points (latitude and longitude) that cover all Brazil's territory. How can I apply this function for each point? First column represent the year of observation and the others represent each point. So I have a variable with 34x11300 values. How can I solve this? Thank you!!!

I'm working with a time series that have NaNs and I need to test it with the MK test, but at this moment I have any idea how use this code with my data since always gives me H = 0 and p_value=NaN. You have any idea how I can solve my problem?

function[H,p_value]=Mann_Kendall(V,alpha)
V=reshape(V,length(V),1);
alpha = alpha/2; %
n=length(V);
S=0;
for i=1:n-1
S = S + sum(sign(V(i+1:n) - V(i)));
end
h=1;
while ~isempty(V)
g=find(V==V(1));
tp=length(g);
Sum(h)=tp*(tp-1)*(2*tp+5); %#ok<AGROW>
V(g)= [];
h=h+1;
end
VarS=((n*(n-1)*(2*n+5))-sum(Sum))/18;
%Standard deviation
De=sqrt(VarS);
if S>=0;
z= ((S-1)/De)*(S~=0);
else
z= ((S+1)/De);
end
p_value=2*(1-normcdf(abs(z),0,1)); % tail on both sides
pz=norminv(1-alpha,0,1);
H=abs(z)>pz;
return

Can anyone help me please? I have tried different types of vectors and it doesn't work. I am getting two errors, first:

??? Undefined function or method 'Sqrt' for input arguments of type 'double'
and then too many outputs.
I would really appreciate if anyone could tell me an example of the vectors and if there is any other mistake. Thanks

V=reshape(V,length(V),1);
alpha = alpha/2; %
n=length(V);
i=0;S=0;
for i=1:n-1
S = S + sum(sign(V(i+1:n) - V(i)));
end
h=1;
while ~isempty(V)
g=find(V==V(1));
tp=length(g);
Sum(h)=tp*(tp-1)*(2*tp+5);
V(g)= [];
h=h+1;
end
VarS=((n*(n-1)*(2*n-5))-sum(Sum))/18;
%Standard deviation
De=Sqrt(VarS);
If S>=0;
Z= ((S-1)/De)*(S~=0);
else
z= ((S+1)/De);
end
p_value=2*(1-normcdf(abs(z),0,1)); % tail on both sides
pz=norminv(1-alpha,0,1);
H=abs(z)>pz;
return

Hi Simone,
First of all thank you. I've made some minor change to your code as follow,to include tied groups in Calculating the variance:
after line 48:
% Determining the variance (tied group included)
h=1;
while ~isempty(V)
g=find(V==V(1));
tp=length(g);
Sum(h)=tp*(tp-1)*(2*tp+5);
V(g)=[];
h=h+1;
end
VarS=((n*(n-1)*(2*n+5))-sum(Sum))/18;

It is working very well and is very convenient to use since it returns the result of the hypothesis test, not just the test statistic. But: the alternative of S = 0 --> Z = 0 is not accounted for if I'm right.

For future updates I would also wish for a default significance level (for convenience). And perhaps a mention in the help text that there should be no autocorrelation in residuals.