On 28 May 2006, at 10:03, DOD wrote:
> I don't have a very good idea on the guts of Solve, or what its
> reasonable to expect from mathematica, but here's what I want: T is
> the solution to
>
> d x^n + (1-d) x^2 == c
>
> Where n, d and c are parameters of my model. Now, it's very clear
> what
> this solution looks like; as we vary d the solution 'slides' from the
> easy-to-solve-in-a-closed-form solutions to
>
> x^n=c
>
> and
>
> x^2=c,
>
> that is, x=c^{1/2} and x=c^{1/n}.
This is clearly not true. Suppose A is a solution of the first
equation, i.e. A^n==c and B of the second, i.e. B^2==C. Then it is
not true that d A + (1-d) B is a solution of d x^n + (1-d) x^2 == c.
> So I know what the solution looks
> like, but when I leave it in symbolic form, Solve doesn't like it, and
> says it's fundamentally not algebraic. I presume this is because the
> number of roots depends on n, which isn't given, so Solve panics. But
> I only really care about the real solution between 0 and 1- is there
> any way to get the form of this solution as a function of both n
> and c?
No. Basically you are looking at a transcendental equation and the
only "closed form solutions" such equations sometimes have are given
in terms of various special functions, which themselves are usually
defined as solutions of certain equations etc. There are no such
functions that apply to this case.
In any case your analysis of the geometry of the solution set is
wrong. Even if you are interested only in solutions between 0 and 1
such solutions will exist only for certain c (between 0 and 1). To
see that consider the family of curves given by two parametric
equations:
x==t^n and y== t^2. When t is between 0 and 1 these curves lie
entirely in the unit square 0<=x<=1, 0<=y<=1. Here is a graph of
these curves for values of n between 1 and 20:
g = Show[Table[ParametricPlot[{t^n, t^2}, {t, 0, 1}, DisplayFunction -
> Identity], {n, 1, 20}],
DisplayFunction -> $DisplayFunction, PlotRange -> All];
We look at the intersection of these curves with straight lines of
the form:
d x + (1-d) y == c. Assuming that d != 1 we can write them as in the
form y(c - d*x)/(1 - d). Here is a function that for a given c
produces a family of such lines corresponding to values of d sliding
from 0 towards 1:
h[c_] := Table[Plot[(c - d*x)/(1 - d), {x, 0, 1}, PlotStyle ->
RGBColor[1, 0, 0],
DisplayFunction -> Identity], {d, 0, 0.9, 0.05}]
You can see now what happens for c between 0 and 1, for example c=0.3:
Show[g, h[0.3],
DisplayFunction -> $DisplayFunction, PlotRange -> {{0, 1}, {0, 1}}]
For a fixed n, the solutions are just the intersections between the
straight lines and the curves. As long as d stays between 0 and 1 you
will always get a unique solution for each n. On the other hand, for
c outside the interval 0<=c<=1 and 0<=d <= 1 we get no solutions:
Show[g, h[2], DisplayFunction -> $DisplayFunction, PlotRange -> {{
0, 1}, {0, 1}}]
Show[g, h[-1], DisplayFunction -> $DisplayFunction, PlotRange -> {{
0, 1}, {0, 1}}]
All of the above can be proved by using Reduce instead of pictures.
If d is not constrained to lie between 0 and 1 the set of solutions
is harder to describe. For certain values of d and certain n you may
get 2 solutions in the rectangle, for others no solution at all. All
of this can be illustrated graphically and computed numerically. For
a given d, and a range of values of n, say between 1 and 20, you can
construct an interpolating function that will give you approximate
solutions as functions of n and c. Here is a a quick and rough way to
do this. Suppose
d = 0.5;
We first construct a family of InterpolatingFunctions f[c] as follows:
f[c_?NumericQ] := Interpolation[Table[{n, x /. FindRoot[d x^n + (1 -
d) x^2 == c, {x, 0.5}]}, {n, 1, 20}]]
And now , we construct an InterpolatingFunction of two variables as
follows:
F = FunctionInterpolation[f[c][n], {n, 1, 20}, {c, 0, 1}]
Now for a given 1<= n<=20 , say n=11 and a given 0<=c<1, say c = 0.7
we can find an approaximate solution simply by evaluatign
p=F[11,0.7]
0.941296
Let's check using the given value of d:
d*p^11 + (1 - d)*p^2 - 0.7
0.00003282660762082834
which is not too bad.
Andrzej Kozlowski
Tokyo, Japan