[英]How to break a for loop from inside an if statement in Julia?
我正在嘗試將 python 模型化(不是很有效)轉換為 Julia 代碼(在這種情況下更有用),但我沒有找到如何打破 for 循環以及如何在這種情況下打印值。
Python代碼
for i in np.range(1, nt)
if t[x == s] == 100:
s_time = i*dt
print(s_time)
break
我試過的朱莉婭代碼:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.