Matlab 如何为这个程序预先分配内存?

Matlab 如何为这个程序预先分配内存?,matlab,Matlab,我试图为下面的程序预先分配内存,以提高计算速度 global k1 k2 k3 k4 k5 k1=50; k2=2.0e+03; k3=5e+01; k4=.0001; k5=200; dt=0.0001; x(1)=0.9999; y(1)=0.38462; z(1)=0.1995; t(1)=0.0; for i=1:100000 t(i+1)=t(i)+dt; x(i+1)=x(i)+dt*(-k5*(k1+k3)*x(i)+ k3*x(i)*z(i) + k4*z(i)

我试图为下面的程序预先分配内存,以提高计算速度

global k1 k2 k3 k4 k5
k1=50;
k2=2.0e+03;
k3=5e+01;
k4=.0001;
k5=200;
dt=0.0001;
x(1)=0.9999;
y(1)=0.38462;
z(1)=0.1995;
t(1)=0.0;
for i=1:100000
    t(i+1)=t(i)+dt;
    x(i+1)=x(i)+dt*(-k5*(k1+k3)*x(i)+ k3*x(i)*z(i) + k4*z(i) + k2*y(i) );
    y(i+1)=y(i)+dt*(k1*x(i) - k2*y(i));
    z(i+1)=z(i)+dt*(-k3*x(i)*z(i) - k4*z(i) + k3*k5);
end
%plot(t,x,'b');
%plot(t,y,'g');
plot(t,z,'r');
%plot3(x,y,z);
%legend('x','y','z');
%hold on;
grid on;
%axis([0 10 0 10 0 10]);
%end

请帮忙。提前感谢。

因为您知道每个数组中有100000+1个条目,所以很容易预先分配

n = 100001;
x = zeros(n,1); %//pre-allocation
y = zeros(n,1);
z = zeros(n,1);
t = zeros(n,1);
x(1)=0.9999; %//setting init-values
y(1)=0.38462;
z(1)=0.1995;
t(1)=0.0;
for ii=1:( n - 1 )
    t(ii+1)=t(ii)+dt;
    x(ii+1)=x(ii)+dt*(-k5*(k1+k3)*x(ii)+ k3*x(ii)*z(i) + k4*z(ii) + k2*y(ii) );
    y(ii+1)=y(ii)+dt*(k1*x(ii) - k2*y(ii));
    z(ii+1)=z(ii)+dt*(-k3*x(ii)*z(ii) - k4*z(ii) + k3*k5);
end     
PS,

这是最好的。

Shai已经回答了这个问题,所以我只想问你一个问题:为什么要使用全局变量?我建议你将循环更改为
for ii=1:n-1
,这样预分配将始终适合迭代次数。