如何将单个值更改为向量 - JULIA

Luc*_*ito 0 julia

我在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")
Run Code Online (Sandbox Code Playgroud)

Mat*_* B. 5

我强烈建议阅读Julia与MATLAB的值得注意的差异.特别是:

  • 在朱,[x,y,z]将总是构建含有一个3元素数组x,yz.

  • 在朱莉娅,a:ba: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
 ?
Run Code Online (Sandbox Code Playgroud)