コード拝見しましたが、2点ほど気になる点があります。
1.rLがベクトルなので、xもベクトルになってしまう。結果としてDもベクトルになってしまう。
D<=0という条件でのwhileなので、おそらくDは単一の数字(スカラ)を想定されているのではないかと思います。ですが現在の仕様だと初期値ではスカラなのにwhile文が始まったらベクトルに書き換わっています。これは想定通りでしょうか?
2.whie文の中をみると常に同じ計算が繰り返されるだけで値が更新されない
whileループの中を見てみますと、演算をしている部分は次の3行です。
x=p;
x=x+rL;
D=abs(p)-abs(x);
これが繰り返されることになりますので、毎度同じ結果が出ることになります。おそらくpがループの度に更新されるべきだと思うのですが、いかがでしょうか。