凸関数の場合
今回も
∀x ( x∈X → f(x)≧ax+b )
を満たす実数a,bの集合(解集合)を内と外から近似します.
ただ,予告した下限,上限による適用範囲の広い評価の前に,特殊ではあるが精度の高い凸関数の 1 次式による近似を述べておきたいと思います.
まず,外からの近似,つまり,必要条件は,一般に
∀x ( x∈X → P(x,a) )
に対して,異なる x_k∈X (k=1,…,n) を代入した連言
∧_{k=1}^{n} P(x_k,a)
がその例となります.
次に,内からの近似,つまり,十分条件は,前回のような一様な近似では精度と引き換えに次数が上がりますので,今回は X を分割し,さらに
f が凸
の場合に特化し,分割された小区間の中点に対する点における f の接線で近似し,その区間内で辺々の差の下限が非負となる条件が
辺々の差が高々1次式
なので,両端点に対する点における関数値が非負であることを利用します.
(*可微分凸関数用*)
f0[x_] := Exp[x]; n := 20; p := 0; q := 1;f[x_] := f0[x] - (a*x + b); t[k_] := p + (q - p) k/n;
iqe[k_] := f[ t[k - 1] ] >= 0 && f[ t[k] ] >= 0; SOLc = True;
For[ k = 1, k <= n, k++, SOLc = SOLc && iqe[k] ];f[x_, k_] := (D[f0[s], s]*(x - s) + f0[s] /. {s -> (t[k - 1] + t[k])/2}) - (a*x + b);
iqe[k_] := f[ t[k - 1], k ] >= 0 && f[ t[k], k ] >= 0; solc = True;
For[ k = 1, k <= n, k++, solc = solc && iqe[k] ];Sol := (a < 1 && b <= 1) ||
(1 <= a <= Exp[1] && a*(1 - Log[a]) >= b) ||
(Exp[1] < a && b <= Exp[1] - a);RegionPlot[{Not[SOLc], Sol, solc},
{a, 0, 3}, {b, -0.25, 1.1},
PlotStyle -> {Red, Blue, Green}]
といった具合で,(a,b)=(1,1) 付近を拡大すると
RegionPlot[{Not[SOLc], Sol, solc},
{a, 0.99, 1.05}, {b, 0.9985, 1.0002},
PlotStyle -> {Red, Blue, Green}]
のようになっています.