2015-10-22 61 views
0
length = 31 ; 
while length < 0 
    length = input('enter a value greater than 0:') 
end 

pounds = 26905; 

elasticity = 45941267 ; 

width = 4.3 
while width < 0 
    width = input('enter a value greater than 0:') 
end 
height = 1.2 
while height < 0 
    height = input('enter a value greater than 0:'); 
end 

I = (width*height^3)/12; 
a = linspace(1,200)'; 
b = length - a ; 


if a >= 0 

maximum = (-pounds*b(length.^2-(b.^2))^(3/2))/(9*sqrt(3)*elasticity*I*length)' 



elseif b >= 0 

    maximum = (-pounds*a(length.^2-(a.^2))^(3/2))/(9*sqrt(3)*elasticity*I*length)' 

end 

它發生在這一行:如何擺脫我的代碼中的下標索引錯誤?

maximum = (-pounds*b(length.^2-(b.^2))^(3/2))/(9*sqrt(3)*elasticity*I*length)' 

我需要我的代碼來與這些數字,所以我可以在表打印出來,並與我的代碼來完成。

+0

一個明顯的錯誤(可能)是'如果a> = 0'和' elseif ...'。第一個條件總是如此,因爲a = 1:200。所以,第二部分永遠不會被評估。 –

+1

錯誤最可能發生在這一行的這一部分:'... b(length。^ 2-(b。^ 2))...'。在你的代碼中,'b'實際上是一個向量,因爲你正在索引到'b',所以你必須確保索引是正整數和整數值。但是,似乎你認爲'b'是某種功能。 「if」語句的另一部分也可以這樣說:「...... a(length。^ 2-(b。^ 2))...」。我不知道你的代碼應該做什麼,所以請編輯你的帖子來描述所需的行爲。 – rayryeng

+0

只是一個評論,儘量避免使用在Matlab函數中構建的單詞。例如'length'是一個可以給你數組的最大維數的函數。覆蓋它可能會導致問題。例如'lenVar = length(myVar);'可能不會產生某人期望的內容。 – Matt

回答

0

正如@rayryeng所說,你乾草的問題是你正在索引b。
如果檢查length^2 - (b.^2)你:

61 120 177 232 285 336 385 432 477 520 
561 600 637 672 705 736 765 792 817 840 
861 880 897 912 925 936 945 952 957 960 
961 960 957 952 945 936 925 912 897 880 
861 840 817 792 765 736 705 672 637 600 
561 520 477 432 385 336 285 232 177 120 
61  0 -63 -128 -195 -264 -335 -408 -483 -560 
... snipped 

第四值是:232比B的長度(在這種情況下200)更大。這觸發第一個錯誤,但即使你能夠繼續,你最終會得到負值(對於索引!有另一個錯誤)