36867

Построение поверхностей заданных параметрически с помощью функций param3d и param3d1

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

Математика и математический анализ

Затем обратимся к функции prm3d передав ей математические выражения функций y y1 и y2 а также углы в градусах под которыми наблюдатель будет видеть формируемый график 45 и 35 Листинг 6. Построение линии заданной параметрически с помощью функции prm3d t=[0:0. Построение линии заданной параметрически с помощью функции prm3d t=50pi:0. Для построения графиков линий в одной системе координат обратимся к функции prm3d1.

Русский

2013-09-23

752 KB

9 чел.

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

Построение поверхностей заданных параметрически с помощью функций param3d и param3d1

Для построения параметрической кривой в Scilab существует команда param3d:

param3d(x,y,z,[theta,alpha,leg,flag,ebox]).

Задача 6.11. Построить график линии, заданной параметрически:

Прежде всего, определим диапазон и шаг изменения параметра t. Затем обратимся к функции param3d, передав ей математические выражения функций y, y1 и y2, а также углы в градусах, под которыми наблюдатель будет видеть формируемый график - 45 и 35

Листинг 6.11. Построение линии, заданной параметрически, с помощью функции param3d

t=[0:0.1:10*%pi];

param3d(sin(t),cos(t),t/7,45,35);

Задача 6.12. Построить линию, заданную параметрически:

Определив массив значений параметра t, вычислим значения X, Y и Z координат кривой.

Для построения графика используем команду param3d, установив углы обозрения наблюдателя 45 и 60 градусов.

Листинг 6.12. Построение линии, заданной параметрически, с помощью функции param3d

t=-50*%pi:0.1:50*%pi;

x=t.*sin(t);

y=t.*cos(t);

z=t.*abs(t)/(50*%pi);

param3d(x,y,z,45,60);

Для вывода нескольких параметрически заданных кривых в одних координатах в Scilab используется функция param3d1. Она имеет несколько отличный синтаксис:

param3d1(x,y,list(z,colors),[theta,alpha,leg,flag,ebox])

Здесь впервые появляется необходимость использования конструкции list(z,colors), которая позволяет не только задавать Z-координату для каждой из кривых, но и устанавливать для них желаемый цвет.

Задача 6.13. Построить графики линий, заданных параметрически:

Зададим массив значений параметра t.

Для построения графиков линий в одной системе координат обратимся к функции param3d1. В качестве параметров в первых квадратных скобках передадим ей X и Y координаты первой кривой, а во вторых - второй. При помощи свойства list определяем Z-координаты и для первой кривой установим темно-синий цвет линии (9), а для второй - красный (5). Числа 35 и 45 - углы обозрения наблюдателя. Параметр ’X@Y@Z’ отвечает за вывод подписей осей графика.

Листинг 6.13. Построение нескольких параметрически заданных линий с помощью команды list функции param3d

t=[0:0.1:5*%pi]’;

param3d1([sin(t),sin(2*t)],[cos(t),cos(2*t)],...

list([t/10,sin(t)],[9,5]),35,45,"X@Y@Z");

Функция contour

В Scilab, кроме построения объемных графиков, также реализована возможность создания пространственных моделей объектов. На практике часто возникает необходимость построения карт в изолиниях значений показателя, где X, Y -координаты задают положение конкретной изучаемой точки на плоскости, а Z-координата - зафиксированную величину показателя в этой точке. Точки с одинаковыми значениями показателя соединяют так называемые изолинии - линии одинаковых уровней значений исследуемой величины.

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

contour(x,y,z,nz[theta,alpha,leg,flag,ebox,zlev])

Здесь x, y - массивы действительных чисел;

z - матрица действительных чисел – значения функции, описывающей поверхность Z(x, y);

nz - параметр, который устанавливает количество изолиний. Если nz – целое число, то в диапазоне между минимальным и максимальным значениями функции Z(x, y) через равные интервалы будут проведены nz изолиний. Если же задать nz как массив, то изолинии будут проводиться через все указанные в массиве значения;

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

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

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

Здесь

mode - устанавливает способ и место нанесения линий уровня.

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

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

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

zlev - математическое выражение, которое задает план (горизонтальную проекцию заданной поверхности) для построения изолиний. По умолчанию совпадает с уравнением, описывающим плоскость, в этом случае может не указываться.

Следует отметить, что функции contour уравнение поверхности Z(x, y) удобнее передавать в качестве параметра как функцию, определенную пользователем.

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

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

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

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

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

Второй способ создания функции - это применение конструкции вида:

function <lhs_arguments>=<function_name><rhs_arguments>

<тело_функции>

endfunction

где lhs_arguments _список выходных параметров;

function_name _имя создаваемой функции;

rhs_arguments _входные параметры.

Задача 6.14. Построить линии уровня поверхности Z = x · sin(x)2 · cos(y).

Введем параметр t и определим массив его значений. При помощи команды function создадим функцию my_surface с входными данными x, y и выходными - z. В теле функции вычислим значения математического выражения, задающего поверхность.

Листинг 6.14. Построение изолиний поверхности Z = x·sin(x)2 ·cos(y)

с помощью функции contour

t=linspace(-%pi,%pi,30);

function z=my_surface(x,y)

z=x*sin(x)^2*cos(y)

endfunction

contour(t,t,my_surface,10);

Этот пример показывает, что выполнение функции contour приводит к формированию линий одинаковых значений показателя и проецированию их на горизонтальную плоскость. Очевидно, что такое представление данных малоинформативно. Гораздо наглядней изображение изолиний поверхности и собственно поверхности в одном графическом окне.

Задача 6.15. Построить поверхность Z = sin(x) · cos(y) и вывести изолинии в одном графическом окне.

Прежде всего, введем параметр t и сформируем массив его значений. Создадим функцию Surf, обратившись к команде deff.

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

Напомним, что при построении графика функции вида Z(x, y) при помощи функции plot3d необходимо использовать оператор цикла For, формировать матрицу значений функции zij = f(xi, yj). Чтобы избежать этого, воспользуемся командой feval.

Далее с помощью функции plot3d строим график поверхности Z = sin(x) · cos(y), устанавливая углы обзора наблюдателя, подписи для координатных осей.

Определяем и массив flag [2,1,4]: 2 - цвет графика - синий, 1 - границы области построения графика определяются вручную, 4 - выводятся все оси и рамка вокруг графика.

Затем формируем изолинии, обратившись к функции contour, также устанавливаем углы обзора наблюдателя, подписи координатных осей, число формируемых изолиний 10 и значения массива flag [1,1,4]: 1 - режим вывода изолиний на отдельно построенный план, который задается тем же уравнением, что и поверхность (Z = sin(x) · cos(y)), 1 - границы области построения графики определяются вручную, 4 - выводятся все оси и рамка вокруг графика. Число −5 устанавливает положение горизонтальной плоскости с изолиниями 5 единиц ниже графика поверхности.

С помощью команды xtitle выведем подпись для графика.

Листинг 6.15. Построение поверхности Z = sin(x) · cos(y) (функция plot3d) и вывод ее изолиний (функция contour) в одном графическом окне командой rect

t=%pi*(-10:10)/10;

deff(’[z]=Surf(x,y)’,’z=sin(x)*cos(y)’);

rect=[-%pi,%pi,-%pi,%pi,-5,1];

z=feval(t,t,Surf);

plot3d(t,t,z,35,45,’X@Y@Z’,[2,1,4],rect);

contour(t,t,z,10,35,45,’X@Y@Z’,[1,1,4],rect, -5);

xtitle(’plot3d and contour’);

Задача 6.16. Совместить график поверхности Z = sin(x) · cos(y) с ее изолиниями.

Листинг 6.16. Пример совмещения графика поверхности с ее изолиниями

t=%pi*(-10:10)/10; deff(’[z]=Surf(x,y)’,’z=sin(x)*cos(y)’);

rect=[-%pi,%pi,-%pi,%pi,-1,1];

 z=feval(t,t,Surf);

plot3d(t,t,z,35,45,’X@Y@Z’,[-19,1,4],rect);

contour(t,t,z+0.1,10,35,45,’X@Y@Z’,[0,1,4],rect); ...

xtitle(’plot3d and contour’);

Функция contourf

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

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

contourf (x,y,z,nz,[style,strf,leg,rect,nax])

Здесь x, y - массивы действительных чисел;

z - матрица действительных чисел - значения функции, описывающей поверхность Z(x, y);

nz - параметр, который устанавливает количество изолиний. Если nz – целое число, то в диапазоне между минимальным и максимальным значениями функции Z(x, y) через равные интервалы будут проведены nz изолиний.

Если же задать nz как массив, то изолинии будут проводиться через все указанные в этом массиве значения;

style - массив того же размера, что и nz - устанавливает цвет для каждого интервала уровней значений;

strf - строка, состоящая из трех чисел – «сsа».

Здесь с (Captions) устанавливает режим отображения подписей графика (см. табл.); s (Scaling) - режим масштабирования (см. табл);

a (Axes)_определяет положение осей графика (см. табл.).

leg - легенда графика, подпись каждой из кривых - символы, отделяемые знаком @. По умолчанию – « ».

rect - вектор [xmin, ymin, xmax, ymax], который определяет границы изменения x и y координат графической области окна;

Таблица. Значение параметра с (Captions) строки strf

Значение

Описание

0

нет подписей

1

отображаются подписи, заданные параметров leg

Таблица. Значение параметра s (Scaling) строки strf

Значение

Описание

0

масштабирование по умолчанию

1

устанавливается параметром rect

2

масштаб зависит от минимального и максимального значения входных данных

3

выводятся изометрические оси, исходя из значений параметра rect

4

выводятся изометрические оси, исходя из входных данных

5

расширение осей для наилучшего вида, исходя из значений параметра rect

6

расширение осей для наилучшего вида, исходя из входных данных

Таблица. Значение параметра a (Axes) строки strf

Значение

Описание

0

Нет осей

1

выводятся оси, ось Y слева

2

выводится рамка вокруг графика без делений

3

выводятся оси, ось Y справа

4

оси центрируются в графической области окна

5

оси выводятся таким образом, чтобы они пересекались в точке (0; 0)

Nax - это массив из четырех значений [nx, Nx, ny, Ny], определяющий число основных и промежуточных делений координатных осей графика. Здесь Nx (Ny) - число основных делений c подписями под осью X (Y );

nx (ny) - число промежуточных делений.

Задача 6.17. Построить изображение поверхности Z = sin(x) · cos(y) с помощью функции contourf.

contourf(1:10,1:10,rand(10,10),5,1:5,"011"," ",[0,0,11,11])

function z=peaks(x, y)

x1=x(:).*.ones(1,size(y,'*'));

y1=y(:)'.*.ones(size(x,'*'),1);

z =  (3*(1-x1).^2).*exp(-(x1.^2) - (y1+1).^2) ... 

  - 10*(x1/5 - x1.^3 - y1.^5).*exp(-x1.^2-y1.^2) ... 

  - 1/3*exp(-(x1+1).^2 - y1.^2) 

endfunction

function z=peakit()

x=-4:0.1:4;y=x;z=peaks(x,y);

endfunction

z=peakit();

levels=[-6:-1,-logspace(-5,0,10),logspace(-5,0,10),1:8];

m=size(levels,'*');

n = fix(3/8*m);

r = [(1:n)'/n; ones(m-n,1)];

g = [zeros(n,1); (1:n)'/n; ones(m-2*n,1)];

b = [zeros(2*n,1); (1:m-2*n)'/(m-2*n)];

h = [r g b];

xset('colormap',h);

xset('fpf',' ');

clf();

contourf([],[],z,[-6:-1,-logspace(-5,0,10),logspace(-5,0,10),1:8],0*ones(1,m))

xset('fpf','');

clf();

contourf([],[],z,[-6:-1,-logspace(-5,0,10),logspace(-5,0,10),1:8]);

Функция hist3d

Для построения трехмерных гистограмм в Scilab используется функция hist3d:

hist3d(f,[theta,alpha,leg,flag,ebox])

Здесь f - матрица (m : n), задающая гистограмму f(i, j) = F(x(i), y(j)).

Параметры theta,alpha,leg,flag,ebox управляют теми же свойствами, что и у функции plot3d.

Задача 6.18. Построить трехмерную гистограмму.

Для формирования матрицы входных данных воспользуемся командой rand.

Напомним, чтобы создать матрицу размером (m,n), необходимо использовать конструкцию rand(m,n).

Листинг 6.18. Построение трехмерной гистограммы при помощи функции hist3d

hist3d(9.7*rand(10,10),20,35);

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

Scilab

Рассмотрим приемы построения некоторых нестандартных трехмерных графиков средствами Scilab.

Прежде всего, научимся вырезать из графиков «ненужные» части.

Задача 6.19. Построить поверхность Z = sin(t) · cos(t), вырезать из графика области, где |Z| > 0.5.

 

Сформируем массив значений параметра t, вычислим значения функции

Z = sin(t) · cos(t) и запишем их в массив Z.

В массив Z1 при помощи команды find запишем индексы тех элементов массива Z, чье модальное значение больше 0,5.

Далее мы будем использовать функцию %inf. Она предназначена для определения бесконечных элементов массива, поэтому запись z(z1)=%inf*z1 приведет к тому, что %inf*z1 объявит те элементы массива Z, чьи индексы содержатся в массиве Z1, бесконечным величинами.

При формировании прямоугольной сетки для построения графика в узлах сетки, смежных с бесконечными элементами массива Z, все значения, разумеется, будут равны бесконечности, и функция plot3d1 зальет соответствующие ячейки белым цветом. Таким образом, нам удастся создать эффект вырезания целых областей поверхности Z = sin(t) · cos(t).

Листинг 6.19. Пример «вырезания» из поверхности заданной области

t=linspace(-%pi,%pi,40);

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

z1=find(abs(z)>0.5);

z(z1)=%inf*z1;

plot3d1(t,t,z);

Задача 6.20. Построение полой сферы.

Прежде всего, при помощи команды deff создадим функцию sph, которая задает сферу тремя параметрическими уравнениями X, Y , Z.

deff(’[x,y,z]=sph(alp,tet)’,[’x=r*cos(alp).*cos(tet)+...

orig(1)*ones(tet)’;

’y=r*cos(alp).*sin(tet)+orig(2)*ones(tet);

’z=r*sin(alp)+orig(3)*ones(tet)’]);

Далее задаем значения параметра r, вектора-строки orig, массивов x и y.

Уже известным нам способом, при помощи функции %inf, объявляем бесконечными величинами элементы массива x с индексами (5 : 8) и (30 : 35).

Таким образом мы добьемся того, что в графическое окно будет выведена сфера, имеющая две «шляпки», сверху и снизу. Под ними элементы, объявленные бесконечными, образуют два «окошка», через которые можно увидеть полость внутри сферы.

Саму же сферу построим при помощи команды eval3dp и функции plot3d1,

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

Листинг 6.20. Построение сферы с полостью внутри и «срезанными» полюсами

deff(’[x,y,z]=sph(alp,tet)’,[’x=r*cos(alp).*cos(tet)+orig(1)*...

ones(tet)’;

’y=r*cos(alp).*sin(tet)+orig(2)*ones(tet)’;

’z=r*sin(alp)+orig(3)*ones(tet)’]);

r=1;orig=[0 0 0];

x=linspace(-%pi/2,%pi/2,40);

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

x(5:8)=%inf*ones(5:8);

x(30:35)=%inf*ones(30:35);

[x1,y1,z1]=eval3dp(sph,x,y);

plot3d1(x1,y1,z1,35,15);

Задача 6.21. Построение ракушкообразного графика. Такой график можно задать следующей системой уравнений:

Зададим массивы значений параметров u, v. Вычислим значения функций x, y, z. Обратившись к функции plot3d2, получим график

Листинг 6.21. Построение ракушкообразного графика

u = linspace(0,2*%pi,40);

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

x= (cos(u).*u)’*(1+cos(v)/2);

y= (u/2)’*sin(v);

z= (sin(u).*u)’*(1+cos(v)/2);

plot3d2(x,y,z);

Задача 6.22. Построение ленты Мебиуса при помощи функции plot3d2.

Лента Мебиуса - простейшая односторонняя поверхность с краем. Попасть из одной точки этой поверхности в любую другую можно, не пересекая края. В общем параметрическом виде лента Мебиуса может быть представлена системой уравнений:

Здесь u принадлежит интервалу [0; 2π], а v - [−1; 1]. Эти формулы задают ленту Мебиуса ширины 1, чей центральный круг имеет радиус 1, лежит в плоскости xy с центром в (0, 0, 0). Параметр u пробегает вдоль ленты, в то время как v задает расстояние от края.

Листинг 6.22. Построение ленты Мебиуса при помощи функции plot3d2

t=linspace(-1,1,20)’;

x=linspace(0,%pi,40);

factor=2+t*cos(x);

X=factor*diag(cos(2*x));

Y=factor*diag(sin(2*x));

Z=t*sin(x);

plot3d2(X,Y,Z);

Задача 6.23. Построение тора с узкой и широкой стороной при помощи функции plot3d2.

Тор - поверхность вращения в форме бублика, получаемая вращением окружности вокруг оси, лежащей в плоскости окружности и не пересекающей ее. Уравнение тора может быть задано параметрически в виде:

Здесь u, v принадлежат интервалу [0; 2π], а также R -  расстояние от центра окружности до оси вращения, r - радиус окружности.

Листинг 6.23. Построение тора с узкой и широкой стороной при помощи функции plot3d2

x=linspace(0,2*%pi,40);

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

fact=1.5+cos(y)*(cos(x)/2+0.6);

X=fact*diag(cos(x));

Y=fact*diag(sin(x));

Z=sin(y)*(cos(x)/2+0.6);

plot3d2(X,Y,Z,);

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

Листинг 6.24. Построение деформирования тора при помощи функции plot3d2

x=linspace(0,2*%pi,40);

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

factor=1.5+cos(y);

X=factor*cos(x);

Y=factor*sin(x);

Z=sin(y)*ones(x)+ ones(y)*cos(2*x);

plot3d2(X,Y,Z);


 

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

73940. УПРАВЛİННЯ АКТИВАМИ 98.5 KB
  Розглядаючи наведену формулу необхідно визначити період який потрібен для перетворення виробничих запасів дебіторської і кредиторської заборгованості в готівку.з – середній період обороту дебіторської заборгованості...
73941. ВАРТİСТЬ İ ОПТИМİЗАЦİЯ СТРУКТУРИ КАПİТАЛУ 364 KB
  Первісне значення терміна ”капітал” (від лат. capitalis) означає головний, основний. Пізніше у німецькій та французькій мовах цим терміном стали позначати основне майно або основну грошову суму.
73942. УПРАВЛIННЯ IНВЕСТИЦIЯМИ 151.5 KB
  Економічна сутність інвестицій та їх класифікація Ефективне управління інвестиціями обумовлює необхідність: з’ясування сутності інвестицій та можливості їх реалізації в різних формах; розробки і реалізації інвестиційної стратегії як головної мети інвестиційної діяльності; урахування класифікації інвестицій; вибору та оцінки ефективності інвестиційних проектів підприємств; забезпечення оптимального співвідношення джерел фінансування в реальних капітальних інвестицій; оцінювання ефективності фінансових інвестицій та формування оптимального...
73943. УПРАВЛİННЯ ФİНАНСОВИМИ РИЗИКАМИ 187 KB
  Ризики у фінансовогосподарській діяльності суб’єктів господарювання Ефективне забезпечення моделі управління фінансовими ризиками передбачає зокрема вирішення таких проблемних питань: аналіз умов виникнення і формування комерційних ризиків та визначення факторів що зумовлюють їх абсолютну величину; класифікація комерційних ризиків та їх взаємозв’язок із фінансовогосподарською діяльністю суб’єкта господарювання; формулювання критеріїв прийняття управлінських фінансових рішень щодо господарських операцій які характеризуються наявністю...
73944. ТИПОЛОГИЯ ЛИТЕРАТУРНОГО СУБЪЕКТА 77 KB
  В эпосе герой еще всецело находится в зависимости от божества: он не может действовать самостоятельно он по словам Б. Герой обладает теми же качествами что и боги но он жертва тех свойств носителем которых является. Тематическая близость обнаруживается между Бедными людьми и повестью Белые ночи герой которой дает себе уничижительную характеристику: Мечтатель не человек а знаете какоето существо среднего рода.
73945. ШКОЛЫ И МЕТОДЫ СОВРЕМЕННОГО ЛИТЕРАТУРОВЕДЕНИЯ 148.5 KB
  Гадамер утверждает что смысловые потенции текста далеко выходят за пределы того что имел в виду его создатель. Суть интерпретации для Хирша как и деконструктивистов состоит в том чтобы из знаковой системы текста создать нечто большее чем его физическое бытие создать его значение. В повседневной практике интерпретации Хирш видит подтверждение онтологического равенства всех возможных значений интерпретируемого текста.
73946. Финансы, конспект лекций 2.73 MB
  Исследование системы финансовых экономических отношений возникающих по поводу образования и использования фондов денежных средств сложный процесс. Finnci1 в переводе означают наличность доход ; в широком смысле денежные средства денежные обороты . Главное назначение финансов состоит в том чтобы путем создания денежных доходов и фондов обеспечить не только потребности государства и предприятий в денежных средствах но и контроль за расходованием финансовых ресурсов. Национальный доход страны равен валовому общественному продукту...
73947. Разрывные нарушения. Трещиноватость, кливаж 41.5 KB
  Понятия о согласном и несогласном залегании осадочных пород. Они выражаются в нарушении сплошности горных пород т.Разрывы со смещением горных пород. Часто сместитель может представлять целую зону раздробленных пород; иметь выпуклую или вогнутую форму быть волнистыми.