#09 ふれてみよう高校数学 解析(微分・積分・極限)

最大・最小値の求め方

最大値・最小値定理

「決まった範囲の中で、どこで一番高くなり、どこで一番低くなるか」——たとえば「気温が最高になるのは何時か」「材料費を最小にする容器の寸法は何か」という問題が最適化の典型例です。

最大値・最小値定理(Extreme Value Theorem):閉区間 [a,b][a, b] 上で連続な関数 ff は、必ずその区間内で最大値と最小値を取る——「範囲が限られていれば、必ず最高点と最低点がある」という保証です。


閉区間法(Closed Interval Method)

「臨界点(傾きがゼロの点)と両端の値を全部調べて比べる」——これが閉区間での最大・最小値を求める基本手順です:

[a,b][a, b] 上で ff の最大・最小を求める手順:

  1. f(x)=0f'(x) = 0 となる xx を区間内で全て求める(臨界点)——「傾きがゼロ = 山頂か谷底の候補」
  2. 端点 f(a)f(a)f(b)f(b) も計算する——「範囲の両端も候補になる」
  3. 全ての値を比較して最大・最小を決定——「一番大きいのが最大値、一番小さいのが最小値」

f(x)=x33x+1f(x) = x^3 - 3x + 1[1,2][-1, 2] で最大・最小化する。

f(x)=3x23=0x=±1f'(x) = 3x^2 - 3 = 0 \Rightarrow x = \pm 1

区間 [1,2][-1, 2] 内の臨界点は x=1x = 1 のみ(x=1x = -1 は端点)——「1-1 は区間の左端」です。

xxf(x)f(x)
1-1(端点)(1)33(1)+1=3(-1)^3-3(-1)+1 = 3
11(臨界点)13+1=11-3+1 = -1
22(端点)86+1=38-6+1 = 3

最大値 =3= 3x=1x=-1 または x=2x=2)、最小値 =1= -1x=1x=1)——「最大値が 2 か所で達成されることもある」という点に注意です。


デモ:円に内接する長方形の面積最大化

「円の中に収まる長方形で、面積を最大にするには?」——直感的には「横長でも縦長でもなく、正方形のとき」です。計算で確かめましょう。

半径 r=2r = 2 の円に内接する長方形を考えます。一頂点の xx 座標を xx とすると、縦の半分は y=r2x2y = \sqrt{r^2 - x^2}、面積は:

A(x)=2x2r2x2=4x4x2(0<x<2)A(x) = 2x \cdot 2\sqrt{r^2 - x^2} = 4x\sqrt{4 - x^2} \quad (0 < x < 2)

微分すると:

A(x)=44x2+4xx4x2=4(42x2)4x2A'(x) = 4\sqrt{4-x^2} + 4x \cdot \frac{-x}{\sqrt{4-x^2}} = \frac{4(4-2x^2)}{\sqrt{4-x^2}}

A(x)=0x=2A'(x) = 0 \Rightarrow x = \sqrt{2}y=2y = \sqrt{2}(正方形のとき最大!)——「縦と横が等しい正方形が最大面積」という答えが数学的に証明されます。

マウスを動かして長方形を変え、面積の変化を観察してください。

半径2の円に内接する長方形。マウスで幅を変えて面積最大を探す。
function loop() {
ctx.clearRect(0, 0, W, H);
var cx=W/2, cy=H/2+10;
var r=130; // pixel radius = 2 units, so scale=65
var scale=65;

function toSx(x){return cx+x*scale;}
function toSy(y){return cy-y*scale;}

ctx.fillStyle='#0d1117';
ctx.fillRect(0,0,W,H);

// Draw circle
ctx.beginPath();
ctx.arc(cx,cy,r,0,Math.PI*2);
ctx.strokeStyle='rgba(79,195,247,0.5)';
ctx.lineWidth=2;
ctx.stroke();

// Axes
ctx.strokeStyle='rgba(255,255,255,0.12)';
ctx.lineWidth=1;
ctx.beginPath();ctx.moveTo(0,cy);ctx.lineTo(W,cy);ctx.stroke();
ctx.beginPath();ctx.moveTo(cx,0);ctx.lineTo(cx,H);ctx.stroke();

// mouse x in [-2, 2] range
var xm=(mx-cx)/scale;
xm=Math.max(0.05,Math.min(1.95,xm));
var ym=Math.sqrt(4-xm*xm);

// Area in unit space
var A=4*xm*ym;
var Amax=8; // at x=sqrt(2), A=4*sqrt(2)*sqrt(2)=8

// Draw rectangle
var rx=toSx(-xm), ry=toSy(ym);
var rw=toSx(xm)-toSx(-xm), rh=toSy(-ym)-toSy(ym);
var frac=A/Amax;
var rr=Math.round(239+(1-frac)*16);
var rg=Math.round(83+frac*116);
var rb=Math.round(80);
ctx.fillStyle='rgba('+rr+','+rg+','+rb+',0.25)';
ctx.fillRect(rx,ry,rw,rh);
ctx.strokeStyle='rgba('+rr+','+rg+','+rb+',0.9)';
ctx.lineWidth=2;
ctx.strokeRect(rx,ry,rw,rh);

// Draw corner points
var corners=[
  [xm,ym],[xm,-ym],[-xm,-ym],[-xm,ym]
];
for(var i=0;i<corners.length;i++){
  ctx.beginPath();
  ctx.arc(toSx(corners[i][0]),toSy(corners[i][1]),4,0,Math.PI*2);
  ctx.fillStyle='#ffca28';ctx.fill();
}

// Show optimal rectangle outline
var opt=Math.sqrt(2);
var opty=Math.sqrt(2);
ctx.strokeStyle='rgba(129,199,132,0.4)';
ctx.lineWidth=1.5;
ctx.setLineDash([5,5]);
ctx.strokeRect(toSx(-opt),toSy(opty),toSx(opt)-toSx(-opt),toSy(-opty)-toSy(opty));
ctx.setLineDash([]);

// Area graph (mini bar)
var barX=W-110, barY=H-30, barW=90;
ctx.fillStyle='rgba(0,0,0,0.5)';
ctx.fillRect(barX-5,barY-50,barW+10,60);
ctx.fillStyle='rgba('+rr+','+rg+','+rb+',0.8)';
ctx.fillRect(barX,barY-frac*40,barW,frac*40);
ctx.strokeStyle='rgba(255,255,255,0.3)';
ctx.lineWidth=1;
ctx.strokeRect(barX,barY-40,barW,40);
ctx.fillStyle='rgba(255,255,255,0.7)';
ctx.font='10px monospace';ctx.textAlign='center';
ctx.fillText('面積',barX+barW/2,barY+10);

// Info panel
ctx.fillStyle='rgba(0,0,0,0.7)';
ctx.fillRect(8,8,250,92);
ctx.font='13px monospace';ctx.textAlign='left';
ctx.fillStyle='#4fc3f7';
ctx.fillText('x = '+xm.toFixed(3),14,28);
ctx.fillText('y = '+ym.toFixed(3),14,46);
ctx.fillStyle='rgba('+rr+','+rg+','+rb+',1)';
ctx.fillText('面積 A = '+A.toFixed(3),14,64);
ctx.fillStyle='#81c784';
ctx.fillText('最大面積 = 8.000 (x=√2)',14,82);

// Arrow to max
if(Math.abs(xm-Math.sqrt(2))<0.15){
  ctx.fillStyle='#81c784';
  ctx.font='bold 13px sans-serif';ctx.textAlign='center';
  ctx.fillText('★ 最大!',cx,cy-r-20);
}

// Labels
ctx.fillStyle='rgba(255,255,255,0.6)';
ctx.font='12px sans-serif';ctx.textAlign='right';
ctx.fillText('最適 (x=√2, A=8)',W-10,H-10);

requestAnimationFrame(loop);
}
loop();

なぜ正方形が最大なのか

「式を変形して最大化を簡単にする」——A(x)=4x4x2A(x) = 4x\sqrt{4-x^2} の最大化を A2A^2 の最大化で行うと(A>0A > 0 なので同値):

A2=16x2(4x2)A^2 = 16x^2(4-x^2)

u=x2u = x^2 と置くと A2=16u(4u)=64u16u2A^2 = 16u(4-u) = 64u - 16u^2

d(A2)du=6432u=0u=2x=2\dfrac{d(A^2)}{du} = 64 - 32u = 0 \Rightarrow u = 2 \Rightarrow x = \sqrt{2}

このとき y=42=2y = \sqrt{4-2} = \sqrt{2}x=y=2x = y = \sqrt{2} なので確かに正方形!

AM-GM 不等式でも証明できます——「2 つの数の積は、その相加平均の二乗以下」という不等式を使います:

x2(4x2)(x2+(4x2)2)2=4x^2(4-x^2) \leq \left(\frac{x^2 + (4-x^2)}{2}\right)^2 = 4

等号は x2=4x2x^2 = 4-x^2、すなわち x=2x = \sqrt{2} のとき成立——「等しいとき(正方形のとき)に面積が最大」という美しい結果です。


実用的な最適化問題のパターン

箱の体積最大化

「正方形の薄板から四隅を切り取って箱を作るとき、体積を最大化する切り取り量を求める」——設計の現場でも出てくる問題です。

最小コスト問題

「タンクや容器の表面積(材料費)を一定体積のもとで最小化する」——「同じ容量なら球形が一番材料を節約できる」という日常に潜む数学です。

費用・利益最大化

「経済学でも微分を使って利益最大化点(限界費用=限界収益)を求めます」——「もう 1 個作ったときの収益増加 = もう 1 個作ったときのコスト増加」が利益最大の条件です。


まとめ

  1. 閉区間法:臨界点と端点の値を全て比較——「傾きがゼロの点と両端の全員を集めて比べる」
  2. 実際の問題:変数を絞り込み、1 変数の関数として定式化——「まず何を変数にするかを決める」
  3. 多くの最適形状は対称性を持つ(正方形、正三角形など)——「対称性 = 均等 = 最適」というパターンが多い

次回は接線と法線の方程式——微分係数を使って具体的な直線の方程式を求めます。