TransWikia.com

How can I minimize expression involving logarithms?

Mathematica Asked on August 25, 2021

I am trying to find minimum of this expression:
$$log _aleft(frac{4}{9} (3b-1)right)+8 log_{frac{b}{a}}^2(a)-1,$$
where $ 0 < b < a < 1$. I tried

Clear[a, b]
    Minimize[Log[a, 4 (3 b - 1)/9] + 8 (Log[b/a, a])^2 - 1, 
     0 < b < a < 1, {a, b}]

But I don’t get the result. How can I get the result?

3 Answers

We have a transcendental function of two variables and it is not straightforward to find global minima under given constraints because Minimize behind the scene uses symbolic equation solving functionality and sometimes it has to be supported by user's insight. However using both numerical and symbolic approach we can find an exact global minimum.

We define

f[a_,b_]:= Log[a, 4 (3 b - 1)/9] + 8 (Log[b/a, a])^2 - 1

To get an insight we play with

MinimalBy[ Table[ FindMinimum[{f[a, b], 0 < b < a < 1}, {b}], 
                  {a, 73/100, 95/100, 2/100}], First, 3]
{{7.00101, {b -> 0.659199}}, {7.02367, {b -> 0.702245}}, {7.04024, {b -> 0.619364}}}

By direct inspection we find out where we should look for the global minimum:

RegionPlot[{ f[a, b] < 7.01, f[a, b] < 7.001, f[a, b] < 7.0001}, 
            {a, 0.84, 0.9}, {b, 0.64, 0.7}, AxesLabel -> Automatic,
            WorkingPrecision -> 30, PlotPoints -> 60, MaxRecursion -> 5]

enter image description here

With quite a good numerical approximation we can find

FindMinimum[{f[a, b], 3/5 < b <= 4/5, b < a < 1}, {{a, 0.87}, {b, 2/3}}]
 {7., {a -> 0.87358, b -> 0.666667}}

similarily works NMinimize[{f[a, b], 3/5 < b <= 4/5 < a < 1}, {a, b}], while Minimize doesn't work this way, nevertheless restricting one variable we can find an exact result. It is obvious that both partial derivatives have to vanish in the extremum:

Solve[Derivative[0, 1][f][a, 2/3] == 0 && 1/2 < a < 1, a]
 {{a -> (2/3)^(1/3)}}
Minimize[{f[(2/3)^(1/3), b], 1/3 < b < 1}, b] // FullSimplify
{7, {b -> 2/3}}

Correct answer by Artes on August 25, 2021

Clear["Global`*"]

f[a_, b_] := Log[a, 4 (3 b - 1)/9] + 8 (Log[b/a, a])^2 - 1

min = (FindMinimum[{f[a, b], 1/2 < b < a, 0 < a < 1}, {a, b}, 
  WorkingPrecision -> 20] // N) /. x_Real :> RootApproximant[x] // 
   ToRadicals

(* {7, {a -> (2/3)^(1/3), b -> 2/3}} *)

Verifying that the approximated results are exact

{min[[1]] == f[a, b], D[f[a, b], a] == 0, D[f[a, b], b] == 0} /. min[[2]]
  // FullSimplify

(* {True, True, True} *)

Answered by Bob Hanlon on August 25, 2021

You do not need numerical guess to find the minimum. Setting both partial derivatives to zero and eliminating variable a is enough.

f = Log[a, 4 (3 b - 1)/9] + 8 (Log[b/a, a])^2 - 1 // 
   PowerExpand[#, Assumptions -> {0 < a < 1, 1/3 < b < a}] &;

ee1 = (D[f, a] // Together // Numerator) // 
   PowerExpand[#, Assumptions -> {0 < a < 1, 1/3 < b < a}] &;

ee2 = (D[f, b] // Together // Numerator) // 
   PowerExpand[#, Assumptions -> {0 < a < 1, 1/3 < b < a}] &;

eli = Eliminate[{ee1 == 0, ee2 == 0}, Log[a]]

(*   b Log[b]^5 (6 Log[2] - 6 Log[3] - 3 Log[b] + 3 Log[-1 + 3 b]) == 
     Log[b]^5 (2 Log[2] - 2 Log[3] + Log[-1 + 3 b])   *)

Solve[eli && 1/3 < b < 1, b]

(*   {{b -> 2/3}}   *)

Solve[0 == (ee1 /. b -> 2/3) && 1/3 < a < 1, a]

(*   {{a -> (2/3)^(1/3)}}   *)

Answered by Akku14 on August 25, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP