Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/64: Рейтинг темы: голосов - 64, средняя оценка - 5.00
 Аватар для jannne
137 / 137 / 21
Регистрация: 03.07.2012
Сообщений: 296

График функции трех переменных

28.05.2014, 18:00. Показов 12957. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Имеется некоторая функция трех координат, допустим F(x,y,z)
(она имеется в виде набора матриц Fz(x,y) но это не принципиально ).
Хочется научиться эту функцию показывать на красивой картинке, типа такой: (см рис)
Возможно это сделать в матлабе? или в какой еще программе?
Спасибо заранее.
Миниатюры
График функции трех переменных  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2014, 18:00
Ответы с готовыми решениями:

Построить график функции трех переменных
Добрый день! Нужно построить 3D график функции потенциала v(x, y, z). Вроде в коде ошибок нет, но график не выводится, не понимаю...

Анализ функции от трех переменных
Здравствуйте! Мне необходимо проанализировать функцию от трех переменных вида f(x,y,z). Можно ли ее как-то визуализировать, например,...

График из функции 3-х переменных
Здравствуйте! Мне не понятно как строить графики из 3-х переменных в матлабе. Функция следующая: F(x,y,z)=x^2+y^2+z^2+xy+xz+yz+x+y+z. В...

14
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
30.05.2014, 10:05
Лучший ответ Сообщение было отмечено jannne как решение

Решение

увы, такие красивые графики я не разобрался, как строить, но вот кое-что:
Matlab M
1
2
3
4
5
6
Q = flow; % какой-то трехмерный архив
 
h = contourslice(Q,[],[],[1:size(Q,3)]);
grid on
set(h,'facealpha',0.05) % Volume Visualization 
shading interp


и линиями:
Matlab M
1
2
3
4
5
Q = flow; % какой-то трехмерный архив
 
contourslice(Q,[],[],[1:size(Q,3)]);
grid on
view(20,50)
1
 Аватар для jannne
137 / 137 / 21
Регистрация: 03.07.2012
Сообщений: 296
30.05.2014, 14:35  [ТС]
Спасибо!! Очень симпатично!
А что означают три последних аргумента в contourslice?
и сразу следующий вопрос: как создать трехмерный массив из набора двумерных матриц?
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
30.05.2014, 15:15
Цитата Сообщение от jannne Посмотреть сообщение
А что означают три последних аргумента в contourslice?
это перечень слоев
Цитата Сообщение от jannne Посмотреть сообщение
как создать трехмерный массив из набора двумерных матриц?
в цикле
все зависит в каком виде эти матрицы записаны
1
 Аватар для jannne
137 / 137 / 21
Регистрация: 03.07.2012
Сообщений: 296
30.05.2014, 17:45  [ТС]
1.Допустим, есть две матрицы А1=[1 2; 3 4] и A2=[5 6; 7 8], как из них слепить трехмерную?
2. У меня не получается такая красивая картинка, как у Вас первая. Ваш код у меня выдает такую картинку:
Миниатюры
График функции трех переменных  
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.06.2014, 18:27
1.
Matlab M
1
2
3
for i = 1:2
  eval(['M(:,:,',num2str(i),') = A', num2str(i),';'] );
end
2. ее нужно повертеть или выставить view(50,20) например
1
 Аватар для jannne
137 / 137 / 21
Регистрация: 03.07.2012
Сообщений: 296
02.06.2014, 13:32  [ТС]
1. Спасибо!
2. если повертеть , то получается вот как на скриншоте, а мне все-таки очень хочется чтоб не линиями, а как у вас на первой картинке..
Миниатюры
График функции трех переменных  
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
02.06.2014, 13:56
jannne, ой! в третьей строке должно быть не contourslice, а просто slice!
Matlab M
1
2
3
4
5
6
Q = flow; % какой-то трехмерный архив
 
h = slice(Q,[],[],[1:size(Q,3)]);
grid on
set(h,'facealpha',0.05) % Volume Visualization 
shading interp
Добавлено через 2 минуты
*не проверял, но чувствую, что если в матрице будет NaN то эти точки будут полностью прозрачными...
да, так и есть:
Matlab M
1
2
3
4
5
6
7
Q = flow; % какой-то трехмерный архив
 
Q(Q>-2) = NaN;
h = slice(Q,[1:size(Q,1)],[1:size(Q,2)],[1:size(Q,3)]);
grid on
set(h,'facealpha',0.05) % Volume Visualization 
shading interp
1
 Аватар для jannne
137 / 137 / 21
Регистрация: 03.07.2012
Сообщений: 296
02.06.2014, 14:03  [ТС]
Зосима, Спасибо!!! Вот теперь графиков понастрою
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
06.06.2014, 16:17
гляди, что умельцы вытворяют
http://www.mathworks.com/help/... lanes.html
1
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 2
18.09.2014, 01:35
Доброй ночи! Решил написать в этой же теме. Необходимо построить график 3D. Что-то типа эллипсоида получается. Имеются координаты, записанные в 3 таблицы. Я строил из эллипсов, организовав циклы. Когда это было на оси ОХ, все более менее презентабельно. Теперь необходимо сделать тоже самое на угле 70гр к оси ОХ. Сами контуры я сделал, а вот как соединить их эллипсами не могу. Ниже приложил код. И второй вопрос, как организовать вывод в равном масштабе. А то явно видно, что по Х шаг в 2 раза длиннее, чем по Z, хотя значения одни и те же. Или это такая особенность 3D в матлабе? Заранее спасибо.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
clear
cls
N=100;
ag = [-0.05 -0.69 -1.35 -2.16 -2.89 -3.76 -4.46 -5.63   -5.88   -5.98   -6.075  -6.15   -6.225  -6.35   -6.4    -6.45   -6.5 -6.575 -6.605  -6.62   -6.645  -6.677  -6.67   -6.658  -6.645  -6.618  -6.58   -6.543  -6.458  -6.41   -6.35   -6.29   -6.215  -6.14   -6.048  -5.94   -5.825  -5.7    -5.55   -5.4    -5.235  -5.06   -4.897  -4.72   -4.505  -4.28   -4.02   -3.71   -3.37   -3  -2.585  -2.03   -1.22   0.26];
av = [-0.05 -0.18  -0.44  -0.77 -1.24 -1.875    -2.072  -2.25   -2.402  -2.555  -2.692  -2.83   -3.18   -3.58   -3.802  -4.015  -4.22   -4.41   -4.595  -4.77   -4.93   -5.05   -5.18   -5.28   -5.372  -5.44   -5.513  -5.57   -5.612  -5.64   -5.65   -5.645  -5.625  -5.59   -5.56   -5.505  -5.45   -5.38   -5.315  -5.23   -5.138  -5  -4.845  -4.665  -4.463  -4.24   -3.993  -3.7    -3.363  -3  -2.53   -1.95   -1.22   -0.16];
xg = [-6.63 -6.33   -6.03   -5.73   -5.43   -5.13   -4.83   -4.53   -4.23   -3.93   -3.63   -3.33   -3.03   -2.73   -2.43   -2.13   -1.83   -1.53   -1.23   -0.93   -0.63   -0.33   -0.03   0.27    0.57    0.87    1.17    1.47    1.77    2.07    2.37    2.67    2.97    3.27    3.57    3.87    4.17    4.47    4.77    5.07    5.37    5.67    5.97    6.27    6.57    6.87    7.17    7.47    7.77    8.07    8.37    8.67    8.97    9.27];
xg=xg+7.32;
c=find(xg==max(xg));
for K=1:c
x=xg(K);
start=-ag(K); fin=ag(K);
y=start:(fin-start)/N:fin;
z1=-sqrt((1-y.^2/ag(K)^2)*av(K)^2);
z2=-z1;
plot3(x*ones(N+1,1)y,z1,'m', 'LineWidth',1), hold on
plot3(x*ones(N+1,1)y,z2,'m', 'LineWidth',1), hold on
end
 
%горизонтальный контур
x=xg;
y1=ag;
y2=-ag;
z=0*x;
plot3(x,y1,z,'k', 'LineWidth',2);
plot3(x,y2,z,'k', 'LineWidth',2);
 
%вертикальный контур
x=xg;
y1=av;
y2=-av;
z=0*x;
plot3(x,y1,z,'k', 'LineWidth',2);
plot3(x,y2,z,'k', 'LineWidth',2);
 
 
c70=cos(70*pi/180);
s70=sin(70*pi/180);
t70=tan(70*pi/180);
 
%горизонтальный контур под углом 70гр к горизонту
xg=xg*c70;
x=xg;
y1=-ag;
y2=ag;
z=xg*t70;
plot3(x,y1,z,'b', 'LineWidth',2);
plot3(x,y2,z,'b', 'LineWidth',2);
 
%вертикальный контур под углом 70гр к горизонту
z1=xg*t70+av*c70;
xg=xg-av*s70;
x=xg;
y=x*0;
plot3(x,y,z1,'g', 'LineWidth',2);
x=xg+2*av*s70;
z2=z1-2*av*c70;
plot3(x,y,z2,'g', 'LineWidth',2);
grid on
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
18.09.2014, 09:59
По первому вопросу пока не могу сказать ничего конкретного, но советую глянуть эту тему:
Как повернуть поверхность относительно оси y
а также функцию rotate (описание)

По второму вопросу тебе поможет строчечка в самом конце:
axis equal


Добавлено через 18 минут
*я бы чуток упростил первую часть:
Программка
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
clear, clc, cla
 
N=100;
ag = [-0.05 -0.69 -1.35 -2.16 -2.89 -3.76 -4.46 -5.63   -5.88   -5.98   -6.075  -6.15   -6.225  -6.35   -6.4    -6.45   -6.5 -6.575 -6.605  -6.62   -6.645  -6.677  -6.67   -6.658  -6.645  -6.618  -6.58   -6.543  -6.458  -6.41   -6.35   -6.29   -6.215  -6.14   -6.048  -5.94   -5.825  -5.7    -5.55   -5.4    -5.235  -5.06   -4.897  -4.72   -4.505  -4.28   -4.02   -3.71   -3.37   -3  -2.585  -2.03   -1.22   0.26];
av = [-0.05 -0.18  -0.44  -0.77 -1.24 -1.875    -2.072  -2.25   -2.402  -2.555  -2.692  -2.83   -3.18   -3.58   -3.802  -4.015  -4.22   -4.41   -4.595  -4.77   -4.93   -5.05   -5.18   -5.28   -5.372  -5.44   -5.513  -5.57   -5.612  -5.64   -5.65   -5.645  -5.625  -5.59   -5.56   -5.505  -5.45   -5.38   -5.315  -5.23   -5.138  -5  -4.845  -4.665  -4.463  -4.24   -3.993  -3.7    -3.363  -3  -2.53   -1.95   -1.22   -0.16];
xg = [-6.63 -6.33   -6.03   -5.73   -5.43   -5.13   -4.83   -4.53   -4.23   -3.93   -3.63   -3.33   -3.03   -2.73   -2.43   -2.13   -1.83   -1.53   -1.23   -0.93   -0.63   -0.33   -0.03   0.27    0.57    0.87    1.17    1.47    1.77    2.07    2.37    2.67    2.97    3.27    3.57    3.87    4.17    4.47    4.77    5.07    5.37    5.67    5.97    6.27    6.57    6.87    7.17    7.47    7.77    8.07    8.37    8.67    8.97    9.27];
xg=xg-min(xg);
 
hold on
t=linspace(0,360,N);
for i=1:length(xg)
    X(:,i)=xg(i)*ones(N,1);
    Y(:,i)=ag(i)*cosd(t);
    Z(:,i)=av(i)*sind(t);
end
plot3(X,Y,Z,'m', 'LineWidth',1)
 
%горизонтальный контур
plot3(xg,ag,zeros(size(xg)),'k', ...
    xg,-ag,zeros(size(xg)),'k', 'LineWidth',2);
 
%вертикальный контур
plot3(xg,zeros(size(xg)),av,'k', ...
    xg,zeros(size(xg)),-av,'k', 'LineWidth',2);
 
% здесь нужно сделать поворот
% %%%%%%%%%%%%%%%%%%%%%%%%%%%
 
view(30,20)
xlabel('x')
ylabel('y')
zlabel('z')
grid on
box on
axis equal
1
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
18.09.2014, 11:01
Короче, не удержался
Программка
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
clear, clc, cla
 
N=100;
ag = [-0.05 -0.69 -1.35 -2.16 -2.89 -3.76 -4.46 -5.63   -5.88   -5.98   -6.075  -6.15   -6.225  -6.35   -6.4    -6.45   -6.5 -6.575 -6.605  -6.62   -6.645  -6.677  -6.67   -6.658  -6.645  -6.618  -6.58   -6.543  -6.458  -6.41   -6.35   -6.29   -6.215  -6.14   -6.048  -5.94   -5.825  -5.7    -5.55   -5.4    -5.235  -5.06   -4.897  -4.72   -4.505  -4.28   -4.02   -3.71   -3.37   -3  -2.585  -2.03   -1.22   0.26];
av = [-0.05 -0.18  -0.44  -0.77 -1.24 -1.875    -2.072  -2.25   -2.402  -2.555  -2.692  -2.83   -3.18   -3.58   -3.802  -4.015  -4.22   -4.41   -4.595  -4.77   -4.93   -5.05   -5.18   -5.28   -5.372  -5.44   -5.513  -5.57   -5.612  -5.64   -5.65   -5.645  -5.625  -5.59   -5.56   -5.505  -5.45   -5.38   -5.315  -5.23   -5.138  -5  -4.845  -4.665  -4.463  -4.24   -3.993  -3.7    -3.363  -3  -2.53   -1.95   -1.22   -0.16];
xg = [-6.63 -6.33   -6.03   -5.73   -5.43   -5.13   -4.83   -4.53   -4.23   -3.93   -3.63   -3.33   -3.03   -2.73   -2.43   -2.13   -1.83   -1.53   -1.23   -0.93   -0.63   -0.33   -0.03   0.27    0.57    0.87    1.17    1.47    1.77    2.07    2.37    2.67    2.97    3.27    3.57    3.87    4.17    4.47    4.77    5.07    5.37    5.67    5.97    6.27    6.57    6.87    7.17    7.47    7.77    8.07    8.37    8.67    8.97    9.27];
xg=xg-min(xg);
 
hold on
t=linspace(0,360,N);
for i=1:length(xg)
    X(:,i)=xg(i)*ones(N,1);
    Y(:,i)=ag(i)*cosd(t);
    Z(:,i)=av(i)*sind(t);
end
plot3(X,Y,Z,'m', 'LineWidth',1)
 
%горизонтальный контур
a1 = [xg, xg(end:-1:1)];
b1 = [ag, -ag(end:-1:1)];
c1 = zeros(1,2*length(xg));
plot3(a1,b1,c1,'k', 'LineWidth',2);
 
%вертикальный контур
a2 = [xg, xg(end:-1:1)];
b2 = zeros(1,2*length(xg));
c2 = [av, -av(end:-1:1)];
plot3(a2,b2,c2,'k', 'LineWidth',2);
 
% здесь нужно сделать поворот
alfa = -70; % угол поворота
Xa = X*cosd(alfa) + Z*sind(alfa);
Ya = Y;
Za = Z*cosd(alfa) - X*sind(alfa);
plot3(Xa,Ya,Za,'r', 'LineWidth',1)
% рисуем контуры:
%горизонтальный контур
a11 = a1*cosd(alfa) + c1*sind(alfa);
b11 = b1;
c11 = c1*cosd(alfa) - a1*sind(alfa);
plot3(a11,b11,c11,'b', 'LineWidth',2);
 
%вертикальный контур
a22 = a2*cosd(alfa) + c2*sind(alfa);
b22 = b2;
c22 = c2*cosd(alfa) - a2*sind(alfa);
plot3(a22,b22,c22,'b', 'LineWidth',2);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%
view(30,20)
xlabel('x')
ylabel('y')
zlabel('z')
grid on
box on
axis equal

1
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 2
18.09.2014, 12:28
Красотища!! Премного благодарен.
0
0 / 0 / 0
Регистрация: 20.04.2016
Сообщений: 1
20.04.2016, 23:33
Зосима, Здравствуйте! Если вы ещё на этом форуме, подскажите пожалуйста! Есть файл с данными вида "х y z E(x,y,z)". Хочется получить картинку как у Вас здесь в первом сообщении. Я с матлабом вообще не дружу, так что найти ответа на вопрос найти не смогла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2016, 23:33
Помогаю со студенческими работами здесь

График функции 2-х переменных
Добрый день, помогите, пожлуйста, построить график функции f(x1,x2)=(x1^2+x2^2)/(x1^2+x2^2+1) и f(x1,x2)=-4*x1^2-2*x2^4+x1^8.

Температурное состояние трехмерного пространства. Визуализация функции трех переменных.
Здравствуйте! Я здесь первый раз. Если до этого обсуждалось этот вопрос, то извиняюсь! У меня такой вопрос: есть три массива координат x,...

Построение объемной фигуры по функции от трех переменных (Wiffle Cube)
Необходимо построить объемную фигуру - Wiffle Cube Wiffle cube задается уравнением (a=1/2.3, b=1/2): f(x,y,z) = 1 - 2 (x2 + y2 + z2)...

График функции двух переменных
помогите с задачами 1) x,y= график 3x2-2sin2(y)y2 >> x=; >> y=; >> z=(3*(x*x))-2*(sin*sin)*y*(y*y); ??? Error using ==>...

График функции двух переменных
Помогите построить график функции. Всю ночь просидела, не поняла как его делать, а завтра сдавать. :gsorry: u0=2; a=5740; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru