Son*_*oul 3 c# math mathematical-optimization
我有一个数学问题,写得像这样:
x^1+x^2+x^3+...+x^n
Run Code Online (Sandbox Code Playgroud)
C#中是否有任何构造可以帮助我解决这些方程?
我知道我可以写一个for循环或者使用递归来完成这个,但是我记得在c#中读到一些预编译这样一个语句以便以后执行的构造.
有没有什么有趣的方法可以解决这些方程?
要计算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)
在其他更复杂的情况下,找到公式可能会更困难.
那么你可能正在谈论使用委托进行延期执行.但在许多情况下,它与编写方法相同.例如,让我们从"简单"的方式开始:
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)
那是你想到的那种事吗?如果没有,请澄清您的问题.你正在寻找什么并不是很明显.