如何在C#中计算这种类型的方程(x ^ 1 + ... x ^ n)?

Son*_*oul 3 c# math mathematical-optimization

我有一个数学问题,写得像这样:

x^1+x^2+x^3+...+x^n
Run Code Online (Sandbox Code Playgroud)

C#中是否有任何构造可以帮助我解决这些方程?

我知道我可以写一个for循环或者使用递归来完成这个,但是我记得在c#中读到一些预编译这样一个语句以便以后执行的构造.

有没有什么有趣的方法可以解决这些方程?

Mar*_*ers 8

要计算x ^ n,请使用Math.Pow:

Math.Pow(x, n)
Run Code Online (Sandbox Code Playgroud)

如果要计算总和,可以使用循环或LINQ.我不认为这里有一个简单的循环有什么问题:

double total = 0;
for (int i = 1; i <= n; ++i)
{
    total += Math.Pow(x, i);
}
Console.WriteLine(total);
Run Code Online (Sandbox Code Playgroud)

可以在LINQ中写这个,但我没有看到任何特别强烈的理由这样做.也许您可以扩展您正在寻找的功能?你在寻找更好的表现吗?

由于您的问题被标记为"数学优化",您可能还希望通过查找快捷方式对其进行优化.在这种特殊情况下,它是几何系列,因此您可以使用以下公式:

替代文字

或者在C#中:

static double geometricSeries(double a, double r, int n)
{
    return a * (1 - Math.Pow(r, n + 1)) / (1 - r);
}
Run Code Online (Sandbox Code Playgroud)

在其他更复杂的情况下,找到公式可能会更困难.


Bol*_*olo 7

我知道你的例子是故意的.但是,如果您真正想要计算的仍然是多项式,那么您肯定应该使用Horner方案.这是一个C#实现.


Jon*_*eet 5

那么你可能正在谈论使用委托进行延期执行.但在许多情况下,它与编写方法相同.例如,让我们从"简单"的方式开始:

public static double SumExponents(double x, int n)
{
    double total = 0;
    for (int i = 1; i <= n; i++)
    {
         total += Math.Pow(x, i);
    }
    return total;
}
Run Code Online (Sandbox Code Playgroud)

这可以使用LINQ编写为:

public static double SumExponents(double x, int n)
{
    return Enumerable.Range(1, n)
                     .Select(i => Math.Pow(x, i))
                     .Sum();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以把它写成一个lambda表达式:

Func<double, int, double> func = (x, n) => Enumerable.Range(1, n)
                                              .Select(i => Math.Pow(x, i))
                                              .Sum();
Run Code Online (Sandbox Code Playgroud)

那是你想到的那种事吗?如果没有,请澄清您的问题.你正在寻找什么并不是很明显.