我不能接受我的功能

时间:2013-12-03 10:46:32

标签: c#

我无法获取我的函数的结果。如果1和2适用,但是对于第三个函数它不起作用。它只是打印2到9结果它应该解决函数中的方程并给我结果但它不起作用。你能告诉我这有什么问题吗?

class Program
{
    public double tri(double a,double b,double c,double d,int n)
    {
        double[] w = new double[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        int m = n - 2;
        double result = 0;
        for (int i = 1; i <= m; i++)
        {
            b = (b - c) * (a / b);
            d = (d - d) * (a / b);
            w[i] = d / b;
         }
         for (int j = m ; j <= 1; j--)
         {
             w[j] = (d - w[j + 1] * c) / b;
             result = w[j];
         }

         return result;
    }
    static void Main(string[] args)
    {
        int n = 10;
        double dif_co = 0.00000036;
        double t_int = 0.1;
        double s = 0.117;
        double n_dis = 1.111;
        double[] temp = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        double a, b, c, d;

        Program heat = new Program();
        for (int i = 1; i <= n; i++)
        {
            if (i == 1)
            {
                a = 0;
                b = 1;
                c = 0;
                d = 700;
                temp[0]=700;
                Console.WriteLine("temprature is {0}", temp[0].ToString());
            }
            else if (i == n)
            {
                a = 0;
                b = 1;
                c = 0;
                d= 300;
                temp[9]=300;
                Console.WriteLine("temprature is {0}", temp[9].ToString());
            }
            else
            {
                a = -((2 * dif_co * t_int) - s * n_dis * t_int);
                b = (4 * (t_int * t_int)) + 4 * dif_co * t_int;
                c = (2 * dif_co * t_int) + (s * n_dis * t_int);
                d = ((2 * dif_co * t_int) * 300) + ((4 * (n_dis * n_dis) - 
                    (4 * dif_co * t_int)) * 300) + ((2 * dif_co * t_int) 
                    + (s * n_dis * t_int) * 300);

                temp[i] = heat.tri(a, b, c, d, n);
                Console.WriteLine("Temprature is {0}", i, temp[i].ToString());
            }
        }   
    }
}

1 个答案:

答案 0 :(得分:1)

我建议使用调试器并在小块中精心设计代码,以使其成长为您最终需要的内容。我发现的第一个错误是你有一个无效的倒计时循环

for (int j = m ; j <= 1; j--)

应该阅读

for (int j = m ; j >= 1; j--)

即。假设m大于1,所以在你的代码中,循环永远不会执行。

我发现的第二件事是您在函数中使用值d作为乘数但是在循环中将d设置为( d - d ) *别的东西 - 你能发现明显的错误吗?

没有去寻找其他任何东西,但我强烈建议你给变量命名一些有意义的“a,b,c,d ......”让错误发现变得更加困难。