如何向量化初始条件

How to Vectorize initial conditions

我正在尝试矢量化初始条件 (x)(y) 以在不同的初始条件下绘制多个奇怪的吸引子,同时让每个初始条件都有一个单独的颜色图。但我不确定如何对初始条件进行矢量化处理,并让每个初始条件图都具有不同的颜色。

我的想法是 xy 是一个向量 x=[7.4,6.3,3.4,5.4,4.5] y =[.6,.3,.8,.3,.14] 和每个 x 和 y 初始条件创建它们自己的具有不同颜色的图(但这不起作用,因为它需要一个值而不是多个值)。请参阅下面的 x(k) 和 y(k) 初始值图之一。

下面的工作代码未矢量化:

x(1)=[7.4];
y(1)=[.6];
a = -1.24458;
b = -1.25191;
c = -1.815908;
d = -1.90866;

maxiter = 10000;
z = linspace(1,maxiter+1,maxiter+1);
for k=1:maxiter

% Clifford Attractors

  x(k+1) = sin(a*y(k)) + c*cos(a*x(k));
  y(k+1) = sin(b*x(k)) + d*cos(b*y(k));
end

scatter(x,y,'.')

Ps:我使用的是 64 位 Ubuntu Linux Octave 4.2.2,类似于 Matlab

您可以只使用矩阵而不是向量,并将每一行视为一次迭代。为了稍微加快速度,我们可以在开始时分配矩阵。要绘制不同的运行图,我们只需迭代它们并每次使用不同的颜色:

x0=[7.4,6.3,3.4,5.4,4.5];
y0=[.6,.3,.8,.3,.14];
a = -1.24458;
b = -1.25191;
c = -1.815908;
d = -1.90866;

maxiter = 1000;
z = linspace(1,maxiter+1,maxiter+1);
N = numel(x0);
x = [x0;NaN(maxiter, N)];
y = [x0;NaN(maxiter, N)];
for k=1:maxiter

% Clifford Attractors

  x(k+1,:) = sin(a*y(k,:)) + c*cos(a*x(k,:));
  y(k+1,:) = sin(b*x(k,:)) + d*cos(b*y(k,:));
end

colors = 'rgbymcwk';
hold on
for n=1:N
    scatter(x(:,n), y(:,n), ['.',colors(1+mod(n,numel(colors)))])
end