my code is runing but I can not get the plot out
    6 views (last 30 days)
  
       Show older comments
    
hi, here is my code, the plot windows pop out but there is no pot on them, whats wrong with my code?
hold on
f = @(x) x.^3 - (9)*x.^2 + 3.8197
xl = -1000
xu = 1000
iter = 1
xm = (xl+xu)/2
error = 20
while error > 0.001
if (f(xm).*f(xl))<0
xu=xm
xm2 = (xl+xu)/2
error = (xm2-xm)/xm2
error = abs(error)
xm = xm2
else
       xl=xm
xm2 = (xl+xu)/2
error = (xm2-xm)/xm2
error = abs(error)
xm = xm2
end
xm= (xl+xu)/2
subplot(2,1,1)
plot(iter,xm)
    subplot(2,1,2)
plot(iter,error)
    iter = iter + 1;
end
0 Comments
Answers (2)
  Walter Roberson
      
      
 on 4 Apr 2021
        subplot(2,1,1)
plot(iter, xm, '*-')
subplot(2,1,2)
plot(iter, error, '*-')
2 Comments
  Walter Roberson
      
      
 on 4 Apr 2021
				subplot(2,1,1)
plot(iter, xm, '*-')
hold on 
subplot(2,1,2)
plot(iter, error, '*-')
hold on
Your existing hold does not apply to the new axes you created by subplot()
  DGM
      
      
 on 4 Apr 2021
        
      Edited: DGM
      
      
 on 4 Apr 2021
  
      You're trying to plot things inside a loop.  That usually ends up just creating headaches.  Store the results to vectors and then plot the vectors.  Since we don't know how long the vectors will be, I just chose to let them grow as necessary. 
Try this:
clf
f = @(x) x.^3 - (9)*x.^2 + 3.8197
xl = -1000
xu = 1000
iter = 1
xm = (xl+xu)/2
error = 20
xmvec=[];
errvec=[];
while error > 0.001
	if (f(xm)*f(xl))<0
		xu=xm
		xm2 = (xl+xu)/2
		error = (xm2-xm)/xm2
		error = abs(error)
		xm = xm2
	else
		xl=xm
		xm2 = (xl+xu)/2
		error = (xm2-xm)/xm2
		error = abs(error)
		xm = xm2
	end
	xmvec=[xmvec (xl+xu)/2];
	errvec=[errvec error];
	iter = iter + 1;
end
subplot(2,1,1)
plot(1:iter-1,xmvec)
subplot(2,1,2)
plot(1:iter-1,errvec)
2 Comments
  DGM
      
      
 on 4 Apr 2021
				That lone iter line was just something I threw in there so I could see what was going on.  I didn't mean to include that.
Yes.  The vectors will grow in length since x=[x x2] is concatenation of x and x2.  It is the same thing as cat(2,x,x2).
Generally, making arrays grow in a loop isn't good practice.  It's slow, but for something like this where the vectors are small, the task is noncritical, and we don't know the final size to begin with, I'd say it's acceptable.
See Also
Categories
				Find more on Graphics Performance 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!


