MATLAB Answers

surf, plotting, axis

18 views (last 30 days)
PChoppala
PChoppala on 2 Feb 2012
Edited: David on 27 Sep 2013
Hi
Simple question....
I have an output 'P' which is a 10X10 matrix. I start with
for i=1:10
for j=1:10
P(i,j) = %some operation that gives the answer at each i,j
end
end
I use 'surfl' to plot P.
Now I have
for i=1:0.5:10
for j=1:0.5:10
P(i,j) = %some operation that gives the answer at each i,j
end
end
Then, P will still be a 20X20 matrix, but its now plotting on surf, because I think it takes only integers.
So, I used
c1=1;
for i=1:0.5:10
c2=1;
for j=1:0.5:10
P(c1,c2) = %some operation that gives the answer at each i,j
c2=c2+1;
end
c1=c1+1;
end
surf(P)
This gives me a figure for a 20X20 matrix I want, but its mentioned as 1:20 and 1:20 on x & y-axes, while I want it to depict 1:10 and 1:10....
Please advice what I need to change to get that!!!

  2 Comments

Walter Roberson
Walter Roberson on 2 Feb 2012
http://www.mathworks.com/matlabcentral/answers/13205-tutorial-how-to-format-your-question-with-markup
PChoppala
PChoppala on 2 Feb 2012
Whoops, I never knew about this. thanks Walter

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 2 Feb 2012
xv = 1 : 0.5 : 10;
yv = 1 : 0.5 : 10;
for i = 1 : length(xv)
for j = 1 : length(yv)
P(i,j) = %some operation that gives the answer at each xv(i), yv(j)
end
end
surf(xv, yv, P)

  7 Comments

Show 4 older comments
Walter Roberson
Walter Roberson on 3 Feb 2012
The sample code you posted does not need the complete list of values inside the loop: only the _current_ values. The current x is xv(i) and the current y is yv(j)
PChoppala
PChoppala on 3 Feb 2012
Whoops, sorry then, I need them.
for i=1:0.5:10
for j=1:0.5:10
d_r = sqrt(sum(([1 8 ; 0 7]-repmat([i11;j11],1,10)).^2));
% other statements that process d_r and give a_r
P(i,j) = (a_r * a_r');
end
end
So, P is now a 20X20 matrix but has calculated the algorithm in the range space of 10X10. So i want the surf command to show me only 10X10 on its x and y axes.
Please advice
Cheers
Walter Roberson
Walter Roberson on 3 Feb 2012
If you are going to insist on using for i=1:0.5:10 then just use your code from your first comment, above, where you use the c1 and c2 counters. It isn't ideal code, but you are stuck on the idea that i and j must be the values instead of being allowed to index the values, so you might as well stick with what you understand.
-----
Perhaps this would make things more clear:
xv = 1 : 0.5 : 10;
yv = 1 : 0.5 : 10;
for xidx = 1 : length(xv)
i = xv(xidx);
for yidx = 1 : length(yv)
j = yv(yidx);
P(xidx,yidx) = %some operation that gives the answer at each i, j
end
end
surf(xv, yv, P)
Then you can have clear indexes _and_ you can still use "i" and "j" as the names of your variables that hold the current values.
-----
In your code, you might want to clarify what i11 and j11 are. Your d_r appears to be calculating the same value for all i and j combinations; if so then it would be more efficient to calculate it once outside the loop.

Sign in to comment.

More Answers (0)