Решил 113 задачу. Кто догадается, что возвращает функция L - тот молодец.
static Func L(double[] xs, double[] ys)
{
return x => ys.Select((yi, i) => new {i, yi})
.Aggregate(0d, (soFar, yi) => soFar + yi.yi*l(xs, yi.i, x));
}
private static double l(double[] xs, int i, double x)
{
return xs.Select((xj, j) => new {xj, j})
.Where(j => j.j != i)
.Aggregate(1d, (soFar, xj) => (soFar*(x - xj.xj))/(xs[i] - xj.xj));
}
Даже комменты спрячу, хотя отчего-то уверен, что попыток будет очень мало.
UPD: Как я предполагал, попытку предприняла только
norniel . И она почти догадалась.
Функция L вернет
интерполяционный многочлен Лагранжа для заданного набора точек. Не так и сложно.