36865

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

Лабораторная работа

Архивоведение и делопроизводство

Функции plot3d и plot3d1 В Scilb поверхность можно построить с помощью функций plot3d или plot3d1. Их отличие состоит в том что plot3d строит поверхность и заливает ее одним цветом а plot3d1 поверхность каждая ячейка которой имеет цвет зависящий от значения функции в каждом соответствующем узле сетки. Обращение к функциям следующее: plot3dxyz[thetlphlegflgebox][keyn=vluen] plot3d1xyz[thetlphlegflgebox][keyn=vluen] здесь x векторстолбец значений абсцисс; y векторстолбец значений ординат; z матрица значений...

Русский

2013-09-23

676.5 KB

38 чел.

Лабораторная работа № 6.

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

Процесс построения графика функции вида Z(x, y) можно разделить на три этапа:

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

2. Вычисление значений функции zij = f(xi, yj) во всех узлах сетки.

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

Функции plot3d и plot3d1

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

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

plot3d(x,y,z,[theta,alpha,leg,flag,ebox][keyn=valuen]),

plot3d1(x,y,z,[theta,alpha,leg,flag,ebox][keyn=valuen]),

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

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

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

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

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

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

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

Таблица. Значения параметра mode

Значение

Описание

> 0

поверхность имеет цвет «mode», выводится прямоугольная сетка

0

выводится прямоугольная сетка, заливка отсутствует (белый цвет)

< 0

поверхность имеет цвет «mode», отсутствует прямоугольная сетка

type - позволяет управлять масштабом графика (см. табл.), по умолчанию имеет значение 2;

Таблица. Значения параметра type

Значение

Описание

0

применяется способ масштабирования, как у ранее созданного графика

1

границы графика указываются вручную с помощью параметра ebox

2

границы графика определяют исходные данные

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

Таблица. Значения параметра box

Значение

Описание

0 и 1

Нет рамки

2

только оси, находящиеся за поверхностью

3

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

4

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

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

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

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

Таким образом, функции 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 = 5y2 − x2.

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

Листинг 6.2. Форматирование матрицы значений функции Z = 5y2 − x2 командой 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;

end

end

plot3d(x’,y’,z,-125,51);

colorbar(-3,3)

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

В 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) значений функции 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]=eval3dp(fun,p1,p2)

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:

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

где 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)";..

                          "y=p1.*cos(p1).*cos(p2)";..

                          "z=p1.*sin(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.

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

surf([X,Y],Z,[color,keyn=valuen])

mesh([X,Y],Z,[color,])

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

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

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

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

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

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

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

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

[x y]=meshgrid(-2:2,-3:3);

z=5*y.^2-x.^2;

mesh(x,y,z);

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

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

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

[x y]=meshgrid(-2:0.1:2,-3:0.1:3);

z=5*y.^2-x.^2;

surf(x,y,z)

 

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

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

[x y]=meshgrid(-2:0.2:2,-2:0.2:2);

z=3*x.^2+4*y.^2-1;

z1=-3*x.^2-4*y.^2-1;

surf(x,y,z);

mtlb_hold(’on’);

mesh(x,y,z1);

Функции plot3d2 и plot3d3

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

plot3d2(x,y,z,[theta,alpha,leg,flag,ebox][keyn=valuen]),

plot3d3(x,y,z,[theta,alpha,leg,flag,ebox][keyn=valuen])

Эти функции предназначены для построения поверхности, которая задается набором граней. Т. е. если функция 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.

Листинг 6.9.

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=gce();

e.color_mode=4; // change color

f=e.data;

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

e.data=TL;

e.color_flag=2;

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

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

u = linspace(-%pi/2,%pi/2,20);

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

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

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

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

plot3d3(X,Y,Z);


 

А также другие работы, которые могут Вас заинтересовать

68312. Разработка направлений совершенствования финансовой деятельности 436 KB
  Устойчивое финансовое состояние формируется в процессе всей финансово - хозяйственной деятельности фирмы. Определение ликвидности на ту или иную дату отвечает на вопрос, насколько правильно фирма управляла финансовыми ресурсами в течение периода, предшествующего этой дате.
68314. ФРАНЦИСК СКОРИНА 27 KB
  Библия в издании доктора Скорины это не церковное и не чисто академическое издание для научных целей это первое издание Священного Писания для домашнего чтения. В разное время имя Франциска Скорины носило пять улиц Минска: в 1926 1933 годах Козьмодемьянская улица; в 1967 1989 улица...
68315. Формы организации правового обучения 201.5 KB
  Наука обучения – это не искусство заставить. Это не умение убедить ученика учиться. Это наука создавать условия, при которых ученик сам себя убеждает в этом. И если у вас по-настоящему коллективные занятия, то наиболее убедительным аргументом в пользу принятия и выполнения учеником решения...
68317. Підвищення економічної ефективності та тенденції розвитку виробництва сільськогосподарської продукції 677 KB
  Питаннями підвищення економічної ефективності виробництва сільськогосподарської продукції займається велика група науковців. Ними розроблені стратегічні аспекти зміцнення сільськогосподарського виробництва в країні, структурної перебудови галузі, підвищення економічної ефективності використання земельних, матеріально-технічних і трудових ресурсів, ціноутворення, формування і функціонування ринків зерна.
68318. Философия личности. Значение слова «личность» 46 KB
  В европейских языках слово личность восходит к латинскому понятию персона что означало маску актера в театре а в юридическом смысле социальную роль и человека как некое целостное существо. Личность В процессе генезиса человек выступает сначала как биологическая особь индивид потом как индивидуальность...
68319. Оптичні явища у фотонних кристалах та методи їх дослідження 174.5 KB
  Робота забезпечує вивчення існуючої теорії поширення електромагнітних хвиль у періодичних структурах. ЇЇ виконання дозволяє систематизувати, закріпити та розширити теоретичні і практичні знання з оптичної фізики. Це також забезпечує розвиток навичок самостійної роботи і опанування методикою дослідження й експериментування