pythonで曲線で囲まれた面積を計算するには?
例えば長方形の面積を出すには、縦×横で計算すればいいのですが、曲線に囲まれた面積を出すのはどうしたらいいでしょうか。y=x2のグラフを例として見てみましょう。
y=x2のグラフと、x軸と、x=1の直線(点線部分)で囲まれた面積を求めることを考えてみましょう。ところで、長方形の面積は簡単に出せました。なので、この曲線で囲まれた部分が、なんとかして長方形に置き換えらえないものか、ということを考えます。
このような感じで、曲線の内部を長方形に置き換えていけば、赤い部分の面積が計算できます。ただ気になるのが隙間の部分です。これは、赤い短冊の間隔を小さくすれば、隙間も小さくなるのですが、なくなることはないです。ならば、ということで、下のように短冊をとってみましょう。
今度はでっぱりが気になります。赤い短冊の間隔を小さくしても、でっぱりの量は少なくなるのですが、なくなることはないです。
ですが、曲線部分の面積は、この2つの間にあるわけですから、間隔をどんどん小さくしながら、2つの面積を計算して、間をとればいい、ということになります。
人間が計算すると禿げてしまうのですが、pythonに実行させると、pyhtonは禿げないです。
プログラムを考えてみよう
まず、短冊が曲線より下の場合を考えてみましょう。
例として、0.01間隔で短冊を作成したもののうち、x座標が0.5から始まる短冊を見てみましょう。この面積は、x2×0.01=0.5×0.5×0.01になります。これを0から1未満の間で計算します。
x=0 step=0.01 menseki=0 for i in range(0,100,1): menseki=menseki+x*x*step x=x+step print(str(menseki))
【プログラムを見る】
xには、短冊のx座標の値、stepには短冊の幅を入れます。step=0.01に設定しましたので、x軸の0から1の区間は100分割されます。ですので、100回for文を回します。
mensekiに計算した短冊の面積を足し合わせていきます。
最後に結果を打ち出します。実行して0.328位の値になっていればOKです。
次に、短冊が求める面積より大きい場合を考えてみましょう。
この場合の短冊の面積は、0.51×0.51×0.01です。これを踏まえて、プログラムを見てみましょう。
x=0 step=0.01 menseki=0 for i in range(0,100,1): menseki=menseki+(x+step)*(x+step)*step x=x+step print(str(menseki))
注意点は、面積を出すところで、(x+step)*(x+step)*step と変わっていることろです。実行結果は0.338と出ました。
結論は?
ということで、
0.328<曲線の面積<0.338
ということがわかりました。短冊の幅を0.01にして計算しましたが、短冊をもっと細かく取ればどんどん曲線の面積がしぼれてきます。
ちなみに曲線の面積の真の値は、1/3です。今後機会があれば、積分計算で取り上げてみます。
コメント