我最近用println
在终端输出的时候,总是有些额外的字母。
println("正在计算Method1")
wakevol1 = getWakeVoltage(zvec, ρvec, wake, Δz, Nb)
println("正在计算Method2")
wakevol2 = getWakeVoltage(zvec, ρvec, ωvec, reZvec, imZvec, Δω, Δz, Nb)
结果:
o正在计算Method1n
da正在计算Method2
a
我最近用println
在终端输出的时候,总是有些额外的字母。
println("正在计算Method1")
wakevol1 = getWakeVoltage(zvec, ρvec, wake, Δz, Nb)
println("正在计算Method2")
wakevol2 = getWakeVoltage(zvec, ρvec, ωvec, reZvec, imZvec, Δω, Δz, Nb)
结果:
o正在计算Method1n
da正在计算Method2
a
请尽量贴出可以让大家执行的完整精简代码。你此处的getWakeVoltage
函数的定义以及输入变量均未给出,我们无法判断问题出处。
你好,我是想测试下面两个方法的相似程度:
"""
根据尾场函数,计算Wake Voltage.
"""
function getWakeVoltage(zvec::Vector{Float64}, ρvec::Vector{Float64}, funz2wakez::Union{Interpolations.Extrapolation,Function}, Δz, Nb, elementcharge=1.6021766208e-19)
volvec = zeros(size(zvec, 1))
@sync for i in 1:length(zvec)
Threads.@spawn begin
s = 0.0
@fastmath for j in 1:length(zvec)
s += funz2wakez((i-j)*Δz) * ρvec[j] * Δz
end
volvec[i] = s
end
end
-Nb*elementcharge*volvec
end
"""
根据只有正半频域的阻抗,计算Wake Voltage.
"""
function getWakeVoltage(zvec::Vector{Float64}, ρvec::Vector{Float64}, ωvec::Vector{Float64}, reimpedancevec::Vector{Float64}, imimpedancevec::Vector{Float64}, Δω, Δz, Nb, elementcharge=1.6021766208e-19, clight=299792458.0)
volvec = zeros(size(zvec, 1))
@sync for i in 1:(length(zvec)-1)
Threads.@spawn begin
s = 0.0
@fastmath @inbounds for ωindex in 1:length(reimpedancevec)
ω = ωvec[ωindex]
tmp1 = 0.0
tmp2 = 0.0
@fastmath @inbounds for j in (i+1):length(zvec)
ϕ = ω*(i-j)*Δz/clight
tmp1 += ρvec[j]*cos(ϕ)
tmp2 += ρvec[j]*sin(ϕ)
end
s += reimpedancevec[ωindex]*tmp1 - imimpedancevec[ωindex]*tmp2
end
volvec[i] = s
end
end
-Nb*elementcharge*Δω*Δz/π/2 .* volvec # Why /2? Because 我们拿到的正半频域的阻抗,通常是将负半频域的幅值折叠过去的。
end
我调用这两个方法的完整代码:
computername = ENV["COMPUTERNAME"]
if computername == "家里电脑"
push!(LOAD_PATH, "E:/Documents/JuliaProgram/MyModules/")
elseif computername == "宿舍电脑"
push!(LOAD_PATH, "F:/Documents/JuliaProgramme/MyModules")
elseif computername=="DESKTOP-FDIN0I7"
push!(LOAD_PATH, "D:/Documents/Julia/MyModules")
elseif computername=="TINA"
push!(LOAD_PATH, "D:/JuliaProgramme/MyModules")
end
using DoubleRFs, CSV, DataFrames, Interpolations, BenchmarkTools, Plots
function wake(z::Float64)::Float64
if z > 0.0
return 0.0
elseif z==0.0
return α*Rs
else
return 2α*Rs*exp(α*z/clight)*(cos(ωbar*z/clight)+α/ωbar*sin(ωbar*z/clight))
end
end
function gaussianρ(z, σz)
1/sqrt(2*π)/σz*exp.(-0.5 .* (z./σz).^2)
end
function reimpedance(ω)
res = 1+Q^2*(ωR/ω-ω/ωR)^2
2*Rs/res
end
function imimpedance(ω)
-2.0*Rs*Q*(ωR/ω-ω/ωR)/(1+Q^2*(ωR/ω-ω/ωR)^2)
end
const σz = 0.00252
const Nb = 5e-9/1.6e-19
const Δz = 0.01σz
const Rs = 891898
const ωR = 2π*56e9
const Q = 10
const α = ωR/2Q
const ωbar = sqrt(ωR^2 - α^2)
const clight = 3e8
const Δω = 1e10
ωvec = collect(Δω:Δω:5e12)
zvec = collect(-0.2:Δz:0.2)
ρvec = gaussianρ(zvec, σz)
reZvec = reimpedance.(ωvec)
imZvec = imimpedance.(ωvec)
println("正在计算Method1")
wakevol1 = getWakeVoltage(zvec, ρvec, wake, Δz, Nb)
println("正在计算Method2")
wakevol2 = getWakeVoltage(zvec, ρvec, ωvec, reZvec, imZvec, Δω, Δz, Nb)
gr()
plt = plot(zvec, wakevol1, label="Method1")
plot!(plt, zvec, wakevol2, label="Method2")
display(plt)
几点尝试建议:
println
后边加 flush(stdout)
odnaa
不在 println
里,排除键盘误触,看能不能再复现,以及看这些字符是执行哪段代码出来的回复点错了,不好意思