Как создать большой массив функций, представляющих систему Вандермонда в 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));
}
Другие вопросы по тегам