2012-09-19 69 views
1
%ENGR 151 Lab 3 Part 3 
clc 
clear 
disp('ENGR 151 Lab 3 Part 3') 
disp('Solid Snake') 
disp(' ') 
r = ones(1,41) 
v = ones(1,41) 

for i = 0:0.5:20 
    r(i) = -.05 + round(i) * .05 
    v(i) = (4/3) * pi * r(i)^3 
end 

我有點困惑。我認爲這是說在我的陣列中沒有這樣的位置不是整數,但是這個問題的方向明確指出:「通過步驟將球的體積作爲r的函數來描述r = 0到20使用 一個FOR循環,其值爲0.5,V =(4/3)* pi * R3,這將需要41個循環,您需要爲變量r和v分配 內存。 0.5找到r給定 循環i。您需要使用 適當的下標來更新上面的r和v方程,以在每個循環中存儲r和v。爲什麼不直接從0 - 40開始for循環而不是這個.5增量?試圖訪問r(0);索引必須是一個正整數或邏輯

+0

「positive * integer *」應該足以說明一個線索..問題*不會*說*使用*'我'作爲索引..它只是解釋了什麼值'我'應該有每一步「0.5至20步,0.5」),多少步(「41」循環)以及使用的公式(「給定循環i」)。 – 2012-09-19 17:15:26

+0

我很困惑,因爲我在C#中編碼,而在C#索引0中沒問題。整個指數0讓我感到非常失望,以至於我看不到需要一個外部櫃檯來完成這項工作並獲得0.5的增量。但向量化我的代碼似乎更好。 – Adrian

回答

0

如果你想填充矢量r,那麼你可以使用所外初始化循環計數器,並增加每個循環

cnt = 0; 
for i = 0:0.5:20 
    cnt = cnt + 1; %increment at the beginning so any users of cnt get the 1-indexed value 
    r(cnt) = -.05 + round(i) * .05 
    v(cnt) = (4/3) * pi * r(cnt)^3 
end 
+0

有呀!我不知道這是什麼下標的意思,我完全忘記了我的老師曾經說過,索引從1開始,而不是0像其他語言一樣。謝謝你們 – Adrian

0

你還不如矢量化代碼:

r = -0.05 + round(0:0.5:20) * 0.05; 
v = (4/3) * pi * r .^3 

這將使您的代碼更優雅,避免您在那裏存在索引問題。

+0

是的,但是這並不需要使用'for'循環。如果作爲答案使用,仍應提供'for'答案。 – 2012-09-19 17:19:35

相關問題