我有一个这样写的数学问题:
x^1+x^2+x^3+...+x^n
C# 中是否有任何构造可以帮助我解决这些方程?
我知道我可以编写一个 for 循环或使用递归来完成此操作,但我记得读过 c# 中的一些构造,它将预编译这样的语句以供以后执行。
有什么有趣的方法可以解决这些方程吗?
我有一个这样写的数学问题:
x^1+x^2+x^3+...+x^n
C# 中是否有任何构造可以帮助我解决这些方程?
我知道我可以编写一个 for 循环或使用递归来完成此操作,但我记得读过 c# 中的一些构造,它将预编译这样的语句以供以后执行。
有什么有趣的方法可以解决这些方程吗?
要计算 x^n 使用Math.Pow:
Math.Pow(x, n)
如果要计算总和,可以使用循环或 LINQ。我认为这里的简单循环没有任何问题:
double total = 0;
for (int i = 1; i <= n; ++i)
{
total += Math.Pow(x, i);
}
Console.WriteLine(total);
您可以在 LINQ 中编写此代码,但我看不出有什么特别充分的理由这样做。也许您可以扩展您正在寻找的功能?您在寻找更好的性能吗?
由于您的问题被标记为“数学优化”,您可能还想通过查找快捷方式来优化它。在这种特定情况下,它是一个几何级数,因此您可以使用以下公式:
或者在 C# 中:
static double geometricSeries(double a, double r, int n)
{
return a * (1 - Math.Pow(r, n + 1)) / (1 - r);
}
在其他更复杂的情况下,找到公式可能会更困难。
我知道你的例子是故意微不足道的。但是,如果您真正要计算的仍然是多项式,那么您绝对应该使用Horner scheme。这是一个 C# 实现。
好吧,您可能正在谈论使用委托进行延迟执行。但在许多情况下,这与编写方法相同。例如,让我们从“简单”的方式开始:
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;
}
这可以使用 LINQ 编写为:
public static double SumExponents(double x, int n)
{
return Enumerable.Range(1, n)
.Select(i => Math.Pow(x, i))
.Sum();
}
然后,您可以将其编写为单个 lambda 表达式:
Func<double, int, double> func = (x, n) => Enumerable.Range(1, n)
.Select(i => Math.Pow(x, i))
.Sum();
那是你在想的那种事情吗?如果不是,请澄清您的问题。你在寻找什么并不是很明显。
int total = 0;
for(int i = 1; i <= n; i++)
total += Math.Pow(x, i);
除了 select\sum,您还可以Aggregate
用于折叠序列。
int n;
double x;
double result = Enumerable.Range(1, n)
.Aggregate(0.0, (acc, i) => acc + Math.Pow(x, i));