%% Nemlineáris egyenletek megoldása
% * 1. Vizsgáljuk meg az alábbi iterációkat konvergenciarend szempontjából (mindegyik 
% 2-höz tart)! Milyen kezdõérték esetén tart a harmadik iteráció 2-höz?*
% 
% $$x_{k+1}=\frac{3x_k^2-4x_k-2}{x_k-1}\\x_{k+1}=\sqrt{3x_k/2+1}\\x_{k+1}=x_k-2+\frac{x_k}{x_k-1}$$

x=3; y=3; z=3; 
k=0;
fprintf('lépés          x                        y                         z\n')
fprintf('    0 %25.13f         %16.13f          %16.13f\n',x,y,z)
hibax=zeros(1,20); hibay=hibax; hibaz=hibax;
for k=1:20
x=(3*x^2-4*x-2)/(x-1); hibax(k)=abs(x-2);
y=sqrt(3*y/2+1); hibay(k)=abs(y-2);
z=z-2+z/(z-1); hibaz(k)=abs(z-2);
fprintf('  %3d%26.13f         %16.13f          %16.13f\n',k,x,y,z)
end

plot(log(hibay(1:19)),log(hibay(2:20)),'b-',log(hibaz(1:19)),log(hibaz(2:20)),'r-')
axis equal
%% 
% **
% 
% *2. Határozzuk meg a Newton módszerrel a *$p(x)=x^5-x^4-4x^3+4x^2+4x-4$* 
% polinom legnagyobb zérushelyét!*
%%
p=@(x)x.^5-x.^4-4*x.^3+4*x.^2+4*x-4;
pder=@(x)5*x.^4-4*x.^3-12*x.^2+8*x+4;
fplot(p,[0,2]);
%%
zerushely=fzero(p,2)
%%
x=2, for i=1:20 x=x-p(x)/pder(x), end
%% 
% *3. Oldjuk meg az*
% 
% $$x+y+z=0\\x^2+y^2+z^2=2\\x(y+z)=-1$$
% 
% *nemlineáris egyenletrendszert a Newton-módszer segítségével! Keressünk 
% megoldást az (3/4,1/2,-1/2) pont közelében!*
%%
f=@(x)[x(1)+x(2)+x(3);x(1)^2+x(2)^2+x(3)^2-2;x(1)*(x(2)+x(3))+1]
J=@(x)[1,1,1;2*x(1),2*x(2),2*x(3);x(2),x(1),x(1)]
%%
x=[3/4;1/2;-1/2], for i=1:10 x=x-J(x)\f(x), end
%%
fsolve(f,[3/4;1/2;-1/2])
%% 
% *4. Adjuk meg az*
% 
% $$x^2+y^2=1\\x \sin(y)=1/3$$
% 
% *nemlineáris egyenletrendszer legalább egy megoldását! *
%%
f1=@(x,y)x.^2+y.^2-1
ezplot(f1), axis equal
hold on
f2=@(x,y)x.*sin(y)-1/3
ezplot(f2), axis equal
hold off
%%
f=@(x)[f1(x(1),x(2));f2(x(1),x(2))]
J=@(x)[2*x(1),2*x(2);1,cos(x(2))]
x=[1;1], for i=1:20 x=x-J(x)\f(x), end
%%
    fsolve(f,[0.4;0.9])
%% 
% 5. *Minimalizáljuk az *$f(x,y)=(x-y)^2+(x^2-1)^2$* függvényt!*
%%
g=@(x,y)((x-y).^2+(x.^2-1).^2)
fmesh(g);
f=@(x)g(x(1),x(2))
%%
H=@(x)[-2+12*x(1).^2,-2;-2,2];
grad=@(x)[2*(x(1)-x(2))+2*(x(1).^2-1)*2.*x(1);-2*(x(1)-x(2))];

x=[2;2], 
for i=1:10 x=x-H(x)\grad(x), end
%%
fminunc(f,[2;2])
%% Polinominterpoláció
%%  1. Adjuk meg a (-1,6), (0,3) és (1,2) pontokat interpoláló polinomot!
%%
x=[-1,0,1];
y=[6,3,2];
z=polyfit(x,y,2)
xx=linspace(min(x),max(x),500);
yy=polyval(z,xx);
plot(x,y,'ro',xx,yy,'b-')
%% 
% *2. Interpoláljuk az f függvényt különbözõ alappontokon, és vizsgáljuk 
% meg, hogy mi történik az alappontok számának növelésekor!*
%%
f=@(x)sin(x)
for n=3:10
x=linspace(0,pi,n);
y=f(x);
z=polyfit(x,y,n-1);
xx=linspace(min(x),max(x),500);
yy=polyval(z,xx);
figure
plot(x,y,'ro',xx,yy,'b-',xx,f(xx),'k-')
end