Consider that you are doing vector operation, change your cost function to the following:
(1 / m) * sum(((-y) .* (log(h)) - ((1 - y) .* log((1-h)))));
and your gradient to the following:
grad = (1./m) * (x' * (h - y))
Although the latter is just for precedence reassuring.
Based on the discussion in the chat, although the code calculates the cost in a wrong way, the reason the cost does not decrease is that the data is not linearly separable. Logistic regression is a simple algorithm which classifies successfully linearly separable data. Take a look at [here](https://datascience.stackexchange.com/q/21896/28175).