How to choose the correct kernel? I know linear is fastest, but when should we use another one? Only if the accuracy is too low or is there some other way to program automatic selection of the correct kernel?
The best approach is always to start with a linear kernel. If you are dealing with large data sets (hundreds of thousands of instances in thousands of dimensions) you will probably want to use specialized linear packages (e.g. LIBLINEAR) or ensemble methods (EnsembleSVM). Note that the latter does not have a proper matlab interface yet.
If you have high-dimensional sparse data, the linear kernel will usually perform very well, even in comparison with more complex kernels.
In general, if your accuracy with a linear kernel does not suffice, the best option is to use an RBF kernel. They are known to perform very well on most data sets. You will need to tune the kernel parameter gamma when you switch to RBF kernels, though.
Secondly, is there an efficient way to tune SVM in matlab?
Yes! LIBSVM provides k-fold cross-validation using the -v k flag during training. When you provide this option, the training will yield cross-validated accuracy (classification) or mse (regression) instead of a model. You will still need to loop over the parameter tuples, though.