In my case,
I use 이해하다, when I understand something in my own. Maybe common meaning of 'understand'
I ask the question to my teacher and my teacher teaches me how to solve this problem, the I say to my teacher "나는 이해했어요"
I use 이해가다. It is similar, but little bit different. This word is used in the other people's case.
When I heard the conflict between A and B. I heard the A's situation and I understand A's situation, then I say "A의 상황이 이해간다."
이해하다. I understand some situation that is related with my case.
이해가다. I understand some situation that is related with the other people's case.
ex)
나는 그의 마음을 이해한다. I understand his mind in my words.
나는 그의 마음이 이해간다. I understand his mind in his case that I think I am in his mind.
여러분 이해했습니까? / 너 이해했어? Do you understand this?(The talker want to know the people understand)
여러분 이해가 갑니까? /너 이해가 가?You understand this?(The talker consider the people's considering)
I think '너 이해했어?' is more positive and polite in this case