如何在Julia中从if语句内部断开for循环



我正在尝试将python建模(不是很有效(转换为Julia代码(在本文中更有用(,但我没有找到如何打破for循环以及如何在本文中打印值。

Python代码

for i in np.range(1, nt)
if t[x == s] == 100:
s_time = i*dt
print(s_time)
break

Julia代码我试过了:

for i = 1:nt
if round.(Int, t[x.==s]) == 100
s_time = i*dt
println(s_time)
break
end
end

这里的变量并不重要,但dt是一个值,它允许我知道i函数中for循环中[y]中的时间,t[x.==s] == 100允许我知道何时要中断循环。

Julia代码不会返回任何错误,但不会中断,也不会打印任何内容。

完整代码(适用于Jupyter Notebook用户(:

# NUMERICS
ti = 30  # surface temperature
td = 1000  # dyke temperature
tel = 30  # right lim temperature
teg = tel  # left lim temperature
x1 = 80  # central position dyke 2
x2 = 110  # central position dyke 1
d1 = 24  # dyke diameter
d2 = 10  # dyke diameter
s = 160  # probe position
yd1 = 0  # dyke 1 intrusion year
yd2 = 15  # dyke 2 intrusion year
d = 40  # rock diffusivity
size = 200  # size of the model
ttot = 30;  # total time in year
nx = 2001  # cells number
dx = size/(nx-1)  # cells size
dt = dx^2/(2.1*d)  # frame condition
nt = round(Int, ttot/dt)  # frame number
x = LinRange(0, size, nx); # size model
# INITIALISATION
indexing_1_l = round(Int, (x1 - d1/2)*nx/size)
indexing_1_r = round(Int, (x1 + d1/2)*nx/size)
indexing_2_l = round(Int, (x2 - d2/2)*nx/size)
indexing_2_r = round(Int, (x2 + d2/2)*nx/size);
t = ti * ones(nx)
t[indexing_1_l:indexing_1_r] .= td;
using Plots
gr() ;
# PLOTTING LOOP
for i = 1:nt 

q = -d*(diff(t)/dx)
dcdt = -diff(q)/dx
t[2:end-1] = t[2:end-1] + dcdt*dt

t[1] = teg
t[end] = tel

if i == round(Int, yd2/dt)
t[indexing_2_l:indexing_2_r] .= td
end

# IF STATEMENT THAT DOESN'T WORK
if round.(Int, t[x.==s]) == 100
s_time = i*dt
println("$s_time")
break
end
if mod(i, 1000) == 0
IJulia.clear_output(true)
pt = plot(x, t, label = :false, c="red", title=" $(round.(Int, i*dt)) [y] - Dyke intrusion", 
xlabel="Distance [m]", ylabel="Temperature [°C]", ylims=(0, 1000), size = (800, 600))
Plots.display(pt)
end

end

这永远不会返回true,因为数组不能等于一个数字:

if round.(Int, t[x.==s]) == 100

看看这个

julia> [100] == 100
false

目前还不完全清楚你想要它意味着什么,但也许这个

if all(round.(Int, t[x.==s]) .== 100)

或者any

您有语法错误!println(s_time(

最新更新