(*systemy rovnic  linearne ... matice*)

(*matica A 2x2    porovnanie po zlozkach*)
a11=-0.1; a12 =1; a21 = -1; a22 = -0.1;
A={{a11,a12},{a21,a22}};
MatrixForm[A]

(*system je vlastne toto y'=A*y   matica * y *)

(*chceme definovat vektor pravej strany cize len prava zlozka  cize  f1 =a11*y1 + a12*y2   ; f2= a11*y1 + a12*y2
ma 3 premenne lebo ma 2 zlozky a pocet premmenych je vdzdy zlozky++1 *)
f1[x_,y1_,y2_]:=a11*y1 + a12*y2
f2[x_,y1_,y2_]:=a21*y1 + a22*y2




(*eulerova  metoda sa riesila takto f[x_,y_]  :=  ale teraz to treba takto riesit lebo to je matica*)

(*pociatocne podmienky*)
x0=0;
x[0]=0;
y1[0]=1;
y2[0]=0;

(*zadanie pokade to chceme + krok ..tu sa nic nemeni oproti eulorovej metode*)
 koniec=1;
h=0.05;
n=koniec/h;

(*y(n+1) = y(n) + hf[x(n)*y(n)]        (n+1) a (n) je v podexponente -t ohned dole vpravo ci ako sa to vola
takze   y(n+1,1)=y(n,1) + hf1[x(n),y(n1),y(n2)]
		y(n+1,2)=y(n,2) + hf2[x(n),y(n1),y(n2)]

 *)

(*Eulerova metoda  numries1 riesi prvu zlozku a dvojka druhu,lebo funkcia ma 2 zlozky tak 2 funkcie na ich riesenie*)
Numries1[x_,y1_,y2_,f_,h_]:= y1+h*f[x,y1,y2]
Numries2[x_,y1_,y2_,f_,h_]:= y2+h*f[x,y1,y2]
(*tu su len formalne parametre teda matika je ako Ccko..len definujeme funkciu cize formalne paramatre mozu mat lubovolne pismena*)

(*presne riesenie..skutocne nie priblizne ako euloreva metoda*)

Pres1[x_] :=Exp[-0.1*x]*Cos[x]
Pres2[x_] :=Exp[-0.1*x]*Sin[x]

(*samotny numericky vypocet *)
(*y1 a y2 je pole s vysledkami*)

Do[{x[i]=x0+i*h,y1[i]=Numries1[x[i-1],y1[i-1],y2[i-1],f1,h],y2[i]=Numries2[x[i-1],y1[i-1],y2[i-1],f2,h]},{i,1,n,1}]
(*tu uz volame prave paramentre nie formalne cize to ...,f1,h znamena ze z f1 volame numries1*)

(*toto je uz len suvisle so zobrazovanim vysledkov*)

data = Table[{x[i],y1[i],y2[i]},{i,0,n}]  ;(*vysledkom su 2 zlozky cize 2 funkcie vys1 = prva zlozka a vys2= druha zlozka ..cize budu 2 grafy*)

.

vys1=Table[{x[i],y1[i]},{i,0,n}];  (*x sa nemeni a y ano*)
vys2=Table[{x[i],y2[i]},{i,0,n}];

(*tuto je porovnanie odchylka eulorevej metody od skut.riesenia*)
data1=Table[{Abs[(y1[i]-Pres1[x[i]])],Abs[(y2[i]-Pres2[x[i]])]},{i,0,n}];
(*tuto dole len vyhodi jednotlive zlozky + vysledky + rozdieli oproti skutocnemu riesenie*)

vysledky= Table[{x[i],y1[i],y2[i],Pres1[x[i]],Pres2[x[i]],Abs[(y1[i]-Pres1[x[i]])],Abs[(y2[i]-Pres2[x[i]])]},{i,0,n}];

Print[(* hodnota x     num ries y1   nuum ries y2     presneries y1   presne y2      chyba1   chyba 2 *)PaddedForm[TableForm[vysledky],{7,2}]]

g1=Plot[Pres1[x],{x,0,1}];
gn1=ListPlot[vys1,PlotStyle->{RGBColor[1,0,0],PointSize[0.02]}];
Show[g1,gn1]

g2=Plot[Pres2[x],{x,0,1}];
gn2=ListPlot[vys2,PlotStyle->{RGBColor[1,0,0],PointSize[0.02]}];
Show[g2,gn2]