問題
AB=15,BC=14,CA=13の△ABCの外接円の半径を求めて下さい。ただし、pythonでも何でもありです。
別解
s=(13+14+15)/2=21と置くと、ヘロンの公式より△ABCの面積Sは、S=√s(s-a)(s-b)(s-c)で求められる。
∴S=√21(21-13)(21-14)(21-15)=√7056=84
また、外接円の半径をrとして三平方の定理を利用すると、S=√{r^2-(13/2)^2}×13×(1/2)
+√(r^2-7^2)×14×(1/2)
+√{r^2-(15/2)^2}×15×(1/2)=84が成り立つ。
∴13√{r^2-(13/2)^2}+14√(r^2-7^2)
+15√{r^2-(15/2)^2}=168
∴13√(4r^2-169)+28√(r^2-49)
+15√(4r^2-225)=336
∴13√(4r^2-169)+15√(4r^2-225)
=336-28√(r^2-49)
∴{13√(4r^2-169)+15√(4r^2-225)}^2
=28^2・{12-√(r^2-49)}^2
これをpythonで計算すると、左辺は、
from sympy import Symbol,expand,factor
r = Symbol('r')
expr = (13*(4*r**2-169)**0.5 + 15*(4*r**2-225)**0.5)**2
print(expand(expr))
結果:
390*(4*r**2 - 225)**0.5*(4*r**2 - 169)**0.5 + 225*(4*r**2 - 225)**1.0 + 169*(4*r**2 - 169)**1.0
∴左辺=390√(4r^2 - 225)(4r^2 - 169) + 225(4r^2 - 225) + 169(4r^2 - 169)———①
また、右辺は、
from sympy import Symbol,expand,factor
r = Symbol('r')
expr = 28**2*(12 - (r**2-49)**0.5)**2
print(expand(expr))
結果:
-18816*(r**2 - 49)**0.5 + 784*(r**2 - 49)**1.0 + 112896
∴右辺=-18816√(r^2 - 49) + 784(r^2 - 49) + 112896———②
①,②より、
390√(4r^2 - 225)(4r^2 - 169) + 225(4r^2 - 225) + 169(4r^2 - 169)=-18816√(r^2 - 49) + 784(r^2 - 49) + 112896
∴390√(4r^2 - 225)(4r^2 - 169) + 18816√(r^2 - 49)
=784(r^2 - 49) + 112896 - 225(4r^2 - 225) - 169(4r^2 - 169)
この右辺をまずpythonで計算すると、
from sympy import Symbol,expand,factor
r = Symbol('r')
expr = 784*(r**2 - 49) + 112896 - 225*(4*r**2 - 225) - 169*(4*r**2 - 169)
print(expand(expr))
結果:153666 - 792*r**2
∴390√(4r^2 - 225)(4r^2 - 169) + 18816√(r^2 - 49)
=153666 - 792r^2
ここで、153666と792の最大公約数をpythonで求めると、
import math
math.gcd(153666,792)
結果:18
また、390と18816の最大公約数を求めると、
import math
math.gcd(390,18816)
結果:6
よって、両辺を6で割ると、
65√(4r^2 - 225)(4r^2 - 169) + 3136√(r^2 - 49)
=25611 - 132r^2
∴{65√(4r^2 - 225)(4r^2 - 169) + 3136√(r^2 - 49)}^2
=(25611 - 132r^2)^2
これをpythonで計算すると、左辺は、
from sympy import Symbol,expand,factor
r = Symbol('r')
expr = (65*(4*r**2 - 225)**0.5*(4*r**2 - 169)**0.5 + 3136*(r**2 - 49)**0.5)**2
print(expand(expr))
結果:
407680*(r**2 - 49)**0.5*(4*r**2 - 225)**0.5*(4*r**2 - 169)**0.5 + 9834496*(r**2 - 49)**1.0 + 4225*(4*r**2 - 225)**1.0*(4*r**2 - 169)**1.0
∴左辺=407680√(r^2 - 49)(4r^2 - 225)(4r^2 - 169) + 9834496(r^2 - 49) + 4225(4r^2 - 225)・(4r^2 - 169)———③
また、右辺は、
from sympy import Symbol,expand,factor
r = Symbol('r')
expr = (25611 - 132*r**2)**2
print(expand(expr))
結果:17424*r**4 - 6761304*r**2 + 655923321
∴右辺=17424r^4 - 6761304r^2 + 655923321———④
③,④より、
407680√(r^2 - 49)(4r^2 - 225)(4r^2 - 169) + 9834496(r^2 - 49) + 4225(4r^2 - 225)(4r^2 - 169)
=17424r^4 - 6761304r^2 + 655923321
∴407680√(r^2 - 49)(4r^2 - 225)(4r^2 - 169)
=17424r^4 - 6761304r^2 + 655923321 - 9834496(r^2 - 49) - 4225(4r^2 - 225)(4r^2 - 169)
この右辺を計算すると、
from sympy import Symbol,expand,factor
r = Symbol('r')
expr = 17424*r**4 - 6761304*r**2 + 655923321 - 9834496*(r**2 - 49) - 4225*(4*r**2 - 225)*(4*r**2 - 169)
print(expand(expr))
結果:-50176*r**4 - 9937200*r**2 + 977158000
∴407680√(r^2 - 49)(4r^2 - 225)(4r^2 - 169)
=-50176r^4 - 9937200r^2 + 977158000
ここで、407680と50176と9937200と977158000の最大公約数をpythonで求めると、
import functools
def my_gcd(*integers):
return functools.reduce(math.gcd, integers)
print(my_gcd(407680,50176,9937200,977158000))
結果:784
因みに、前回はimport mathのmath.gcd()で求めたが、私のpythonのバージョンではこの場合は2個の最大公約数しか求められないので、他人のプログラムをパクった。因みに、現在のバージョンではmath.gcd()で3個以上も求められるらしい。
よって、両辺を784で割ると、
520√(r^2 - 49)(4r^2 - 225)(4r^2 - 169)
=-64r^4 - 12675r^2 + 1246375
∴270400(r^2 - 49)(4r^2 - 225)(4r^2 - 169)
=(-64r^4 - 12675r^2 + 1246375)^2
∴(-64r^4 - 12675r^2 + 1246375)^2
-{270400(r^2 - 49)(4r^2 - 225)(4r^2 - 169)}=0
これをpythonで展開すると、
from sympy import Symbol,expand,factor
r = Symbol('r')
expr = (-64*r**4 - 12675*r**2 + 1246375)**2 - 270400*(r**2-49)*(4*r**2-225)*(4*r**2-169)
print(expand(expr))
結果:
4096*r**8 - 2704000*r**6 + 639263625*r**4 - 62758935850*r**2 + 2057266680625
∴4096𝑟^8−2704000𝑟^6+639263625𝑟^4−62758935850𝑟^2+2057266680625=0
これを因数分解すると、
(8𝑟−65)(8𝑟+65)・(64𝑟^6−38025𝑟^4+7478250𝑟^2−486927025)=0
ここで、64x^3−38025x^2+7478250x−486927025=0として無理数解を求めると、
x1=228.223815684
x2=194.66532697
x3=171.251482346
https://keisan.casio.jp/exec/system/1256966554
これらの平方根を取り正のものだけ取り出すと、
r1=15.107078
r2=13.952251
r3=13.086309
ここで、AからBCに垂線を下ろしその足をHとすると、
AH=12となる。これは面積84,BC=14から、84×2÷14=12と求めても良い。
外心をO,BCの中点をMとして、△OCMで三平方の定理を使うと、OM=√(r^2-7^2)<AH=12より、
r^2-49<144 ∴r^2-193<0
∴(r-√193)(r+√193)<0
∴-√193<r<√193=13.892444
よって、r1=15.107078,r2=13.952251が不適はすぐに分かる。また、BOの延長とAHとの交点をDとすると、OM<DHでDHがAHの半分以下である事は明らかなので、実際はOM=√(r^2-7^2)<6とすると、r<9.21…なので、x3=171.251482346も不適である事が言える。
(厳密には前回のxを使って△BOM∽△BDHからDHの長さを求めても良い。)
よって、解は、8𝑟−65=0から、r=65/8である。
おまけ: