block[a_,b_]:=(({{a, b}, {-b, a}}))
blockDiagonal[blocks_]:=ArrayFlatten@Table[Join[Table[block[0,0],i-1],{blocks[[i]]},Table[block[0,0],Length@blocks-i]],{i,1,Length@blocks}]
mask[blocks_]:=RandomInteger[{1,10},{Length@blocks*2,Length@blocks*2}];

(* Náhodné parametry *)
eigenvals =Table[block[-RandomReal[{0,0.01}],RandomReal[{-0.5,0.5}]],8];(* Realná část v [-5,-1], imaginární [-10, 100]*)
R=mask[eigenvals];
A=Dot[R,blockDiagonal[eigenvals],Inverse@R];

(* Připravné parametry *)
eigenvals={block[-0.5,1],block[-0.035,-0.82],block[-0.01,-0.82],block[-0.035,-0.5],block[-0.005,-0.32],block[-0.002,0.15],block[-0.0001,0.115],block[-0.0001,-0.05]};
R=(({{1, 9, 9, 2, 2, 3, 4, 1, 1, 8, 6, 1, 9, 9, 3, 1}, {10, 1, 7, 5, 4, 5, 6, 9, 10, 4, 1, 10, 6, 10, 1, 3}, {10, 10, 1, 1, 9, 2, 3, 1, 9, 4, 3, 5, 10, 8, 10, 4}, {3, 4, 4, 3, 9, 8, 2, 9, 6, 1, 2, 10, 8, 9, 4, 3}, {5, 9, 7, 3, 3, 3, 3, 5, 8, 9, 7, 3, 7, 8, 6, 9}, {2, 9, 1, 2, 8, 4, 6, 1, 5, 6, 8, 9, 10, 2, 6, 10}, {5, 8, 9, 6, 9, 3, 4, 10, 10, 10, 6, 7, 4, 6, 10, 3}, {7, 9, 10, 5, 1, 9, 3, 10, 7, 8, 9, 8, 1, 1, 1, 10}, {8, 2, 3, 10, 7, 9, 7, 7, 3, 10, 5, 8, 6, 7, 10, 8}, {8, 5, 10, 2, 1, 7, 7, 7, 6, 6, 3, 8, 3, 8, 9, 8}, {8, 1, 1, 9, 9, 1, 4, 1, 4, 3, 9, 7, 2, 1, 9, 10}, {6, 10, 6, 8, 4, 8, 3, 4, 9, 4, 5, 5, 5, 9, 8, 2}, {9, 2, 2, 6, 10, 3, 6, 1, 4, 4, 3, 9, 3, 3, 4, 7}, {6, 9, 4, 8, 7, 8, 7, 5, 4, 3, 2, 1, 5, 5, 7, 1}, {1, 3, 7, 3, 5, 1, 8, 2, 5, 3, 2, 8, 6, 8, 5, 10}, {4, 2, 9, 2, 2, 5, 9, 10, 10, 7, 3, 4, 4, 2, 2, 3}}));
A=Dot[R,blockDiagonal[eigenvals],Inverse@R];

Cout={Table[1/2,16]}
x0=Transpose@{{1,1,1,1,1,1,1,1,1,1,1/4,1/4,1/3,1/3,1/2,1/2}}

(* Báze vlastních vektorů A *)
X=Transpose@Eigenvectors@A;
(* Funkce odpovídající x(t) *)
x[t_]:=Dot[Cout,X,DiagonalMatrix@Map[Exp[#*t]&,Eigenvalues@A],Inverse@X]
(* Funkce odpovídající y(t) *)
y[t_]:=Dot[x[t],x0][[1,1]]
(* y(t) s i-tým vlastním číslem jako jediným nenulovým vlastním číslem *)
g[t_,i_]:=Dot[Cout,X,DiagonalMatrix@Join[Table[0,i-1],{Exp[Eigenvalues[A][[i]]*t]},Table[0,16-i]],Inverse@X,x0][[1,1]]
(* Jako výše, jen v bázi vlastních čísel A *)
h[t_,i_]:=Dot[Cout,DiagonalMatrix@Join[Table[0,i-1],{Exp[Eigenvalues[A][[i]]*t]},Table[0,16-i]],x0][[1,1]]

(* Graf y(t) *)
Plot[y[t],{t,0,500},PlotRange->Full,WorkingPrecision->50]

(* Graf g[t,2i-1]+g[t,2i]. Pokud je (Subscript[c, 2i-1])=(Subscript[c, 2i]), pak jde o násobek reálné části g[t,2i-1] *)

Table[Plot[g[t,2*i-1]+g[t,2*i],{t,0,500},PlotRange->Full,WorkingPrecision->50],{i,1,8}]

(* Dtto v bázi vlastních vektorů A. *)
Table[Plot[h[t,2*i-1]+h[t,2*i],{t,0,500},PlotRange->Full,WorkingPrecision->50],{i,1,8}]

(* Šoupátko pro zkoušení, co napáchá jaká změna ve vlastním čísle. Rozsah hodnot je daný posledními dvěma poli v chlupatých závorkách na konci příkazu. *)
tester[a_,b_,t_]:=Dot[Cout,DiagonalMatrix@Join[{Exp[Complex[a,b]*t]},Table[0,15]],x][[1,1]]
Manipulate[Plot[tester[a,b,t]+tester[a,-b,t],{t,0,350},PlotRange->Full,WorkingPrecision->100],{a,-0.5,-0.0001},{b,-1, 1}]