「数理演算の基礎」

2019年より着手した「数理再勉強」用の倉庫。

【ユークリッド距離】ピタゴラスの定理(Pythagorean theorem)の証明と三角比(Triangle ratio)概念の歴史的限界について。

一般に「三平方の定理Three square theorem)」あるいは「ピタゴラスの定理(Pythagorean theorem)」として知られるX^2+Y^2=Z^2の式、すなわち単位円Unit Circle、半径1の円弧)上ではx^2+y^2=1、 単位球面Unit Circle、半径1の円弧)上ではx^2+y^2+z^2=1、となる定理について。しばしばYの値をXで求める関数に変換されたY=sqrt(1-X^2)の形式でも用いられます。

f:id:ochimusha01:20190918061420g:plain

正方形同士の内接 統計言語Rによる作図例

Three_square_theorem04<-function(x){
c0<-c(0,pi/2,-1*pi,-1*pi/2,0)
c0_cos<-cos(c0)
c0_sin<-sin(c0)
plot(c0_cos,c0_sin,type="l",main="Regular polygon rotation",xlab="Cos(θ)",ylab="Sin(θ)")
text(c0_cos,c0_sin, labels=c("a","b","c","d",""),col=c(rgb(1,0,0),rgb(1,0,0),rgb(1,0,0),rgb(1,0,0),rgb(1,0,0)),cex=c(2,2,2,2,2))
line_scale_01_cos<-seq(cos(c0[1]),cos(c0[2]),length=15)
line_scale_01_sin<-seq(sin(c0[1]),sin(c0[2]),length=15)
line_scale_02_cos<-seq(cos(c0[2]),cos(c0[3]),length=15)
line_scale_02_sin<-seq(sin(c0[2]),sin(c0[3]),length=15)
line_scale_03_cos<-seq(cos(c0[3]),cos(c0[4]),length=15)
line_scale_03_sin<-seq(sin(c0[3]),sin(c0[4]),length=15)
line_scale_04_cos<-seq(cos(c0[4]),cos(c0[1]),length=15)
line_scale_04_sin<-seq(sin(c0[4]),sin(c0[1]),length=15)
text(c(line_scale_01_cos[x],line_scale_02_cos[x],line_scale_03_cos[x],line_scale_04_cos[x]),c(line_scale_01_sin[x],line_scale_02_sin[x],line_scale_03_sin[x],line_scale_04_sin[x]), labels=c("ab","bc","cd","da",""),col=c(rgb(0,0,1),rgb(0,0,1),rgb(0,0,1),rgb(0,0,1),rgb(0,0,1)),cex=c(2,2,2,2,2))
#塗りつぶし
polygon(c(c0_cos[1],line_scale_04_cos[x],line_scale_01_cos[x],c0_cos[1]), #x
c(c0_sin[1],line_scale_04_sin[x],line_scale_01_sin[x],c0_sin[1]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=rgb(0,1,0))   

#塗りつぶし
polygon(c(c0_cos[2],line_scale_01_cos[x],line_scale_02_cos[x],c0_cos[2]),#x
c(c0_sin[2],line_scale_01_sin[x],line_scale_02_sin[x],c0_sin[2]),#y
density=c(30),#塗りつぶす濃度
angle=c(45),#塗りつぶす斜線の角度
col=rgb(0,1,0))   

#塗りつぶし
polygon(c(c0_cos[3],line_scale_02_cos[x],line_scale_03_cos[x],c0_cos[3]),#x
c(c0_sin[3],line_scale_02_sin[x],line_scale_03_sin[x],c0_sin[3]), #y
density=c(30),#塗りつぶす濃度
angle=c(45),#塗りつぶす斜線の角度
col=rgb(0,1,0))  

#塗りつぶし
polygon(c(c0_cos[4],line_scale_03_cos[x],line_scale_04_cos[x],c0_cos[4]),#x
c(c0_sin[4],line_scale_03_sin[x],line_scale_04_sin[x],c0_sin[4]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),#塗りつぶす斜線の角度
col=rgb(0,1,0)) 
}

#アニメーション
library("animation")
Time_Code=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
saveGIF({
for (i in Time_Code){
 Three_square_theorem04(i)
}
}, interval = 0.1, movie.name = "TEST04.gif") 

三平方の定理の証明例

①直角三角形を4個集めると正方形が出来る。

f:id:ochimusha01:20190919170846p:plain

②大きな正方形の面積Sは一辺が{a,ab}={b,bc}={c,cd}={d,da}Aとする)で、かつ{ab,b}+{bc,c}+{cd,c}={da,a}Bとする)にして{a,ab}+{ab,b}={b,bc}+{bc+b}={c,cd}+{cd,d}={d,da}+{da,a}なので

S=(A+B)^2

③またSは一辺が{ab,bc}={bc,cd}={cd,da}={da=ab}Cとする)の正方形とABの直角三角形4つの和でもあるので

S=C^2+4*1/2*A*B

④よって

A^2+2AB+B^2=C^2+2AB

⑤これを整理すると

A^2+B^2=C^2

a^2+b^2=c^2からsinθ^2+cosθ^2=1へ

ここに登場する直角三角形ABCは(プログラム中での扱いを見ても分かる様に)以下とも置ける。
a=cos(θ)
b=sin(θ)
c=1
よって同時に任意の角度θに対して以下が成立。
cos(θ)^2+sin(θ)^2=1

f:id:ochimusha01:20190916055039p:plain

統計言語Rによる作図

f0<-function(x){cos(x)^2}
plot(f0,col=rgb(0,0,1),xlim=c(0,2*pi),ylim=c(0,1),main="Three square theorem",xlab="radian(π)",ylab="Amplitude")
par(new=T) #上書き
f1<-function(x){sin(x)^2}
plot(f1,col=rgb(0,1,0),xlim=c(0,2*pi),ylim=c(0,1),main="",xlab="",ylab="")
par(new=T) #上書き
f2<-function(x){cos(x)^2+sin(x)^2}
plot(f2,,col=rgb(1,0,0),xlim=c(0,2*pi),ylim=c(0,1),main="",xlab="",ylab="")
legend("bottomright", legend=c("y=cos(θ)^2","y=sin(θ)^2","y=cos(θ)^2+sin(θ)^2"), lty=c(1,1,1), col=c(rgb(0,0,1),rgb(0,1,0),rgb(1,0,0)))

ただし三角比(Triangle ratio)すなわち直角三角形Right triangle)の概念に拘っている限り、X座標もY座標も0以上、すなわち面積が0にならない範囲にしか想像が及ぶ事がなかったのでした。

統計言語Rによる作図例

#CFS=Circle Function Single
CFS<-function(Radian){
cx<-seq(-1,1,length=60)
f0<-function(x) sqrt(1-x^2)
cy<-f0(cx)
plot(cx,cy,asp=1,type="l",xlim=c(0,1),ylim=c(0,1),main="X^2+Y^2=1",xlab="X",ylab="sqrt(1-X^2)")

#塗りつぶし(背景)
polygon(cx, #x
cy, #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色

#塗りつぶし(三角)
polygon(c(0,cx[Radian],1), #x
c(0,cy[Radian],0), #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=rgb(0,0,1))  #塗りつぶす色
#線追加(三角)

segments(cx[Radian],cy[Radian],cx[Radian],0,col=c(100,100,100))

}
#アニメーション
library("animation")
Time_Code=seq(30,60, length=30)
saveGIF({
for (i in Time_Code){
 CFS(i)
}
}, interval = 0.1, movie.name = "CFS01.gif")

f:id:ochimusha01:20200110070121g:plain

以下続報…