How to plot a piecewise function?
显示 更早的评论

3 个评论
Roger Stafford
2016-12-21
The problem with your code is that when you apply an ‘if’ to an entire vector, as you have done with “if x<0”, it is not regarded as true by matlab unless all elements of that vector are true, and that of course is not the case, so the ‘if’ will fail. The same hold true with your other two if’s - they will all fail and y is never set.
Stephen23
2020-12-25
Original question asked by Alexandros Dhimas on 20th December 2016 retrieved from Google Cache:
How to plot a polyclonal expression using if statement?
Hello, I' ve got a polyclonal function to plot (using if statement) as shown on this picture:

for -5<x<30.
My thougth on the solution was:
x=linspace(-5,30,1000);
if x<0
y=10*x.^0;
else if x>=0 & x<9
y=10*x+10;
else if 9<=x
y=15*sqrt(4*x)+10;
end
end
end
plot(x,y)
But i get this on the command window "Error using plot A numeric or double convertible argument is expected"
I can't find any mistakes on my code.
Walter Roberson
2020-12-25
This is not a Duplicate.
采纳的回答
更多回答(2 个)
Walter Roberson
2016-12-20
0 个投票
Either use a for loop or (better) use logical indexing. http://blogs.mathworks.com/steve/2008/01/28/logical-indexing/
Roger Stafford
2016-12-21
If you only want to plot the function, do this:
x1 = linspace(-5,0,50); y1 = 10*ones(1,50);
x2 = linspace(0,9,90); y2 = 10*x2+10;
x3 = linspace(9,30,210); y3 = 15*sqrt(4*x3)+10;
plot([x1,x2,x3],[y1,y2,y3])
Another way:
x = linspace(-5,30,400);
y = (x<0)*10+(x>=0&x<9).*(10*x+10)+(x>=9).*(15*sqrt(4*abs(x))+10);
plot(x,y)
类别
在 帮助中心 和 File Exchange 中查找有关 2-D and 3-D Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!