- 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?
17 ビュー (過去 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!