# code
function zldata()
Data = readdlm( "D:\\Julia\\IEEE4.txt" )
n=Data[1,1]
zls=Data[1,2]
zero=findall(iszero,Data[:,1])
czl=Data[zero[1,1]+1:zero[2,1]-1,:]#纯支路之间,序号,i,j ,r,x,b/2
duididaona=Data[zero[2,1]+1:zero[3,1]-1,:]#对地节点数,导纳
T=Data[zero[3,1]+1:zero[4,1]-1,:]#变压器支路,序号,i,j ,r,x,k,k下,k上
PQ=Data[zero[4,1]+1:zero[5,1]-1,:]#所有节点序号,PG,QG,PL,QL,节点类型
PV=Data[zero[5,1]+1:zero[6,1]-1,:]#PV和平衡节点的节点号,U,θ,Q下,Q上
V=PV[:,2]
pq=0
pv=0
ph=0
bh=PQ[:,6]
e=Array[float,n,1]
f=Array[float,n,1]
for c=1:n
if bh[c]==1
pq+=1
elseif bh[c]==2
pv+=1
else
ph=c#平衡节点的位置
end
end
phv=size(PV,1)#读取PV阵的行数,ph节点放PV的最后一行
e=rand(Float32, n, 1)
f=rand(Float32, n, 1)
for a=1:n
if bh[a]==1
e(a)=1
f(a)=0
P(a)=PQ(a,2)-PQ(a,4)
Q(a)=PQ(a,3)-PQ(a,5)
elseif bh[a]==2
e(a)=V(a-pq)
f(a)=0
P(a)=PQ(a,2)-PQ(a,4)
else
e(a)=V(phv)*cos(PV(phv,3))
f(a)=V(phv)*sin(PV(phv,3))
end
end
end
#问题
不进入for循环,也不出结果,请问这是什么原因
你数组索引写错了,是nums[index]
,不是nums(index)
不进入for
的话,可能是你的1:n
中的n是负数,无法生成这个范围
- 你的i数组有一部分是错的,
- 看有没有进入循环可以通过加
println()
,也许你的n
是负数 - 我其实只是闲得想试一下 代码的 diff 功能,发现不能和 高亮一起用,有diff 就没有代码高亮。
function zldata()
Data = readdlm( "D:\\Julia\\IEEE4.txt" )
n=Data[1,1]
zls=Data[1,2]
zero=findall(iszero,Data[:,1])
czl=Data[zero[1,1]+1:zero[2,1]-1,:]#纯支路之间,序号,i,j ,r,x,b/2
duididaona=Data[zero[2,1]+1:zero[3,1]-1,:]#对地节点数,导纳
T=Data[zero[3,1]+1:zero[4,1]-1,:]#变压器支路,序号,i,j ,r,x,k,k下,k上
PQ=Data[zero[4,1]+1:zero[5,1]-1,:]#所有节点序号,PG,QG,PL,QL,节点类型
PV=Data[zero[5,1]+1:zero[6,1]-1,:]#PV和平衡节点的节点号,U,θ,Q下,Q上
V=PV[:,2]
pq=0
pv=0
ph=0
bh=PQ[:,6]
e=Array[float,n,1]
f=Array[float,n,1]
for c=1:n
+ println("进入循环1")
if bh[c]==1
pq+=1
elseif bh[c]==2
pv+=1
else
ph=c#平衡节点的位置
end
end
phv=size(PV,1)#读取PV阵的行数,ph节点放PV的最后一行
e=rand(Float32, n, 1)
f=rand(Float32, n, 1)
for a=1:n
+ println("进入循环2")
if bh[a]==1
- e(a)=1
- f(a)=0
- P(a)=PQ(a,2)-PQ(a,4)
- Q(a)=PQ(a,3)-PQ(a,5)
+ e[a]=1
+ f[a]=0
+ P[a]=PQ[a,2]-PQ[a,4]
+ Q[a]=PQ[a,3]-PQ[a,5]
elseif bh[a]==2
- e(a)=V(a-pq)
- f(a)=0
- P(a)=PQ(a,2)-PQ(a,4)
+ e[a]=V[a-pq]
+ f[a]=0
+ P[a]=PQ[a,2]-PQ[a,4]
else
- e(a)=V(phv)*cos(PV(phv,3))
- f(a)=V(phv)*sin(PV(phv,3))
+ e[a]=V[phv]*cos(PV[phv,3])
+ f(a)=V[phv]*sin(PV[phv,3])
end
end
end
之前没有使用包,所以n没有赋值上去
但现在点运行还是没有出结果
程序如下
"'Julia
#code
using DelimitedFiles
function zldata()
Data = readdlm( "D:\\Julia\\IEEE4.txt" )
n=Data[1,1]
zls=Data[1,2]
zero=findall(iszero,Data[:,1])
czl=Data[zero[1,1]+1:zero[2,1]-1,:]#纯支路之间,序号,i,j ,r,x,b/2
duididaona=Data[zero[2,1]+1:zero[3,1]-1,:]#对地节点数,导纳
T=Data[zero[3,1]+1:zero[4,1]-1,:]#变压器支路,序号,i,j ,r,x,k,k下,k上
PQ=Data[zero[4,1]+1:zero[5,1]-1,:]#所有节点序号,PG,QG,PL,QL,节点类型
PV=Data[zero[5,1]+1:zero[6,1]-1,:]#PV和平衡节点的节点号,U,θ,Q下,Q上
V=PV[:,2]
pq=0
pv=0
ph=0
bh=PQ[:,6]
e=Array[float,n,1]
f=Array[float,n,1]
for c=1:n
println("进入循环1")
if bh[c]==1
pq+=1
elseif bh[c]==2
pv+=1
else
ph=c#平衡节点的位置
end
end
phv=size[PV,1]#读取PV阵的行数,ph节点放PV的最后一行
e=rand(Float32,n, 1)
f=rand(Float32, n, 1)
for a=1:n
println("进入循环2")
if bh[a]==1
e[a]=1
f[a]=0
P[a]=PQ[a,2]-PQ[a,4]
Q[a]=PQ[a,3]-PQ[a,5]
elseif bh[a]==2
e[a]=V[a-pq]
f[a]=0
P[a]=PQ[a,2]-PQ[a,4]
else
e[a]=V[phv]*cos(PV[phv,3])
f[a]=V[phv]*sin(PV[phv,3])
end
end
end
#IEEE4数据
4 4 1 18 0.1
1.00E-05 2
1 4
0
1 1 2 0.1 0.4 0.01528
2 1 4 0.12 0.5 0.0192
3 2 4 0.08 0.4 0.01413
0
2 0
0
1 1 3 0 0.3 0.90909 0.9 1.15
0
1 0 0 0.3 0.18 1
2 0 0 0.55 0.13 1
3 0.5 0 0 0 2
4 0.36 0.26 0 0 0
0
3 1.1 0 -0.1 0.6
4 1.05 0 -0.6 0.6
0
3 44.4 351 50 0.3 1.2
4 40.6 389 50 0.3 1.2
0
0
#工作区没有结果,这是为什么呢
工作区没有结果
?? 不懂,能详细点吗
你好歹吧报错贴出来啊,算了,我闲的无聊,我帮你贴
ERROR: LoadError: MethodError: Cannot `convert` an object of type
typeof(float) to an object of type
Array
Closest candidates are:
convert(::Type{T}, ::AbstractArray) where T<:Array at array.jl:533
convert(::Type{T}, ::T) where T<:AbstractArray at abstractarray.jl:14
convert(::Type{T}, ::LinearAlgebra.Factorization) where T<:AbstractArray at /build/julia/src/julia-1.4.2/usr/share/julia/stdlib/v1.4/LinearAlgebra/src/factorization.jl:55
...
Stacktrace:
[1] setindex!(::Array{Array,1}, ::Function, ::Int64) at ./array.jl:826
[2] getindex at ./array.jl:397 [inlined]
[3] zldata() at /home/sukanka/Documents/Scripts/Julia/others/main.jl:17
[4] top-level scope at /home/sukanka/Documents/Scripts/Julia/others/main.jl:50
[5] top-level scope at REPL[7]:1
in expression starting at /home/sukanka/Documents/Scripts/Julia/others/main.jl:50`
根据报错,如果我没有会错意的话,应该这样改
using DelimitedFiles
function zldata()
Data = readdlm(raw"IEEE4.txt")
n = Data[1,1]
zls = Data[1,2]
zero = findall(iszero, Data[:,1])
czl = Data[zero[1,1] + 1:zero[2,1] - 1,:]# 纯支路之间,序号,i,j ,r,x,b/2
duididaona = Data[zero[2,1] + 1:zero[3,1] - 1,:]# 对地节点数,导纳
T = Data[zero[3,1] + 1:zero[4,1] - 1,:]# 变压器支路,序号,i,j ,r,x,k,k下,k上
PQ = Data[zero[4,1] + 1:zero[5,1] - 1,:]# 所有节点序号,PG,QG,PL,QL,节点类型
PV = Data[zero[5,1] + 1:zero[6,1] - 1,:]# PV和平衡节点的节点号,U,θ,Q下,Q上
V = PV[:,2]
pq = 0
pv = 0
ph = 0
bh = PQ[:,6]
- e = Array[float,n,1]
- f = Array[float,n,1]
+ e = ones(Float64, n)
+ f = ones(Float64, n)
for c = 1:n
println("进入循环1")
if bh[c] == 1
pq += 1
elseif bh[c] == 2
pv += 1
else
ph = c# 平衡节点的位置
end
end
- phv = size[PV,1]# 读取PV阵的行数,ph节点放PV的最后一行
- phv = size(PV,1)# 读取PV阵的行数,ph节点放PV的最后一行
e = rand(Float32, n, 1)
f = rand(Float32, n, 1)
+ P = rand(n)
+ Q = rand(n)
for a = 1:n
println("进入循环2")
if bh[a] == 1
e[a] = 1
f[a] = 0
P[a] = PQ[a,2] - PQ[a,4]
Q[a] = PQ[a,3] - PQ[a,5]
elseif bh[a] == 2
e[a] = V[a - pq]
f[a] = 0
P[a] = PQ[a,2] - PQ[a,4]
else
e[a] = V[phv] * cos(PV[phv,3])
f[a] = V[phv] * sin(PV[phv,3])
end
end
+ return e, f, P, Q
end
然后其实还会出错,因为 P
和 Q
都没有定义过(我给你加上了,现在不会报错了),返回值我也给你加上了。
从这里基本上可以看出,你连基本的语法都没有搞懂(不知道什么时候用 ()
,什么时候用 []
),建议先通读 Julia 1.5 中文文档
最后建议使用 VSCode
不是,你没有指定函数返回值时,函数会把最后那行的数据当作结果返回
同样的,如果在函数最后是一个没有指定返回值的函数时,返回这个函数的返回值
function foo()
# code
10
end
foo() == 10 # true
函数如果指定返回nothing
,那么就会返回nothing
,此时ans == nothing