Borrar filtros
Borrar filtros

Substitute syms in 2D array to have 3D array

2 visualizaciones (últimos 30 días)
Saurav Agarwal
Saurav Agarwal el 22 de Dic. de 2012
I have a 2D array of syms and I want to substitute the syms variables with 1D array. How do i do it? If a form a loop it takes a long runtime.
sample code:
syms a b c
arr=[0 0 0;0 0 0;a b c];
a=[1 2 3 4 5]';
b=[2 3 4 5 6]';
c=[5 6 7 8 9]';
subs(arr)
The output should be a 3x3x5 matrix. Please help
I have the following code using loops:
syms a b c
arr=[0 0 0;0 0 0;a b c];
J=zeros(3,3,5);
a1=[1 2 3 4 5]';
b1=[2 3 4 5 6]';
c1=[5 6 7 8 9]';
for i=1:5
a=a1(i);
b=b1(i);
c=c1(i);
J(i)=subs(arr);
end

Respuesta aceptada

Walter Roberson
Walter Roberson el 22 de Dic. de 2012
subs() is not able to do this for you, as you need to replicate the other elements of the array. I do not think you will be able to do this without a loop (though you can probably hide the loop using arrayfun())
  1 comentario
Walter Roberson
Walter Roberson el 23 de Dic. de 2012
You initialize J as numeric zeros of size (3,3,5), but you assign to J(i) which would be J(i,1,1) a single numeric location.
Try
syms a b c
arr=[0 0 0;0 0 0;a b c];
a1=[1 2 3 4 5]';
b1=[2 3 4 5 6]';
c1=[5 6 7 8 9]';
J = double( arrayfun(@(aval, bval, cval) subs(arr, {a, b, c}, {aval, bval, cval}), a1, b1, c1) );
You might have to use
J = double( cell2mat( arrayfun(@(aval, bval, cval) subs(arr, {a, b, c}, {aval, bval, cval}), a1, b1, c1, 'Uniform', 0) ));

Iniciar sesión para comentar.

Más respuestas (1)

Saurav Agarwal
Saurav Agarwal el 23 de Dic. de 2012
Taking a loop take a lot of time.. is there an alternate way? please help.
  2 comentarios
Walter Roberson
Walter Roberson el 23 de Dic. de 2012
I cannot think of any way of doing this that does not involve a loop.
If you show the loop that you have coded, we can examine it and see if we can suggest improvements.
Saurav Agarwal
Saurav Agarwal el 23 de Dic. de 2012
I have edited the question to show the code using loop.

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by