0. Преамбула

Gnuplot умеет интерактивно строить графики, беря данные из файла, а также умеет эти графики пихать в файлы картинок любого формата ( особено png =) ). Так же он умеет строить сразу несколько графиков на одном полотне.
Файл данных графика можно формировать разными способами, однако удобнее всего для наших задач файл сформировать в следующем виде:

data.log
# index   U[index]   exact_U[index]
   0     1.0      1.0
   0.2    1.1      1.09
   0.4    1.2      1.18
   0.6    1.3      1.35
   0.8    1.1      1.13
   1     1.05      1.05
# end of log file

здесь:
// желателно, чтобы в начальных и конечных точках точное и наше решения совпадали... не для gnuplot'a разумеется, а для сдачи задания :D

При построение графиков по данному файлу, мы получим два графика (по умолчанию один красный, другой зеленый) построенного по данным точкам, где по оси абцис будут отложены данные с первого столбца. Каждый график будет состоять из отрезков, соединяющие данные точки.

1. Подготовка данных

Пусть U - это массив значений приближенного решения на данном слое (в частности, в конце, перед выходом из программы U[j] = U(T, h*j))
Пусть exact_U(t, x) - это функция точного решения. Мы будем смотреть на значения exact_U(T, h*j).

Перед выходом из программы необходимо распечатать в файл следующие данные: x, U, exact_U.
На С++ это будет выглядеть так (не забудьте подключить fstream: #include <fstream>):

main.cpp


Итак, data.log - сгенерированный файл данных. Его надо положить рядом с файлом gnuplot.exe, чтобы его было проще вызывать.

2.Построение графиков

Запускаем командную строку, переходим в папку с gnuplot.exe и запускаем его:

пуск->выполнить->cmd.exe
> D:
> cd programs\gnuplot\
> gnuplot.exe

На что получаем приглашение gnuplot и его милое приветствие =)

gnuplot >

Далее все просто - просим построить графики:

gnuplot > plot 'data.log' u 1:2 w linesp, 'data.log' u 1:3 w linesp

Вот, собственно и все. Пояснение: В простейшем случае, если просто сказать:

gnuplot > plot 'data.log'

gnuplot будет откладывать все точки слева направо по принципу (i, y_i), где i - номер вхождения точки.

3. Управление интерактивной средой

В появившемся окошке с графиком можно пощелкать всякие кнопочки... авось что-нить случится. А именно:

4. Рисуем в файл

Для того чтобы получить файл graph.png с графиком нужно выполнить следующие команды в gnuplot:

gnuplot > set terminal png size 1024, 768
gnuplot > set output 'graph.png'
gnuplot > plot 'data.log' u 1:2 w linesp, 'data.log' u 1:3 w linesp

и у вас в папке с gnuplot'ом появится файл graph.png с размером 1024x768. Его можно вставить в отчет. Будет круто)

5. Рисуем в 3D

Предположим мы хотим нарисовать функцию sin(x^2 + y^2)/(x^2 + y^2) (красивый график, похожий то, что произойдет после падения капли в воду).

В программе заводим массив a[N][N], программно вычисляем значение в точке (x, y), заносим это значение в a[i][j]. В конце записываем матрицу, как есть, в файл. Получаем нечто вроде:

matrix.dat

Просим gnuplot нарисовать картинку:

gnuplot > splot 'matrix.dat' matrix with lines

отрисовывать можно с разными параметрами, например:
Что получилось, смотрим здесь: with lines with pm3d
Примеры и прочее см. 8. Ссылки

6. Автоматизация

Если хочеться мультика, то можно сделать такую штуку...

После каждой итерации выводим матрицу a в файл, генерируем скрипт для gnuplot, передаем ему управление (временно усыпив программу, чтобы она не испортила файл данных). Потом открываем папку, где будут лежать кучка кратинок: 1.png, 2.png, ...; открываем просмотрщик, жмем "-->" и наслаждаемся.

Кусок кода для Visual Studio:

main.cpp

Разумеется, пути к файлам надо поменять на правильные. Плюс, нужно дописать подходящие параметры для красивой отрисовки.

7. Помощь

В gnuplot есть интерактивная помощь. Ее всегда можно вызвать из командной строки gnuplot набрав help:

gnuplot > help

Там можно найти тьму интересных вещей =)

8. Ссылки

Сайт Gnuplot
Примеры использования gnuplot
Дополнительные трюки
Чей-то блог, с пояснениями по поводу pm3d
Gnuplot trics
Локальная копия стабильной версии gnuplot для windows (ver. 4.4.3)