- Homework problem clearly stated as being a homework problem
- Own effort and work shown
- Problem explained and results shown
Help with piecewise function? Can't use else/if?
5 次查看(过去 30 天)
显示 更早的评论
Hi, I am having trouble on a piece-wise homework problem I am having.
This is my code. I plot it and in the middle of the graph from negative pi to positive pi where y should be the cosine of x isn't right. I just have a straight line at y=-1 across the graph. I know I need to make it a vector or a loop it so it doesn't use if/else and skip the middle cosine function.
Whenever I try to get a function command I get this: Function definitions are not permitted in this context.
code so far:
clear all
close all
clc
x=-2*pi:.01:2*pi
if (x<-pi)
y=-1;
elseif(x>=-pi&x<=pi)
y=cos(x);
else(x>pi)
y=-1;
plot(x,y)
end
This is what I'm getting: The middle part (cosine function) is wrong. I was told it's just graphing the part after else.
Help please?
Thank you.
2 个评论
Matt Tearle
2014-2-18
Congratulations on writing a great (homework) question!
采纳的回答
Karan Gill
2016-12-1
编辑:Karan Gill
2017-10-17
If you have R2016b, you can just use the piecewise function: https://www.mathworks.com/help/symbolic/piecewise.html.
2 个评论
john Snori
2021-9-1
The second method involves the use of if-else statements along with for loop. In this method, we’ll define all the sub-functions along with the constraints using if-else statements and then we will plot the piecewise function.
Source : https://www.entechin.com/how-to-plot-a-piecewise-function-in-matlab/
更多回答(3 个)
AJ
2014-2-18
2 个评论
Jos (10584)
2014-2-18
Take a look at this:
% Step 1: initialise x and y
x = -10:2:10
y = zeros(size(x))
% Step 2: selective processing
tf = x < -5
y(tf) = -5
tf = x > -5 & x < 5
y(tf) = -2 + 2 * x(tf)
tf = x > 5
y(tf) = 5
% step 3: visualisation
plot(x,y,'bo-')
Image Analyst
2014-2-18
编辑:Image Analyst
2014-2-18
Use two &:
elseif x(k) >=-pi && x(k) <= pi
and you need to make an array out of y=-1:
y(k) = -1;
otherwise it's just a single number, not an array of -1s. Plus you need to have it in a loop over k like I mentioned
for k = 1 : length(x)
then everything inside the look has a (k) index. Of course there is a vectorized way to do it, if you want that.
6 个评论
Jenik Skapa
2019-3-26
编辑:Jenik Skapa
2019-3-26
I would use this construction without the "for" loop:
x = -2*pi : pi/5 : 2 * pi;
y = NaN * ones(size(x));
y(x < -pi) = -1;
y((x >= -pi) & (x < pi)) = cos(x((x >= -pi) & (x < pi)));
y(x >= pi) = -1;
plot(x, y, 'r*-'); grid on;
Steven Lord
2019-3-26
FYI you can use NaN to create an array without needing to first create a ones array.
y = NaN(size(x));
Carlos Guerrero García
2022-11-13
And what about this code ???
x=-5:0.1:5; g=-1+(abs(x)<=pi).*(1+cos(x)); plot(x,g)
Do you like it ???
4 个评论
Image Analyst
2022-11-14
I guess you are choosing not to take the suggestions, but I'll do them here:
x = -2 * pi : 0.01 : 2 * pi;
g = -1 + (abs(x) <= pi) .* (1 + cos(x));
plot(x, g, 'b-', 'LineWidth', 2)
grid on;
xlabel('x');
ylabel('g');
Carlos Guerrero García
2022-11-14
Thanks to Image Analyst....I have no time enough to make the corrections suggested but thanks to your improvemets to my basic script!!!!
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Assumptions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!