Неправильные графики в винформах
Программка строит графики двумерного уравнения теплопроводности марганец-цинковых ферритов (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]);
}
}
