library(rgl) # On console p = array(1:72000, dim=c(20,36,100)) k = 4187 # phase constant [rad/m] = (2*pi)/lambda =(2*3.14)/(1500/1000000) a = 0.0025 # radius of diaphragm [m] f = 1000000 # frequency [Hz] rou = 1.06 # density for (r0 in 1:20) # Deapth [*5 mm] { for (gamma in 1:36) { Jn_z = 0 for (m in 1:100) { z = k*a*sin(gamma*10) P_Jn = (((-1)^m)/(factorial(m)*factorial(m+1)))*(z/2)^(2*m+1) Jn_z = Jn_z + P_Jn } Imp<-complex(real=0,imaginary=2*pi*f*rou) Phase<-complex(real=0,imaginary=2*pi*f-k*r0) p[r0,gamma,m] = Imp*(a^2*5*exp(Phase))/(r0*(Jn_z/(k*a*sin(gamma*10)))) # Sound Pressure = ρ*(d(fai)/dt) ω*ρ*((a^2)*Vm*e^j(ωt-kr0))/r0*(J1((k*a*sinγ)/(k*a*sinγ)) } } plot3d(x = r0, y = gamma, z = m ) # この命令で、グラフが表示されない
でも複素数の計算でエラーで、プロットの仕方もこれでいいのかわからない
実現したいこと
小さな音源から出る音圧(3次元的な広がりを計算ししたものを)
p[r0,gamma,m]のグラフとして表示したい。
発生している問題・エラーメッセージ
エラーメッセージ
最後の命令文:
plot3d(x = r0, y = gamma, z = m )
の所で、
Warning message:
In xyz.coords(x, y, z, xlab = xlabel, ylab = ylabel, zlab = zlabel, :
imaginary parts discarded in coercion
該当のソースコード
R (RStudioの元で使っている)
ソースコード(全コード)
library(rgl) # On console
p = array(1:72000, dim=c(20,36,100))
k = 1 # phase constant [rad/m]
a = 0.0025 # radius of diaphragm [m]
f = 1000000 # frequency [Hz]
rou = 1.06 # density
for (r0 in 1:20) # Deapth [5 mm]
{
for (gamma in 1:36)
{
Jn_z = 0
for (m in 1:100)
{
z = kasin(gamma10)
P_Jn = (((-1)^m)/(factorial(m)factorial(m+1)))(z/2)^(2m+1)
Jn_z = Jn_z + P_Jn
}
p[r0,gamma,m] = (2pifrou)i*((a^25exp((2pif-kr0)i))/r0(Jn_z/(kasin(gamma10))) # Sound Pressure = ρ(d(fai)/dt) ωρ*((a^2)Vme^j(ωt-kr0))/r0*(J1((k*a*sin(gamma))/(k*a*sin(gamma)))
}
}
plot3d(x = r0, y = gamma, z = m )
試したこと
希望としては、
x軸がr0、y軸がgamma、z軸がにして、
p[r0,gamma,m]は、その各点での色の濃さのような
表現のし方が出来ればいいんだけど、グラフ自体が
表示されないので、何とも。。。
補足情報(FW/ツールのバージョンなど)
3次元プロットも、
plot3d(x = r0, y = gamma, z = m )
でいいかどうかも確認したい
あなたの回答
tips
プレビュー