如何将此 Octave 代码翻译成 Julia?
How to translate this Octave code to Julia?
我想在 Julia 中制作后勤地图,但遇到了困难。我已经知道如何在 Octave 中执行此操作,如何将此代码转换为 Julia?我的难点主要在“map [i,:]”部分。
#Creates a vector of initial conditions and "r"
x=rand(150,1);
r=(2.51:.01:4);
#Transpose the r
r=r';
#Makes 300 times the product of each element of r for each element of x
for i=1:300
x=r.*x.*(1-x);
end
#Makes 200 times the product of each element of r for each element of x and stores each value of x on line i of the "map" matrix
for i=1:200
x=r.*x.*(1-x);
map(i,:)=x;
end
#Plots each column of the map for each element o r
plot(r,map,'.')
从这里开始:
#Creates a vector of initial conditions and "r"
x=rand(150,1);
这不是向量,而是大小为 150x1 的矩阵。如果你想要一个向量,写:
x = rand(150)
至于这个:
r=(2.51:.01:4);
#Transpose the r
r=r';
有点不清楚,但我认为你想要一个与 x
长度相同的向量,在那种情况下你应该 而不是 转置它,因为那会转它变成一个 1x150 矩阵。所以改为写
r = 2.51:0.01:4
# or, maybe better
r = range(2.51, 4; length=length(x))
下一个:
#Makes 300 times the product of each element of r for each element of x
for i=1:300
x=r.*x.*(1-x);
end
与其在每次迭代时创建新变量 x
,不如就地更新 x
,并记住在此处点缀所有运算符:
for i in 1:300
x .= r .* x .* (1 .- x) # dot everything
end
我真的不明白你的代码是怎么回事,它似乎只是做了更多相同的事情,有点武断。更重要的是,您尝试在定义 map
之前对其进行更新。此外,您不应该真正使用名称 map
,因为这是 Julia 中一个重要的内置函数的名称。
#Makes 200 times the product of each element of r for each element of x and stores each value of x on line i of the "map" matrix
for i=1:200
x=r.*x.*(1-x);
map(i,:)=x;
end
另类。预定义一个矩阵,将其命名为 map
以外的名称,并按列而不是按行存储信息,因为它在 Matlab/Octave 和 Julia[=24= 中都更有效率]
M = similar(x, length(x), 200)
for i in 1:200
x .= r .* x .* (1 .- x)
M[:, i] .= x # use square brackets, not parens
end
顺便说一句:如果您在运算符之间放置空格,您的代码将变得更具可读性。把所有东西都塞在一起给人一种凌乱的感觉。此外,使用缩进以提高可读性。并删除所有分号。
我有一段时间没有写 julia 了,所以现在可能有更有效的方法,但这里或多或少直接相当于你的八度代码。
using PyPlot
x = rand( 150, 1 );
r = reshape( 2.51:.01:4, (:, 1) );
for i in 1:300
global x
x = r .* x .* (1 .- x);
end
Map = Matrix{Float64}(undef, 200, 150);
for i in 1:200
global x, Map
x = r .* x .* (1 .- x);
Map[i:i,:] .= transpose(x);
end
for i in 1:length(r)
plot( r, Map[i,:], "." )
end
我想在 Julia 中制作后勤地图,但遇到了困难。我已经知道如何在 Octave 中执行此操作,如何将此代码转换为 Julia?我的难点主要在“map [i,:]”部分。
#Creates a vector of initial conditions and "r"
x=rand(150,1);
r=(2.51:.01:4);
#Transpose the r
r=r';
#Makes 300 times the product of each element of r for each element of x
for i=1:300
x=r.*x.*(1-x);
end
#Makes 200 times the product of each element of r for each element of x and stores each value of x on line i of the "map" matrix
for i=1:200
x=r.*x.*(1-x);
map(i,:)=x;
end
#Plots each column of the map for each element o r
plot(r,map,'.')
从这里开始:
#Creates a vector of initial conditions and "r"
x=rand(150,1);
这不是向量,而是大小为 150x1 的矩阵。如果你想要一个向量,写:
x = rand(150)
至于这个:
r=(2.51:.01:4);
#Transpose the r
r=r';
有点不清楚,但我认为你想要一个与 x
长度相同的向量,在那种情况下你应该 而不是 转置它,因为那会转它变成一个 1x150 矩阵。所以改为写
r = 2.51:0.01:4
# or, maybe better
r = range(2.51, 4; length=length(x))
下一个:
#Makes 300 times the product of each element of r for each element of x
for i=1:300
x=r.*x.*(1-x);
end
与其在每次迭代时创建新变量 x
,不如就地更新 x
,并记住在此处点缀所有运算符:
for i in 1:300
x .= r .* x .* (1 .- x) # dot everything
end
我真的不明白你的代码是怎么回事,它似乎只是做了更多相同的事情,有点武断。更重要的是,您尝试在定义 map
之前对其进行更新。此外,您不应该真正使用名称 map
,因为这是 Julia 中一个重要的内置函数的名称。
#Makes 200 times the product of each element of r for each element of x and stores each value of x on line i of the "map" matrix
for i=1:200
x=r.*x.*(1-x);
map(i,:)=x;
end
另类。预定义一个矩阵,将其命名为 map
以外的名称,并按列而不是按行存储信息,因为它在 Matlab/Octave 和 Julia[=24= 中都更有效率]
M = similar(x, length(x), 200)
for i in 1:200
x .= r .* x .* (1 .- x)
M[:, i] .= x # use square brackets, not parens
end
顺便说一句:如果您在运算符之间放置空格,您的代码将变得更具可读性。把所有东西都塞在一起给人一种凌乱的感觉。此外,使用缩进以提高可读性。并删除所有分号。
我有一段时间没有写 julia 了,所以现在可能有更有效的方法,但这里或多或少直接相当于你的八度代码。
using PyPlot
x = rand( 150, 1 );
r = reshape( 2.51:.01:4, (:, 1) );
for i in 1:300
global x
x = r .* x .* (1 .- x);
end
Map = Matrix{Float64}(undef, 200, 150);
for i in 1:200
global x, Map
x = r .* x .* (1 .- x);
Map[i:i,:] .= transpose(x);
end
for i in 1:length(r)
plot( r, Map[i,:], "." )
end