1626435587-51311eae4652e8ad616b5bdef025cbb3 (844239), страница 3
Текст из файла (страница 3)
В противномслучае настоятельно рекомендуем потратить час на освоение основныхприёмов работы с gnuplot как с одной из наиболее простых программс достаточно богатым функционалом.Для начала работы в gnuplot под Windows найдите и запуститефайл wgnuplot.exe (под Linux наберите gnuplot в консоли). Программа запустится, выдав в текстовом окне приглашение для ввода команд:gnuplot>пакетного111.1. КомандыGnuplot управляется текстовыми командами.
Для выполнения любого действия в gnuplot — будь то построение графика, вывод на экранзначения переменной или математического выражения, изменение настроек программы — нужно отдать соответствующую команду. Например, если набрать в терминале print pi/2 и нажать клавишу Enter,gnuplot напечатает на экране приближённое значение /2. Таким образом, gnuplot можно использовать в качестве достаточно удобного программируемого калькулятора, поддерживающего именованые переменные, пользовательские функции и историю команд.Для построения графиков используется команда plot. Например,результатом выполнения plot sin(x) станет график синуса.
Очевидно, вместо sin(x) можно написать любую функцию, например plotcos(x)*exp(-x*x). Можно предварительно определить новую функцию, отдав команду наподобие2 gauss(x)=exp(-x**2) или sign(x)=(x==0)?0:((x<0)?-1:1)3 , и использовать её далее наравне со стандартными математическими функциями.Часто бывает, что новая команда очень похожа (или даже в точности совпадает) с использованной ранее. Например, после графикагауссовской функции нам потребовалось построить plot sin(x)/x.
Втаком случае нет необходимости набирать текст заново: gnuplot «помнит» историю команд, и, нажимая стрелки «вверх» / «вниз» на клавиатуре, можно перемещаться по ней, вызывая предыдущую / следующуюкоманду соответственно.Из числа других полезных и часто используемых команд следуетотметить set — установить (изменить) значение какого-либо параметра настройки gnuplot (например, set title "sample graph" изменитназвание графика на sample graph).
Чтобы новое название появилосьна графике, его нужно построить заново. Для этого нужно либо повторить последнюю команду plot со всеми её параметрами, либо скомандовать replot. Для любителей мыши кнопка replot есть в панелиинструментов окна графиков — нажатие на неё также приведёт к перерисовке графика с новыми параметрами.Команда cd4 изменяет текущую рабочую директорию, в которойgnuplot будет искать файлы с таблицами данных. Опять-таки предусмотрена альтернатива в виде пункта меню File — Change Directory,2 Выражение x**y в gnuplot обозначает , возведение в степень; напомним, чтов языкеСи для этого используется функция pow(x,y).3 Синтаксис тернарного оператора в gnuplot аналогичен принятому в языке Си:<условие> ? <выражение-если-истина> :<выражение-если-ложь>.4 Сокращение от change directory.12позволяющая достичь того же результата с помощью мыши или «горячих» клавиш.
Узнать текущую рабочую директорию можно c помощьюкоманды pwd5 или через меню File — show Current Directory.Для получения справки предусмотрена команда help. Например,help plot показывает информацию об использовании команды plot ит. п. Полный список поддерживаемых команд можно посмотреть, набрав help commands в gnuplot. Для удобства ниже мы приводим краткий список наиболее важных для наших целей команд gnuplot:plotreplotsplotsetunsetprintfitloadпостроение графиковобновление графиков; добавление нового графикапостроение трёхмерных графиковизменение параметрасброс параметрапечать текстового сообщенияаппроксимация сеточной функции заданным выражениемвыполнение набора команд из файла1.2. Построение графиков сеточных функцийДля простоты мы начали знакомство с gnuplot с построения графиков на примере элементарных библиотечных функций, однако причисленном решении задач нам понадобится прежде всего отображениеграфиков функций, заданных с помощью таблиц значений: именно втаком виде обычно получаются результаты численных расчётов.
Чтобы рассмотреть на примере построение графика сеточной функции,сначала мы должны создать текстовый файл с числовыми данными.Сделать это можно либо вручную в текстовом редакторе, либо в самом gnuplot6 или же написав программу, создающую для нас такойфайл. Выберем последний вариант, что позволит нам дополнительноосвежить в памяти синтаксис языка Си.#include <stdio.h>#include <stdlib.h>#define _USE_MATH_DEFINES#include <math.h>//для использования M_PI в MSVCСокращение от print working directory.Для этого нужно перенаправить печать текстовых сообщений в файл, скомандовав, например, set print "out.txt", после чего напечатать набор чисел с помощьюкоманды print и вернуть вывод в стандартный поток stderr, набрав set print безаргументов.5613//функция, значения которой мы будем сохранять в файл:double f(double x){return exp(-3.*pow(0.1*x,2.));}//выполнение программы на языке Си начинается с вызова main:int main(void){int i, N=100;//N - число точек в таблице//независимая переменная x и верхний предел её перебора:double x, x_max=10.;//создаем файл out.txt для сохранения таблицы данных:FILE *fd = fopen("out.txt", "wb");if(fd == NULL) { //если не удалось открыть файл...//сообщаем об ошибке и выходим из программы:fprintf(stderr, "Could not open file.\n");exit(1);}//записываем в файл строку с названиями столбцов:fputs("xsin(x)f(x)\n", fd);//в цикле перебираем точки при записи таблицы с данными:for(i = 0; i < N; ++i) {x = i*x_max/N;//записываем в каждую строку по три значения:fprintf(fd, "%f %.8f %15.9e\n", x, sin(x), f(x));}//закрываем файл:fclose(fd);}//выход из функции main завершает выполнение программы:return 0;//0 - код успешного выполненияМы не будем останавливаться на разборе этой простой программы,посоветовав читателю в случае возникновения вопросов обратиться запомощью к Google, Интернет-ресурсам [C3, C4] либо книге [1].
Обратим14лишь внимание на способ печати чисел с плавающей точкой: функциямсемейства printf необходимо передать в символьной строке указание"%f" для каждого значения (либо "%e" для вывода числа в «научном»виде). Попутно можно указать опции наподобие количества разрядовпосле запятой и общего количества символов в записи числа (напр.,"%15.9e"), что регулярно бывает необходимо на практике.Скомпилировав эту программу и запустив её, мы получим файлout.txt с тремя столбцами чисел. Полагая, что этот файл лежит втекущей рабочей директории gnuplot (см.
команды cd и pwd), построимграфики, скомандовав:plot "out.txt" using 1:2 with lines title ’sin’, \""u1:3 wlt’gauss’Ключевое слово using (и его лаконичная форма u) позволяет выбратьстолбцы, используемые для построения графика. В частности, записьu 1:3 означает, что мы хотим построить график зависимости третьегостолбца от первого. Ключевое слово title (его также можно сократить до одной буквы t), позволяет давать графикам названия, которые будут отображаться на легенде (см.
help key). Можно подписывать графики на легенде выборочно, для чего служит опция notitle,например: plot sin(x) t ’sin’, cos(x) notitle. Команда set keynoautotitle позволяет отображать в легенде только те графики, длякоторых была явно указана опция title. Обратная наклонная черта(slash) в конце строки позволяет разбить слишком длинную командуна несколько строк, «экранируя» символ перевода строки.
Пустые кавычки вместо имени файла во второй строке позволяют не повторятьввод одного и того же имени при построении нескольких графиков изодного файла (в данном случае — out.txt).Часто возникает необходимость при построении графика выполнитьнекоторые преобразования исходных данных, записанных в файл. Например, для преобразования значений в столбце 1 из сантиметров вкилометры в gnuplot следует набрать команду: plot "out.txt" using($1*1e-5):($2). Можно выполнять операции сразу над значениями изнескольких столбцов — перемножать, складывать, использовать прочитанные из файла значения в качестве аргумента произвольных функций.
Например, если мы хотим построить график зависимости мощности тока от времени имея файл, в столбцах которого записаны время,сила тока и напряжение в каждый момент времени, нам потребуетсязаписать что-нибудь наподобие plot "file.dat" using ($1):($2*$3)with lines.15При построении графиков физических величин, изменяющихся нанесколько порядков, используется логарифмический масштаб осей.Для отображения графиков на логарифмической оси нужно датькоманду set logscale y, в двойных логарифмических осях — setlogscale xy. Для возврата к линейному масштабу осей следует использовать команду unset logscale.Чтобы изменить способ подписи значений на осях, используетсякоманда set tics format "", гдекодируется текстовой строкой аналогично функциям Си семейства printf. Подробнуюинформацию и примеры использования можно посмотреть в разделесправки gnuplot, набрав help format specifiers.Приведённой выше информации о gnuplot вполне хватит для началаработы (возможно, и для успешного выполнения всех задач учебногокурса).
Ниже будет рассмотрен также ряд «дополнительных» приёмовработы с gnuplot, позволяющих строить более красивые и информативные графики (далеко не исчерпывающий, однако, всех возможностей данной программы). Вместе с тем мы настоятельно рекомендуемосвоить вначале «базовые» команды и опции, поэкспериментировав самостоятельно с gnuplot и выполнив упражнения, приведённые в концеглавы, и только после этого двигаться дальше.форматформат1.3. Дополнительные возможности команды plotКоманду plot можно использовать для построения нескольких графиков в одних осях, для этого нужно указать функции через запятую,как в примере в предыдущем параграфе. Альтернативный вариант —использование команды replot:plot 0.5*exp(-0.25*x**2) #строим новый график взамен старого;replot exp(-x**2)} #добавляем график на существующий рисунок.При построении нескольких графиков любым из указанных способов gnuplot автоматически изменяет стиль отрисовки каждой следующей функции.