Неправильные графики в винформах

введите сюда описание изображения

Программка строит графики двумерного уравнения теплопроводности марганец-цинковых ферритов (4 графика). Это, на самом деле, не важно. Важно то, что графики строятся неправильно. В конце кода 4 графика строятся. Первые два - это распределение температуры по координате X с шагом hx при y=0 и y=L (L - это длина проводника). И вот они строятся правильно (проверено). Проблема кроется в следующих двух: должно быть то же самое, но наоборот: распределение температуры по координате Y с шагом hy при x=0 и x=H (H - это радиус проводника). Только вот он прямой... Просто строит все точки по максимуму температуры Tr. Проблема, скорее всего не в графике, а в коде. Что тут нужно поправить?

Сверху приведён пример ввода исходных данных и графики, которые получаются.

int Nx = Convert.ToInt32(double.Parse(RadiusStepTextBox.Text));
        int Ny = Convert.ToInt32(double.Parse(DepthStepTextBox.Text));
        double t = double.Parse(ProcessingTimeTextBox.Text);
        double L = double.Parse(PlateThicknessTextBox.Text);
        double lambda = double.Parse(TranscalencyTextBox.Text);
        double ro = double.Parse(DensityTextBox.Text);
        double c = double.Parse(ThermalCapacityTextBox.Text);
        double t0 = double.Parse(StartTemperatureTextBox.Text);
        double t1 = double.Parse(TempX0TextBox.Text);
        double tr = double.Parse(EndTemperatureTextBox.Text);
        double H = double.Parse(PlatelengthTextBox.Text);
        double[] alfa = new double[Nx];
        double[] beta = new double[Nx];
        double[,] T = new double[Nx, Ny];
        double time = 0;
        #endregion

        double hx = L / (Nx - 1);
        double hy = H / (Ny - 1);
        double a = lambda / (ro * c);
        double tau = t / 100;

        for (int i = 0; i < Nx; i++)
        {
            for (int j = 0; j < Ny; j++)
            {
                T[i, j] = t0;
            }
        }

        while (time < t)
        {
            time = time + tau;
            for (int j = 0; j < Ny; j++)
            {
                alfa[0] = 0;
                beta[0] = t1;
                for (int i = 1; i < (Nx - 1); i++)
                {
                    double ai = lambda / (Math.Pow(hx, 2));
                    double bi = 2.0 * lambda / (Math.Pow(hx, 2)) + ro * c / tau;
                    double ci = lambda / (Math.Pow(hx, 2));
                    double fi = -ro * c * T[i, j] / tau;
                    alfa[i] = ai / (bi - ci * alfa[i - 1]);
                    beta[i] = (ci * beta[i - 1] - fi) / (bi - ci * alfa[i - 1]);
                }
                T[Nx - 1, j] = tr;
                for (int i = Nx - 2; i > -1; i--)
                {
                    T[i, j] = alfa[i] * T[i + 1, j] + beta[i];
                }
            }
            for (int i = 1; i < (Nx - 1); i++)
            {
                alfa[0] = 2.0 * a * tau / (2.0 * a * tau + Math.Pow(hy, 2));
                beta[0] = Math.Pow(hy, 2) * T[i, 1] / (2.0 * a * tau + Math.Pow(hy, 2));
                for (int j = 1; j < (Ny - 1); j++)
                {
                    double ai = lambda / Math.Pow(hy, 2);
                    double bi = 2.0 * lambda / Math.Pow(hy, 2) + ro * c / tau;
                    double ci = lambda / Math.Pow(hy, 2);
                    double fi = -ro * c * T[i, j] / tau;
                    alfa[j] = ai / (bi - ci * alfa[j - 1]);
                    beta[j] = (ci * beta[j - 1] - fi) / (bi - ci * alfa[j - 1]);
                }
                T[i, Ny - 1] = (2.0 * a * tau * beta[Ny - 2] + Math.Pow(hy, 2) * T[i, Ny - 1]) / (2.0 * a * tau * (1.0 - alfa[Ny - 2]) + Math.Pow(hy, 2));
                for (int j = Ny - 2; j > -1; j--)
                {
                    T[i, j] = alfa[j] * T[i, j + 1] + beta[j];
                }
            }
        }


        chart2.Series[0].Points.Clear();
        for (int i = 0; i < Nx; i++)
        {
            chart2.Series[0].Points.AddXY(hx * i, T[i, 0]);
        }

        chart3.Series[0].Points.Clear();
        for (int i = 0; i < Nx; i++)
        {
            chart3.Series[0].Points.AddXY(hx * i, T[i, Convert.ToInt32(L)]);
        }

        chart4.Series[0].Points.Clear();
        for (int i = 0; i < Ny; i++)
        {
            chart4.Series[0].Points.AddXY(hy * i, T[0,i]);
        }

        chart5.Series[0].Points.Clear();
        for (int i = 0; i < Ny; i++)
        {
            chart5.Series[0].Points.AddXY(hy * i, T[Convert.ToInt32(H),i]);
        }
    }

Ответы (0 шт):