From: rusin@shavano.math.niu.edu (Dave Rusin) Subject: Re: Injectivity of a function Date: 17 Jun 1999 16:07:14 GMT Newsgroups: sci.math Christian Hauswirth wrote: >How can I check if f: R^3 -> R^3, x -> f(x) is injective? Especially in the >case when f(x) is non-linear. Is there a computer program e.g. Maple or >Mathematica, which can check it? In a followup message he gives details, including >I tried 'solve' with Maple but works only when I replace 'a', 't' and 'f' >with some values (for 't' this doesn't matter). Then (sigma, 0, z) and >(sigma, lambda, 0) gives the same 'f' but this doesn't matter either. I don't know what "doesn't matter" means here: if f(a,0,b)=f(a,c,0) for all a,b,c, then this function is clearly not injective! Could it be that the question is, "Is the function injective on the rest of R^3?" ? This we can address by looking to see if the equation f(x,y,z)=(X,Y,Z) has a unique solution for "generic" (X,Y,Z). The answer is "no". >This is the function: > >(sigma^2,lambda,z^2) -> >( >z^2*lambda*((1-exp(-2*a*t))/(2*a))+sigma^2*(1-exp(-2*a*t))/(2*a), > >3*(sigma^2*((1-exp(-2*a*t))/(2*a)))^2+6*sigma^2*(((1-exp(-2*a*t))/(2*a)))*(z >^2*lambda*((1-exp(-2*a*t))/(2*a)))+lambda*(z^4*((1-exp(-4*a*t))/(4*a)))+3*(z >^2*lambda*((1-exp(-2*a*t))/(2*a)))^2 > >15*(sigma^2*((1-exp(-2*a*t))/(2*a)))^3+15*3*(sigma^2*((1-exp(-2*a*t))/(2*a)) >)^2*z^2*lambda*(((1-exp(-2*a*t))/(2*a)))+15*3*sigma^2*((1-exp(-2*a*t))/(2*a) >)*(3*z^4*lambda*(((1-exp(-4*a*t))/(4*a)))+3*(lambda*z^2*((1-exp(-2*a*t))/(2* >a)))^2)+15*z^6*lambda*(((1-exp(-6*a*t))/(6*a)))+15*z^2*lambda*((1-exp(-2*a*t >))/(2*a))*(z^4*lambda*((1-exp(-4*a*t))/(4*a))+3*(z^2*lambda*(1-exp(-2*a*t))/ >(2*a))^2)+15*lambda^3*z^6*((1-exp(-2*a*t))/(2*a))^3 >) Ugh! First of all, why refer to "sigma^2" at all? That is, if there are no sigma's which are not squared, then why not refer to the first coordinate of the input as simply "x" ? Same with the rest of the input. Next, you have these parameters a and t but they're just fixed constants, and only show up in certain combinations. So let's take your output (the part after the "->") as a 3-vector "output" and simplify. I'll use Maple too: o2:=simplify(output,{sigma^2=x,lambda=y,z^2=z,exp(a*t)=c}); gives a vector of rational functions with constant denominators, so that for any a,t your map is now a _polynomial_ function. This guarantees that (using elimination theory and so on) we'll be able to determine whether your function is one-to-one (eventually). As it turns out, your polynomial is comparatively easy to deal with directly. Very well, let's try to find the inverse function. What would (x,y,z) have to be to make this function yield (X,Y,Z)? Let's first make the first coordinate equal X by solving to see what z would have to be: o3:=factor(subs(z=solve(o2[1]=X,z),o2)); and then solve for y to make the second component take a value Y: o4:=factor(subs(y=solve(o3[2]=Y,y),o3)); Then all you need to do is to determine what x needs to be to make the third component come out to Z; this gives a condition x must satisfy: collect(numer(o4[3]-Z),x); which is pretty grisly; I simplify it a bit here: -4*c^4*(65*X^2+70*X^2*c^2+65*X^2*c^4-50*c^2*X*Y+80*Y^2*c^4-50*c^4*X*Y-12*c^4*Z*X) -4*c^2*(-65*c^4*X+6*c^4*Z-210*c^4*X*Y+25*Y*c^4+420*X^2*c^4-70*X*c^2+25*Y*c^2+420*X^2*c^2-65*X)*(x*(c^2-1)/a) -5*(13*c^4+36*X^2*c^4-12*Y*c^4-306*c^4*X+14*c^2-306*X*c^2+13)*(x*(c^2-1)/a)^2 -15*(23*c^2+36*X*c^2+23)*(x*(c^2-1)/a)^3 +135*(x*(c^2-1)/a)^4 What you're supposed to see is that this is a _quartic_ polynomial in x (or x*(c^2-1)/a, if you wish). It follows that there is _not_ a unique value of x which satisfies this condition: depending on the particular values of (X,Y,Z) (and a and c ) which you're trying to reach, there will be 0, 2, or 4 possible (real) x which meet this condition; any such x then leads to a unique choice of y and z. So no, this function is not even close to injective. dave