我试图以一种非常无效的方式打破嵌套循环:
BreakingPoint = false
a=["R1","R2","R3"]
b=["R2","R3","R4"]
for i in a
for j in b
if i == j
BreakingPoint = true
println("i = $i, j = $j.")
end
if BreakingPoint == true; break; end
end
if BreakingPoint == true; break; end
end
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?在我的实际问题,我没有什么是数组的想法a和b,除了他们是ASCIIString秒.数组名称(a以及b示例代码)也是通过元编程方法自动生成的.
在C ++课程中,我学会了一些技巧,例如避免重复计算,使用更多的加法而不是更多的乘法,避免幂等以提高性能。但是,当我尝试使用Julia-Lang优化代码时,我对相反的结果感到惊讶。
例如,以下是一些未进行数学优化的方程式(所有代码都是用Julia 1.1编写的,不是JuliaPro编写的):
function OriginalFunction( a,b,c,d,E )
# Oprations' count:
# sqrt: 4
# ^: 14
# * : 14
# / : 10
# +: 20
# -: 6
# = : 0+4
x1 = (1/(1+c^2))*(-c*d+a+c*b-sqrt(E))
y1 = d-(c^2*d)/(1+c^2)+(c*a)/(1+c^2)+(c^2*b)/(1+c^2)-(c*sqrt(E))/(1+c^2)
x2 = (1/(1+c^2))*(-c*d+a+c*b+sqrt(E))
y2 = d-(c^2*d)/(1+c^2)+(c*a)/(1+c^2)+(c^2*b)/(1+c^2)+(c*sqrt(E))/(1+c^2)
return [ [x1;y1] [x2;y2] ]
end
Run Code Online (Sandbox Code Playgroud)
我用一些技巧优化了它们,包括:
(a*b + a*c) -> a*(b+c)
因为加法比乘法快。a^2 -> a*a
避免电源操作。x = a * (1+c^2); y = b * (1+c^2)
->
temp = 1+c^2
x …Run Code Online (Sandbox Code Playgroud) 我正在使用Julia(版本0.4.6),我尝试过的方法是:
a = 123
println( string(Int(a))*"b" )
Run Code Online (Sandbox Code Playgroud)
这看起来很长很尴尬.
我尝试过的另一种方法是将其写入文件,然后阅读它.这显然更糟.我想知道是否有推荐的方法.