Creating a function in MATLAB

I need to create a function with input i and outputs j and k. So i varies from 1,2,3... and i,j and k are related as , where j =0,1,2,... and k=0,1,2,...,. So,
for input i=1, outputs should be j=0,k=0;
i=2 j=1,k=0;
i=3 j=1,k=1;
i=4 j=2,k=0;
i=5 j=2,k=1;
i=6 j=2,k=2;
i=7 j=2,k=3;
and so on. How do I create such a function?

 Accepted Answer

for I = 1 : 10
[J, K] = decode(I);
fprintf('i = %d, j = %d, k = %d\n', I, J, K);
end
i = 1, j = 0, k = 0 i = 2, j = 1, k = 0 i = 3, j = 1, k = 1 i = 4, j = 2, k = 0 i = 5, j = 2, k = 1 i = 6, j = 2, k = 2 i = 7, j = 2, k = 3 i = 8, j = 3, k = 0 i = 9, j = 3, k = 1 i = 10, j = 3, k = 2
function [j, k] = decode(i)
L2 = nextpow2(i);
if 2.^L2 == i
j = L2;
k = 0;
else
j = L2 - 1;
k = i - 2.^j;
end
end

2 Comments

Saurabh Madankar
Saurabh Madankar on 11 Feb 2022
Edited: Saurabh Madankar on 11 Feb 2022
Thanks a lot, I didn't know about the built in function nextpow2. I went through the documentation and now have understood how this code works.
j = floor(log2(i)) ;
k = i - 2.^j;
... a vectorized version

Sign in to comment.

More Answers (0)

Categories

Find more on Vehicle Dynamics Blockset in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!