Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. function [ xaprox ] = newton_raphson( f,df,x0,Eps,nmaxiter )
  2. %newton_raphson rezolva ecuatii de forma f(x) = 0
  3. %Synopsis newton_raphson(f,df,x0)
  4. % newton_raphson(f,df,x0,Eps)
  5. % newton_raphson(f,df,x0,Eps,nmaxiter)
  6. %input f=functia
  7. % df = derivata
  8. % x0 = valoarea de pornire
  9. % Eps = eroarea, implicit Eps=eps*10^6
  10. % nmaxiter = numarul maxim de iteratii, implicit nmaxiter = 100;
  11. %Output xaprox = solutia aproximativa a ecuatiei f(x) = 0 cu eroarea Eps
  12. if nargin < 5
  13. nmaxiter = 100;
  14. end
  15.  
  16. if nargin < 4
  17. Eps = eps.*10^6;
  18. end
  19. x(1)=x0;
  20. k=1;
  21. while true
  22. k=k+1;
  23. x(k)=x(k-1) - f(x(k-1))/df(x(k-1));
  24. if k >nmaxiter
  25. fprintf('S-a depasit numarul maxim de iteratii\n');
  26. break;
  27. end
  28. if(abs(x(k)-x(k-1))/abs(x(k-1))) < Eps
  29. break
  30. end
  31. end
  32. xaprox = x(k);
  33.  
  34. end
  35.  
  36. ------
  37. function [ xaprox ] = met_secantei( f,a,b,Eps)
  38.  
  39. r= rand(1,2); %un vector cu 2 elemente random
  40.  
  41. alt_r = a + (b-a)*r;
  42. x(1)=alt_r(1);
  43. x(2)=alt_r(2);
  44. k = 2;
  45.  
  46. while abs(x(k) - x(k-1))/abs(x(k-1)) >= Eps
  47. k=k+1;
  48. x(k) = (x(k-2)*f(x(k-1))-x(k-1) * f(x(k-2)))/(f(x(k-1))-f(x(k-2)));
  49. if x(k) <a | x(k) >b
  50. r= rand(1, 2); %un vector cu 2 elemente random
  51. alt_r = a + (b-a)*r;
  52. clear x;
  53. x(1)=alt_r(1);
  54. x(2)=alt_r(2);
  55. k = 2;
  56.  
  57. end
  58. end
  59.  
  60. xaprox = x(k);
  61.  
  62. end
  63.  
  64.  
  65. -----
  66. f = @(x) x.^3 - 7.*x.^2 + 14.*x - 6
  67.  
  68. %Capetele intervalului
  69. a = 0;
  70. b = 4;
  71.  
  72. interval = linspace(a,b,100);
  73.  
  74. plot(interval,f(interval), 'LineWidth' , 3)'
  75. grid on;
  76.  
  77. x0 = 0.25;
  78. syms x
  79. df = diff(f(x),x);
  80. df = matlabFunction(df, 'vars', {x});
  81.  
  82. Eps = 10^(-3);
  83. r1 = newton_raphson(f,df,x0,Eps);
  84. hold on;
  85. plot(r1,f(r1),'o' ,'MarkerFaceColor', 'r', 'MarkerSize',8);
  86.  
  87. %A doua radacina
  88. %In vecinatatea celui de-al doilea punct functia este convexa
  89. %Alegem x0 ai f(x0) >0
  90. x0=2.5;
  91. r2 = newton_raphson(f,df,x0,Eps);
  92. plot(r2,f(r2),'o' ,'MarkerFaceColor', 'r', 'MarkerSize',8);
  93.  
  94. %A treia radacina
  95. x0=3.75;
  96. r3 = newton_raphson(f,df,x0,Eps);
  97. plot(r3,f(r3),'o' ,'MarkerFaceColor', 'r', 'MarkerSize',8);
  98.  
  99.  
  100. %%
  101. clear all
  102. f = @(x) (x-1.5).^2 .* (x-4);
  103. fplot(f,[1,2],'LineWidth',3 );
  104.  
  105. syms x
  106.  
  107. mu = (f(x)/diff(f(x),x));
  108. mu = simplify(mu);
  109. dmu = diff(mu,x);
  110. dmu = simplify(dmu);
  111. dmu = matlabFunction(dmu,'vars',{x});
  112. mu=matlabFunction(mu,'vars',{x});
  113.  
  114. hold on;
  115. fplot(mu,[1,2],'LineWidth',3);
  116. grid on;
  117.  
  118. x0 = 2;
  119. r1 = newton_raphson(mu,dmu,x0);
  120. plot(r1,mu(r1),'o','MarkerSize',10);
  121.  
  122. %%
  123. %ex3
  124. clear all
  125. f = @(x) x.^3 - 18.*x -10;
  126. fplot(f, [-5,5])
  127.  
  128. Eps =10^(-5);
  129. a=-5;
  130. b=-3;
  131. tic
  132. r1 = met_secantei(f,a,b,Eps)
  133. toc
  134. hold on;
  135. plot(r1,f(r1),'o')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement