Advertisement
Guest User

lab3

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