It seems like you have to start by writing the function to compute RMSE for a given set of parameter values, e.g.,
function thisRMSE = myRMSE(x)
After you have that, you can use fminsearch, which will probably do a better job of finding the minimum RMSE than a random walk.
StartingGuess = [0.5, 0.38, ...
[BestGuess, BestRMSE] = fminsearch(myRMSE,StartingGuess);
If the solution space is nasty, there is a good chance that fminsearch will get caught in a local minimum (as too would your random walk process). The only thing you can do about that is to run fminsearch repeatedly from lots of different starting guess vectors, keeping whichever final 'BestGuess' really produces the lowest RMSE. You could even do that in a loop, generating the different starting guesses randomly.