Sum of matrix times scalars

1 visualización (últimos 30 días)
Mohammed Kagalwala
Mohammed Kagalwala el 21 de Oct. de 2019
Editada: Mohammed Kagalwala el 21 de Oct. de 2019
Hi,
I have a series of 3x3 matrices T1, T2, T3 ... TN. In addition, I have a series of scalars a1, a2, ... aN. I wish to perform the following sum WITHOUT the use of a for-loop. T1*a1 + T2*a2 + .... TN*aN. I have solved this using a for loop currently, but wish to take advantage of Matlabs superior data structures i.e. 3D arrays, cells, etc.
Thank you for your help !
  3 comentarios
Mohammed Kagalwala
Mohammed Kagalwala el 21 de Oct. de 2019
They are in different individual variable names however no reason they can't be grouped in a cell or 3D matrix

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 21 de Oct. de 2019
Editada: Matt J el 21 de Oct. de 2019
Hold your 3x3 matrices in a 3x3xN array caled T and your scalars in an Nx1 vector called a and do,
result=reshape(T,9,[])*a(:);
result=reshape(result,3,3);
  2 comentarios
Guillaume
Guillaume el 21 de Oct. de 2019
Note that if a is a Nx1 vector, then a(:) and a are the same.
Another option is:
result = sum(T .* reshape(a, 1, 1, []), 3);
Mohammed Kagalwala
Mohammed Kagalwala el 21 de Oct. de 2019
Editada: Mohammed Kagalwala el 21 de Oct. de 2019
Thank you for your help ! The reshape solutions both work, however on average Matt's solution is faster ( I tested with N = 10000). My other method was coming up with an S1 and S2 such that T*S1*q*S2 = to the 3x3 sum I want. Here T is 3x3N, and q is Nx1. I'm going to try and extend the reshape idea to the following double sum, , where = 3x3 matrix.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Linear Algebra en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by