# How to find/parameterize vector perpendicular to circle of constant $\ell_p$ norm

This should be very easy, but I can't get my head around it: given $1\leq p < \infty$, and a point x with $\|x\|_p = 1$, how do I get a (or the unit, or any) vector which is perpendicular to the $\ell_p$-circle of all $\{s : \|s\|_p = 1$} at that point $x$? I'm more than happy with even just 2D - I tried parameterizing the circle of unit $\ell_p$ norm, then parameterizing whatever is perpendicular to it by setting the scalar product to zero, and then filling in a certain point, but somehow I never end up with a meaningful equation :/

Clearly, for $p=1$ it is always on the diagonal. For $p=2$, it always is collinear with the point $x$. But what about all other cases of $p$ - what relation holds between $x$ and the perpendicular vector at that point? What's the best approach even - parameterization and simple analysis, or tangent and cotangent spaces, differential analysis, or how would one even start?

UPDATE:

Thanks a lot to anon and Leonid. The gradient of the norm was simply what i was looking for. Since I don't even care about the length and am in the positive orthant, I can simply take $y_i = x_i^{p-1}$. Also, I quickly verified in Python/Reinteract2, quick code is below, also image for $p=3.82$. It seems to do exactly what I needed, and is correct for $p=1$ and $p=2$ by intuition. Thanks again.

from refigure2 import *
from numpy import *
import math

ps = linspace(1.2,6,12)
t = linspace(0,1, 21)
x = zeros(len(t))
y = zeros(len(t))
dx = zeros(len(t))
dy = zeros(len(t))

for i in xrange(len(ps)):
p = ps[i]
for i in xrange(len(t)):
x[i] = t[i]
y[i] = 1.0-t[i]
pnorm = (x[i]**p+y[i]**p)**(1.0/p)
x[i] = x[i]/pnorm
y[i] = y[i]/pnorm
dx[i] = x[i]**(p-1)
dy[i] = y[i]**(p-1)

with figure() as f:
ax.plot(x,y)
for i in xrange(len(t)):
ax.plot([x[i],x[i]+dx[i]],[y[i],y[i]+dy[i]],c='r')
ax.axis([0,1.1,0,1.1])
f


And here a Resulting plot sample.

UPDATE2: Ah, i see - I forgot to mention that i'm only interested in the positive orthant. Thanks for clarifying, leonid.

-
As a level set of $f(x)=\|x\|_p$, the gradient $\nabla f$ is always normal to it. – anon May 16 '12 at 23:42
Of course, $x_i^{p-1}$ works only if the coordinates are nonnegative; in general it's $|x_i|^{p-2}x_i$. – user31373 May 17 '12 at 15:51

What you are looking for is called a norming functional for $x$. By definition, this is an element $y$ of the dual space $\ell_p^*=\ell^q$ (here $q=p/(p-1)$) such that $\|y\|_q=1$ and $\langle x,y\rangle =1$. The brackets denote the pairing $\langle x,y\rangle = \sum x_iy_i$.
As was already suggested, taking the gradient of the norm gives you such a vector (when the gradient exists). Explicitly, $y_i=|x_i|^{p-2} x_i$ for all $i$: you should check that this works. Exception: if $p=1$ and $x_i=0$, we can take any $y_i\in [-1,1]$.