List <double> approximationResultArray(List <double> _resultArray, List <double> _oneDimArrayX1, List <double> _oneDimArrayY1, int _Draw, int _n, ref double _R) { int l = 0; List <double> resApprox = new List <double>(); List <double> tempList = new List <double>(); List <double> listResTemp = new List <double>(); List <double> listArrX1Temp = new List <double>(); List <double> listArrY1Temp = new List <double>(); Data3D data3D; Values values; FindValues_xa_yb_c findValues; int a = 0; listArrY1Temp.Add(_oneDimArrayY1[a]); for (int i = 0; i < _resultArray.Count; i++) { if (l == _Draw / 2) { data3D = new Data3D(listArrX1Temp, listArrY1Temp, tempList); values = new Values(_n, data3D.arrayX.Length, data3D.arrayY.Length); findValues = new FindValues_xa_yb_c(_n, data3D, values); int j = 0; foreach (var item in listResTemp) { if (item <= 0) { findValues.findMassiveYwithX(_oneDimArrayX1[j], _n); resApprox.Add(values.findYMassiveWithX[0]); } else { resApprox.Add(item); } j++; } l = 0; tempList.Clear(); listResTemp.Clear(); listArrX1Temp.Clear(); listArrY1Temp.Clear(); a++; listArrY1Temp.Add(_oneDimArrayY1[a]); } if (_resultArray[i] > 0) { tempList.Add(_resultArray[i]); listArrX1Temp.Add(_oneDimArrayX1[l]); } listResTemp.Add(_resultArray[i]); l++; } data3D = new Data3D(listArrX1Temp, listArrY1Temp, tempList); values = new Values(_n, data3D.arrayX.Length, data3D.arrayY.Length); findValues = new FindValues_xa_yb_c(_n, data3D, values); int k = 0; foreach (var item in listResTemp) { if (item <= 0) { findValues.findMassiveYwithX(_oneDimArrayX1[k], _n); resApprox.Add(values.findYMassiveWithX[0]); } else { resApprox.Add(item); } k++; } data3D = new Data3D(_oneDimArrayX1, _oneDimArrayY1, _resultArray); values = new Values(_n, data3D.arrayX.Length, data3D.arrayY.Length); findValues = new FindValues_xa_yb_c(_n, data3D, values); _R = findValues.findRWithList(resultArray_WithoutNull, resApprox); return(resApprox); }