Self-adaptive software can change its own behavior in order to achieve an intended objective in a changing environment. Consequently, self-adaptive software requires practical runtime verification and validation. We propose an approach for runtime verification of self-adaptive software by using a designed transition system model. The proposed approach consists of two phases: pre-computing phase and runtime phase. In the precomputing phase, we assume that the self-adaptive software is designed as a transition system. In this phase, the proposed approach translates the designed transition system into equations for runtime verification. For translation, we suggest an algorithm based on state elimination and reachability. After the pre-computing phase, the results of the translated equations are verified in the runtime phase. In order to demonstrate the suitability of our proposed approach, we performed experiments to evaluate the performance of the pre-processing phase and the runtime phase. In comparison with other model-checking tools, our approach achieved excellent results.