Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- syms x y
- f = x^3-6*x^2
- g=2*x^3+8*x^2
- f+g
- A=[x 2*y; 2*x 4*y]
- A(1,1)
- det(A)
- inv(A)
- diff(f,x)
- int(f,x)
- subs(f,{x},{2})
- F=matlabFunction(f)
- %F=matlabFunction(f, 'vars', {x})
- %lab2 - 1a
- function [ xaprox ] = newton_raphson(f, df, x0, Eps, nmaxiter)
- %newton_rapshon rezolva ecuatii de forma f(x)=0
- %synopsis newton_raphson(f, df, x0)
- % newton_raphson(f, df, x0, Eps)
- % newton_raphson(f, df, x0, Eps, nmaxiter)
- %input f = functia
- % df = derivata
- % x0 = valoarea de pornire
- % Eps = eroarea, implicit Eps = eps * 10^6
- % nmaxiter = numarul maxim de iteratii, implicit nmaxiter = 100
- %output xaprox = solutia aproximativa a ecuatiei f(x) = cu eroarea Eps
- if nargin < 5
- nmaxiter = 100;
- end
- if nargin < 4
- Eps = eps .* 10^6;
- end
- x(1) = x0
- k = 1;
- while true
- k = k+1;
- x(k) = x(k-1) - f(x(k-1))/df(x(k-1));
- if k > nmaxiter
- fprintf("S-a depasit numarul maxim de iteratii");
- break
- end
- if abs(x(k) - x(k-1))/abs(x(k-1)) < Eps
- break
- end
- end
- xaprox = x(k);
- end
- %lab2 - 1b
- f = @(x) x.^3 - 7.*x.^2 + 14.*x - 6
- %capetele intervalului
- a = 0;
- b = 4;
- interval = linspace(a, b, 100);
- plot(interval, f(interval), 'LineWidth', 3);
- grid on
- %prima radacina
- x0 = 0.25;
- syms x
- df = diff(f(x), x)
- df = matlabFunction(df, 'vars', {x});
- Eps = 10^(-3);
- r1 = newton_raphson(f, df, x0, Eps);
- hold on
- plot(r1, f(r1), 'o', 'MarkerFaceColor', 'r', 'MarkerSize', 10);
- %a doua radacina
- %in vecinatatea celui de-al doilea punct, functia este convexa
- %alegem x0 astfel incat f(x0) > 0
- x0 = 2.5;
- r2 = newton_raphson(f, df, x0, Eps);
- hold on
- plot(r2, f(r2), 'o', 'MarkerFaceColor', 'g', 'MarkerSize', 10);
- %a treia radacina
- x0 = 3.75;
- r3 = newton_raphson(f, df, x0, Eps);
- hold on
- plot(r3, f(r3), 'o', 'MarkerFaceColor', 'y', 'MarkerSize', 10);
- %lab2 - 2
- f = @(x) (x-1.5).^2 .* (x-4);
- fplot(f,[1,2],'LineWidth', 3);
- syms x
- mu = (f(x)/diff(f(x),x));
- mu = simplify(mu);
- dmu = diff(mu, x);
- dmu = simplify(dmu);
- mu = matlabFunction(mu, 'vars', {x});
- dmu = matlabFunction(dmu, 'vars', {x});
- hold on;
- fplot(mu, [1,2], ...
- 'LineWidth', 3);
- grid on;
- x0=2
- r1 = newton_raphson(mu,dmu,x0);
- plot(r1,mu(r1),'o')
- %lab2 - 3
- function [ xaprox ] = metoda_secantei(f, a, b, Eps)
- r = rand(1,2);
- alt_r = a +(b-a)*r;
- x(1) = alt_r(1);
- x(2) = alt_r(2);
- k = 2;
- while abs(x(k) - x(k-1))/abs(x(k-1)) >= Eps
- k = k+1;
- x(k) = (x(k-2) * f(x(k-1)) - x(k-1) * f(x(k-2)))/(f(x(k-1)) - f(x(k-2)));
- if x(k) < a | x(k) > b
- r = rand(1,2);
- alt_r = a +(b-a)*r;
- clear x
- x(1) = alt_r(1);
- x(2) = alt_r(2);
- k=2;
- end
- end
- xaprox = x(k)
- end
- f = @(x) x.^3 - 18.*x -10
- fplot(f, [-5, 5])
- Eps = 10^(-5)
- a = -5;
- b = -3;
- tic
- r1 = metoda_secantei(f,a,b,Eps)
- toc
- hold on
- plot(r1, f(r1), 'o')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement