使用for循环

时间:2015-10-18 13:19:23

标签: matlab matrix

这是我的代码;

%Blasius solution by Euler Method
%---------------
g0=zeros(101,1);
g1=zeros(101,1);
g2=zeros(101,1);
%---------------
g0(1)=0;
g1(1)=0;
% g1(101)=1;
g2(1)=2;
%---------------
G=zeros(101,3);
T=zeros(101,3);
G=[g0 g1 g2];
T=[g1 g2 (-1)*g0.*g2];
%Euler method%
for i=1:100
G(i+1) = G(i) + (T(i)*0.1);
end

我错过了什么?我正在尝试创建G矩阵,但它始终是101*3零矩阵。它看起来像循环没有工作,但我无法弄清楚原因。

2 个答案:

答案 0 :(得分:1)

我弄清楚为什么你的代码无效:

首先,您需要调用行索引,而不是线性索引,即将循环更改为:

for ii=1:100
    G(ii+1,:) = G(ii,:) + (T(ii,:)*0.1);
end

请注意,由于using that as a variable is bad,我还使用ii而不是i

这显然导致T保持不变,因为您不会更改它。您将其初始化为零数组,并将第一行的第二个元素设置为2,但将其余元素保留为零。因此,向T行添加一行G将不会执行任何操作,因为您要向现有行添加零。这就是G的第二行变为[0 0.2 2]不再更改的原因,因为您只是为它添加了零。

您可能忘记添加为T行分配新值的代码行。在评论中坚持你的建议:

for ii=1:100
    G(ii+1,:) = G(ii,:) + (T(ii,:)*0.1);
    T(ii+1,:) = G(ii,:);
end

答案 1 :(得分:0)

这是新的解决方案,我们花了好几个小时但终于明白了。

%Blasius solution by Euler Method
%---------------
g0=zeros(101,1);
g1=zeros(101,1);
g2=zeros(101,1);
g2(1)=2;
%---------------
G=zeros(101,3);
T=zeros(101,3);
G=[g0 g1 g2];
T=[g1 g2 ((-1)*g0.*g2)];
 %Euler method%
for i=1:100
A=[g0(i) g1(i) g2(i)] ;
B=[g1(i)*0.1 g2(i)*0.1 (-1).*g0(i)*g2(i)*0.1];
C(i,:)=A+B;
g0(i+1)=C(i,1);
g1(i+1) =C(i,2);
g2(i+1) =C(i,3);
end