public static double FunkWithInterval(FuncArX f, double[] x, int start = 0, int stop = 0) { if ((start == 0 && stop == 0) || stop >= x.Length) { return(f(x)); } else { int[] ind = new int[start - stop + 1]; for (int i = 0, j = start; i < ind.Length; i++, j++) { ind[i] = j; } return(f((double[])x.GetValue(ind))); } }
/// <summary> /// <para>2b</para> /// <para>Модифицировать программу нахождения минимума функции так, чтобы можно было передавать функцию в виде делегата.</para> /// <para>Переделать функцию Load, чтобы она возвращала массив считанных значений. </para> /// <para>Пусть она возвращает минимум через параметр (с использованием модификатора out)</para> /// </summary> /// <param name="f">func for value calculation</param> /// <param name="fileName">filename to write values</param> /// <param name="funcRes">result of f function</param> /// <returns>all values from file (see 'SaveResults' method)</returns> public static double[] Load(FuncArX f, string fileName, out double funcRes, FuncArXInterval ff = null, int startInt = 0, int stopInt = 0) { double[] results; using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { using (BinaryReader bw = new BinaryReader(fs)) { results = new double[fs.Length / sizeof(double)]; for (int i = 0; i < fs.Length / sizeof(double); i++) { results[i] = bw.ReadDouble(); } } funcRes = ff == null?f(results) : ff(f, results, startInt, stopInt); } return(results); }