Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function [ xaprox ] = newton_raphson( f,df,x0,Eps,nmaxiter )
- %newton_raphson 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) = 0 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\n');
- break;
- end
- if(abs(x(k)-x(k-1))/abs(x(k-1))) < Eps
- break
- end
- end
- xaprox = x(k);
- end
- ------
- function [ xaprox ] = met_secantei( f,a,b,Eps)
- r= rand(1,2); %un vector cu 2 elemente random
- 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); %un vector cu 2 elemente random
- 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 - 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;
- 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',8);
- %A doua radacina
- %In vecinatatea celui de-al doilea punct functia este convexa
- %Alegem x0 ai f(x0) >0
- x0=2.5;
- r2 = newton_raphson(f,df,x0,Eps);
- plot(r2,f(r2),'o' ,'MarkerFaceColor', 'r', 'MarkerSize',8);
- %A treia radacina
- x0=3.75;
- r3 = newton_raphson(f,df,x0,Eps);
- plot(r3,f(r3),'o' ,'MarkerFaceColor', 'r', 'MarkerSize',8);
- %%
- clear all
- 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);
- dmu = matlabFunction(dmu,'vars',{x});
- mu=matlabFunction(mu,'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','MarkerSize',10);
- %%
- %ex3
- clear all
- f = @(x) x.^3 - 18.*x -10;
- fplot(f, [-5,5])
- Eps =10^(-5);
- a=-5;
- b=-3;
- tic
- r1 = met_secantei(f,a,b,Eps)
- toc
- hold on;
- plot(r1,f(r1),'o')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement