Построить график заданный системой уравнений scilab

Функции plot3d и plot3d1

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

Рассмотрим основные возможности SciLab по созданию трехмерных графиков: объемных и пространственных. При этом к трехмерным отнесем все графики, положение каждой точки которых задается тремя величинами.

В целом процесс построения графика функции вида можно разделить на три этапа:

1. Создание в области построения графика прямоугольной сетки. Для этого формируются прямые линии, параллельные координатным осям и ,

, , ,

2. Вычисление значений функции во всех узлах сетки.

3. Обращение к функции построения трехмерных графиков.

Функции plot3d и plot3d1

В SciLab поверхность можно построить с помощью функций plot3d или plot3d1. Их отличие состоит в том, что plot3d строит поверхность и заливает ее одним цветом, а plot3d1-поверхность, каждая ячейка которой имеет цвет, зависящий от значения функции в каждом соответствующем узле сетки.

Обращение к функциям следующее:

plot3d(x, y, z, [theta, alpha, leg,flag,ebox]Построить график заданный системой уравнений scilab),

plot3d1(x, y, z, [theta, alpha,leg,flag,ebox]Построить график заданный системой уравнений scilab),

x-вектор-столбец значений абсцисс;

y -вектор-столбец значений ординат;

z -матрица значений функции;

theta, alpha — действительные числа, которые определяют в градусах сферические координаты угла зрения на график. Попросту говоря, это угол, под которым наблюдатель видит отображаемую поверхность;

leg— подписи координатных осей графика, символы, отделяемые знаком @. Например, ’X@Y@Z’.

flag -массив, состоящий из трех целочисленных параметров: [mode,type,box].

mode— устанавливает цвет поверхности. По умолчанию равен 2 — цвет заливки синий, прямоугольная сетка выводится.

Значения параметра mode
ЗначениеОписание
> 0поверхность имеет цвет «mode», выводится прямоугольная сетка
выводится прямоугольная сетка, заливка отсутствует (белый цвет)
Значения параметра type
ЗначениеОписание
применяется способ масштабирования, как у ранее созданного графика
границы графика указываются вручную с помощью параметра ebox
границы графика определяют исходные данные ebox, определяет наличие рамки вокруг отображаемого графика

box — определяет наличие рамки вокруг отображаемого графика. По умолчанию равен 4.

Значения параметра box
ЗначениеОписание
0 и 1нет рамки
только оси, находящиеся за поверхностью
выводится рамка и подписи осей
выводится рамка, оси и их подписи

ebox — определяет границы области, в которую будет выводиться поверхность, как вектор [xmin, xmax, ymin, ymax, zmin,zmax].Этот параметр может использоваться только при значении параметра type=1.

keyn=valuen -последовательность значений свойств графика key1=value1, key2=value2, . keyn=valuen, таких как толщина линии, ее цвет, цвет заливки фона графического окна, наличие маркера и др.

Таким образом, функции plot3d (plot3d1) в качестве параметров необходимо передать прямоугольную сетку и матрицу значений в узлах сетки.

Пример 1. Построить график функции

Создадим массив значений аргумента Вычислим значения функции и запишем их в массив .

При обращении к функции plot3d в качестве параметров и , задающих прямоугольную сетку, дважды указан параметр , поскольку обе функции — и sin, и cos зависят от одной переменной

Построение графика функции с помощью функции plot3d

t=[0:0.2:2*%pi]’;Z=sin(t)*cos(t’);plot3d(t,t,Z,-120,25,’X@Y@Z’,[7,2,4]);

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

Пример 2. Построить график функции .

Прежде всего, зададим массивы и .

Затем сформируем матрицу значений функции , используя оператор цикла for. Здесь — параметр цикла, который будет перебирать все значения массива , а — параметр цикла, который будет сопоставлять каждому значению массива по очереди все значения массива .

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

lengthопределяет количество элементов массива

Для построения поверхности обратимся к функции plot3d

x=[-2:0.1:2];y=[-3:0.1:3];for i=1:length(x)for j=1:length(y)z(i,j)=5*y(j)^2-x(i)^2;endendplot3d(x’,y’,z,120,45,’X@Y@Z’,[8,2,4]);// Здесь 35 и 45 угол поворота наблюдателя

Для построения поверхности обратимся к функции plot3d1

x=[-2:0.1:2];y=[-3:0.1:3];for i=1:length(x)for j=1:length(y)z(i,j)=5*y(j)^2-x(i)^2;endendplot3d1(x’,y’,z,120,45,’X@Y@Z’,[8,2,4]);// Здесь 35 и 45 угол поворота наблюдателя

В SciLab существует несколько команд, призванных облегчить процедуру создания прямоугольной сетки — это genfac3d и eval3dp.

Простейшей из них по синтаксису является функция genfac3d:

[xx,yy,zz]=genfac3d(x, y, z)

Здесь xx, yy, zz — результирующая матрица размером (4,(n–1)×(m−1)),где xx(:,i), yy(:,i) и zz(:,i)-координаты каждой из ячеек прямоугольной сетки;

x -вектор x-координат размера m;

y -вектор y-координат размера n;

z -матрица размера (m, n) значений функции

Пример 3. Построить график функции .

Определим массив параметра и вычислим значения функции

Прямоугольную сетку создадим при помощи команды genfac3d.

Для формирования графика обратимся к функции plot3d.

t=[0:0.3:2*%pi]’;z=sin(t)*cos(t’);[xx,yy,zz]=genfac3d(t,t,z);plot3d(xx,yy,zz,120,25,’X@Y@Z’,[3,2,4]);

Недостатком команды genfac3d является то, что она все-таки не упрощает работу с функцией plot3d, если поверхность задается функцией от двух переменных.

В таком случае необходимо использовать команду eval3dp:

[Xf,Yf,Zf]=eval3dp(fun,p1,p2)

Xf,Yf,Zf — результирующая матрица размером (4,(n−1)×(m−1)), где xx(:,i),yy(:,i) и zz(:,i)-координаты каждой из ячеек прямоугольной сетки;

fun -функция, определенная пользователем, которая задает трехмерный график;

p1 -вектор размера m;

p2 -вектор размера n.

Проиллюстрируем действие команды eval3dp следующим примером.

Пример 4. Построить график, заданный системой уравнений:

Прежде всего, определим массивы значений параметров p1 и p2. Далее создадим функцию scp, которая задает график.

Функции в SciLab создаются при помощи команды deff:

deff([s1,s2. ]=newfunction(e1,e2. ))

гдеs1,s2,. — список выходных параметров, т.е. переменных, которым будет присвоен конечный результат вычислений;

newfunction — имя создаваемой функции, оно будет использоваться для ее вызова;

e1,e2. — входные параметры.

Запишем команду deff в три строки для удобства чтения листинга

Для формирования значений воспользуемся функцией linspace

Функция . linspace(x1, x2), генерирует вектор линейно равноудаленных точек между x1 и x2.

[v]=linspace (x1, x2 [, n])

x1,x2— вещественные или комплексные значения

n -целое (количество значений)

v — вещественный или комплексный вектор результатов (значение по умолчанию = 100)

p1=linspace(0,2*%pi,10);p2=linspace(0,2*%pi,10);deff(«[x,y,z]=scp(p1,p2)»,[«x=p1.*sin(p1).*cos(p2)»;»y=p1.*cos(p1).*cos(p2)»;»z=p1.*sin(p2)»]);[Xf,Yf,Zf]=eval3dp(scp,p1,p2);plot3d(Xf,Yf,Zf);

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

Математический пакет Scilab располагает широким и гибко настраиваемым аппаратом для построения двумерных графиков и трёхмерных изображений.

Математический пакет Scilab располагает широким и гибко настраиваемым аппаратом для построения двумерных графиков и трёхмерных изображений.

Перечислим основные функции для оформления графика:

xgrid() — добавление сетки на график;
xtitle(«Название графика», «Название оси абсцисс», «Название оси ординат») — добавление подписей;
legend(. , .. ) — создание легенды с перечнем всех отображенных графиков в системе координат;
subplot(mnk) — функция разделения окна на матрицу, содержащую \( m \) строк, \(n столбцов\), а \(k \)- это номер ячейки, в которой будет отображен график.

Например, subplot(312) разобъёт графичекое окно на 3 строки, 1 столбец и нарисует график во второй ячейке:

Расположение графика в графическом окне subplot(312).

Например, subplot(234) разобъёт графичекое окно на 2 строки, 3 столбца и нарисует график в четвёртой ячейке:

Расположение графика в графическом окне subplot(234).

5.1 Двумерные графики

Для построения графиков, в которых положение точки задаётся двумя величинами, в Scilab нужно воспользоваться функцией plot(x, y , s). Здесь первая переменная \( х \) — массив абсцисс, \( у \) — массив ординат, \( s \) — необязательный параметр, отвечающий за цвет графика, толщину и начертание линии.

Установить желаемый вид и цвет графика можно, указав строковый параметр \( s \), который может состоять из одного, двух или трёх символов, определяющие соответственно: цвет линии, тип маркера, тип линии графика. Возможные значения перечислены в таблицах 2-4.

Таблица 2. Символы, определяющие цвет линии графика.

Таблица 3. Символы, определяющие тип линии графика.

Таблица 4. Символы, определяющие тип маркера

Для демонстрации работы функции plot() построим графики траектории движения точки по заданным уравнениям \( x(t), y(t) \) на плоскости и в заданном диапазоне времени T (таблица 5). Определим внешний вид каждого из графиков, а также оформим систему координат со всеми необходимыми подписями (листинг 13). Результат работы программы представлен на рис. 7.

Таблица 5. Уравнения движения материальной точки и промежуток времени.

Рисунок 7. Построение графиков движения материальной точки.

5.2 Построение трёхмерных изображений

Для построения поверхности в Scilab используются функции plot3d( plot3d1) и plot3d2(plot3d3). Их отличие состоит в том, что первая пара функций plot3d( plot3d1) строит поверхность из отдельно стоящих друг от друга грани (залитую одним цветом и залитую различными цветами соответсвенно), а вторая пара plot3d2(plot3d3) — цельное геометрическое тело.

Процесс построения графика функции вида \( Z(x,y) \) можно разделить на 3 этапа:
1. Создание прямоугольной сетки с помощью функции linspace();
2. Вычисление значений функции \( Z(x,y) \) в узлах сетки;
3. Вызов функции plot3d() или plot3d2().

В качестве примера, построим сферу в трехмерной системе координат с помощью функций plot3d1 и plot3d2.

Рисунок 8. Сфера, заданная параметрически, построенная с помощью функции plot3d1 (слева) и plot3d2 (справа).

Поверхность сферы в декартовых координатах \( (x,y,z) \) параметрически задаётся системой уравнений: \( f(n) = \begin x(u,v)=cos(u)cos(v) \\ y(u,v)=cos(u)sin(v) \\ z(u,v)=sin(u) \end \),
независимые переменные \( u и v \) изменяются на промежутке \( [-\pi; \pi] \). Результат работы программы представлен на рис.8, исходный код на листинге 14.

Обратите внимание, что при построении графиков поверхностей заданных параметрически , \(x(u,v), y(u,v) и z(u,v) \), необходимо сформировать матрицы \( X, Y и Z\) одинакового размера. Для этого массивы \( u и v \) должны иметь одинаковый размер.

Кроме того, если какая-либо функция из \( X, Y или Z\) зависит только от одного параметра \( u или v \), необходимо провести векторное умножение на единичный вектор ones() размерности, равной размерности параметра, от которого эта функция не зависит (см. строку 10 листинга 14).

Построить график заданный системой уравнений scilab

выводится рамка и подписи осей

выводится рамка, оси и их подписи

ebox — определяет границы области, в которую будет выводиться поверхность, как вектор [ xmin, xmax, ymin, ymax, zmin, zmax ].

Этот параметр может использоваться только при значении параметра type=1 .

key n =value n — последовательность значений свойств графика key 1 = value 1 , key 2 = value 2 , . key n = value n , таких как толщина линии, ее цвет, цвет заливки фона графического окна, наличие маркера и др . (как для двумерного).

Таким образом, функции plot3d (plot3d1) в качестве параметров необходимо

передать прямоугольную сетку и матрицу значений в узлах сетки.

Задача . Построить график функции Z = sin(t) · cos(t).

Создадим массив значений аргумента t. Вычислим значения функции и запишем их в массив Z.

Обратите внимание , что при обращении к функции plot3d в качестве параметров X и Y , задающих прямоугольную сетку, дважды указан параметр t, поскольку обе функции — и sin , и cos — зависят от одной переменной — t .

Листинг 6.1 . Построение графика функции Z = sin(t) · cos(t) с помощью функции plot3d

t = [ 0 : 0.3 : 2 * %pi ] ‘ ;

z = sin ( t ) * cos ( t ‘ ) ;

plot3d ( t , t , z )

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

Задача 6.2 . Построить график функции Z = 5y 2 − x 2 .

Length — определяет количество элементов массива X (Y).

Листинг 6.2. Форматирование матрицы значений функции Z = 5y 2 − x 2 командой length и построение ее графика с помощью функции plot3d

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

В Scilab существует несколько команд, призванных облегчить процедуру создания прямоугольной сетки — это genfac3d и eval3dp .

Простейшей из них по синтаксису является функция genfac3d :

Здесь xx, yy, zz — результирующая матрица размером (4, n − 1 × m − 1), где xx(:,i), yy(:,i) и zz(:,i) — координаты каждой из ячеек прямоугольной сетки;

x — вектор x-координат размера m;

y — вектор y-координат размера n;

z — матрица размера (m, n) значений функции Z(xi, yj).

Задача 6.3 . Построить график функции Z = sin(t) · cos(t).

Определим массив параметра t и вычислим значения функции Z = sin(t) · cos(t). Прямоугольную сетку создадим при помощи команды genfac3d:

Листинг 6.3 . Создание прямоугольной сетки графика командой genfac3d и построение ее графика с помощью функции plot3d

t = [ 0 : 0.3 : 2 * %pi ] ‘ ;

z = sin ( t ) * cos ( t ‘ ) ;

[ xx , yy , zz ] = genfac3d ( t , t , z ) ;

plot3d ( xx , yy , zz )

Для формирования графика обратимся к функции plot3d. Недостатком команды genfac3d является то, что она все-таки не упрощает работу с функцией plot3d, если поверхность задается функцией от двух переменных. В таком случае необходимо использовать команду eval3dp:

Xf,Yf,Zf – результирующая матрица размером ( 4, n−1×m−1 ), где xx(:,i), yy(:,i) и zz(:,i)_координаты каждой из ячеек прямоугольной сетки;

fun — функция, определенная пользователем, которая задает трехмерный график;

p1 — вектор размера m;

p2 — вектор размера n.

Задача 6.4. Построить график, заданный следующими уравнениями:

x = p1 · sin(p1) · cos(p2), y = p1 · cos(p1) · cos(p2), z = p1 · sin(p2).

Определим массивы значений параметров p1 и p2 . Далее создадим функцию scp , которая задает график.

Функции в Scilab создаются при помощи команды deff:

где s1,s2. — список выходных параметров, т.е. переменных, которым будет присвоен конечный результат вычислений;

newfunction — имя создаваемой функции, оно будет использоваться для ее вызова;

e1,e2. _входные параметры.

Листинг 6.4 . Создание прямоугольной сетки графика командой eval3dp и построение ее графика с помощью функции plot3d

p1 = linspace ( 0 , 2 * %pi , 10 ) ;

p2 = linspace ( 0 , 2 * %pi , 10 ) ;

deff ( «[x,y,z]=scp(p1,p2)» , [ «x=p1.*sin(p1).*cos(p2)» ; ..

[ Xf , Yf , Zf ] = eval3dp ( scp , p1 , p2 ) ;

plot3d ( Xf , Yf , Zf )

Теперь сформируем прямоугольную сеть при помощи команды eval3dp и построим график, обратившись к функции plot3d.

Функции meshgrid, surf и mesh

Для формирования прямоугольной сетки используется функция meshgrid . Обращение к ней имеет вид:

[X, Y [Z]] = meshgrid(x, y [z])

здесь (x, y [z]) — массивы 2 (3) исходных параметров X, Y (Z), указываемые через запятую;

[X, Y [Z]] — матрицы в случае 2 и массивы в случае 3 входных величин.

После формирования сетки вывести в нее график можно с помощью функции surf либо mesh . Так же, как и в случае с функциями plot3d и plot3d1, surf строит поверхность, заливая каждую ячейку цветом, который зависит от конкретного значения функции в узле сетки, а mesh заливает ее одним цветом.

Таким образом, mesh является полным аналогом функции surf со значением параметров Сolor mode=индекс белого цвета в текущей палитре цветов и Сolor flag=0.

Обращение к функциям имеет вид:

здесь X,Y — массивы, задающие прямоугольную сетку;

Z _матрица значений функции;

color — матрица действительных чисел, устанавливающих цвет для каждого узла сети;

key n =value n — последовательность значений свойств графика key 1= value 1, key 2= value 2, . keyn = valuen , определяющих его внешний вид.

Задача 6.5. Построить график функции Z = 5y 2 − x 2 с помощью команды mesh .

C помощью команды meshgrid создадим прямоугольную сетку. Здесь −2 : 2 определяет положение прямых, параллельных оси X, а −3 : 3-оси Y .

После формирования сетки вычислим значения функции Z во всех узлах и обратимся к функции mesh для построения графика.

Листинг 6.5 . Создание прямоугольной сетки графика командой meshgrid и построение ее графика с помощью функции mesh

Задача 6.6. Построить график функции Z = 5y 2 − x 2 с помощью команды surf.

Создадим с помощью команды meshgrid прямоугольную сетку, указывая шаг, через который будут построены параллельные координатным осям линии — 0,1 для обеих осей. В этом случае сетка будет плотнее, а график более плавным, чем в предыдущем примере.

Листинг 6.6. Создание прямоугольной сетки графика командой meshgrid и построение ее графика с помощью функции surf

Задача 6.7 . Построить график функции

Листинг 6.7. Построение графиков нескольких функций в одном графическом окне с помощью команды mtlb_hold(’on’)

Функции plot3d2 и plot3d3

Функции plot3d2 и plot3d3 являются аналогами функции plot3d , поэтому имеют такой же синтаксис:

Эти функции предназначены для построения поверхности, которая задается набором граней. Т. е. если функция plot3d по входным данным сможет построить лишь отдельно стоящие друг от друга плоские грани, то plot3d2 (plot3d3) проинтерпретирует взаимное расположение этих граней в виде цельного геометрического тела.

Отличие функций plot3d2 и plot3d3 сходно с различием действия функций plot3d и plot3d1 , а также surf и mesh . Plot3d2 строит поверхность, при этом выводит сетку и заливает все ячейки одним из цветов, по умолчанию – синим. Plot3d также выводит сетку, однако оставляет все ячейки без заливки (т. е. белыми).

Задача 6.8. Построить сферу при помощи функции plot3d2.

При построении графиков поверхностей, заданных параметрически — x(u, v), y(u, v) и z(u, v) — необходимо сформировать матрицы X, Y и Z одинакового размера. Для этого массивы u и v должны иметь одинаковый размер.

После этого следует выделить два основных вида представления x, y и z в случае параметрического задания поверхностей:

1. Если x, y и z можно представить в виде f(u) · g(v), то соответствующие им матрицы X, Y и Z следует формировать в виде матричного умножения f(u) на g(v).

2. Если x, y и z можно представит в виде f(u) или g(v), то в этом случае матрицы X, Y и Z следует записывать в виде f(u) · ones(size(v)) или g(v) · ones(size(u)) соответственно.

Здесь linspace — функция, возвращающая массив с линейным приращением значений в заданном диапазоне. Например, u=linspace(-%pi/2,%pi/2,40) значит, что параметр u линейно изменяется в диапазоне [−2π; 2π]. Число 40 устанавливает, что массив должен содержать ровно 40 значений, по умолчанию их 100.

Листинг 6.8. Построение сферы с помощью функции plot3d2

u = linspace ( — %pi / 2 , %pi / 2 , 40 ) ;

v = linspace ( 0 , 2 * %pi , 20 ) ;

X = cos ( u ) ‘* cos ( v ) ;

Y = cos ( u ) ‘* sin ( v ) ;

Z = sin ( u ) ‘* ones ( v ) ;

plot3d2 ( X , Y , Z ) ;

Задача 6.9. Построить сферу при помощи функции plot3d.

u = linspace ( — %pi / 2 , %pi / 2 , 40 ) ;

v = linspace ( 0 , 2 * %pi , 20 ) ;

X = cos ( u ) ‘* cos ( v ) ;

Y = cos ( u ) ‘* sin ( v ) ;

Z = sin ( u ) ‘* ones ( v ) ;

plot3d2 ( X , Y , Z ) ;

e . color_mode = 4 ; // change color

TL = tlist ([ «3d» «x» «y» «z» «color» ] , f . x , f . y , f . z , 10 * ( f . z ) + 1 ) ;

e . color_flag = 2 ;

Задача 6.10. Построить сферу при помощи функции plot3d3.

Листинг 6.10. Построение сферы с помощью функции plot3d3


источники:

http://inclab.ru/beginner/postroenie-grafikov-v-scilab

http://5fan.ru/wievjob.php?id=36865