Физико-математический пакет "Граф"

Разработанный нами математический пакет "Граф" позволяет чрезвычайно просто проводить вычисления и строить графики без инсталляции и скачивания каких-либо программ. Просто наберите формулу в адресной строке и получите результат в броузере. Формула задаётся в конце адреса cgi-скрипта http://physics.nad.ru/cgi-bin/gra.pl после вопросительного знака. При этом все дополнительные параметры указываются через ";". Например:

http://physics.nad.ru/cgi-bin/gra.pl?sin(x)

Если набрать эту ссылку в адресной строке (или просто нажать на ссылку выше), то появится окно с графиком функции, который можно сохранить к себе на компьютер как PNG-рисунок. Рисунок имеет прозрачный фон, т.ч. можно накладывать несколько графиков друг на друга.

Если вы хотите вставить этот график на интернет страницу, то это можно сделать, как для обычного рисунка:

<img src="http://physics.nad.ru/cgi-bin/gra.pl?sin(x)">

Или, предположим, нужно получить значение exp(3)*sin(5)+ln(4). Пишем в адресной строке http://physics.nad.ru/cgi-bin/gra.pl?exp(3)*sin(5)+ln(4) и получаем ответ в текстовом виде: -17.8742145641675

Если формулы неудобно набирать в адресной строке, то можно написать формулу в окошке ввода текста сообщения форума, выделить формулу курсором и нажимать кнопку F(x) из панели инструментов внизу окна ввода. В результате формула оказывается заключённой в теги gra, которые активируют конвертор.

Итак, в окне ввода текста набрана строка:

<gra>sin(x)</gra>

Нажимаем "Просмотр" и получаем график функции sin(x), а также корни этой функции на интервале от 0 до 2π, заданных по умолчанию.

Теперь вместо sin(x) наберём sin(5) и заключим его в теги gra:
<gra>sin(5)</gra>.
Нажимаем "Просмотр" (всегда перед нажатием "Отправить" стоит посмотреть, как выглядит набранный текст). В результате вышеприведенный код заменяется на
-0.958924274663138 (значением синуса 5).

 

f=sin(x); xmin=0, xmax=6.28318530717959
fmin=-0.998026728428272, fmax=0.998026728428272

Корни: 0, 3.14159265358979, 6.28318530717959

Также для удобства ввода формул и просмотра результатов можно использовать http://physics.nad.ru/cgi-bin/graph.pl В появившееся окошко формулы вводятся без тегов <gra>. В дальнейшем тексте мы будем их также опускать, хотя для ввода формул через форум они необходимы.

Постоянный адрес обновляемого описания пакета "ГРАФ" здесь: http://physics.nad.ru/graph.html Это описание можно также вызвать из окна ввода текста сообщений командой <gra>help</gra>. Пожалуйста, тестируйте и присылайте свои дополнения к этому пакету в виде подпрограмм, написанных на Perl (или также на C или PHP).  Архив обсуждения на форуме: http://physics.nad.ru/matboard/themes/23481.html

Содержание: Примеры:

Базовые функции

Функция Описание Пример
+ Сложение  
- Вычитание  
/ Деление  
* Умножение  
** Возведение в степень (можно также ^) 3**2=9,   3^2 = 9
abs(x) Вычисление абсолютного значения выражения x. abs(-5) = 5
cos(x) Вычисление функции cos, выражение x в радианах. cos(pi) = -1
sin(x) Вычисление функции sin, выражение x в радианах. sin(pi/2) = 1
atan2(x,y)  Вычисление arctg(x/y). atan2(1/1) = 0.785398163397448
exp(x) Вычисление значения экспоненциальной функции x. exp(1) = 2.71828182845905
log(x) Вычисляет натуральный логарифм числа x (по основанию e). log(2.71828182845905) = 1
sqrt(x) Вычисляет квадратный корень числа x. sqrt(9) = 3, sqrt(-1) = i
rand(x) Возвращает случайное дробное число в интервале 0 до значения параметра x. rand(10) =  6.18115656349016
hex(x) Интерпретирует строковое выражение x как шестнадцатиричное число и вычисляет его десятичный эквивалент hex(FF) = 255
oct(x) Интерпретирует строковое выражение x как восьмеричное число и вычисляет его десятичный эквивалент. Если строка начинается с символов "0x", то ее содержимое интерпретируется как шестнадцатиричное число. oct(11) = 9
int(x): Вычисление целой части числа (отбрасывается дробная часть). int(3.1415926535) = 3
 

Дополнительные функции

Дополнительные функции Пояснения
    tan         tan(z) = sin(z) / cos(z)
    csc, cosec, sec, sec, cot, cotan         csc(z) = 1 / sin(z)
        sec(z) = 1 / cos(z)
        cot(z) = 1 / tan(z)
    asin, acos, atan         asin(z) = -i * log(i*z + sqrt(1-z*z))
        acos(z) = -i * log(z + i*sqrt(1-z*z))
        atan(z) = i/2 * log((i+z) / (i-z))

         asin(1) = 1.5707963267949

    atan2(z1,z2)         atan2(z1,z2) = atan(z1/z2)
    acsc, acosec, asec, acot, acotan         acsc(z) = asin(1 / z)
        asec(z) = acos(1 / z)
        acot(z) = atan(1 / z)
    sinh, cosh, tanh         sinh(z) = 1/2 (exp(z) - exp(-z))
        cosh(z) = 1/2 (exp(z) + exp(-z))
        tanh(z) = sinh(z) / cosh(z)
    csch, cosech, sech, coth, cotanh         csch(z) = 1 / sinh(z)
        sech(z) = 1 / cosh(z)
        coth(z) = 1 / tanh(z)
    asinh, acosh, atanh         asinh(z) = log(z + sqrt(z*z+1))
        acosh(z) = log(z + sqrt(z*z-1))
        atanh(z) = 1/2 * log((1+z) / (1-z))
    acsch, acosech, asech, acoth, acotanh         acsch(z) = asinh(1 / z)
        asech(z) = acosh(1 / z)
        acoth(z) = atanh(1 / z) = 1/2 * log((1+z) / (z-1))
    pi         3.14159265358979
    deg2rad(x)         Перевод градусов в радианы (x - в градусах)
    rad2deg(x)         Перевод радиан в градусы (x - в радианах)
    cbrt, log10, logn(z, n)         cbrt(z) = z ** (1/3)
        log10(z) = log(z) / log(10)
        logn(z, n) = log(z) / log(n)
    ln         ln(exp(1)) = 1
    Re(z), Im(z)         Мнимая и действительная часть
    abs(z), arg(z)         Полярные координаты z (r,j)
 

Работа с комплексными числами

Комплексные числа можно записать в полярных и декартовых координатах. В декартовых координатах это a+b·i, а в полярных - r·exp(it). Соответственно некоторое комплексное число z можно перевести в декартовы координаты оператором z->{d}, а в полярные - оператором z->{p}. Модуль комплексного числа находится как abs(z), а угол в полярных координатах - как arg(z). Re(z), Im(z) - действительная и мнимая часть z. Ввести комплексное число можно или как a+bi, или cplx(a,b), или просто z=(a,b). В полярных координатах число вводится как cplxe(r,t) или просто как z=[r,t]. Результат в полярных координатах отображается как [r,t]. И ещё один ньюанс. Если zn = [r,t], то, находя корень кубический из [r,t] угол может определяться неоднозначно. Например корень кубический из [8,pi] может быть и [2,pi/3], и [2,pi], и [2,5pi/3]. k-ое значение корня n-ой степени находится через функцию (root(z,n))[k]. cbrt(z) находит только одно (первое) решение кубического корня.

Комплексные числа можно складывать, делить, подвергать их действию различных функций:

Пусть z1 = a + bi = r1 * exp(i * t1) и z2 = c + di = r2 * exp(i * t2)
Тогда z1 + z2 = (a + c) + i(b + d)
z1 - z2 = (a - c) + i(b - d)
z1 * z2 = (r1 * r2) * exp(i * (t1 + t2))
z1 / z2 = (r1 / r2) * exp(i * (t1 - t2))
z1 ** z2 = exp(z2 * log z1)
abs(z) = r1 = sqrt(a*a + b*b) sqrt(z) = sqrt(r1) * exp(i * t/2)
exp(z) = exp(a) * exp(i * b)
log(z) = log(r1) + i*t
sin(z) = 1/2i (exp(i * z1) - exp(-i * z))
cos(z) = 1/2 (exp(i * z1) + exp(-i * z))

Функция Пояснения
     cplxe(r,t) или z=[r,t] Ввод комплексного числа в полярных координатах
     cplx(a,b) или a+b*i  или z=(a,b) Ввод комплексного числа в декартовых координатах
     Re(z), Im(z), abs(z), arg(z) Вещественная, мнимая часть комплексного числа, а также его абсолютная величина и угол в полярных координатах
     z->{d},   z->{p} Перевод комплексного числа соответственно в декартовы и полярные координаты
     cbrt(z) Кубический корень из комплексного числа
     (root(z,n))[k] k-ый корень для z = [r,t] задаваемый:
(root(z, n))[k] = r**(1/n) * exp(i * (t + 2*k*pi)/n)
<gra>Код</gra> Результат
a=i
a->{p}
a
[1,pi/2]
a=cplxe(1,pi/2)
a->{d}
a
6.12303176911189e-17 + i
(1+i)(2+i)/(3+i)(4+i) 1.6+3.8i
sqrt(-1) i
abs(3+4i) 5
Re(3+4i) 3
Im(3+4i) 4
arg(1+i) pi/4
a=exp(i*pi/2)
a->{d}
a
6.12303176911189e-17 + i
a=cplxe(1, 2*pi/3)
b=a**3
b
1 - 2.44921270764475e-16i
 

 Графики функций.

Уравнение функции, константы и вспомогательные функции пишутся на отдельных строчках или разделяются символом точка-запятая ( ; ) Можно вообще написать, например, g(t)=sin(t) и тогда функция будет g, а аргумент - t. Комментарии отделяются символами %%.

Алгоритм таков:
Если в строчке нет знака равенства =, то смотрится есть ли там символ x. Если x есть, то нужно строить график функции, если нет, то вычислить число и показать его. Также смотрятся все остальные строчки, в которых содержится знак равенства. Ecли это например g(t)=.., то g - функция, t - переменная. Если f=.., то в строчке записана функция. Если это например с=5, то с - константа, а 5 - её значение. Также проверяется наличие x во всех остальных строчках. Если есть, то нужно строить график функции. В общем легче смотреть на примерах. В любом случае зарезервированы буквы f под функцию, a x под её аргумент (переменную). Как функция, так и её аргумент могут быть вещественными или комплексными. Если значение функции комплексно, то по вертикальной оси откладывается мнимое значение функции, а по горизонтальной - вещественное. При этом x линейно меняется от xmin до xmax. Как xmin, так и xmax могут тоже быть комплексными. Если строится комплексная функция, то левый нижний угол задаётся как комплексное fmin, а верхний правый угол - комплексное fmax. Если fmin или fmax отсутствует, то они вычисляются автоматически. Также для задания масштаба по вертикали можно использовать ymin и ymax. Есть 2 режима масштабирования комплексной функции ratio=0 или 1. Если ratio=0, то функция растягивается по горизонтали и вертикали до fmin, fmax. Если ratio=1, то масштабы по осям одинаковые и fmin и fmax выбираются автоматически (ввод не действует), чтобы отобразить всю функцию. Если у вас две функции одного переменного (например f и g) и вы хотите нарисовать их в осях XY, то выводите как cplx(f,g), или как f+i*g, или как  (f,g). Название функций и из аргумента могут быть любыми.

Параметры.

Параметр Значение по умолчанию Пояснения
xmin xmin=0 Минимальное значение аргумента. В случае комплексной функции также может быть комплексным.
xmax xmax=2*pi Максимальное значение аргумента. В случае комплексной функции также может быть комплексным.
fmin вычисляется Минимальное значение функции. При отсутствии вычисляется. В случае, если функция комплексная, то fmin также должна быть комплексной. В этом случае fmin задаёт левый нижний угол графика.
fmax вычисляется Максимальное значение функции. При отсутствии вычисляется. В случае, если функция комплексная, то fmax также должна быть комплексной. В этом случае fmax задаёт правый верхний угол графика.
ymin вычисляется Минимальное значение по координате Y. Используется при построении кривой по точкам, а также может заменить fmin для задания масштаба по вертикали.
ymax вычисляется Максимальное значение по координате Y. Используется при построении кривой по точкам, а также может заменить fmax для задания масштаба по вертикали.
points points=100 Количество точек по которым строится каждый график функции. Чем больше points, тем более гладкая кривая. но тем больше времени требуется для её расчёта. Если points велико, то отведённого на сервере лимита времени может не хватить для выполнения скрипта и возникнет ошибка. В этом случае уменьшите количество точек.
fbox fbox=1 Параметр fbox может принимать значение 0 или 1. Если fbox=0, то рамка графика не строится. Если fbox=1, то рамка строится. По умолчанию рамка строится.
spline spline=0 Этот параметр может принимать два значения 0 и 1. Если spline=0, то график строится отрезками прямых. Если spline=1, то график строится параболами. В некоторых случаях это может быть использовано для получения более гладкой кривой при небольшом количестве точек. С другой стороны это увеличивает время расчёта.
ratio ratio=0 Если строится комплексная функция, то она автоматически растягивается до границ отображаемого прямоугольника (ratio=0). В некоторых случаях это может быть неудобным, так как нарушает пропорции между действительной и мнимой частью функции. Например, если мы хотим построить график функции exp(i*x), то ожидаем увидеть окружность, а не эллипс. В этом случае используйте ratio=1. Масштаб по обоим осям будет одинаковым, а график растянется автоматически по одному направлению (исходя из пропорций графика и окна отображения).
nmax nmax=1 При построении на одном поле нескольких функций отличающихся одним параметром nmax задаёт максимальное количество графиков на поле. При этом переменная n будет меняться от 0 до nmax-1.
n - Если задано nmax, то переменная n  меняется от 0 до nmax-1.
roots roots=1 Параметр roots может принимать два значения 0 и 1.  Если roots=0, то корни уравнения f(x)=0 не вычисляются. Если roots=1, то корни вычисляются. По умолчанию корни вычисляются. Если имеется несколько функций, то корни вычисляются у главной (без цифровых индексов).
width width=300 Ширина окна в пикселях.
height height=200 Высота окна в пикселях.
animated(time,transparent) animated(0,0) Задаёт построение GIF анимации. Каждый кадр отличается параметром n. Поэтому также необходимо указать nmax. time задаёт время между кадрами анимации в миллисекундах. time=0 задаёт максимальную скорость смены кадров анимации. transparent=1 задаёт прозрачный фон. В этом случае кривые накладываются друг на друга. чтобы получить анимацию параметр animated должен быть установлен в 0.
Относящееся только к построению по точкам
begin - Начало массива точек.
end - Конец массива точек
polygon - Построение по точкам фигуры с заливкой. Идёт сразу после begin.
polyline включён Построение кривой по точкам фигуры без заливки. Идёт сразу после begin. Используется по умолчанию.
stat - Построение наилучшей прямой методом наименьших квадратов. Идёт сразу после begin.
points включён Если идёт сразу после begin, то помимо кривой (прямой, залитой фигуры) отображаются точки, по которым они были построены.
inv - При наличие inv в любом месте кода не показываются точки с z<0

Пример 1:

xmin=0 %% Минимальное значение аргумента (по умолчанию xmin=0)
xmax=5 %% Максимальное значение аргумента (по умолчанию xmax=2*pi)
fmin=-2 %% Минимальное значение функции (если пусто, то вычисляется)
fmax=10 %% Максимальное значение функции (если пусто, то вычисляется)
points=50 %% Количество точек на кривой (по умолчанию - 100)
width=400 %% Ширина рисунка в пикселях (по умолчанию - 300)
height=200 %% Высота рисунка в пикселях (по умолчанию - 200)
fbox=1 %% Наличие внешней рамки (по умолчанию - 1, т.е. присутствует)
a=x^4 %% Вспомогательная функция
b=10*x^3 %% Вспомогательная функция
c=35*x^2 %% Вспомогательная функция
d=50*x %% Вспомогательная функция
e=24 %% Вспомогательная функция
a-b+c-d+e %% Уравнение функции

f=a-b+c-d+e; xmin=0, xmax=5
fmin=-2, fmax=10

Корни: 1; 2; 3; 4

Пример 2:

f=sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(sin(x)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

xmin=0, xmax=6.28; fmin=-0.215, fmax=0.215

Корни: 0; 3.14159265358979; 6.28318530717959

Пример 3:

fbox=0; width=700; points=500; roots=0
sin(6*sin(5*x))

f=sin(6*sin(5*x))
; xmin=0, xmax=6.28, fmin=-0.997, fmax=0.9967

Пример 4:
Затухающие гармонические колебания.

xmax=4*pi; ratio=1
exp(-0.5*x)*exp(i*x)


f=exp(-0.5*x)*exp(i*x);
xmin=0, xmax=12.566
fmin=(-0.234 + i*-0.207); fmax=(1 + i*0.615)

Функции комплексного переменного.

Можно также строить графики комплексных функций от комплексной переменной. Пусть, например, x меняется от i до 1. Найдём как выглядит функция x^n для нескольких произвольных n. Результат ниже.

f=x; xmin=i, xmax=1
fmin=(-1 + i*-1), fmax=(1 + i*1)
f=x**2; xmin=i, xmax=1
fmin=(-1 + i*-1), fmax=(1 + i*1)
f=x**3; xmin=i, xmax=1
fmin=(-1 + i*-1), fmax=(1 + i*1)
f=x**4; xmin=i, xmax=1
fmin=(-1 + i*-1), fmax=(1 + i*1)
f=x**9; xmin=i, xmax=1
fmin=(-1 + i*-1), fmax=(1 + i*1)

xmin=i; xmax=1; fmin=-1-i; fmax=1+i;
roots=0; points=2; width=200
x

Проверка для f=x^2: x=t+i*(1-t), где t=0..1
f=x^2=(2t-1)+i*2t(1-t)
Re(f)=2t-1; Im(f)=2t(1-t)
Нетрудно видеть, что Im(f)=0.5(1-Re(f)^2) Т.е. если построить эту зависимость в координатах XY, то это будет y=0.5(1-x^2), x=-1..1. Построим эту функцию и видим что получили то же самое, что и для комплексного представления

f=0.5*(1-x**2); xmin=1, xmax=-1
fmin=-1, fmax=1

Несколько графиков, отличающихся параметром, на одном поле.

Следующий пример демонстрирует построения графиков, отличающихся параметром n. Задано максимальное количество графиков на одном поле (nmax=5). При этом переменная n меняется от 0 до nmax-1.


roots=0;
nmax=25
a=(
n+1)/nmax
xmin=-pi
xmax=pi
f=a*(sin(2*x))*1/(x)+0.3*(cos(2*x))

f=a*(sin(2*x))*1/(x)+0.3*(cos(2*x));
xmin=-3.14, xmax=3.14, fmin=-0.574, fmax=2.3


Анимация.

Для анимации графиков используется функция animated(time,transparent). Построенное изображение сохраняется в файл изображения формата Animated GIF. Параметр time задаёт задержку между кадрами в миллисекундах. Параметр transparent может принимать два значения - 1 и 0. Если 1, то устанавливается прозрачный фон и видны все построенные графики. Если 0, то фон белый и кадры последовательно заменяют друг друга. Графики на разных кадрах анимации отличаются параметром n, который изменяется от 0 до nmax-1.

nmax=20; animated
fi=2*pi*n/nmax
a1=sin(x)
a2=sin(2*x+fi)
f=(a1,a2)

XY=cplx(a1,a2); xmin=0, xmax=6.283
fmin=(-1 + i*-1 ), fmax=( 1 + i*1 )

Точки и построенные по ним кривые графики также могут быть преобразованы в GIF анимацию с меняющимся параметром n.

В примере ниже строится наилучшая прямая по точкам, к координатам которых посредством функции rand добавлена случайная величина, имитирующая погрешность измерения.

nmax=50; animated(10,0)
begin stat points
0 0; 1 1; 2 2; 3 3; 4 4;
5 5; 6 6; 7 7; 8 8; 9 9
end
x=x+rand
y=y+rand

xmin=0.018121094411935, xmax=9.96057783549489
fmin=0.00498491452561467, fmax=9.94779613951097

Преобразование 3D координат.

Имеются следующие 3D функции преобразования координат:

($rho, $theta, $z) = cartesian_to_cylindrical($x, $y, $z);
($rho, $theta, $phi) = cartesian_to_spherical($x, $y, $z);
($x, $y, $z) = cylindrical_to_cartesian($rho, $theta, $z);
($rho_s, $theta, $phi) = cylindrical_to_spherical($rho_c, $theta, $z);
($x, $y, $z) = spherical_to_cartesian($rho, $theta, $phi);
($rho_c, $theta, $z) = spherical_to_cylindrical($rho_s, $theta, $phi);

 

В следующем примере используется функция преобразования
сферических координат в декартовы.

animated(10,0)
roots=0; nmax=10; points=50; width=200
R=1
THETA=pi*n/nmax
PHI=x
(X,Y,Z)=
spherical_to_cartesian(R,THETA,PHI)
f=(X,Z)

f=cplx(X,Z); xmin=0, xmax=6.28318530717959
fmin=(-0.998 + i*-1 ), fmax=( 0.998 + i*1 )
 

Преобразование вращения в декартовых координатах

nmax=50; animated(10,0)
width=200
xmin=-2; xmax=2
ymin=-2; ymax=2
begin
 1  1  1
 1 -1  1
-1 -1  1
-1  1  1
 1  1  1
 1 -1  1
 1 -1 -1
 1  1 -1
 1  1  1
 1  1 -1
 1 -1 -1
-1 -1 -1
-1  1 -1
 1  1 -1
-1  1 -1
-1 -1 -1
-1 -1  1
-1  1  1
-1  1 -1
end
(x,y,z)=rotate(x,y,z,pi/10,pi/10)
(x,y,z)=y_rotate(x,y,z,2*n*pi/50)
Функции вращения в декартовых координатах:

    (x,y,z)=rotate(x,y,z,φ,θ)
    (x,y,z)=x_rotate(x,y,z,φ)
    (x,y,z)=y_rotate(x,y,z,φ)
    (x,y,z)=z_rotate(x,y,z,φ)

 

xmin=-2, xmax=2, fmin=-2, fmax=2

Несколько разных функций на одном поле.

Основная функция f должна быть без номера. Остальные функции должны начинаться с той же буквы f, а затем идут произвольные числовые номера. Если основная функция переопределена как например g(t)=..., то остальные должны быть g1=.., g2=.., g101=.. и т.д. При этом дополнительные функции тоже будут иметь в качестве аргумента переменную t. Корни вычисляются только у основной функции. Цвет каждой кривой задаётся как color0=.., color1=... Далее значение цвета покомпонентно (RGB) в шестнадцатиричном выражении. color0 задаёт цвет графика основной функции. Если значение цвета не пишется, то по умолчанию выбирается тёмно-синий цвет кривой.

points=50; width=200; roots=0
f=exp(i*x); color0=0000FF
f1=0.3*exp(i*x); color1=FF0000
f2=sin(2*x)*exp(i*x); color2=00AA00

f=exp(i*x); xmin=0, xmax=6.28318530717959
fmin=(-1 + i*-0.998 ), fmax=( 1 + i*0.998 )

Построение кривых и фигур по точкам

Линии и закрашенные фигуры можно строить по точкам. Массив точек задаётся в столбик через пробел. Начинается с заголовка begin и заканчивается end. Можно строить несколько линий на одном поле. Линия - polyline или пусто. Закрашенная фигура - polygon. Цвет: black, white, red, green, blue и darkblue (по умолчанию). xmin, xmax, ymin, ymax задают рамку. В случае polyline иногда полезно использовать spline=1. В этом случае кривая строится не отрезками линии, а параболами (см. нижний пример).
 
В этом примере строится 3 фигуры: две закрашенные (polygon) и одна незакрашенная (polyline).
begin polygon blue
0 23
 5 30
 12 32
 16 31
 20 28
 22 25
 23 20
 21 11
 16 1
 0 -17
 -16 1
 -21 11
 -23 20
 -22 25
 -20 28
 -16 31
 -12 32
 -5 30
 0 23
 5 30
 end
begin polygon red
 24 8
 29 15
 36 17
 40 16
 44 13
 47 5
 40 -14
 24 -32
 8 -14
 3 -4
 1 5
 4 13
 8 16
 13 17
 19 15
 24 8
 29 15
 end
begin
 -32 -6
 -29 -2
 -25 0
 -19 -3
 -17 -8
 -19 -14
 -22 -20
 -32 -32
 -43 -20
 -46 -14
 -47 -8
 -45 -3
 -40 0
 -35 -2
 -32 -6
 -29 -2
 end
xmin=-47, xmax=47, fmin=-32, fmax=32

В данном примере кривая построена по 3-м точкам, но не отрезками прямой, а параболами. Это занимает несколько больше процессорного времени, но делает строку запроса очень компактной и в ряде случаев позволяет хорошо сглаживать кривую при недостаточности точек.

begin
spline=1
0 5
5 0
0 -5

xmin=0, xmax=5, fmin=-5, fmax=5

Координаты точек могут быть преобразованы по правилу:
x = f(x); y= g(y); z=h(z)
Например: x=x**2; y=log10(y); z=2*z;

Построение прямой y=a+bx методом наименьших квадратов.

Для построения прямой y=a+bx методом наименьших квадратов необходимо ввести свои данные (точки). Для этого можно использовать форму http://physics.nad.ru/stat.html. Данные вводятся в столбик парами x y через пробел между строками "begin stat points" и "end". Параметры width и height определяют размеры окна по горизонтали и вертикали. fbox=0 отключает отображение рамки и сетки графика. В результате работы скрипта отображается прямая y=a+bx, построенная методом наименьших квадратов, а также в текстовом виде значение коэффициентов a и b, а также их среднеквадратичные ошибки (стандартное отклонение)  ±a и ±b. Точки отображаются крестиками (размер крестика не имеет отношения к погрешностям). Красными крестиками отображаются выпадающие точки, для которых отклонение от прямой превышает 3σ. Чтобы задать масштаб по осям нужно написать минимальное и максимальное значение x и y в столбик или через точку с запятой: xmin=...; xmax=...; ymin=...; ymax=...; Если минимальные и максимальные значения x и y не заданы, то они вычисляются автоматически.

Если зависимость между x и y носит нелинейный характер, то это можно её можно "распрямить", используя функции преобразования координат x=f(x)  и y=g(y), которые помещаются внизу окна ввода. Пусть, например, известно, что зависимость между измеренными величинами x и y имеет вид y=kxn (закон Стефана-Больцмана) и требуется найти значение коэффициентов k и n. Прологарифмируем уравнение и получим log10(y)=log10(k)+n*log10(x).  Записываем пары x y в столбик и внизу окна пишем функции преобразования x=log10(x); y=log10(y). В результате на графике получаем прямую с наклоном b=n, которая отсекает на оси y значение коэффициента a=log10(k).

Или другой пример. При небольших напряжениях на p-n переходе его сопротивление R будет постоянным и пропорциональным exp(eV/kT). Пусть измерена зависимость этого сопротивления y=R от температуры x=T и требуется найти высоту потенциального барьера V p-n перехода. Вводим значения сопротивления и температуры в форму и записываем внизу преобразование x=1/x; y=ln(y). По наклону прямой находим V.

Ещё один пример. Количество частиц N прошедших цилиндрический образец длинной l задаётся формулой N=Noexp(-μl). Заносим в форму данные: зависимость числа регистрируемых частиц (y) от длины образца (x). Записываем преобразование y=ln(y) и по наклону прямой находим коэффициент ослабления μ для данного материала.

begin stat points
-9.1 -4.7
-8.5 -3.1
-7.3 -2.1
-6.1 -1.7
-5.9 -0.1
-4.1 0.2
-3.7 1.5
-2.7 2.4
-2.1 4.7
-0.8 4.7
0.4 5.1
1.8 6.4
2.2 7.7
3.7 8.2
4.9 9.6
5.3 10.1
7.0 11.9
7.8 12.3
8.7 13.0
9.9 14.4
end
Построение прямой y = a + bx методом наименьших квадратов

xmin=-9.1, xmax=9.9, fmin=-4.7, fmax=14.4
a = 4.96 ± 0.13
b = 0.97 ± 0.02
 
Dx=<x2>-<x>2; Dy=<y2>-<y>2
b=(<xy>-<x><y>)/Dx; a=<y>-b<x>
σb2=(Dy/Dx-b2)/N; σa2= σb2Dx
Выпадающие точки (отклонение более 3σ): (-2.1,4.7)

Функции двух переменных

Суть цветовой схемы следующая. Строится график функции двух переменных f(x,y). Красным отмечены области, где f>0, и синим, где f<0. Чем интенсивнее цвет, тем ближе к нулю. Поэтому граница между синим и красным показывает решение уравнения f(x,y)=0. Зелёным заполняются остальные области (можно убрать, положив bitmap=3). Предусмотрены также другие цветовые схемы bitmap=1...9

xmin=-8; xmax=8
ymin=-5; ymax=5
height=200; width=320
a=6; b=8
f(x,y)=(x^2+y^2)^2-2*(b^2)*(a^2-y^2)-a^4+b^4

 

Овалы Кассини.


Примеры построения графиков при помощи Граф


Партнёры: септики для коттеджей, их можно устанавливать и в том случае

Rambler's Top100