how to shift position of an index of max value to origo in matlab?

4 views (last 30 days)
Hi, I would like to shift the position the maximum value so that the maximum value is at the center, i.e. at origo.
  7 Comments
kat001
kat001 on 14 Jun 2018
Edited: kat001 on 14 Jun 2018
Ok. But exactly how am I gonna do that? Because x has already the length of 13. It is 'mPos' is has a length of 12. How can I get the same vector lengths?
Adam
Adam on 14 Jun 2018
Well, I haven't examined your code that closely to understand why mPos is only length 12, but presumably you know what the x values should be for it. why is it 12 instead of 13? Is it shifted by 1 or is it the middle of the other samples? (I assume the former judging by the plot). whichever it is, just give an x vector that matches - e.g. x(1:end-1) or x(2:end) or x(1:end-1) + diff( x(1:2) ) / 2 or whatever is appropriate.
As an aside, don'y use square brackets here:
x = [-3:0.5:3];
You should get an M-lint warning in the code highlighting this. The [] is un-necessary as well as being less efficient, not that efficiency matters here, but it's good to get into more efficient habits when they cost nothing.

Sign in to comment.

Answers (2)

KSSV
KSSV on 13 Jun 2018
x = [0 30 60] ;
y = [0 0.3 0] ;
plot(x,y);
xi = x-30 ;
yi = y-0.3 ;
hold on
plot(xi,yi)
  2 Comments
kat001
kat001 on 13 Jun 2018
Thank you. Now, imagine that x axis is not only bound to 0 to 60, instead it could be any length. How would I be able to feed that into the code in such case?
KSSV
KSSV on 13 Jun 2018
Let x, y be you data..
[val,idx]=max(y);
xi=x-x(idx);
yi=y-y(idx);

Sign in to comment.


kat001
kat001 on 14 Jun 2018
Edited: kat001 on 14 Jun 2018
Now, currently the plot looks like this:
where the red line represents an position vector as the power is increasing. What I would like to do is following (used MS paint for visualization) :
In other words, as the Gaussian profile reaches its maximum, the only way to keep maximum power all time by holding the position at the same place. And I am stuck with the coding here.
So far, my code looks like this:
x = -3:0.1:3;
norm = normpdf(x,0,1);
m = 0;
mPos = zeros(length(norm),1);
for i = 2:length(norm)
if(norm(i)>norm(i-1))
m = m + 0.1;
else
m = m - 0.1;
end
mPos(i) = m;
end
plot(x, mPos, 'r')
hold on
plot(x, norm, 'b')
grid on
hold off

Categories

Find more on Discrete Data Plots 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!