Matlab doesn;t recognise a variable when I run the program

1 次查看(过去 30 天)
Hi, I'm trying to write a loop where my data enters into either 1 of 2 equations depending on the condition but when I run it, it says that variable 'y' is not recognised and I don;t know why
Here is what I did and I can't figure out what I did wrong
L=25;
E=200^9;
I=350^(-6);
w=6^3;
x=linspace(0,28,51);
for i=0:51
if x>=0 & x<=L/2
y=-((w.*x)./(348.*E.*I)).*((16.*x.^3)-(24.*L.*x.^2)+(9.*L^3));
elseif x>=L/2 & x<=L
y=-((w.*x)./(384.*E.*I)).*((8.*x.^3)-(24.*L.*x.^2)+(17.*L^2.*x)-(L^3));
end
end
plot(x,y)
Here is a screenshot of my question of what I'm trying to do here

采纳的回答

Daniel Pollard
Daniel Pollard 2020-12-10
编辑:Daniel Pollard 2020-12-10
Your if statements aren't working because you're comparing a vector (x) to a scalar 0, L/2 or L. Instead what I think you're trying to do is
for ii=1:51
if x(ii) >= 0 & x(ii) <= L/2
y=-((w.*x)./(348.*E.*I)).*((16.*x.^3)-(24.*L.*x.^2)+(9.*L^3));
elseif x(ii) >= L/2 & x(ii) <= L
y=-((w.*x)./(384.*E.*I)).*((8.*x.^3)-(24.*L.*x.^2)+(17.*L^2.*x)-(L^3));
end
end
Notice that I also changed i -> ii because i is a built-in variable in matlab, so it's a good idea to avoid using it as your own variable.
Edit I just made another slight correction to the code - calling x(0) doesn't work, so you have to use for ii=1:51 rather than ii=0:51.
  3 个评论
Daniel Pollard
Daniel Pollard 2020-12-10
x is a vector. In this case it's a row of numbers in ascending order, starting at zero for the first element of x and ending at 25 for the 51st element. If you simply type in x >= 0, without the brackets, Matlab reads that and says "yep! All the values of x satisfy that condition" and so it is a vector of true, or 1. You need to tell Matlab "I want you to tell me if this particular component of x is greater than or equal to zero." I can tell that's what you were trying to do, and got halfway there with the loop. However you need to index the vector - that's what the brackets do. Typing x(3) >= 0 returns true if the third element of x is greater than or equal to zero.
That leads me to your second question. Why can't you use ii=0:51? Well, for loops run through these values and run the code for each value in the vector 0:51. The first value is ii=0, so Matlab starts the code and the first thing it hits is x(ii). Well, ii=0. What's the zeroth element of x? Well there isn't one, as that doesn't really make any sense to ask. Some programming languages start indexing from zero, but Matlab indexes from 1.
Remember that if you write out the numbers from 1 to 51 then you'll have written 51 different numbers. No need to include the zero anyway.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by