Quiet@Remove["Global`*"];
$HistoryLength=2;
SetDirectory[NotebookDirectory[]];
mf=MatrixForm;
mat2[ϵ_]:=(({{5+ϵ, 7, 6, 5}, {7, 10, 8, 7}, {6, 8, 10, 9}, {5, 7, 9, 10}}));
detMat2=Det[mat2[ϵ]];
Print["determinant= ",detMat2]
invEps[ϵ_]:=Inverse[mat2[ϵ]];
mf[invEps[ϵ]]

(*We see the dependance of the inverse matrix as an expression containing ϵ. Generally, all the terms of the matrix is known only approximately, so, the determinant and the inverse matrix can be assumed as a function of (n^2) terms (Subscript[ϵ, i,j]), i,j, 1,2,3...n=MatrixRank[mat2].
(n^2) variables => possible, but not easy way how to study the changes of the inverse matris and solution of the seto of equations 
*)

norm1[vect_]:=(Sqrt[Plus@@(Abs[((#)^2)]&/@vect)]);
norm2[vect_]:=Max[Abs[vect]];
norm3[vect_]:=Plus@@(Abs/@vect);
plotNorm2D[norm_]:=ContourPlot[norm[{x,y}]==1,{x,-1.2,1.2},{y,-1.2,1.2},ContourStyle->{Red,Thick},Frame->None,PlotLabel->"1="<>ToString@TraditionalForm[norm[{"x","y"}]]];
GraphicsRow[plotNorm2D/@{norm1,norm2,norm3}]

plotNorm3D[norm_]:=ContourPlot3D[norm[{x,y,z}]==1,{x,-1.2,1.2},{y,-1.2,1.2},{z,-1.2,1.2},Boxed->False,Axes->False,PlotRange->All,PerformanceGoal->"Quality",PlotLabel->"1="<>ToString@TraditionalForm[norm[{"x","y","z"}]]];
GraphicsRow[plotNorm3D/@{norm1,norm2,norm3}]

{a,b,c}//TreeForm;
a+b+c//TreeForm;

((#)^2)&[4];
mujPlot:=Plot[#,{x,0,2Pi},AxesLabel->{"x","y"}]&;
mujPlot/@{Sin[x],Cos[x],Cos[2x]};

mujPlot2[coTisknout_]:=Plot[coTisknout,{x,0,2Pi},AxesLabel->{"x","y"}];
mujPlot2/@{Sin[x],Cos[x],Cos[2x]};

matNorm1[mat_]:=Module[{},
N@(Sqrt[(mat/.term_?NumericQ:>((Abs[term])^2))/.List->Plus])
];
matNorm2[mat_]:=Module[{},
Max[(Plus@@#&)/@(mat/.term_?NumericQ:>Abs[term])]
];
matNorm2a[mat_]:=matNorm2[Transpose@mat];
Print["{matNorm2[mat2[0]],matNorm2a[mat2[0]]} = ",{matNorm2[mat2[0]],matNorm2a[mat2[0]]}]

matNorm3[mat_]:=Module[{},
Max[Abs[N[#]]&@Eigenvalues[mat]]
];
Through[{matNorm1,matNorm2,matNorm2a,matNorm3}[mat2[0]]]

cond[mat_,matNorm_]:=matNorm[Inverse@N@mat]*matNorm[N@mat];
cond[mat2[0],#]&/@{matNorm1,matNorm2,matNorm3}

SeedRandom[1];
exactMatrix=mat2[0];
matrixRank=MatrixRank[exactMatrix];
matrixOfErrors=0.2*RandomReal[{-1,1},{matrixRank,matrixRank}];
matrixOfErrors//mf;
knownMatrix=exactMatrix+matrixOfErrors;
Column[{knownMatrix//mf,exactMatrix//mf}]
variablesToSolve=(Subscript[x, #])&/@Range[matrixRank]
rhsVector=RandomInteger[{-5,5}]&/@Range[matrixRank]

(*how to get list of equations from vectors and matrices*)
equations[mat_]:=Thread[mat.variablesToSolve==rhsVector];
Row[mf/@(equations/@{exactMatrix,knownMatrix})];

(*how to get rhsVector (b) and the matrix (mat) from a list of equations and known variablesToSolve*)
{b,m}=CoefficientArrays[equations[exactMatrix],variablesToSolve]//Normal;
b
mf@m

compareRelativeErrors[matNorm_,vectNorm_]:=Module[{condNumber,xExact,xKnown,relativeErrorOfsolution,maxRelativeErrorOfsolution},
condNumber=cond[exactMatrix,matNorm2];
xExact=LinearSolve[exactMatrix,rhsVector];
xKnown=LinearSolve[knownMatrix,rhsVector];
{relativeErrorOfsolution=((vectNorm[xExact-xKnown])/(vectNorm[xKnown])),maxRelativeErrorOfsolution=condNumber*((matNorm[exactMatrix-knownMatrix])/(matNorm[knownMatrix])),relativeErrorOfsolution<maxRelativeErrorOfsolution}
];
compareRelativeErrors[matNorm3,norm2]

compareRelativeErrorsKnown[matNorm_,vectNorm_]:=Module[{condNumber,xExact,xKnown,relativeErrorOfsolution,maxRelativeErrorOfsolution},
condNumber=cond[knownMatrix,matNorm2];
xExact=LinearSolve[exactMatrix,rhsVector];
xKnown=LinearSolve[knownMatrix,rhsVector];
{relativeErrorOfsolution=((vectNorm[xExact-xKnown])/(vectNorm[xKnown])),maxRelativeErrorOfsolution=condNumber*((matNorm[exactMatrix-knownMatrix])/(matNorm[knownMatrix])),relativeErrorOfsolution<maxRelativeErrorOfsolution}
];
compareRelativeErrorsKnown[matNorm3,norm2]

(*So, it looks like a joke: for the comparison of errors we have to know the the condition number of the exactMatrix ... but knowing it we don't need anything related to condition numbers etc...
... but we can believe that for small matrixNorm of matrixOfErrors (try to decrease the value 0.2 in the definition of matrixOfErrors the difference of cond[exactMatrix] and cond[knownMatrix] is small and reasonable... ) 
 *)