Help with piecewise function? Can't use else/if?

17 ビュー (過去 30 日間)
AJ
AJ 2014 年 2 月 18 日
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
Matt Tearle 2014 年 2 月 18 日
  1. Homework problem clearly stated as being a homework problem
  2. Own effort and work shown
  3. Problem explained and results shown
Congratulations on writing a great (homework) question!
M. Y. Najjar
M. Y. Najjar 2016 年 12 月 28 日
Don't you need a double '&' sign in the If statement?

サインインしてコメントする。

採用された回答

Karan Gill
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 件のコメント
Sarah Palfreyman
Sarah Palfreyman 2016 年 12 月 14 日
編集済み: Sarah Palfreyman 2016 年 12 月 14 日
Here is the example.
john Snori
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
AJ 2014 年 2 月 18 日
If there any possible way anyone can give me the exact code?
I looked at your answer Image Analyst and I appreciate it but I still can't figure out and I think I will understand it after seeing how it's supposed to be done. I've been trying for 5 hours now and I have other work to do :(
  2 件のコメント
Jos (10584)
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-')
burak ergocmen
burak ergocmen 2016 年 12 月 1 日
it really works . thanks for the codes.

サインインしてコメントする。


Image Analyst
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
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
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
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
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
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 ExchangeAssumptions についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by