2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Поверхность в MATLAB
Сообщение23.02.2013, 01:18 
Аватара пользователя


12/05/12
604
Оттуда
Здравствуйте,уважаемые участники форума.
Предположим,что мне нужно построить поверхность. Данные заданы в трёх матрицах, соответственно,$X,Y,Z$,$\left(X,Y\right)$-вектор-строка и вектор-столбец. Каким оператором MATLAB нужно воспользоваться, чтобы построить поверхность $\left(X,Y,Z\right)$? Прошу не опускать,так как работаю в MATLAB только 2 недели.

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 02:39 


13/06/11
22
cool.phenon в сообщении #687163 писал(а):
Здравствуйте,уважаемые участники форума.
Предположим,что мне нужно построить поверхность. Данные заданы в трёх матрицах, соответственно,$X,Y,Z$,$\left(X,Y\right)$-вектор-строка и вектор-столбец. Каким оператором MATLAB нужно воспользоваться, чтобы построить поверхность $\left(X,Y,Z\right)$? Прошу не опускать,так как работаю в MATLAB только 2 недели.



Например,
Код:
mesh(X,Y,Z)
Ссылка на справку на mathworks

(Оффтоп)

Простите, но Вас в гугле "забанили"? У меня поиск занял 1 минуту :D Или я что-то не так понял?

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 02:47 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
Только если там векторы, а $Z$ - есть функция от двух векторов, то для mesh сперва нужно "распространить" векторы на матрицы. Короче, meshgrid.

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 11:38 
Аватара пользователя


12/05/12
604
Оттуда
Azunai
Нет,в гугле не забанили, просто все те результаты, которые я получил по запросу "поверхность в MATLAB" приводили к тому,что там предлагался либо $contour(X,Y,Z)$,либо $surface(X,Y,Z)$. Но ни одна из этих команд не помогла. Сейчас попробую с $meshgrid$
Nemiroff
Спасибо большое!

-- 23.02.2013, 10:48 --

Ничего не получилось. Возможно,я что-то делаю не так? Вот исходные данные :
$X$- вектор, в окне переменных числится как матрица размерности $1$ на $11$
$Y$- вектор, в окне переменных числится как матрица размерности $1$ на $51$
$Z$ - матрица, в окне переменных числится как матрица размерности $11$ на $51$
Код:
mesh(Xg,Yg,Ukt)
??? Error using ==> surface
Matrix dimensions must agree.

Error in ==> E:\MATLAB6p5\toolbox\matlab\graph3d\mesh.m
On line 93  ==>       hh = surface(x,y,z,'FaceColor',fc,'EdgeColor','flat', 'FaceLighting', 'none', 'EdgeLighting', 'flat');

С $meshgrid$ хуже, он распространил вектор $X$ и дублировал его $51$ раз.

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:14 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
Я вас не понял.
Вот смотрите, допустим у меня есть строка $X$ и строка $Y$, а я хочу построить $Z(x,y)=x^2+y^2$.
Во-первых, зададим переменные:
Код:
>> X=2:2:22;
>> Y=3:3:153;

Далее для mesh продублируем переменные на всю сетку, чтоб всё удобно считалось:
Код:
[x,y]=meshgrid(X,Y);

А затем на таких матрицах построим нашу функцию:
Код:
>> Z=x.^2+y.^2;

Всё, рисуем.
Код:
>> mesh(x,y,Z)

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:27 
Аватара пользователя


12/05/12
604
Оттуда
Nemiroff
Да,вы меня действительно не поняли. Я хочу построить поверхность по УЖЕ сформированным матрицам.
Код:
>> X=2:2:22;
>> Y=3:3:153;

Здесь вы их формируете. А у меня они уже давно были сформированы и находятся среди переменных в окне. Наверное, это отличие не существенное. Но далее
Код:
Z=x.^2+y.^2;

вы формируете матрицу, которая явно зависит от $X,Y$. В моём случае я не знаю, как моя матрица $Z$ зависит от $X,Y$. Если быть совсем точным - я решаю уравнение в частных производных с помощью разностной схемы.Здесь явно задать матрицу $Z$ я не могу (ну,могу,конечно, но нужно отработать схему).

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:32 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
cool.phenon в сообщении #687294 писал(а):
В моём случае я не знаю, как моя матрица $Z$ зависит от $X,Y$. Если быть совсем точным - я решаю уравнение в частных производных с помощью разностной схемы.Здесь явно задать матрицу $Z$ я не могу (ну,могу,конечно, но нужно отработать схему).

А что вы тогда хотите построить? Можете описать точно?

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:37 
Аватара пользователя


12/05/12
604
Оттуда
У меня есть начальные условия задачи Коши. Ну,пока что это - линейное уравнение 1 порядка. В схеме это - значения функции на нулевом уровне.(То есть,первый столбец матрицы $Z$.) С помощью разностных схем я нашёл все элементы матрицы. Теперь нужно это всё визуализировать.

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:43 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
Не, не в том смысле. У вас есть две строки $X$ и $Y$. Что вы хотите построить? Ваша матрица $Z$ - что у нее внутри, как она связана с графиком?

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:48 
Аватара пользователя


12/05/12
604
Оттуда
В матрице $Z$ на месте $(i,j)$ стоит элемент, который равен значению от функции в точке $(X(i),Y(j))$.А построить я хочу поверхность,как вы и показали в примере. Но ни одна из команд, которые указаны выше, не работает.

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:58 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
А что не так с:
Код:
[x,y]=meshgrid(X,Y);
mesh(x,y,Z)


К примеру, если написать
Код:
>> X=0.01:0.01:1;
>> Y=0.01:0.02:1;
>> Z=rand(50,100);
>> [x,y]=meshgrid(X,Y);
>> mesh(x,y,Z)

то выдается потрясающая рябь на квадрате со стороной 1.

Кстати, если матрица не вычисляется на основе $X$ и $Y$, можно не заморачиваться и писать mesh(X,Y,Z) без всяких meshgrid.

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 16:08 
Аватара пользователя


12/05/12
604
Оттуда
Код:
[x,y]=Meshgrid(Xg,Yg);
mesh(x,y,Ukt)
??? Error using ==> surface
Matrix dimensions must agree.

Error in ==> E:\MATLAB6p5\toolbox\matlab\graph3d\mesh.m
On line 93  ==>       hh = surface(x,y,z,'FaceColor',fc,'EdgeColor','flat', 'FaceLighting', 'none', 'EdgeLighting', 'flat');


Код:
mesh(Xg,Yg,Ukt)
??? Error using ==> surface
Matrix dimensions must agree.

Error in ==> E:\MATLAB6p5\toolbox\matlab\graph3d\mesh.m
On line 93  ==>       hh = surface(x,y,z,'FaceColor',fc,'EdgeColor','flat', 'FaceLighting', 'none', 'EdgeLighting', 'flat');

Хотя размеры согласовываются...

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 16:11 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
В MATLAB индексация по столбцам, поэтому тут некоторая специфика.
Вы не перепутали, mesh рисует вот так: $(X(j), Y(i), Z(i,j))$? Так что возможно вам нужно $X$ и $Y$ местами поменять или $Z$ транспонировать.

 Профиль  
                  
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 16:14 
Аватара пользователя


12/05/12
604
Оттуда
Всё,Nemiroff,спасибо! Я увидел отредактированное сообщение и поменял местами $X,Y$ - и всё получилось!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group