1. Довольно странное решение писать внутри цикла все переменные
-е, а только одну (
)
-ю.
2. Как нетрудно видеть в последней строке (
-й) должно быть только значение
, и оно должно соответствовать значению функции в точке
. Вы его и получаете:
3. Почему столбец
пустой, кроме последнего значения - затрудняюсь ответить. Возможно, какие-то особенности работы
. Перепишите так, чтобы в цикле писались только
-е значения, но не
.
Например так:
Код:
//сохраняем нулевую строку с начальным значениями до цикла. Переменные x, h, u, V должны быть проинициализированы ранее
chart1.Series[0].Points.AddXY(x,V);
dataGridView1.Rows.Add();
dataGridView1.Rows[0].Cells[0].Value = 0;
dataGridView1.Rows[0].Cells[1].Value = x;
dataGridView1.Rows[0].Cells[2].Value = h;
dataGridView1.Rows[0].Cells[3].Value = f(x, u);
dataGridView1.Rows[0].Cells[4].Value = V;
for (int i = 1; i<n; i++) //цикл начинаем с 1. ИМХО, так удобнее
{
V = rk4(x, u, h); //рассчитываем следующее значение функции (оно будет i-m)
x += h; //ПОТОМ! двигаем аргумент (теперь он тоже будет i-m)
u = V; //сохраняем следующее значение функции в переменной u. Нужно для следующего прохода цикла.
//все i-е значения сохраняем в структуре данных:
chart1.Series[0].Points.AddXY(x,V);
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells[0].Value = i;
dataGridView1.Rows[i].Cells[1].Value = x;
dataGridView1.Rows[i].Cells[2].Value = h;
dataGridView1.Rows[i].Cells[3].Value = f(x, u);
dataGridView1.Rows[i].Cells[4].Value = V;
}
-- 26.11.2019, 08:39 --Кроме того, можно избавиться от переменной
, сейчас она тоже самое, что и
. Но может она Вам нужна для каких-то целей в будущем, не знаю. Если не нужна - избавляйтесь от неё.