我想变换功能,使其在平行的,而不是在C#中的顺序执行,但我不知道我做错了什么:C#转换顺序功能并行执行
// sequential
static void Romberg(double a, double b, int n, double[,] R)
{
int i, j, k;
double h, sum;
h = b - a;
R[0, 0] = (h/2) * (f(a) + f(b));
for (i = 1; i <= n; i++)
{
h = h/2;
sum = 0;
for (k = 1; k <= (Math.Pow(2.0, i) - 1); k += 2)
{
sum += f(a + k * h);
}
R[i, 0] = R[i - 1, 0]/2 + sum * h;
for (j = 1; j <= i; j++)
{
R[i, j] = R[i, j - 1] + (R[i, j - 1] - R[i - 1, j - 1])/(Math.Pow(4.0, j) - 1);
}
}
}
// parallel
static void RombergCP(double a, double b, int n, double[,] R)
{
int i,j, k;
double h, sum;
h = b - a;
R[0, 0] = (h/2) * (f(a) + f(b));
Parallel.For(0, n, options, i =>
{
h = h/2;
sum = 0;
for (k = 1; k <= (Math.Pow(2.0, i) - 1); k += 2)
{
sum += f(a + k * h);
};
R[i, 0] = R[i - 1, 0]/2 + sum * h;
for (j = 1; j <= i; j++)
{
R[i, j] = R[i, j - 1] + (R[i, j - 1] - R[i - 1, j - 1])/(Math.Pow(4.0, j) - 1);
}
});
}
我得到的错误是“我”不能被声明,因为它会给“我”一个不同的含义,在“父或当前”范围中使用。 我试着将它重命名为i2并行函数,但它给出了相同的错误。提前致谢!
我认为你必须与'H = H/2的问题;'在并行版本。 –