I need help please !! Newton method
    4 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Thierry Gelinas
 le 11 Avr 2015
  
    
    
    
    
    Commenté : Thierry Gelinas
 le 12 Avr 2015
            Hi , I know there's a lot of subjects on this but I didn't find what I'm looking for... This is my problem: I have create this code and it works perfectly well :
fonc=inline('fonction');
dfonc=inline('derivée de la fonction');
x=0.8;
;xn=0;
eps=1e-6;
k=0;
fprintf('   k        x_k          f(x_k)   \n');
fprintf('%4d   %12.4e  %12.4e  \n',k, x,fonc(x));
k=k+1;
while abs(x-xn) > eps & k < 20
    xn=x;
    x=x-fonc(x)/dfonc(x);
    fprintf('%4d   %12.4e  %12.4e  \n',k, x,fonc(x));
    k=k+1;
end
In this case fonction = x^4-1.3*x^3-2.97*x^2+5.929*x-2.662 and dérivée de la fonction is 4*x^3-3.9*x^2-5.94*x+5.929
   k        x_k          f(x_k)   
       0     8.0000e-01   -7.5600e-02  
       1     9.0370e-01   -2.1963e-02  
       2     9.7064e-01   -6.4300e-03  
       3     1.0144e+00   -1.8908e-03  
       4     1.0432e+00   -5.5753e-04  
       5     1.0623e+00   -1.6467e-04  
       6     1.0749e+00   -4.8691e-05  
       7     1.0833e+00   -1.4407e-05  
       8     1.0889e+00   -4.2649e-06  
       9     1.0926e+00   -1.2629e-06  
      10     1.0951e+00   -3.7405e-07  
  ...
      29     1.1000e+00    0.0000e+00
My problem is that I have to add a new thing to the table that would be create by this fonction:
 abs((xn2-xn)/(xn-x))
and I don't know how to do it... I really need help. It should be looking like this
     k        x_k          f(x_k)     |En+1/En| 
     0     8.0000e-01   -7.5600e-02  0,645515911
     1     9.0370e-01   -2.1963e-02  0,653719749
     2     9.7064e-01   -6.4300e-03  0,658135283
     3     1.0144e+00   -1.8908e-03  0,663194444
     4     1.0432e+00   -5.5753e-04  0,659685864
     5     1.0623e+00   -1.6467e-04  ...
     6     1.0749e+00   -4.8691e-05  ...
     7     1.0833e+00   -1.4407e-05  ...
     8     1.0889e+00   -4.2649e-06  ...
     9     1.0926e+00   -1.2629e-06  ...
    10     1.0951e+00   -3.7405e-07  ...
    11     1.0967e+00   -1.1080e-07  …
Thank you. ( by the way , english is not my native language so I'm sorry for all the mistakes I may have made. )
2 commentaires
  Geoff Hayes
      
      
 le 11 Avr 2015
				Thierry - in your equation
 abs((xn2-xn)/(xn-x))
does xn2 really mean xn^2 or does it mean something else?
  Thierry Gelinas
 le 11 Avr 2015
				
      Modifié(e) : Thierry Gelinas
 le 11 Avr 2015
  
			
		Réponse acceptée
  Geoff Hayes
      
      
 le 12 Avr 2015
        Thierry - in order to calculate this new value, you will need to save the data from the previous iterations. So outside of the while loop, create a variable for the historical data as
 maxIters    = 20;
 histData    = zeros(maxIters+1,1);
 histData(1) = x;
then inside the while loop handle the case for when you have enough data to do the calculation (i.e. at least three historical points)
 while abs(x-xn) > eps && k < maxIters
    xn = x;
    x  = x-fonc(x)/dfonc(x);
    histData(k+1) = x;
    fprintf('%4d   %12.4e  %12.4e  ',k, x,fonc(x));
    if k==1
        fprintf('\n');
    else
        fprintf('%12.4e\n',abs((histData(k+1)-histData(k))/(histData(k)-histData(k-1))));
    end
    k = k + 1;
 end
Try the above and see what happens!
Plus de réponses (0)
Voir également
Catégories
				En savoir plus sur Linear Algebra dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

