%linalg:
%{
A=[1 2 -3; -3 -1 1; 1 -1 1]
b=[5; -8; 0]
x=A\b
r=rank(A) %független sorok és oszlopok száma
d=det(A) %determináns (négyzetesre)
E=inv(A) %ha det nem 0
x2=E*b %ugyanaz, mint A\b
[V, D]=eig(A) %V oszlopai a sajtvektorok, D átlójában a sajátértékek
%}

%egyenlet megoldás:
%{
A1=[1 4; -3 1]
b1=[34; 2]
rankA1=rank(A1)
x1=A1\b1
x1=inv(A1)*b1
error=abs(A1*x1-b1) %hiba 0

A2=[2 -2; -1 1; 3 4]
b2=[4; 3; 2]
rankA2=rank(A2)
x2=A2\b2
error=abs(A2*x2-b2) %hiba nagy, nem négyzetes a mx, nem független sort kiszed, már kis hiba:

A2=[2 -2;3 4]
b2=[4; 2]
rankA2=rank(A2)
x2=A2\b2
error=abs(A2*x2-b2)

A2=[-1 1; 3 4]
b2=[3; 2]
rankA2=rank(A2)
x2=A2\b2
error=abs(A2*x2-b2)
%}

%polinomok: N+1 hosszú vektor= N-ed rendû polinom, (N+1. elem a konstans)
%{
P=[2 1 0 -2]
r=roots(P) % P gyökei
P2=poly(r) %gyökbõl polinom
x0=2
y0=polyval(P, x0) %polinom értéke az x0 pontban
x=(0:0.1:10);
y=polyval(P, x); %polinom értéke az adott x pontokban
plot(x,y, 'b.');
%}

%{
X=[-1 0 2]; %(X,Y) pontokat adok
Y=[0 -1 3];
p=polyfit(X,Y,2); %2. rendû polinomot illeszt az (X,Y) pontokra
plot(X,Y, 'o', 'MarkerSize', 10); %ábrázol
hold on; %ugyanoda rajzol
x2=(-3:0.01:3);
plot(x2, polyval(p,x2), 'r--'); %polinom értékét kiszámol x2 pontokra és kirajzolja x2 függvényében
hold off;
%}

%feladat:
%{
x=-4:0.1:4;
y=x.^2;
y_noisy=y+randn(size(y));
plot(x, y_noisy, '.');
p=polyfit(x, y_noisy, 2);
y_fitted=polyval(p, x);
hold on;
plot(x, y_fitted, 'r-');
hold off;
%}

%zérushely, minimum keresés
%
clear
clc
x1=fzero('myfun', 1) %1-hez közeli zérushelyet mond
%x1=fzero(@myfun, 1) %így is megadhatod fv-t
x2=fminbnd('myfun',-1,2) % [-1 2] intervallumon a fv minimumát adja
x3=fminsearch('myfun', 0.5) %0.5-tõl kezd keresni lokális minimumot
x=-1:0.01:2;
plot(x, myfun(x), 'r-', x1, myfun(x1), 'bo', x2, myfun(x2), 'go', x3, myfun(x3), 'mo');
legend('y=cos(4*x).*sin(10*x).*exp(-abs(x))', '1-hez közeli zérushely', '[-1, 2] intervallumon min', '0.5-tõl kezdve min');
%}

%feladat: ?????????????????????
%
clear;
close all;
clc;
x0=fminbnd('myfun', -pi,pi)
myfun(x0)
x=-pi:0.01:pi; 
y=myfun(x);

[minfv, minhely]=min(y); %ez mûködik jól
min_itt=x(minhely)
min_ez=minfv
plot(x,myfun(x), min_itt, min_ez, 'go', x0, myfun(x0), 'ro');
%}
%{
x0=fminbnd(@(x0) (cos(4*x0).*sin(10*x0).*exp(-abs(x0))), -pi, pi)
x=-pi:0.01:pi;
plot(x, cos(4*x).*sin(10*x).*exp(-abs(x)), 'r-', x0, cos(4*x0).*sin(10*x0).*exp(-abs(x0)), 'bo');
%}

%differenciálás:
%{
x=0:0.01:2*pi;
y=sin(x);
diff(x)
dydx=diff(y)./diff(x); %differenciálás
plot(x, y, 'b', x(1:length(dydx)), dydx, 'r');
%}

%{
mat=[1 2 5; 4 8 6]
dm=diff(mat, 1,2) %1. rendû diff, a 2. dim (oszlopok) szerint, egymás meletti oszlopokat kivonogat egymásból
[dx, dy]=gradient(mat) % adott irányú gradienst számol
%}

%integrálás:
%{
q=quad('myfun',0,10) %bemenete fv, 0-tól 10-ig integrálja
q2=quad(@(x) (sin(x).*x), 0,pi)

x=0:0.01:pi;
z=trapz(x,sin(x)) %bemenete vektor, 0-tól pi-ig integrál
z2=trapz(x,sqrt(exp(x))./x)
%}

%diferenciál egyenletek
%kémiai reakció:
%{
%options=odeset('RelTol',1e-6,'AbsTol',1e-10);
[t,y]=ode45('chem',[0 0.5],[0 1]);
% [eltárolt idõpont, eltárolt értékek]=
%diffegy megoldó módszer('egyenletek itt vannak', 
%[kezdeti, vég idõpont], 
%[kiindulási feltételek változókra]->(oszlopvektor) ezaz 1. input, 
% a többi bemenet, ami az egyenletbõl kijön, ezek meg az idõpont tárolva a kimenetben)
figure;
plot(t,y(:,1),'k.','LineWidth',1.5); % A reagens
hold on;
plot(t,y(:,2),'r.','LineWidth',1.5); % B reagens
legend('A','B'); 
xlabel('Time (s)'); % x tengelyen az idõpontok a 't'-bõl
ylabel('Amount of chemical (g)');
title('Chem reaction');
%}

%pendulum:
%{
%[t,x]=ode45('pendulum', [0 10], [0.9*pi 0]); %kezd felt: majdnem vízszintes helyzet, 0 m/sesc sebesség
[t,x]=ode45(@(t, x) ([x(2); -(9.8/1)*sin(x(1))]), [0 10], [0.9*pi 0]); % amonim fv-nyel ugyanez
figure;
plot(t, x(:,1), 'b.', t, x(:,2), 'r.');
legend('Position','Velocity');
xlabel('Time');
figure;
plot(x(:,1), x(:,2));
xlabel('Position');
ylabel('Velocity');

%}

%feladat: dy/dt=-t*y/10
%{
[t, y]=ode45(@(t,y) -t*y/10, [0 10], 10); %csak 1 változó (y)
figure;
plot(t,y, 'b.');
xlabel('Time');
ylabel('y(t)');
title('Function y(t) integrated by ode45');
%}