MATLAB Answers

How to create a periodic function?

13 views (last 30 days)
The function at [0,2] is y=x for [0,1] and y=2-x for [1,2], I want the above function repeated at [2,10], so I need a periodic funtion in the whole [0,10], who can help me code it ,thank you.

  0 Comments

Sign in to comment.

Accepted Answer

James Tursa
James Tursa on 25 Nov 2020
Not sure what you mean by "repeated at [2,10]". Maybe this:
y = mod(x,2);
ix = y > 1;
y(ix) = 2 - y(ix);

  9 Comments

Show 6 older comments
huazai2020
huazai2020 on 25 Nov 2020
As I can see in the help document, mod has the function similar to division ,but not as you said. What is the reason?
mod
Modulus after division
Syntax
M = mod(X,Y)
Description
M = mod(X,Y) if Y ~= 0, returns X - n.*Y where n = floor(X./Y). If Y is not an integer and the quotient X./Y is within roundoff error of an integer, then n is that integer. The inputs X and Y must be real arrays of the same size, or real scalars.
The following are true by convention:
  • mod(X,0) is X
  • mod(X,X) is 0
  • mod(X,Y) for X~=Y and Y~=0 has the same sign as Y.
James Tursa
James Tursa on 25 Nov 2020
Generic code could be:
% Periodic triangle wave
amplitude = whatever;
period = whatever;
y = mod(x,period);
ix = y > period/2;
y(ix) = period - y(ix);
y = (amplitude * 2 / period) * y;
huazai2020
huazai2020 on 25 Nov 2020
Yes, you are so great,thank you so much.

Sign in to comment.

More Answers (2)

David Hill
David Hill on 25 Nov 2020
y=zeros(size(x));
for k=1:5
y(x>=(k-1)*2&x<(k-1)*2+1)=x(x>=(k-1)*2&x<(k-1)*2+1);
y(x>=2*(k-1)+1&x<2*k)=2-x(x>=2*(k-1)+1&x<2*k);
end

  4 Comments

Show 1 older comment
David Hill
David Hill on 25 Nov 2020
Are your functions changing? Recommend showing us the input and output you want.
Image Analyst
Image Analyst on 25 Nov 2020
Then just use the code that you used to create the figure. It's what you want isn't it?
huazai2020
huazai2020 on 25 Nov 2020
Please see the below image I upload,it is what I want.

Sign in to comment.


Bastian Arturo Romero Mardones
x = [0:3:36];
y = [0 1 0 1 0 1 0 1 0 1 0 1 0];
sig = pwfun(x,y);
and create the waveform only with the intersection points.

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!