1 | initial version |
Warming up:
First of all let us compute the maximum for some explicit values of $b$.
Let's take the small list $0,1,1/2$.
I need this as a final control later.
Only for the function $f$ with smaller degree in the sequel. The more complicated function may be attacked using a similar scheme. (But the higher degree...)
var( 'x,b' );
f(x,b) = (1-x)^2 * x * ( 1 -2*b*x + x^2 )
for B in [ 0, 1, 1/2 ]:
print "b =", B
relList = [ xrel
for xrel, mul in diff(f,x)(x,B).roots( ring=SR )
if xrel.n() in RR
and 0 < xrel.n() and xrel.n() < 1 ]
for xrel in relList:
print ( "x* = %s\nf(x*,b) = %s with minpoly %s\n"
% ( xrel.n(), f(xrel, B).n(), f(xrel,B).minpoly() ) )
This gives:
b = 0
x* = 0.386488209564309
f(x*,b) = 0.167202635526186 with minpoly x^3 - 3408/3125*x^2 + 1248/3125*x - 128/3125
b = 1
x* = 0.200000000000000
f(x*,b) = 0.0819200000000000 with minpoly x - 256/3125
b = 1/2
x* = 0.297680702433558
f(x*,b) = 0.116134066923534 with minpoly x^3 - 1092/3125*x^2 + 188/3125*x - 12/3125
The general case now. Things become involved. Whatever we do, these results should be obtained as particular cases.
Let us fix the mathematical notation and framework. Since $f(0,b)=f(1,b)=0$ we expect a maximal value of the function $x\to f(x,b)$ for $x$ between zero and one. Let $x^*(b)$ be the point where the maximum is reached, it is a root of $f'x$. An in this special case there is exactly one in $(0,1)$.
The maximal value is $F(x^*(b),b)$.
In order to get it, we have to eliminate $x$ in the equations: $$ f'_x(x,b) = 0\ , $$ $$ F = f(x,b)\ .$$ This may be done as follows. (Note that after some point $x.b$ are no longer variables, but polynomial ring transcendental generators.)
sage: var( 'x,b' );
sage: f(x,b) = (1-x)^2 * x * ( 1-2*b*x + x^2 )
sage: f
(x, b) |--> -(2*b*x - x^2 - 1)*(x - 1)^2*x
sage: diff( f, x ).factor()
-(8*b*x^2 - 5*x^3 - 4*b*x + 3*x^2 - 3*x + 1)*(x - 1)
sage: R.<x,b,F> = QQ[]
sage: J = R.ideal( [ 8*b*x^2 - 5*x^3 - 4*b*x + 3*x^2 - 3*x + 1, F - f(x,b) ] )
sage: J.elimination_ideal(x)
Ideal (1024*b^6*F + 8192*b^5*F^2 - 2560*b^5*F - 10240*b^4*F^2 - 128*b^5
- 512*b^4*F - 9280*b^3*F^2 + 384*b^4 + 4896*b^3*F + 13520*b^2*F^2
- 256*b^3 - 1888*b^2*F + 960*b*F^2 + 3125*F^3 - 256*b^2
- 2208*b*F - 3408*F^2 + 384*b + 1248*F - 128)
of Multivariate Polynomial Ring in x, b, F over Rational Field
sage: len( J.elimination_ideal(x).gens() )
1
sage: G = J.elimination_ideal(x).gens()[0]
(Ideal generator was manually rearranged.)
The above $G$ is morally the dependence we are searching for. The implicit function $F=F(b)$ which solves $G(b,F(b))=0$ is the searched function.
So we only need to solve an equation of degree three in $F$ for each value of $b$. We test this for the mentioned values $9$, $1$, $1/2$. Well, i have to go back to variables. And i will use the poor man's copy paste via string and eval.
sG = str(G)
var( 'b,F' )
H(b,F) = eval( re.sub( '\^', '**', sG ) )
for B in (0, 1, 1/2):
print "b=%3s :: H(b,F) = %s" % ( B, H( B, F ).factor() )
This gives:
b= 0 :: H(b,F) = 3125*F^3 - 3408*F^2 + 1248*F - 128
b= 1 :: H(b,F) = (3125*F - 256)*F^2
b=1/2 :: H(b,F) = 3125*F^3 - 1092*F^2 + 188*F - 12
And we recognize the polynomials from the start.
An implicit plot of the implicit function may be obtained via:
sage: implicit_plot( H(b,F), (b,0,1), (F,0,0.2) )
Launched png viewer for Graphics object consisting of 1 graphics primitive