漢字プリント 数学プリント
問題文
定積分 $\displaystyle \int_{-1}^1 \left| x^2-\frac{1}{2}x-\frac{1}{2} \right| \, dx$ を求めよ。
(2021 京都大学 文系第2問)
コード
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as ani
from matplotlib.colors import ListedColormap

#紙の準備よし
fig = plt.figure()
fig.suptitle("2021京大数学 文系第2問",
             color="0.5",ha="right",x=0.95,y=0.95,zorder=-1)
ax = fig.add_subplot(111)
ax.set_xlim(0,10)
ax.set_ylim(0,4)
ax.set_aspect("equal")
ax.axis("off")

#フォントの準備よし
plt.rcParams["mathtext.fontset"] = 'cm'
fdic={
"clip_on" : True,      
"fontsize"  : 18,
"fontfamily" : "Meiryo",
"verticalalignment" : "baseline",
}

#台本
comment1='''\
はじめに
'''
comment2='''\
絶対値の場合分けをします!

乁( ˙ω˙ 乁) メンドクセ-
'''
lines1=[
r"$\qquad\quad x^2-\frac{1}{2}x-\frac{1}{2} \geq 0$"+"\t(中身が正のとき)",
r"$\Leftrightarrow\quad 2x^2-x-1 \geq 0$",
r"$\Leftrightarrow\quad (2x+1)(x-1) \geq 0$",
r"$\Leftrightarrow\quad x \leq -\frac{1}{2}\ ,\ 1 \leq x$",
r"$\therefore\quad -1 \leq x \leq -\frac{1}{2}$"+" ("+"$-1 \leq x \leq 1$"+"との共通範囲)",
]
lines2=[
r"$\qquad\quad x^2-\frac{1}{2}x-\frac{1}{2} \leq 0$"+"\t(中身が負のとき)",
r"$\Leftrightarrow\quad 2x^2-x-1 \leq 0$",
r"$\Leftrightarrow\quad (2x+1)(x-1) \leq 0$",
r"$\Leftrightarrow\quad -\frac{1}{2} \leq x \leq 1$",
r"$\therefore\quad -\frac{1}{2} \leq x \leq 1$"+" ("+"$-1 \leq x \leq 1$"+"との共通範囲)",
]
comment3='''\
というわけで
'''
comment4='''\
積分スルゾー!!

エイエイ。(・ω ・ )○オ――
'''
lines3=[
r"$\qquad \int_{-1}^1 \left| x^2-\frac{1}{2}x-\frac{1}{2} \right| dx$",
r"$=\int_{-1}^{-\frac{1}{2}} \left| x^2-\frac{1}{2}x-\frac{1}{2} \right| dx + \int_{-\frac{1}{2}}^1 \left| x^2-\frac{1}{2}x-\frac{1}{2} \right| dx$",
r"$=\int_{-1}^{-\frac{1}{2}} \left( x^2-\frac{1}{2}x-\frac{1}{2} \right) dx - \int_{-\frac{1}{2}}^1 \left( x^2-\frac{1}{2}x-\frac{1}{2} \right) dx$",
r"$=\left[ \frac{1}{3}x^3-\frac{1}{4}x^2-\frac{1}{2}x \right]_{-1}^{-\frac{1}{2}} - \left[ \frac{1}{3}x^3-\frac{1}{4}x^2-\frac{1}{2}x \right]_{-\frac{1}{2}}^1$",
r"$=\left( \frac{1}{3}\cdot\frac{7}{8}+\frac{1}{4}\cdot\frac{3}{4}-\frac{1}{2}\cdot\frac{1}{2} \right) - \left( \frac{1}{3}\cdot\frac{9}{8}-\frac{1}{4}\cdot\frac{3}{4}-\frac{1}{2}\cdot\frac{3}{2} \right)$",
r"$=\left( \frac{7}{24}+\frac{3}{16}-\frac{1}{4} \right) - \left( \frac{9}{24}-\frac{3}{16}-\frac{3}{4} \right)$",
r"$=\left( \frac{14}{48}+\frac{9}{48}-\frac{12}{48} \right) - \left( \frac{18}{48}-\frac{9}{48}-\frac{36}{48} \right)$",
r"$=\frac{11}{48}-(-\frac{27}{48})$"+"\tあとチョット!",
r"$=\frac{38}{48}$"+"\tホントにあとチョット!!",
r"$=\frac{19}{24}$"+"\tオシマイ!!! \(^o^)/",
]

#2行目を表示する関数
X,Y = np.mgrid[-2:12.1:0.1,0:3:2]
colors = [(1,1,1,alpha) for alpha in np.arange(0,11)/10]
cmap = ListedColormap(colors)
def show_second_line(imgs,lines,k):
    for i in range(61):
        img =  [ax.text(0,2.8,lines[k],fontdict=fdic)]
        img += [ax.text(0,0.8,lines[k+1],fontdict=fdic)]
        C = np.zeros(140)
        C[2*i+1:2*i+20] = np.arange(0.05,1.00,0.05)
        C[2*i+20:] = 1
        C = np.reshape(C,(140,1))
        img += [ax.pcolormesh(X,Y,C,cmap=cmap,zorder=10)]
        imgs.append(img)
        
#次の行へと進む関数
def go_next_line(imgs,lines,k):
    for i in range(21):
        alpha = max((10-i)/10,0)
        img =  [ax.text(0,2.8+i/10,lines[k],fontdict=fdic,alpha=alpha)]
        img += [ax.text(0,0.8+i/10,lines[k+1],fontdict=fdic)]
        imgs.append(img)

#数式の部分の関数
def load_lines(imgs,lines):
    for k in range(len(lines)-2):
        show_second_line(imgs,lines,k)
        go_next_line(imgs,lines,k)
    
    show_second_line(imgs,lines,len(lines)-2)

#コメントの部分の関数
def interlude(imgs,text,frames):
    
    fdic = {
        "ha" : "center",
        "va" : "center",
        "size" : 20,
        "color" : "white",
        "fontfamily": "Meiryo",
        }
    boxdic = {
        "facecolor" : "black",
        "pad" : 200,
        }
    
    for i in range(frames):
        interlude=ax.text(5,2,text,
                          fontdict=fdic,bbox=boxdic)
        imgs.append([interlude])

#上演   
imgs=[]
interlude(imgs,comment1,20)
interlude(imgs,comment2,30)
load_lines(imgs,lines1)
load_lines(imgs,lines2)
interlude(imgs,comment3,20)
interlude(imgs,comment4,30)
load_lines(imgs,lines3)

mov=ani.ArtistAnimation(fig, imgs, 100)
plt.show()
解説になっているのか?甚だギモンな動画
「高校数学のエアポケット」に戻る