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

1 Ansicht (letzte 30 Tage)
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.

Akzeptierte Antwort

Jan
Jan am 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 Kommentare
AllKindsofMath AllKinds
AllKindsofMath AllKinds am 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 am 20 Nov. 2013
Not as far as I can see. You will probably have to iterate over the third dimension.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Sean de Wolski
Sean de Wolski am 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 Kommentare
AllKindsofMath AllKinds
AllKindsofMath AllKinds am 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.

Melden Sie sich an, um zu kommentieren.


Jan
Jan am 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 Kommentar
AllKindsofMath AllKinds
AllKindsofMath AllKinds am 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];

Melden Sie sich an, um zu kommentieren.


Alfonso Nieto-Castanon
Alfonso Nieto-Castanon am 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

Kategorien

Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by