我在Julia有一个计算很多值的程序,包括最终积分的结果。计划中计算的所有值都取决于sigma
,首先修复sigma = 0.6
。现在我必须做一个值表,并将sigma
更改为sigma= 0.319 / R
,for R in [0.5:0.5:10]
(20分)。
因此,对于每个R
,我将在我的计划中得到最终结果。该程序的输出是一个完整的结果,称为omega
。
那么,我怎么能这样做,程序没有大的改变?
sigma
在程序开始时声明。
我尝试将R = [ 0.5:0.5 :10 ]
和sigma = 0.319./R
放在一起,但在nexts行中,程序无法计算其他值。我有此错误消息:
MethodError: no method matching *(::Array{Float64,1}, ::Array{Float64,1})
using NLsolve
include("C:\\Users\\Lucas\\Desktop\\LUCAS\\Julia\\brent.jl")
R = 0.5:0.5:10
sigma = 0.319./R
Φ(r) = 2/15*sigma^9*(1/(r-1)^9-1/(r+1)^9-9/8/r*(1/(r-1)^8-1/(r+1)^8))-
sigma^3*(1/(r-1)^3-1/(r+1)^3-3/2/r*(1/(r-1)^2-1/(r+1)^2))
function Φl(r)
((3*sigma^3)/(2*r^2*(1+r)^2)+(3*sigma^3)/(r*(1+r)^3)-(3*sigma^3)/(1+r)^4
-(3*sigma^9)/(20*r^2*(1+r)^8)
-(6*sigma^9)/(5*r*(1+r)^9)
+(6*sigma^9)/(5*(1+r)^10)
-(3*sigma^3)/((r-1)^3*r)
+(6*sigma^9)/(5*(r-1)^9*r)
-(3*sigma^3)/(2*(r-1)^2*r^2)
+(3*sigma^9)/(20*(r-1)^8*r^2)
+(3*sigma^3)/(r-1)^4-(6*sigma^9)/(5*(r-1)^10))
end
function Φll(r)
((-(3*sigma^3)/(r^3*(1+r)^2))-(6*sigma^3)/(r^2*(1+r)^3)
-(9*sigma^3)/(r*(1+r)^4)+(12*sigma^3)/(1+r)^5
+(3*sigma^9)/(10*r^3*(1+r)^8)
+(12*sigma^9)/(5*r^2*(1+r)^9)
+(54*sigma^9)/(5*r*(1+r)^10)
-(12*sigma^9)/(1+r)^11+(9*sigma^3)/((r-1)^4*r)
-(54*sigma^9)/(5*(r-1)^10*r)
+(6*sigma^3)/((r-1)^3*r^2)
-(12*sigma^9)/(5*(r-1)^9*r^2)
+(3*sigma^3)/((r-1)^2*r^3)
-(3*sigma^9)/(10*(r-1)^8*r^3)
-(12*sigma^3)/(r-1)^5+(12*sigma^9)/(r-1)^11)
end
Veff(r,b,g) = Φ(r)+b^2*g^2/r^2
Veffl(r,b,g) = Φl(r)-2b^2*g^2/r^3
Veffll(r,b,g) = Φll(r)+6b^2*g^2/r^4
function rc0bc0gc0( sigma )
rc0 = brent(r->3Φl(r)+r*Φll(r),1.02,5)
gc0 = sqrt(Φ(rc0)+rc0*Φl(rc0)/2)
bc0 = rc0*sqrt(gc0^2-Φ(rc0))/gc0
rc0, bc0, gc0
end
rc0, bc0, gc0 = rc0bc0gc0(sigma) # the error is here !
println("rc0 = $rc0, bc0 = $bc0, gc0 = $gc0")
答案 0 :(得分:5)
我强烈建议您阅读Julia's noteworthy differences from MATLAB。特别是:
在Julia中,
[x,y,z]
将始终构建一个包含x
,y
和z
的3元素数组。在Julia中,
a:b
和a:b:c
构建Range
个对象。要在MATLAB中构造一个完整的向量, 使用collect(a:b)
。通常,不需要调用collect
。Range
会 在大多数情况下,它就像一个普通的数组,但效率更高,因为它懒惰地计算它的值。
将这两个部分组合在一起,您将看到[0.5:0.5:10]
是一个数组,其中只包含一个元素!它是一个包含范围的数组。所以你的修复很简单:你需要R = 0.5:0.5:10
(没有括号)。
julia> R = 0.5:0.5:10
sigma = 0.319./R
20-element Array{Float64,1}:
0.638
0.319
⋮