36867

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

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

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

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

Русский

2013-09-23

752 KB

10 чел.

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


 

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

45083. Память,мнестическая деятельность, сила памяти 49.5 KB
  Сила памяти зависит от: степени концентрации внимания на поступающую информацию эмоционального отношения к ней заинтересованности а также от: общего состояния человека степени тренированности характера психических процессов. расстройства памяти 2 Два вида фиксации информации: кратковременная память следы внешних раздражений удерживаются в памяти до тех пор пока существует источник сигналов а затем угасают долговременная информация сохраняется в памяти долгие годы. расстройства памяти...
45084. Классификация эмоций 46.5 KB
  Нарушения эмоциональной сферы 2 Классификация эмоций Настроение Нарушения эмоционального статуса высшие социальные Э проявляются в патриотизме товариществе дружбе в трудовой доблести в чувстве долга перед родиной обществом. Нарушения: депрессия эйфория дисфория слабодушие эмоциональная тупость. нарушения эмоциональной сферы 3 Депрессия выражается стойким угнетением настроения унынием тоской. нарушения эмоциональной сферы 4 Эйфория выражается благодушным блаженным...
45087. Расстройства интеллекта 36 KB
  Расстройства интеллекта 2 Нарушение интеллекта у больных длительно страдающих шизофренией наблюдается дефект интеллекта в первую очередь изменение качественной стороны психических процессов. расстройства интеллекта 3 Нарушение интеллекта при апато-абулическом синдроме Апатоабулический синдром характерно снижение интеллектуальной деятельности: больные для решения задач применяют лишь знания полученные до болезни на легкие вопросы отвечают правильно а со сложными не справляются не могут...
45088. Нарушения сознания 27 KB
  Самосознание в онтогенезе претерпевает сложные изменения: от осознания своего телесного соматического я до осознания своих сложных психических процессов в результате которых появляется способность решать задачи стоящие перед человеком в обществе. нарушения сознания 2 Симптомы расстроенного сознания К. Ясперс Часто у больных с тяжелыми соматическими нарушениями наблюдаются расстройства сознания.
45089. Синдромы и симптомы в психиатрии 184.5 KB
  Синдромы и симптомы в психиатрии 2 Малые и большие синдромы Синдромы могут быть малыми и большими. синдромы и симптомы в психиатрии 3 Клиническая картина синдромов Клиническая картина синдромов складывается из: позитивных расстройств галлюцинаторно-бредовые кататонические аффективные и ряд других и негативных расстройств эмоционально-волевое оскудение психопатизация личности слабоумие. Позитивные и негативные синдромы обычно проявляются в тесной взаимосвязи. синдромы и симптомы в психиатрии...