2015-10-18 76 views
-1

這是我的代碼;變量持續爲零,同時爲循環創建矩陣

%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零矩陣。它看起來像循環不起作用,但我不明白爲什麼。

+0

您可能想指定是否在索引中使用列或行,而不是使用普通線性索引。而且,你的T總是爲零,因爲你用零元素乘以零元素,並用一個2,它仍然爲零。在你的循環中,你將零和零相乘,因此顯然結果爲零。 – Adriaan

+0

Okey這裏是事情; G(1)= [0 0 2] 然後G(2)= [0 0 2] + [0 2 0] * 0.1 = [0 0.2 2] G(3)= [0 0.2 2 ] +(0.2 2 0)* 0.1 = [0.2 2.2 2] 它假設在第三行之後擺脫零? –

回答

1

我想通了,爲什麼你的代碼是不工作:

首先,你需要調用行標號,不是線性的指數,即改變你的循環中:

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

注意,我還使用ii而不是i,因爲using that as a variable is bad

這導致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 
+0

首先感謝您的興趣。我的代碼就像我實際上不會忘記任何東西寫在這裏,你可以看到我是一個初學者 我已經改變了for循環,但我不明白如何篡改新的T,我應該在那裏做,它會是這樣嗎? 'G (ii,2)= T(ii,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