substitute each element of a vector into a matrix without using loop

1 vue (au cours des 30 derniers jours)
Hi I want to substitute each element of vector1 into 'x' in matrix1 and store each matrix in an array without using a loop. Please tell me how.
vector1=[1:1:10];
matrix1=[4*x 5*x ; 4*x 2*x];
Thanks in advance.

Réponse acceptée

Jan
Jan le 19 Nov 2013
Like this?
vector = 1:1:10;
vector = reshape( vector, [1, 1, numel(vector)] );
one_vector = ones( 1, 1, numel(vector) );
matrix = [4 * vector, 5 * one_vector; 4 * one_vector, 2 * vector ];
  5 commentaires
AllKindsofMath AllKinds
AllKindsofMath AllKinds le 19 Nov 2013
Another question, I want to find the determinant of each matrix. So when I try det(matrix) it doesn't work, but with det(matrix(:,:,10)) for example it does. Can I apply 'det' to all elements of 'matrix'?
Jan
Jan le 20 Nov 2013
Not as far as I can see. You will probably have to iterate over the third dimension.

Connectez-vous pour commenter.

Plus de réponses (3)

Sean de Wolski
Sean de Wolski le 19 Nov 2013
So:
vector1=[1:1:10];
x = vector1;
matrix1=[4*x 5*x ; 4*x 2*x];
Or is x symbolic?
clear x;
syms x
matrix1=[4*x 5*x ; 4*x 2*x];
matrix1 = subs(matrix1,x,vector1)
  5 commentaires
AllKindsofMath AllKinds
AllKindsofMath AllKinds le 19 Nov 2013
Yeh but I want all of the matrices to be stored in an array so that I can call on them when I need them.

Connectez-vous pour commenter.


Jan
Jan le 19 Nov 2013
Maybe something like the following?
matrix = [4, 5; 4, 2];
[p, q] = size( matrix );
vector = 1:1:10;
matrix = repmat( matrix(:), 1, numel( vector ) );
matrix = matrix .* repmat( vector, p*q, 1 );
matrix = reshape( matrix, p, q, numel( vector ) );
This gives you a 3d matrix, where each layer contains the specified matrix, mulitplied by one entry in vector
  1 commentaire
AllKindsofMath AllKinds
AllKindsofMath AllKinds le 19 Nov 2013
This is almost there! in my example I have each element multiplied by x, but this was probably misleading as each element will not be multiplied by x. So more like
matrix1 = [4*x 5 ; 4 2*x];

Connectez-vous pour commenter.


Alfonso Nieto-Castanon
Alfonso Nieto-Castanon le 20 Nov 2013
perhaps something like:
f = @(x)[4*x 5 ; 4 2*x]; % Matrix in functional form
vector = 1:10; % Your vector of values for 'x'
matrix = arrayfun(f,vector,'uni',0); % A cell array of matrices
values = cellfun(@det,matrix); % Determinant of each of those matrices

Community Treasure Hunt

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

Start Hunting!

Translated by