2014-08-20 2 views
0

У меня есть матрица, как этотумножить матрицу с вектором

Table1 = [A B ; C D ; E F] 

и вектор:

V = [a ; b ; c] 

Как получить умножение второго столбца матрицы M, чтобы получить ответ, как показано ниже?

ans =[aB ; bD; cF] 

В настоящее время я делаю,

Table1; 
d=length(Table1(:,2)); 
for i = 1:d 
    ans(i,:) = sum(Table1(i,2)) .* V'; 
end 

Единственным способом, которым я могу думать буду использовать петлю, но я не мог получить ответ, как я хочу. Может ли кто-нибудь мне помочь?

ответ

5

Hi Если вы действительно хотите ans =[aB ; bD; cF]. Вы ищете элементное произведение второго столбца с вектором.

Это было бы:

product = Table1(:,2).*V; 

или если вы хотите такой же порядок (как правило, это не имеет значения, но кто знает)

product = V.*Table1(:,2); 

Table1 (:, 2) адресов второй столбец , А точка (.) Означает элементную.

В противном случае MATLAB может обрабатывать умножение матрицы и другие так же, как вы пишете их на бумаге.

+0

+1 но ... "нормально" ?? –

+0

@ LuisMendo Ну математически вы могли бы использовать sth как градиент (d/dx, d/dy, d/dz). Поэтому, умножив его сначала, вы получите (d/dx x, d/dy y, d/dz z) или умножив его на второй, который у вас будет (x d/dx, y d/dy, z d/dz). Это сильно изменится, потому что вам придется делать дополнительный вывод. Потому что я физик, я должен учитывать это так: D –

+0

О, я вижу. Я всегда считал, что «градиент после/до» вещь как трюк нотации, а не настоящий продукт, но вы правы. В этом случае, возможно, '. *' Может быть перегружен во что-то некоммутативное –

0

Если вы знаете, что вы хотите, чтобы умножить второе число каждого вектора

Table1 = [A B ; C D ; E F] 

вы можете использовать команду downsample

newTable=downsample(Table1, n) % with n=2 or the step you want 

newTable= [B ; D; F] 
V = [a ; b ; c] 

, то вы можете использовать умножаются векторы, чтобы получить результаты

x = newTable.*V 
x =[B*a; D*b ; F*c] 
+0

Вы можете просто просто использовать 'Table1 (:, n)' вместо использования 'downsample()'. Также он не хочет умножать константу на каждое значение, кроме вектора. поэтому ваш результат 'x' неверен, ваш код (если a = V в OP) по-прежнему прав (кроме двойного использования a) –

+0

@Minion вы правы, я его не замечал, я изменю ответ – George

+0

и у вас есть опечатка в newTable (2-й блок кода) у вас есть 'D, F', но нужно' D; f' –

Смежные вопросы