- 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?
조회 수: 3 (최근 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!