How to plot a piecewise periodic function? Please Help
12 次查看(过去 30 天)
显示 更早的评论
f(x)=2*sqrt(x) for 0<=x<=1 and f(x)=3-(x) for 1<=x<=3
How would I plot this function on the range -9<=x<=9? The questions states to make use of the "floor function".
Please Help
2 个评论
采纳的回答
Star Strider
2014-11-20
编辑:Star Strider
2014-11-20
I don’t understand where the floor function comes into it. This is how I would code it:
f = @(x) [2*sqrt(x).*(0<=x & x<1) + (3-x).*(1<=x & x<=3)];
x = linspace(-9,9);
figure(1)
plot(x, f(x))
grid
Note that your function does not exist for x<0 and x>3, so while the plot defaults to zero outside that region, I would only plot it for [0,3].
EDIT —
‘Periodic function’ ... this works:
f = @(x) [2*sqrt(x).*(0<=x & x<1) + (3-x).*(1<=x & x<=3)];
x = linspace(0,3);
intvl = [-6 6];
pfx = repmat(f(x),1,diff(intvl)/3);
px = linspace(intvl(1),intvl(2),length(pfx));
figure(1)
plot(px, pfx)
grid
I had to revise my code every time you updated your Question. This (EDIT) code reproduces the plot you posted. I did the function in a one-line anonymous function for simplicity and efficiency. It shouldn’t be difficult for you to follow its logic and write a function .m-file to do the same calculation.
6 个评论
Diptanshu De
2021-6-10
编辑:Diptanshu De
2021-6-10
How to change my code if my function is
f(x) = -x ; -5<=x<0
x^2+1; 0<=x<5
Walter Roberson
2021-6-10
x = linspace(-6,6);
f = zeros(size(x));
mask = -5 <= x & x < 0;
f(mask) = -x(mask);
mask = 0 <= x & x < 5;
f(mask) = x(mask).^2 + 1;
plot(x, f)
更多回答(1 个)
Sally Al Khamees
2017-2-21
If you have R2016b and the Symbolic Math Toolbox installed, you can use the piecewise function to recreate this example:
syms y(x) a(x) b(x);
y(x) = piecewise(0<=x <1, 2*sqrt(x), 1 <= x <= 3, 3-x);
interval = [-6 6];
pw=y;
for i=1:diff(interval/6)
a(x)= piecewise(i*3<=x<1+(i*3),2*sqrt(x-3*i),1+(i*3)<=x<=3+(i*3),3-(x-3*i));
b(x)= piecewise(i*-3<=x<1+(i*-3),2*sqrt(x+3*i),1+(i*-3)<=x<=3+(i*-3),3-(x+3*i));
pw = [pw a b];
end
pw
fplot(pw,interval)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/172736/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/172738/image.jpeg)
You can read more about the piecewise function in Symbolic Math Toolbox here https://www.mathworks.com/help/symbolic/piecewise.html
1 个评论
Puech gabriel
2017-8-2
Hi,
Thanks for giving this code. Here are some parameters added to your code and using just one function
syms a(x);
T = pi; % period value
i = -2; % number of periods, must be integer!
interval = [i*T -i*T];
pw = [];
while i<=diff(interval/(2*T))
a(x)= piecewise(i*T<=x<1+(i*T),2*sqrt(x-T*i),1+(i*T)<=x<=3+(i*T),3-(x-T*i),3+(i*T)<=x<=T+(i*T),0); %+diff(interval/6)-floor(diff(interval/6))
i = i +1;
pw = [pw a ]; % concatenation des periodes
end
pw
fplot(pw,interval)
Would it have a way of preallocating the pw symfun matrix before the loop?
Kind regards, Gabriel
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Assumptions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!