如何矢量化 MATLAB 中的慢速代码以提高性能?

How can I vectorize slow code in MATLAB to increase peformance?

如何向量化此代码?目前它运行得很慢。我真的被卡住了,我花了最后几个小时试图对其进行矢量化,但我似乎无法让它正常工作。

我下面的幼稚程序运行得非常慢。 N 确实应该是 10,000,但程序正在努力处理 N = 100。任何意见,将不胜感激。

代码想要为每个值 w21 迭代给定 N 次的函数。然后它为 w21 的每个值绘制最后 200 个值。下面的代码在情节方面确实按预期工作,但正如所提到的那样慢得多,因为对于一个好的情节,值需要以千为单位。

hold on
% Number of iterations
N = 100;
x = 1; 
y = 1;
z = 1;

for w21 = linspace(-12,-3,N)
    for i = 1:N-1
        y = y_iterate(x,z,w21);
        z = z_iterate(y);
        x = x_iterate(y);
        if i >= (N - 200)
            p = plot(w21,x,'.k','MarkerSize',3);  
        end
    end
end

所需功能:

function val = x_iterate(y)
    val = -3 + 8.*(1 ./ (1 + exp(-y))); 
end
function val = z_iterate(y)
    val = -7 + 8.*(1 ./ (1 + exp(-y)));
end
function val = y_iterate(x,z,w21)
    val = 4 + w21.*(1 ./ (1 + exp(-x))) + 6.*(1 ./ (1 + exp(-z)));
end

我认为这是因为 plot。尝试:

[X,Y,Z] = deal( zeros(N,N-1) );
w21 = linspace(-12,-3,N);
for i = 1:N
    for j = 1:N-1
        y = y_iterate(x,z,w21(i));
        z = z_iterate(y);
        x = x_iterate(y);
        X(i,j) = x;
        Y(i,j) = y;
        Z(i,j) = z;
    end
end
nn = max(1,N-200);
plot(w21,X(nn:end,:),'.k')