Как создать большой массив функций, представляющих систему Вандермонда в C#?
Я пытаюсь создать большой массив функций Вандермонда. Я могу создать систему 4x3 следующим образом:
Func<double[], double>[] vandermondeSystem =
{
x => x[0]*Math.Pow(1, 0) + x[1]*Math.Pow(1, 1) + x[2]*Math.Pow(1, 2),
x => x[0]*Math.Pow(2, 0) + x[1]*Math.Pow(2, 1) + x[2]*Math.Pow(2, 2),
x => x[0]*Math.Pow(3, 0) + x[1]*Math.Pow(3, 1) + x[2]*Math.Pow(3, 2),
x => x[0]*Math.Pow(4, 0) + x[1]*Math.Pow(4, 1) + x[2]*Math.Pow(4, 2)
}
Но невозможно написать такие большие (скажем, 100x50) системы, как эта, поэтому я думаю, что мне нужно использовать какой-то цикл или рекурсию, но я не мог понять, как это сделать.
На этой странице объясняется, как создать анонимную рекурсию для реализации функции Фибоначчи, но я не мог понять, как использовать метод, описанный там.
1 ответ
Решение
Исходя из вашего текущего кода, вы можете легко изменить его для поддержки больших систем размером 100x50 и так далее. Как насчет чего-то вроде этого:
Func<double[], double>[] bigVandermondeSystem = new Func<double[], double>[100];
// Constructing a 100 x 50 Vandermonde System
for (int i = 0; i < 100; i++)
{
var i1 = i;
bigVandermondeSystem[i] = x => Enumerable
.Range(0, 50)
.Sum(number => x[number] * Math.Pow(i1 + 1, number));
}