Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?


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 = f.add_subplot(111, aspect='equal')
        for i in xrange(len(t)):

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.

share|cite|improve this question
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
up vote 1 down vote accepted

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]$.

share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.