「諸概念の迷宮(Things got frantic)」用語集

本編で頻繁に使うロジックと関連用語のまとめ。

【高校数学】状況に応じて円筒形やトーラス形で表される「複素指数関数型フーリエ級数」について。

 f:id:ochimusha01:20190820114443p:plain

それでは実際の複素指数関数型フーリエ級数による実際の波形の合成過程に目を向けて見ましょう。

 ①「三角波Triangular wave)」や「放物線Parabolaf(t)=t^2(-a<=t<=a)」の様な「(指数が偶数のCos関数の集合偶関数系」の場合は、実数領域に波形がそのまま顕現する。

統計言語Rによる波形合成例 三角波Triangular waveの場合

f:id:ochimusha01:20190815110144g:plain

三角波Triangular waveの実数部

Triangular_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(0,pi/2)
#関数と凡例の決定
switch(x,
"0"= f0<-function(x) {pi/4*x/x},
"1"= f0<-function(x) {pi/4-2*pi/pi^2*exp(2*pi*x/pi*(0+1i))},
"2"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2)},
"3"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2)},
"4"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2+exp(14*pi*x/pi*(0+1i))/7^2)},
"5"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2+exp(14*pi*x/pi*(0+1i))/7^2+exp(18*pi*x/pi*(0+1i))/9^2)}
)

switch(x,
"0"=text<-c("π/4"),
"1"=text<-c("π/4-2π/π^2*exp(2πx/πi)"),
"2"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2)"),
"3"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2)"),
"4"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2+exp(14πx/πi)/7^2)"),
"5"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2+exp(14πx/πi)/7^2+exp(18πx/π)/9^2i)"),
)
#元波形
Triangular_wave_x<-seq(-pi,pi,length=60)
Triangular_wave_y<-c(seq(0,pi/2,length=15),seq(pi/2,0,length=15),seq(0,pi/2,length=15),seq(pi/2,0,length=15))
plot(Triangular_wave_x,Triangular_wave_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Triangular wave",xlab="t", ylab="Real Number")
par(new=T)#上書き指定
#実数部
Triangular_wave_yr<-Re(f0(Triangular_wave_x))
plot(Triangular_wave_x,Triangular_wave_yr,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=t(0=<t<T/2), T-t(T/2<=t<T))",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}
#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5")
saveGIF({
for (i in Time_Code){
 Triangular_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822150621g:plain
三角波Triangular wave虚数定数部の反映がないのでPlot時に足し合わせる

Triangular_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(0,pi/2)
#関数と凡例の決定
switch(x,
"0"= f0<-function(x) {pi/4*x/x},
"1"= f0<-function(x) {pi/4-2*pi/pi^2*exp(2*pi*x/pi*(0+1i))},
"2"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2)},
"3"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2)},
"4"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2+exp(14*pi*x/pi*(0+1i))/7^2)},
"5"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2+exp(14*pi*x/pi*(0+1i))/7^2+exp(18*pi*x/pi*(0+1i))/9^2)}
)

switch(x,
"0"=text<-c("π/4"),
"1"=text<-c("π/4-2π/π^2*exp(2πx/πi)"),
"2"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2)"),
"3"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2)"),
"4"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2+exp(14πx/πi)/7^2)"),
"5"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2+exp(14πx/πi)/7^2+exp(18πx/π)/9^2i)"),
)
#元波形
Triangular_wave_x<-seq(-pi,pi,length=60)
Triangular_wave_y<-c(seq(0,pi/2,length=15),seq(pi/2,0,length=15),seq(0,pi/2,length=15),seq(pi/2,0,length=15))
plot(Triangular_wave_x,Triangular_wave_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Triangular wave",xlab="t", ylab="Imaginary Number")
par(new=T)#上書き指定
#虚数部+定数項
Triangular_wave_yi<-Im(f0(Triangular_wave_x))
plot(Triangular_wave_x,Triangular_wave_yi+pi/4,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=t(0=<t<T/2), T-t(T/2<=t<T))",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}
#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5")
saveGIF({
for (i in Time_Code){
 Triangular_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822153013g:plain
三角波Triangular waveの実数部と虚数部の対応

Triangular_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-1,1)
Graph_scale_y<-c(-1,1)
#関数と凡例の決定
switch(x,
"0"= f0<-function(x) {pi/4*x/x},
"1"= f0<-function(x) {pi/4-2*pi/pi^2*exp(2*pi*x/pi*(0+1i))},
"2"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2)},
"3"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2)},
"4"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2+exp(14*pi*x/pi*(0+1i))/7^2)},
"5"= f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2+exp(14*pi*x/pi*(0+1i))/7^2+exp(18*pi*x/pi*(0+1i))/9^2)}
)

switch(x,
"0"=text<-c("π/4"),
"1"=text<-c("π/4-2π/π^2*exp(2πx/πi)"),
"2"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2)"),
"3"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2)"),
"4"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2+exp(14πx/πi)/7^2)"),
"5"=text<-c("π/4-2π/π^2*(exp(2πx/πi)+exp(6πx/πi)/3^2+exp(10πx/πi)/5^2+exp(14πx/πi)/7^2+exp(18πx/π)/9^2i)"),
)

#基準円
Triangular_wave_x<-seq(-pi,pi,length=60)
plot(cos(Triangular_wave_x)*0.5,sin(Triangular_wave_x)*0.5,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Triangular wave",xlab="Real Number", ylab="Imaginary Number")
par(new=T)#上書き指定
#複素数波形
Triangular_wave_r<-Re(f0(Triangular_wave_x))
Triangular_wave_i<-Im(f0(Triangular_wave_x))
plot(Triangular_wave_r-pi/4,Triangular_wave_i,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="FT(Fourier transform) Triangular wave",xlab="Real Number", ylab="Imaginary Number")
#凡例
legend("bottomleft", legend=c("f(t)=t(0=<t<T/2), T-t(T/2<=t<T))",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}
#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5")
saveGIF({
for (i in Time_Code){
 Triangular_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822154404g:plain 

統計言語Rによる3D表示z軸=t

library(rgl)
complex_plane_z<-seq(-pi,pi,length=60)
f0<-function(x) {pi/4-2*pi/pi^2*(exp(2*pi*x/pi*(0+1i))+exp(6*pi*x/pi*(0+1i))/3^2+exp(10*pi*x/pi*(0+1i))/5^2+exp(14*pi*x/pi*(0+1i))/7^2+exp(18*pi*x/pi*(0+1i))/9^2)}
complex_plane_x<-Re(f0(complex_plane_z))
complex_plane_y<-Im(f0(complex_plane_z))
plot3d(complex_plane_x,complex_plane_y,complex_plane_z) 
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/test")

f:id:ochimusha01:20190830054423g:plain
全体像はこうだが実数部を正面にすると確かに三角波が合成されている。

f:id:ochimusha01:20190828002902p:plain

  • 描画線」が2重に見えるのは2周期分を扱ってるから。
  • 2周期分を描画してるから、基準円の半径も1/2としている。

統計言語Rによる波形合成例 放物線Parabola)の場合

f:id:ochimusha01:20190815171145g:plain

放物線Parabolaの実数部

Parabola_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(-pi/2,pi^2)
#関数と凡例の決定
switch(x,

"0"= f0<-function(x) {pi^2/3*x/x},
"1"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i)))},
"2"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2)},
"3"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2)},
"4"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2)},
"5"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2)},
"6"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2)},
"7"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2)},
"8"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2+exp(x*8*(0+1i))/8^2)},
"9"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2+exp(x*8*(0+1i))/8^2)-exp(x*9*(0+1i))/9^2}
)

switch(x,

"0"=text<-c("a^2/3"),
"1"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a))"),
"2"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2"),
"3"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2"),
"4"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2"),
"5"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2"),
"6"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2"),
"7"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2"),
"8"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2+exp(8πxi/a)/8^2"),
"9"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2+exp(8πxi/a)/8^2-cos(9πx/a)/9^2")
)

#元波形
Parabola_x<-seq(-pi,pi,length=60)
Parabola_y<-Parabola_x^2
plot(Parabola_x,Parabola_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Parabola function", xlab="t", ylab="Real Number")
par(new=T)#上書き指定
#実数部
Parabola_yr<-Re(f0(Parabola_x))
plot(Parabola_x,Parabola_yr,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=t^2(-a<=t<=a)",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5","6","7","8","9")
saveGIF({
for (i in Time_Code){
 Parabola_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822160334g:plain

放物線Parabola虚数定数部の反映がないのでPlot時に足し合わせる

Parabola_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(-pi/2,pi^2)
#関数と凡例の決定
switch(x,

"0"= f0<-function(x) {pi^2/3*x/x},
"1"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i)))},
"2"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2)},
"3"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2)},
"4"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2)},
"5"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2)},
"6"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2)},
"7"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2)},
"8"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2+exp(x*8*(0+1i))/8^2)},
"9"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2+exp(x*8*(0+1i))/8^2)-exp(x*9*(0+1i))/9^2}
)

switch(x,

"0"=text<-c("a^2/3"),
"1"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a))"),
"2"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2"),
"3"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2"),
"4"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2"),
"5"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2"),
"6"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2"),
"7"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2"),
"8"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2+exp(8πxi/a)/8^2"),
"9"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2+exp(8πxi/a)/8^2-cos(9πx/a)/9^2")
)

#元波形
Parabola_x<-seq(-pi,pi,length=60)
Parabola_y<-Parabola_x^2
plot(Parabola_x,Parabola_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Parabola function", xlab="t", ylab="Imaginary Number")
par(new=T)#上書き指定
#虚数
Parabola_yi<-Im(f0(Parabola_x))
plot(Parabola_x,Parabola_yi+pi^2/3,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=t^2(-a<=t<=a)",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5","6","7","8","9")
saveGIF({
for (i in Time_Code){
 Parabola_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822160838g:plain

放物線Parabolaの実数部と虚数部の対応

Parabola_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-2*pi,2*pi)
Graph_scale_y<-c(-2*pi,2*pi)
#関数と凡例の決定
switch(x,

"0"= f0<-function(x) {pi^2/3*x/x},
"1"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i)))},
"2"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2)},
"3"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2)},
"4"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2)},
"5"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2)},
"6"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2)},
"7"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2)},
"8"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2+exp(x*8*(0+1i))/8^2)},
"9"= f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2+exp(x*8*(0+1i))/8^2)-exp(x*9*(0+1i))/9^2}
)

switch(x,

"0"=text<-c("a^2/3"),
"1"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a))"),
"2"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2"),
"3"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2"),
"4"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2"),
"5"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2"),
"6"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2"),
"7"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2"),
"8"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2+exp(8πxi/a)/8^2"),
"9"=text<-c("a^2/3+4a^2/π^2(-exp(πxi/a)+exp(2πxi/a)/2^2-exp(3πxi/a)/3^2+exp(4πxi/a)/4^2-exp(5πxi/a)/5^2+exp(6πxi/a)/6^2-exp(7πxi/a)/7^2+exp(8πxi/a)/8^2-cos(9πx/a)/9^2")
)

#基準円
Parabola_x<-seq(-pi,pi,length=60)
plot(cos(Parabola_x)*pi,sin(Parabola_x)*pi,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform)Parabola wave",xlab="Real Number", ylab="Imaginary Number")
par(new=T)#上書き指定
#複素数波形

Parabola_r<-Re(f0(Parabola_x))
Parabola_i<-Im(f0(Parabola_x))
plot(Parabola_r-pi^2/3,Parabola_i,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="",xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=t^2(-a<=t<=a)",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5","6","7","8","9")
saveGIF({
for (i in Time_Code){
 Parabola_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822162110g:plain

統計言語Rによる3D表示z軸=t

library(rgl)
complex_plane_z<-seq(-pi,pi,length=60)
f0<-function(x) {pi^2/3+4*(-exp(x*(0+1i))+exp(x*2*(0+1i))/2^2-exp(x*3*(0+1i))/3^2+exp(x*4*(0+1i))/4^2-exp(x*5*(0+1i))/5^2+exp(x*6*(0+1i))/6^2-exp(x*7*(0+1i))/7^2+exp(x*8*(0+1i))/8^2)-exp(x*9*(0+1i))/9^2}
complex_plane_x<-Re(f0(complex_plane_z))
complex_plane_y<-Im(f0(complex_plane_z))
plot3d(complex_plane_x,complex_plane_y,complex_plane_z) 
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/test")

f:id:ochimusha01:20190830055226g:plain

全体像はこうだが実数部を正面にすると確かに放物線が合成されている。
f:id:ochimusha01:20190828003425p:plain

  • 周期は1周期分とした。
  • とりあえず対応させる基準円の半径はπとした。

②「ノコギリ波Sawtooth wave)」「矩形波Square wave)」の様な「(指数が奇数のSin関数の集合偶関数系」の場合は、虚数領域に定数部を反映しない形で波形が顕現する。

統計言語Rによる波形合成例 ノコギリ波Sawtooth waveの場合

f:id:ochimusha01:20190815072440g:plain

ノコギリ波Sawtooth waveの実数部

Sawtooth_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(0,pi)
#関数と凡例の決定
switch(x,
"0"= f0<-function(x) {pi/2*x/x},
"1"= f0<-function(x) {pi/2-exp(x*2*(0+1i))},
"2"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2},
"3"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3},
"4"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4},
"5"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5},
"6"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6},
"7"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7},
"8"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8},
"9"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9},
"10"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10},
"11"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12},
"12"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14},
"13"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16},
"14"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16-exp(x*34*(0+1i))/17-exp(x*36*(0+1i))/18},
"15"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16-exp(x*34*(0+1i))/17-exp(x*36*(0+1i))/18-exp(x*38*(0+1i))/19-exp(x*40*(0+1i))/20}
)

switch(x,
"0"=text<-c("pi/2"),
"1"=text<-c("pi/2-exp(2xi)"),
"2"=text<-c("pi/2-exp(2xi)-exp(4xi)/2"),
"3"=text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3"),
"4"=text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4"),
"5"=text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5"),
"6"=text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6"),
"7"=text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7"),
"8"=text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12)/6-exp(14xi)/7-exp(16xi)/8"),
"9"= text<-c("pi/2-exp(x2i)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7-exp(16xi)/8-exp(18xi)/9"),
"10"=text<-c("pi/2-exp(x2i)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7-exp(16xi)/8-exp(18xi)/9-exp(20xi)/10"),
"11"= text<-c("pi/2-exp(x2i)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7-exp(16xi)/8-exp(18xi)/9-exp(20xi)/10-exp(22xi)/11-exp(24xi)/12"),
"12"= text<-c("pi/2-exp(x2i)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7-exp(16xi)/8-exp(x*18)/9-exp(20xi)/10-exp(22xi2)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14"),
"13"= text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7-exp(16xi)/8-exp(18xi)/9-exp(20xi)/10-exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16"),
"14"= text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7-exp(16xi)/8-exp(18xi)/9-exp(20xi)/10-exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16-exp(34xi)/17-exp(36xi)/18"),
"15"= text<-c("pi/2-exp(2xi)-exp(4xi)/2-exp(6xi)/3-exp(8xi)/4-exp(10xi)/5-exp(12xi)/6-exp(14xi)/7-exp(16xi)/8-exp(18xi)/9-exp(20xi)/10-exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16-exp(34xi)/17-exp(36xi)/18-exp(38xi)/19-exp(40xi)/20")
)
#元波形
Sawtooth_wave_x<-seq(-pi,pi,length=60)
Sawtooth_wave_y<-rep(seq(0,pi,length=30),times=2)
plot(Sawtooth_wave_x,Sawtooth_wave_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Sawtooth wave", xlab="t", ylab="Real Number")
par(new=T)#上書き指定

#実数部
Sawtooth_wave_yr<-Re(f0(Sawtooth_wave_x))
plot(Sawtooth_wave_x,Sawtooth_wave_yr,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=t-mπ,mπ<=t<(m+1)π",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}
#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5","6","7","8","9","10","11","12","13","14","15")
saveGIF({
for (i in Time_Code){
 Sawtooth_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822163819g:plain

ノコギリ波Sawtooth wave虚数定数部の反映がないのでPlot時に足し合わせる

Sawtooth_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(0,pi)
#関数と凡例の決定
switch(x,
"0"= f0<-function(x) {pi/2*x/x},
"1"= f0<-function(x) {pi/2-exp(x*2*(0+1i))},
"2"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2},
"3"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3},
"4"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4},
"5"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5},
"6"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6},
"7"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7},
"8"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8},
"9"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9},
"10"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10},
"11"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12},
"12"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14},
"13"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16},
"14"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16-exp(x*34*(0+1i))/17-exp(x*36*(0+1i))/18},
"15"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16-exp(x*34*(0+1i))/17-exp(x*36*(0+1i))/18-exp(x*38*(0+1i))/19-exp(x*40*(0+1i))/20}
)

switch(x,
"0"=text<-c("pi/2"),
"1"=text<-c("pi/2+exp(2xi)"),
"2"=text<-c("pi/2+exp(2xi)-exp(4xi)/2"),
"3"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3"),
"4"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4"),
"5"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5"),
"6"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6"),
"7"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6-exp(14xi)/7"),
"8"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12)/6+exp(14xi)/7-exp(16xi)/8"),
"9"= text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9"),
"10"=text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10"),
"11"= text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12"),
"12"= text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(x*18)/9-exp(20xi)/10+exp(22xi2)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14"),
"13"= text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16"),
"14"= text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16-exp(34xi)/17-exp(36xi)/18"),
"15"= text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16-exp(34xi)/17-exp(36xi)/18-exp(38xi)/19-exp(40xi)/20")
)
#元波形
Sawtooth_wave_x<-seq(-pi,pi,length=60)
Sawtooth_wave_y<-rep(seq(0,pi,length=30),times=2)

plot(Sawtooth_wave_x,Sawtooth_wave_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Sawtooth wave", xlab="t", ylab="Imaginary Number")
par(new=T)#上書き指定
#虚数部+定数項

Sawtooth_wave_yi<-Im(f0(Sawtooth_wave_x))
plot(Sawtooth_wave_x,Sawtooth_wave_yi+pi/2,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=t-mπ,mπ<=t<(m+1)π",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

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

f:id:ochimusha01:20190822164017g:plain

ノコギリ波Sawtooth waveの実数部と虚数部の対応

Sawtooth_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(-pi,pi)
#関数と凡例の決定
switch(x,
"0"= f0<-function(x) {pi/2*x/x},
"1"= f0<-function(x) {pi/2-exp(x*2*(0+1i))},
"2"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2},
"3"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3},
"4"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4},
"5"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5},
"6"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6},
"7"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7},
"8"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8},
"9"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9},
"10"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10},
"11"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12},
"12"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14},
"13"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16},
"14"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16-exp(x*34*(0+1i))/17-exp(x*36*(0+1i))/18},
"15"= f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16-exp(x*34*(0+1i))/17-exp(x*36*(0+1i))/18-exp(x*38*(0+1i))/19-exp(x*40*(0+1i))/20}
)

switch(x,
"0"=text<-c("pi/2"),
"1"=text<-c("pi/2+exp(2xi)"),
"2"=text<-c("pi/2+exp(2xi)-exp(4xi)/2"),
"3"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3"),
"4"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4"),
"5"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5"),
"6"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6"),
"7"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6-exp(14xi)/7"),
"8"=text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12)/6+exp(14xi)/7-exp(16xi)/8"),
"9"= text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9"),
"10"=text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10"),
"11"= text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12"),
"12"= text<-c("pi/2+exp(x2i)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(x*18)/9-exp(20xi)/10+exp(22xi2)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14"),
"13"= text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16"),
"14"= text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16-exp(34xi)/17-exp(36xi)/18"),
"15"= text<-c("pi/2+exp(2xi)-exp(4xi)/2+exp(6xi)/3-exp(8xi)/4+exp(10xi)/5-exp(12xi)/6+exp(14xi)/7-exp(16xi)/8+exp(18xi)/9-exp(20xi)/10+exp(22xi)/11-exp(24xi)/12-exp(26xi)/13-exp(28xi)/14-exp(30xi)/15-exp(32xi)/16-exp(34xi)/17-exp(36xi)/18-exp(38xi)/19-exp(40xi)/20")
)

#基準円
Sawtooth_wave_x<-seq(-pi,pi,length=60)
plot(cos(Sawtooth_wave_x)*0.5,sin(Sawtooth_wave_x)*0.5,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform)Sawtooth wave",xlab="Real Number", ylab="Imaginary Number")
par(new=T)#上書き指定
#複素数波形
Sawtooth_wave_r<-Re(f0(Sawtooth_wave_x))
Sawtooth_wave_i<-Im(f0(Sawtooth_wave_x))
plot(Sawtooth_wave_r-pi/2,Sawtooth_wave_i,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="FT(Fourier transform)Sawtooth wave",xlab="Real Number", ylab="Imaginary Number")
#凡例
legend("bottomleft", legend=c("f(t)=t-mπ,mπ<=t<(m+1)π",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

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

f:id:ochimusha01:20190822170907g:plain

統計言語Rによる3D表示z軸=t

library(rgl)
complex_plane_z<-seq(-pi,pi,length=60)
f0<-function(x) {pi/2-exp(x*2*(0+1i))-exp(x*4*(0+1i))/2-exp(x*6*(0+1i))/3-exp(x*8*(0+1i))/4-exp(x*10*(0+1i))/5-exp(x*12*(0+1i))/6-exp(x*14*(0+1i))/7-exp(x*16*(0+1i))/8-exp(x*18*(0+1i))/9-exp(x*20*(0+1i))/10-exp(x*22*(0+1i))/11-exp(x*24*(0+1i))/12-exp(x*26*(0+1i))/13-exp(x*28*(0+1i))/14-exp(x*30*(0+1i))/15-exp(x*32*(0+1i))/16-exp(x*34*(0+1i))/17-exp(x*36*(0+1i))/18-exp(x*38*(0+1i))/19-exp(x*40*(0+1i))/20}
complex_plane_x<-Re(f0(complex_plane_z))
complex_plane_y<-Im(f0(complex_plane_z))
plot3d(complex_plane_x,complex_plane_y,complex_plane_z) 
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/test")

f:id:ochimusha01:20190830055431g:plain

全体像はこうだが虚数部を正面にすると確かにノコギリ波が合成されている。
f:id:ochimusha01:20190828033024p:plain

  • 描画線」が2重に見えるのは2周期分を扱ってるから。
  • 2周期分を描画してるから、基準円の半径も1/2としている。

統計言語Rによる波形合成例 矩形波Square waveの場合

f:id:ochimusha01:20190815123000g:plain

矩形波Square waveの実数部

Square_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(-1/2,1)
#関数と凡例の決定
switch(x,

"0"= f0<-function(x) {1/2*x/x},
"1"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))},
"2"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))},
"3"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))},
"4"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))},
"5"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))},
"6"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))},
"7"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))},
"8"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))+2/(15*pi)*exp(x*15*(0+1i))},
"9"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))+2/(15*pi)*exp(x*15*(0+1i))+2/(17*pi)*exp(x*17*(0+1i))}

)

switch(x,

"0"=text<-c("1/2"),

"1"=text<-c("1/2+2/π*exp(xi)"),

"2"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)"),

"3"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)"),

"4"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)"),

"5"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)"),

"6"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)"),

"7"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)"),

"8"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)+2/15π*exp(15xi)"),

"9"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)+2/15π*exp(15xi)+2/17π*exp(17xi)")
)

#元波形
Square_wave_x<-seq(-pi,pi,length=60)
Square_wave_y<-c(rep(0,times=30),rep(1,times=30))
plot(Square_wave_x,Square_wave_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Square wave", xlab="t", ylab="Real Number")
par(new=T)#上書き指定
#実数部

Square_wave_yr<-Re(f0(Square_wave_x))
plot(Square_wave_x,Square_wave_yr,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")
#凡例
legend("bottomleft", legend=c("f(t)=0(-π=<t<0), 1(0<=t<π))",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5","6","7","8","9")
saveGIF({
for (i in Time_Code){
 Square_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822171154g:plain

矩形波Square wave虚数定数部の反映がないのでPlot時に足し合わせる

Square_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-pi,pi)
Graph_scale_y<-c(-1/2,1)
#関数と凡例の決定
switch(x,

"0"= f0<-function(x) {1/2*x/x},
"1"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))},
"2"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))},
"3"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))},
"4"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))},
"5"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))},
"6"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))},
"7"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))},
"8"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))+2/(15*pi)*exp(x*15*(0+1i))},
"9"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))+2/(15*pi)*exp(x*15*(0+1i))+2/(17*pi)*exp(x*17*(0+1i))}

)

switch(x,

"0"=text<-c("1/2"),

"1"=text<-c("1/2+2/π*exp(xi)"),

"2"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)"),

"3"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)"),

"4"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)"),

"5"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)"),

"6"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)"),

"7"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)"),

"8"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)+2/15π*exp(15xi)"),

"9"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)+2/15π*exp(15xi)+2/17π*exp(17xi)")
)

#元波形
Square_wave_x<-seq(-pi,pi,length=60)
Square_wave_y<-c(rep(0,times=30),rep(1,times=30))
plot(Square_wave_x,Square_wave_y,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform) Square wave", xlab="t", ylab="Imaginary Number")
par(new=T)#上書き指定
#虚数部+定数項

Square_wave_yi<-Im(f0(Square_wave_x))
plot(Square_wave_x,Square_wave_yi+1/2,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="", xlab="", ylab="")

#凡例
legend("bottomleft", legend=c("f(t)=0(-π=<t<0), 1(0<=t<π))",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5","6","7","8","9")
saveGIF({
for (i in Time_Code){
 Square_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822172327g:plain

矩形波Square waveの実数部と虚数部の対応

Square_wave_exp<-function(x){

#グラフのスケール決定
Graph_scale_x<-c(-2,2)
Graph_scale_y<-c(-2,2)
#関数と凡例の決定
switch(x,

"0"= f0<-function(x) {1/2*x/x},
"1"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))},
"2"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))},
"3"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))},
"4"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))},
"5"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))},
"6"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))},
"7"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))},
"8"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))+2/(15*pi)*exp(x*15*(0+1i))},
"9"= f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))+2/(15*pi)*exp(x*15*(0+1i))+2/(17*pi)*exp(x*17*(0+1i))}

)

switch(x,

"0"=text<-c("1/2"),

"1"=text<-c("1/2+2/π*exp(xi)"),

"2"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)"),

"3"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)"),

"4"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)"),

"5"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)"),

"6"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)"),

"7"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)"),

"8"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)+2/15π*exp(15xi)"),

"9"=text<-c("1/2+2/π*exp(xi)+2/3π*exp(3xi)+2/5π*exp(5xi)+2/7π*exp(7xi)+2/9π*exp(9xi)+2/11π*exp(11xi)+2/13π*exp(13xi)+2/15π*exp(15xi)+2/17π*exp(17xi)")
)

#基準円
Square_wave_x<-seq(-pi,pi,length=60)
plot(cos(Square_wave_x)*0.5,sin(Square_wave_x)*0.5,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(0,0,0),main="FT(Fourier transform)Square wave",xlab="Real Number", ylab="Imaginary Number")
par(new=T)#上書き指定
#複素数波形
Square_wave_r<-Re(f0(Square_wave_x))
Square_wave_i<-Im(f0(Square_wave_x))
plot(Square_wave_r-1/2,Square_wave_i,xlim=Graph_scale_x,ylim=Graph_scale_y,type="l",col=rgb(1,0,0),main="",xlab="", ylab="")

#凡例
legend("bottomleft", legend=c("f(t)=0(-π=<t<0), 1(0<=t<π))",text),lty=c(1,1),col=c(rgb(0,0,0),rgb(1,0,0)))
}

#アニメーション
library("animation")
Time_Code=c("0","0","0","0","0","1","1","1","2","2","2","3","3","3","4","4","4","5","5","6","7","8","9")
saveGIF({
for (i in Time_Code){
 Square_wave_exp(i)
}
}, interval = 0.1, movie.name = "TEST01.gif")

f:id:ochimusha01:20190822173850g:plain

統計言語Rによる3D表示z軸=t

library(rgl)
complex_plane_z<-seq(-pi,pi,length=60)
f0<-function(x) {1/2+2/pi*exp(x*(0+1i))+2/(3*pi)*exp(x*3*(0+1i))+2/(5*pi)*exp(x*5*(0+1i))+2/(7*pi)*exp(x*7*(0+1i))+2/(9*pi)*exp(x*9*(0+1i))+2/(11*pi)*exp(x*11*(0+1i))+2/(13*pi)*exp(x*13*(0+1i))+2/(15*pi)*exp(x*15*(0+1i))+2/(17*pi)*exp(x*17*(0+1i))}
complex_plane_x<-Re(f0(complex_plane_z))
complex_plane_y<-Im(f0(complex_plane_z))
plot3d(complex_plane_x,complex_plane_y,complex_plane_z) 
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/test")

f:id:ochimusha01:20190830055703g:plain

全体像はこうだが虚数部を正面にすると確かに矩形波が合成されている。
f:id:ochimusha01:20190828033422p:plain

f:id:ochimusha01:20190828033453p:plain

  • とりあえず周期は1周期分とした。
  • とりあえず対応させる基準円の半径は1/2とした。

とどのつまり、複素指数関数を用いたフーリエ解析とは「単位円及びそれに紐付けられた実数次元と虚数次元を断面とし、時間単位tで積層されるトーラスあるいは円筒)」から時間次元tに沿って偶関数の場合は実数次元、奇関数の場合は虚数次元を抽出した内容?

  • そもそも「トーラスtorus, 複数形: tori)」とは何か?
  • 実際の変換過程では「(角度2πラジアンと距離2πの相互変換などを担う積分英:line integral; 稀に path integral, curve integral, curvilinear integral)や(元図形が円筒と想定可能な場合にその作業すら不要)「(曲面が与えられた時、その上のスカラー場やベクトル場を積分する定積分/二重積分積分英:surface integral)」概念が絡んでくる。

具体的対応は以下。

実際には円筒空間とトーラス空間の往復は「(時間軸tに沿って展開する線型空間R空間=t空間)と(複素数単位sに沿って奇関数と偶関数を連続的に表現する複素線型空間C空間=s空間)」と考える展開が多い様です。

まず集合Vを考える。これが何の集合であるかについては制限しない。集合の要素のことを専門の数学では「げん)」と呼ぶわけだが、この集合の元どうしの和が計算できて、その結果も同じ集合の元になっているとする。また、集合の元に対して定数倍するという計算も許されていて、その結果も同じ集合の元になっているとする。
*ちなみにモンゴル軍団が名乗ったのはただの「(げん)」出なく「大元(たいげん)」で、これは易経における「全てが最高状態(2進数でいう「全てが0/1の1」状態)」すなわちタロットカードにおいて「完成」を意味する「太陽」カードの概念に由来する。

f:id:ochimusha01:20190823080817j:plain

そして和については次のような規則が成り立っているとする。 

  • (1). (x+y)+z = x+(y+z)結合法則
  • (2).x+y = y+x交換法則
  • (3).どの元xに対しても0+x = x」となる元0が存在する (零元の存在
  • (4).どの元xに対しても「x+x′ = 0となる元x′が存在する」 (逆元の存在)(そのx′を−xと表す

定数倍については、次のような規則が成り立っているとする。ここに出てくる定数aやbは今のところ実数だとしておこう。

  • (5).(a+b)x = ax+bx右分配法則
  • (6).a(x+y) = ax+ay左分配法則
  • (7).(ab)x = a(bx)結合法則
  • (8).1x = x 

集合Vの元がこれらの (1) ~ (8) の条件を全て満たすとき、その集合Vのことを「線形空間」と呼ぶ。ここでは定数aやbを実数だとしておいたので、「線型空間」と呼んで区別することもある。定数aやbを複素数だと決めておくことも出来て、その場合には「複素線形空間」と呼ぶこともある。どちらに決めても今後の議論はほとんど変わらない。これを元にした証明の内容は、「定数は実数である」と制限している部分を「複素数である」と置き換えるだけで同じ結果が言えることが多い。

教科書で「R上の線形空間」と書かれているのは実線型空間のことだし、「C上の線形空間」と書かれているのは複素線型空間、「K上の線形空間」と書かれているのはそのどちらか、どちらでも、という意味だ。 

線型空間=ベクトル空間」の基本イメージ

線形代数に出てくるベクトルは、座標の原点を始点とする多数の矢印をイメージすると分かりやすい。互いに異なるベクトルは、それぞれ矢印の先が異なる位置を表している。このように、位置の座標を指し示すために使うベクトルを「位置ベクトル」というのだった。
*数学ではイメージを固定化したくないので、このような用語をわざわざ使わない。
あるベクトルが集合に含まれていて、それを定数倍したあらゆるベクトルも同じ集合に含まれているなら、それら全てのベクトルは「ひとつの無限に続く直線」の上に乗っているだろう。この集合の中にはこれ以外に、その直線上にない別のベクトルもあったとする。それを定数倍したものの集まりは別の直線を表す事ができるだろう。このような具合にして、一つの集合の中に異なる直線に乗るようなベクトルがあったとする。それら異なる直線上のベクトルどうしの足し算ができて、その結果も同じ集合に含まれるなら、この集合に含まれるベクトルを全て集めれば、一つの平面を構成することが出来るだろう。このように、集合に含まれるベクトルの一つ一つが原点からウニのように矢印を突き出している。ウニと違うのは、この矢印には短いものも長いものもあり、長いものは無限の彼方を指しているものもあるというところだ。まるでテントを張るかのように、ベクトルの一つ一つが集まって「空間を張っている」ようなイメージだ。
*数学ではたとえこのような空想可能な具体的なイメージが成り立たない場合であっても、集合のことを空間と表現することが多い。集合の元が抽象的な空間を構成しているかのようなイメージである。

f:id:ochimusha01:20190823081536j:plain

f:id:ochimusha01:20190823084702j:plain
*そして…

f:id:ochimusha01:20190823084850p:plain

 「フーリエ変換/逆変換」の考え方自体は近似手段として似た構造を有する(とりあえず-∞〜∞の期間を設定し、納得のいく精度まで細部を算出するが、必ず残余項が残るという構造WO共有するテイラー級数Taylor series)/マクローリン級数McLoughlin series)と良く似ており、同様のベクトル空間vector space)/線型空間linear space)を構成します。

テイラー・フーリエ・Manipulate

整数でない実数は適当な有効数字の小数で表すのが実用的である.同じ
ことを関数でやるのがたとえばテイラー展開であり,フーリエ展開である。
*このドキュメントではMathematicaを活用しているが、このサイトだとRのRyacasライブラリの領分となる。

ãYacas ãã¼ãªã¨å¤æãã®ç»åæ¤ç´¢çµæ

調和解析(Harmonic analysis) - Wikipedia

関数や信号を基本波の重ね合わせとして表現することに関わる数学の一分野。フーリエ級数フーリエ変換及びその一般化について研究する分野である。

  • 調和 (harmonic)」の語は、もとは物理的な固有値問題から来たもので、(楽器の弦における調和振動の周波数のように)周波数が他の周波数の整数倍となっているような波を意図したものであるが、現在ではその原義を超えて一般化した使い方をされている。

19世紀から20世紀を通じて、調和解析の扱う主題は広く、応用も信号処理、量子力学神経科学など多岐にわたる。

もしかしたらタイラー/マクローリン解析Taylor analysis/Maclaurin analysis)やフーリエ解析Fourier analysis)の背景にあるオイラーの公式Euler's formulae^θi= Cos(θ)+Sin(θi)概念そのものが、線形空間R実数空間)と線形空間C虚数空間)を結びつける鍵とか?

f:id:ochimusha01:20190512232958g:plain

統計言語Rによる3D表示z軸=t

library(rgl)
complex_plane_z<-seq(-3*pi,3*pi,length=180)
complex_plane_x<-cos(complex_plane_z)
complex_plane_y<-sin(complex_plane_z)
plot3d(complex_plane_x,complex_plane_y,complex_plane_z) 
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/test")

f:id:ochimusha01:20190830060155g:plain

f:id:ochimusha01:20190823145219p:plain

実際、オイラーの公式Euler's formulae^θi= Cos(θ)+Sin(θi)の周期展開自体が四元数quaternion=クォターニオン)でいう所の「1周して元の緯度に戻るisoclinic rotationそのものなんですね。

f:id:ochimusha01:20190819051732g:plain