午後のひとときに、数学の大小比較問題の解答編です。
2つの陰関数
x2+xy+y2=1 … (青)
x2-xy2+y4=1 … (赤)
の面積、どちらが大きい?
今回は、手計算では限界があるので、電卓、Excel、プログラミング、Wolframなどの計算機を使っても良いものとします。
おそらく、片方は厳密値を求められないかと思われるので、小数点以下10桁程度を求めて、比較すれば良いこととします。
シンキングタ~イム
今回は解答編です。
まだ見たくない人は閉じてください。
まず、私がこの図を書いた方法ですが、どちらの陰関数も、ここからここまではxを変化させて、ここからここまではyを変化させて、…という感じで描いています。
華麗に解くならば、極形式にして、θで積分とかが美しいのかもしれませんが、極形式への変換を思い出せないし、さて、どうしたものか。
というわけで、xとyで分けて考えるのが楽だと考えました。
さて、今回は何を使っても良いので、ウェブで使えるツールを多用していく。
まずは、Wolframで、どこまで出来るかをやってみる。
青が簡単なので、
x^2+xy+y^2=1の面積
をコピペして、貼り付ける。
すると、3.6276という近似値を表示します。
赤も同様に、
x^2-xy^2+y^4=1の面積
をコピペして、貼り付けて計算させてみると、
標準の計算時間を超えてしまいました。
残念。
別の手段を考えて、
x^2-xy^2+y^4=1, find y
とだけ入れてみると、
y=の式が4つ出てきますが、符号をまとめると
y=± | √x±√4-3x2 √2 |
同様に、
x^2-xy^2+y^4=1, find x
とだけ入れてみると、
x=の式が2つ出てきますが、符号をまとめると
x= | y2±√4-3y4 2 |
これらの必要なところを、xやyについて積分すれば良さそうである。
上記の画像をHTML5+Javascriptで描くときも、この式を利用しています。
xが-1から1までは、y≧0だけを積分して2倍すればよく、x>1については、yが-1から1まで積分して、2つの積分でダブってしまうところを差し引きするとして、
2∫[-1,1] √((x+√(4-3x^2))/2) dx + ∫[-1,1] (y^2+√(4-3y^4))/2 dy - 2
をコピペして、貼り付けて計算させると、
3.7567789431374483333546657135898144368022828368288141408752853516
という値を返す。
ということで、赤い陰関数の方が面積が大きいということが解りました。
x2+xy+y2=1 … (青)
4 | ⌠1 ⌡0 | -x+√4-3y2 2 | dx | -2+2 | ⌠1 ⌡0 | -x+√4-3y2 2 | dx |
≒3.6275987284684357011881565152843114645681324961854811511397698707
x2-xy2+y4=1 … (赤)
2 | ⌠1 ⌡-1 | √x+√4-3x2 √2 | dx | + | ⌠1 ⌡-1 | y2+√4-3y4 2 | dy | -2 |
≒3.7567789431374483333546657135898144368022828368288141408752853516
という立式が出来ました。
もっと簡潔な式も立式できるかとは思いますので、そちらは皆さんにおまかせしましょうかね。
因みに、私の友人は、
青
∫[-(4/3)^(1/2),(4/3)^(1/2)] √(4-3y^2) dy
⌠√4/3 ⌡-√4/3 | √4-3y2 dy= | 2π √3 |
赤
∫[-(4/3)^(1/4),(4/3)^(1/4)] √(4-3y^4) dy
⌠4√4/3 ⌡-4√4/3 | √4-3y4 dy= | 2√2πΓ(5/4) 4√3Γ(7/4) |
とスッキリした形で立式していましたので、これが模範解答なのでしょう。
自分は積分に苦手意識があるのと、高校卒業してからほとんどやることが無かったということで、微分積分に関しては、かなり頭が鈍っているということなんでしょうね。
因みに、HTML5+Javascriptの陰関数を描いている部分は、
var x, y;
var w=300;
var d=0.001;
ctx.lineCap = 'round';
ctx.lineJoin = 'round';
ctx.lineWidth = 3;
ctx.strokeStyle = 'rgba(255,0,0,0.8)';
ctx.beginPath();
ctx.moveTo(400-w,400);
for (x=-1; x<1; x+=d) {
ctx.lineTo(400+w*x,400-w*Math.sqrt((x+Math.sqrt(4-3*x*x))/2));
}
for (y=1; y>-1; y-=d) {
ctx.lineTo(400+w*(y*y+Math.sqrt(4-3*y*y*y*y))/2,400-w*y);
}
for (x=1; x>-1; x-=d) {
ctx.lineTo(400+w*x,400+w*Math.sqrt((x+Math.sqrt(4-3*x*x))/2));
}
ctx.closePath();
ctx.stroke();
ctx.strokeStyle = 'rgba(0,0,255,0.8)';
ctx.beginPath();
ctx.moveTo(400-w,400-w);
for (x=-1; x<1; x+=d) {
ctx.lineTo(400+w*x,400-w*(-x+Math.sqrt(4-3*x*x))/2);
}
for (y=0; y>-1; y-=d) {
ctx.lineTo(400+w*(-y+Math.sqrt(4-3*y*y))/2,400-w*y);
}
for (x=1; x>-1; x-=d) {
ctx.lineTo(400+w*x,400-w*(-x-Math.sqrt(4-3*x*x))/2);
}
for (y=0; y<1; y+=d) {
ctx.lineTo(400+w*(-y-Math.sqrt(4-3*y*y))/2,400-w*y);
}
ctx.closePath();
ctx.stroke();
こんな感じです。
図を描くことを先に考えてしまったので、描けてしまったことで、面積を求めるという方向性も、これに準じてしまったということでしょうかね。
ではでは