-не так Часто Задаваемые Вопросы- обновлено 2010/12/26
|
|
not so FAQ |
Разное (No.1)Тройной оператор (A ? B : C)Тройной оператор работает так же как и в языке C. Тройной оператор объявляется A ? B : C. Сначала, оценивается A, если оно истинно (не равно нулю) выполняется B; в противном случае выполняется C. Следующий пример представляет график, изменяющийся при x=0, y=exp(-x) для x>0, и y=exp(4*x) для x<=0. gnuplot> set xrange [-5:5] gnuplot> plot x>0 ? exp(-x) : exp(4*x) Более сложные функции могут быть более определяемы этими тремя операторами. В данном примере определяется пользовательская функция, значения которой изменяются скачком наряду со значениями X. gnuplot> f(x)= (abs(x)<1) ? 100 : ( (abs(x)<2) ? 50 : ((abs(x)<3) ? 20: 10 )) gnuplot> set xrange [-5:5] gnuplot> set yrange [0:150] gnuplot> set sample 1000 gnuplot> plot f(x) TЗначение функцции приобретает значение 100, если значение меньше X, 1,50 для 1<=|X|<2, 20 для 2<=|X|<3 в противном случае 10. Значения Y не непрерывны между этими регионами X, но Gnuplot соединяет эти дискретные значения Y линией. Команда set sample делает эти "соединенные части" вертикальными, насколько это возможно. Разрыв функцииGnuplot игнорирует любые неопределенные математические выражения, как деление на ноль (/0), описанное в gnuplot FAQ. При этом, благодаря тройному оператору, есть возможность построения разрывов функции. gnuplot> f(x) = (abs(x)>pi/2) ? sin(x+pi/2) : 0 gnuplot> g(x) = (abs(x)>pi/2) ? sin(x) : 1/0 gnuplot> set xrange [-2*pi:2*pi] gnuplot> set yrange [-1:1] gnuplot> plot g(x) w l lw 2,f(x) Сравниваются две синус функции, f(x) и g(x). f(x) нулевая, когда |x| меньше 90 градусов, в то время как g(x) имеет особое выражение, большее нуля. Функция f(x) немного сдвинута, чтобы было видно разницу между двумя тригонометрическими функциями. ЦиклGnuplot имеет команды reread и if, благодаря которым можно легко задать цикл. Команда reread заново перечитывает файл. Когда gnuplot находит эту команду в контрольном файле, включается бесконечный цикл. Для завершения цикла используется команда if , позволяющий определить число повторений. Создадим простое анимационное 3D построение. Зададим именение угла обзора от 0 до 360 с шагом в 5 градусов. Сначала создадим файл "loop.plt", содержащий в себе функцию фигуры z=exp(-x*x)*erf(y). theta = theta + 10 set view 60, theta splot exp(-x*x)*erf(y) if(theta<360) reread Начальное значение theta и другие параметры приведены вне файла 'loop.plt'. Бесконечный цикл начинается, когда gnuplot читает команду load "loot.plt" Есть возможность создать анимированный GIF с помощью некоторых инструментов, но обычно за это нужно заплатить :-p gnuplot> set nokey gnuplot> set noxtics gnuplot> set noytics gnuplot> set noztics gnuplot> set border 0 gnuplot> set isosamples 40, 40 gnuplot> set hidden3d gnuplot> set xrange [ -5 : 5 ] gnuplot> set yrange [ -5 : 5 ] gnuplot> theta = 5 gnuplot> load "loop.plt" |