Поверхностный график данных x, y, z с различным размером z MATLAB

У меня есть следующие данные:

M = 1000; % [seconds]
D = 50; % number of masses
t = [0:dt:M];
y = randn(length(t),1); % [unitless] amplitude
z = [1:1:2*D]; % [unitless] number of eigenfrequencies
data = [t,y,z];

Я хотел бы создать поверхностный график data, где ось X — это t или время, ось Y — это y или амплитуда, а ось Z — это число собственных частот. Данные x и y имеют размерность t, но данные z имеют размерность 2D. Можно ли построить график данных x, y, z, используя данные z с размерностью, отличной от данных x и y в MATLAB, используя surf() или plot3()?

Обновлено: Это был плохо сформулированный вопрос. Идея заключалась в том, чтобы построить график данных x,y,z с использованием разных измерений, что просто невозможно.

Вам нужно будет установить связь между вашими параметрами. Для каждой комбинации (t,y) вам понадобится значение z, чтобы создать поверхность. Если у вас нет функции, определяющей это отношение, f(t,y) = z, вы не сможете этого сделать. Другими словами, с точки зрения MATLAB, вам понадобится столько же точек в z, сколько у вас есть в t и y, иначе вы допустите ошибку. Показательный пример: data невозможно создать в вашем текущем коде, так как z содержит меньше элементов, чем t или y. Чтобы сделать это, вам нужно будет найти больше элементов z.

Adriaan 07.05.2024 07:24

И если вам нужна поверхность, ваши входные данные должны быть матрицами. Вы можете легко преобразовать t и y в матрицы, используя сетку, но (как указано выше) вам придется найти значение z в каждой паре (t,y).

magnesium 07.05.2024 07:39

Я думаю, что вопрос неправильно или неправильно сформулирован. Есть ли опечатки в коде или описании? Чего именно вы хотите? Технически возможно сделать то, что вы просили (используя [a,b,c] = meshgrid(t,y,z); figure; plot3(a(:),b(:),c(:),'.'); ), но я не уверен, что это поможет..

magnesium 07.05.2024 07:52

Прямой ответ на ваш вопрос (Можно ли построить график данных x, y, z, используя данные z с размерностью, отличной от данных x и y), будет «Нет». x, y и z должны иметь одинаковое количество компонентов для создания графика. Это немного похоже на XY-проблему. Возможно, будет полезно, если вы объясните немного больше, для чего предназначен этот код и почему вы считаете, что описанный график является хорошим визуальным представлением ваших данных.

Adriaan 07.05.2024 09:53

Я не понимаю, какой результат вы хотите получить. Как ваши значения z связаны со значениями (x,y)? На поверхности у вас есть определенная высота (значение z) для каждой комбинации координат (x,y). Но ваши данные этого не делают, поэтому они не представляют собой поверхность.

Cris Luengo 07.05.2024 20:06

Это был плохо сформулированный вопрос. Идея заключалась в том, чтобы построить график данных x,y,z с использованием разных измерений, что просто невозможно.

Jonathan Frutschy 08.05.2024 06:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, вы можете использовать plot3, чтобы построить график. Чтобы устранить несоответствие длины, обратите внимание: вам просто нужно добавить один элемент к z, чтобы его длина была одинаковой с t и y.

dt = 1;
M = 100; % [seconds]
D = 50; % number of masses
t = [0:dt:M];
y = randn(length(t),1); % [unitless] amplitude
z = [1:1:2*D+1]; % [unitless] number of eigenfrequencies

figure
plot3(t,y,z,'LineWidth', 2);
xlabel('t')
ylabel('y')
zlabel('z')

Результат:

Если вы измените измерения t и y, вам необходимо соответствующим образом обновить измерение z. Как я понимаю из вашего вопроса, вы хотите, чтобы z было что-то от 1 до 2*D (в два раза больше количества масс). Допустим, вы хотите изменить продолжительность времени на 1000, вы можете использовать linspace, чтобы выбрать правильный размер шага для z.

M = 1000; % [seconds]
D = 50; % number of masses
dt = 1;
t = [0:dt:M];
y = randn(length(t),1); % [unitless] amplitude
%z = [1:1:2*D]; % [unitless] number of eigenfrequencies
z = linspace(1,2*D,length(t));

Результат:

По чистой случайности M оказывается равным 2D. Что бы вы сделали, если бы М было, скажем, 1000? (См. отредактированный вопрос)

Jonathan Frutschy 07.05.2024 07:11

@Jonathan Frutschy Тогда вам нужно изменить его на правильное измерение, иначе вы не сможете его построить.

Ka Wa Yip 07.05.2024 16:33

@JonathanFrutschy Я обновил ответ на ваш запрос. Дайте мне знать, если вы этого хотите.

Ka Wa Yip 07.05.2024 17:02

Да, это лучшее, о чем я мог мечтать (см. редактирование исходного сообщения)

Jonathan Frutschy 08.05.2024 06:51

Другие вопросы по теме