Kev*_*own 2 c# performance integration
public double Integral(double[] x, double intPointOne, double intPointTwo)
{
double integral = 0;
double i = intPointOne;
do
{
integral += Function(x[i])*.001;
i = i + .001;
}
while (i <= intPointTwo);
return integral;
}
Run Code Online (Sandbox Code Playgroud)
这是一个函数,我必须简单地使用部分的总和来集成x1-x2的函数.如何使这个循环更有效(使用更少的循环),但更准确?
当Function改变每次迭代,但它应该是无关紧要的,因为它的幅度(或边界)的顺序应该保持相对同...
1)查看http://apps.nrbook.com/c/index.html的 4.3节,了解不同的算法.
2)要控制你可能需要指定范围的准确度/速度系数x_low和x_high,以及要在积分多少片.所以你的功能看起来像这样
// Integrate function f(x) using the trapezoidal rule between x=x_low..x_high
double Integrate(Func<double,double> f, double x_low, double x_high, int N_steps)
{
double h = (x_high-x_low)/N_steps;
double res = (f(x_low)+f(x_high))/2;
for(int i=1; i < N; i++)
{
res += f(x_low+i*h);
}
return h*res;
}
Run Code Online (Sandbox Code Playgroud)
一旦理解了这种基本集成,就可以继续使用Numerical Recipies和其他资源中提到的更复杂的方案.
要使用此代码,请发出命令 A = Integrate( Math.Sin, 0, Math.PI, 1440 );
| 归档时间: |
|
| 查看次数: |
5156 次 |
| 最近记录: |