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

4 visualizzazioni (ultimi 30 giorni)
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 Commenti
kat001
kat001 il 14 Giu 2018
Modificato: kat001 il 14 Giu 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 il 14 Giu 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.

Accedi per commentare.

Risposte (2)

KSSV
KSSV il 13 Giu 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 Commenti
kat001
kat001 il 13 Giu 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 il 13 Giu 2018
Let x, y be you data..
[val,idx]=max(y);
xi=x-x(idx);
yi=y-y(idx);

Accedi per commentare.


kat001
kat001 il 14 Giu 2018
Modificato: kat001 il 14 Giu 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

Categorie

Scopri di più su Discrete Data Plots in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by