2014 dxdy logo

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

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




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

 
 
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 02:39 
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 
Только если там векторы, а $Z$ - есть функция от двух векторов, то для mesh сперва нужно "распространить" векторы на матрицы. Короче, meshgrid.

 
 
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 11:38 
Аватара пользователя
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 
Я вас не понял.
Вот смотрите, допустим у меня есть строка $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 
Аватара пользователя
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 
cool.phenon в сообщении #687294 писал(а):
В моём случае я не знаю, как моя матрица $Z$ зависит от $X,Y$. Если быть совсем точным - я решаю уравнение в частных производных с помощью разностной схемы.Здесь явно задать матрицу $Z$ я не могу (ну,могу,конечно, но нужно отработать схему).

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

 
 
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:37 
Аватара пользователя
У меня есть начальные условия задачи Коши. Ну,пока что это - линейное уравнение 1 порядка. В схеме это - значения функции на нулевом уровне.(То есть,первый столбец матрицы $Z$.) С помощью разностных схем я нашёл все элементы матрицы. Теперь нужно это всё визуализировать.

 
 
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:43 
Не, не в том смысле. У вас есть две строки $X$ и $Y$. Что вы хотите построить? Ваша матрица $Z$ - что у нее внутри, как она связана с графиком?

 
 
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:48 
Аватара пользователя
В матрице $Z$ на месте $(i,j)$ стоит элемент, который равен значению от функции в точке $(X(i),Y(j))$.А построить я хочу поверхность,как вы и показали в примере. Но ни одна из команд, которые указаны выше, не работает.

 
 
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 15:58 
А что не так с:
Код:
[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 
Аватара пользователя
Код:
[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 
В MATLAB индексация по столбцам, поэтому тут некоторая специфика.
Вы не перепутали, mesh рисует вот так: $(X(j), Y(i), Z(i,j))$? Так что возможно вам нужно $X$ и $Y$ местами поменять или $Z$ транспонировать.

 
 
 
 Re: Поверхность в MATLAB
Сообщение23.02.2013, 16:14 
Аватара пользователя
Всё,Nemiroff,спасибо! Я увидел отредактированное сообщение и поменял местами $X,Y$ - и всё получилось!

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group