2016-04-15 11 views
-1

ich das nächste Skript in Matlab haben es die BisektionsmethodePlot Schleife Bisektionsmethode Matlab

function root = biseccion(f,a,b,epsilon, max) 

if (f(a)*f(b) >= 0) 
     disp('f(a) *f(b) >= 0'); 
     root = 'Can't find the root'; 
     return; 
    else 
     fprintf('Iter\t\t\ta\t\t\tb\t\t\tm\t\t\tf(a)\t\t\tf(b)\t\t\tf(m)\n'); 
     fprintf('=========\t\t ======\t\t ======\t\t ======\t\t ======\t\t ======\t\t ======\n'); 
     m = (a + b)/2; 
     if (abs(f(m)) <= epsilon) 
      root = m; 
      return; 
     else 
      Iter = 0; 
      hold on; 
      while (abs(f(m)) >= epsilon || Iter == max) 
       Iter = Iter + 1; 
       m = (a + b)/2; 
       if(f(a)*f(m) > 0) 
        a = m; 
       else 
        b = m; 
       end 

       fprintf('%3d',Iter); 
       fprintf('%20.4f',a); 
       fprintf('%12.4f',b); 
       fprintf('%12.4f',m); 
       fprintf('%14.4f',f(a)); 
       fprintf('%16.4f',f(b)); 
       fprintf('%16.4f',f(m)); 
       plot(f(m)); 
       fprintf('\n'); 
      end 
      hold off; 
      root = m; 
      title('Plot of error') 
      xlabel('Number of iterations') 
      ylabel('Error') 
      grid on; 
     end 
end 

ich Grafik müssen zunächst die Funktion (Variable f) und dann zeichnen Sie die Fehler (f (m)) in differents Bilder habe ich versucht, einige Dinge, aber keine Ergebnisse:/

+0

ich bin nicht wirklich sicher, was „keine Ergebnisse“ bedeuten. Sie können jedoch Bilder mit 'image()' anzeigen. Versuchen Sie zu beschreiben, warum die Dinge falsch laufen. Außerdem ist MATLAB eine schwach typisierte Sprache und es ist nicht (zum Beispiel) sicher, dass "f" wirklich ein Funktions-Handle ist (da Sie sagen, dass Sie ein Problem haben). Dies bedeutet, dass Sie Eingaben beschreiben müssen. Was bedeutet "Grafik die Funktion"? – patrik

Antwort

0

Gelöst:

function root = biseccion(f,a,b,epsilon, max) 

if (f(a)*f(b) >= 0) 
     disp(f(a) *f(b) >= 0'); 
     root = 'Can't find root'; 
     return; 
    else 
     fprintf('Iterations\t\t\ta\t\t\tb\t\t\tm\t\t\tf(a)\t\t\tf(b)\t\t\tf(m)\n'); 
     fprintf('=========\t\t ======\t\t ======\t\t ======\t\t ======\t\t ======\t\t ======\n'); 
     m = (a + b)/2; 
     if (abs(f(m)) <= epsilon) 
      root = m; 
      return; 
     else 
      Iter = 0; 
      figure 
      hold on 
      while (abs(f(m)) >= epsilon && Iter < max) 
       Iter = Iter + 1; 
       m = (a + b)/2; 
       if(f(a)*f(m) > 0) 
        a = m; 
       else 
        b = m; 
       end 
       plot(Iter,f(m),'--gs',... 
       'LineWidth',2,... 
       'MarkerSize',10,... 
       'MarkerEdgeColor','b',... 
       'MarkerFaceColor',[0.5,0.5,0.5]) 
       fprintf('%3d',Iter); 
       fprintf('%20.4f',a); 
       fprintf('%12.4f',b); 
       fprintf('%12.4f',m); 
       fprintf('%14.4f',f(a)); 
       fprintf('%16.4f',f(b)); 
       fprintf('%16.4f',f(m)); 
       fprintf('\n'); 
      end 
      root = m; 
      title('Error graphic') 
      xlabel('Iterations') 
      ylabel('Error') 
      grid on; 
     end 
end