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

35 чел.

Лабораторная работа № 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);


 

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

23912. Эсхил Прометей прикованный 16.62 KB
  А затем когда разозленный Зевс не хочет чтобы люди могли варить и жарить доставшееся им мясо и отказывается дать им огонь Прометей похищает этот огонь тайком и приносит людям в полом тростнике. Прометей стал величавей и возвышенней: он не хитрец и вор а мудрый провидец. Само имя Прометей значит Промыслитель.
23913. Аристофан Всадники 16.49 KB
  На сцене их четверо: двух зовут настоящими именами Никий и Демосфен третьего зовут Кожевник настоящее имя ему Клеон а четвертого зовут Колбасник этого главного героя Аристофан выдумал сам. А противник их Клеон он и вправду был ремесленникомкожевником требовал добить врага и продолжать войну до победы. Итак на сцене дом хозяина Народа а перед домом сидят и горюют два его рабаприслужника Никий и Демосфен: были они у хозяина в милости а теперь их оттер новый раб негодяй кожевник. Тот хлебает а кожевнику бросает все лакомые...
23916. Аристофан Облака 15.83 KB
  За свою философию он потом поплатился жизнью: его привлекли к суду и казнили именно за то что он слишком многое ставил под сомнение разлагал будто бы нравы и этим ослаблял государство. Почему Облака Потому что философы раньше всего стали задумываться из чего состоит все разнообразное множество предметов вокруг нас. Отцы и деды не задумывались и не рассуждали а смолоду твердо знали что такое хорошо и что такое плохо. Новые философы стали рассуждать и у них вроде бы получалось будто логикой можно доказать что хорошее не так...
23917. Гесиод 51.38 KB
  Отец Гесиода покинул из–за жестокой нужды Малую Азию и поселился в Беотии около горы Муз Геликона Близ Геликона осел он в деревне нерадостной Аскре Тягостной летом зимою плохой никогда не приятной. От Гесиода сохранились две поэмы : Теогония Происхождение богов и Труды и дни Работы и дни. Поводом для написания поэмы Труды и дни послужил процесс Гесиода с братом Персом изза раздела земли после смерти отца.