Скалярно-векторное умножение с сеткой (Matlab) - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть такое выражение, как s = aU + bV, где a и b - скаляры, а U и V 3-компонентные векторы.Вывод s является явно 3-компонентным вектором.Давайте предположим, что я хочу построить первый компонент s и выяснить, как это меняется при изменении a и b.

. Для построения графика я должен использовать прибой, который принимает матрицы дляпеременные a b.Поэтому я пытаюсь создать матрицы с meshgrid:

A=0:10;
B=1:10;
[a,b]=meshgrid(A,B);

U=[1,1,0];
V=[1,0,1];

s = a*U + b*V;

Это явно не работает, потому что ни матричный продукт, ни поэлементный продукт в этом случае не определены.Как на самом деле сделать матрицы, которые представляют сетку a b, умножая поэлементно векторы U и V?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вы можете сделать это, используя 3D-матрицу:

[A,B] = meshgrid(0:10,1:10);
U(1,1,:) = [1,1,0];
V(1,1,:) = [1,0,1];
s = A.*U + B.*V;
% s is now a NxMx3 matrix, where N = length(A) and M = length(B)

% We can plot how s varies with a and b as follows
surf(A,B,s(:,:,1)); % first component
surf(A,B,s(:,:,2)); % second component
surf(A,B,s(:,:,3)); % third component
0 голосов
/ 20 февраля 2019

Вы хотите использовать поэлементное умножение (.*), потому что вы по-прежнему хотите обрабатывать a и b как скаляры (т.е. использовать каждый элемент по отдельности).

Вы можете сделать 3Doutput, где каждый 2D-срез соответствует вашему meshgrid выводу, с одним срезом на компонент U и V.Поэтому в этом примере получаем матрицу 10*11*3.

. Для этого просто reshape векторов U и V будет иметь размер 1*1*3

U = reshape( [1,1,0], 1, 1, [] ); % Or equivalently U(1,1,:) = [1,1,0]
V = reshape( [1,0,1], 1, 1, [] ); % Or equivalently U(1,1,:) = [1,0,1]

Затем выполните поэлементное умножение

s = a.*U + b.*V;

Примечание: перед MATLAB R2016b (когда было введено неявное расширение) вам нужно будет использовать bsxfun, чтобы получить эквивалент:

s = bsxfun( @times, a, U ) + bsxfun( @times, b, V );

Затем вы можете построить i-й элемент S, изменяющийся с A и B, построив s(:,:,i).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...