2015-10-22 2 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

Одна очевидная ошибка (возможно): 'if 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, который больше, чем длина Б (200 в данном случае). Это вызывает первую ошибку, но даже если вы смогли продолжить, вы, в конце концов, получите отрицательные значения (для индекса! Еще одна ошибка там)

Смежные вопросы