Effacer les filtres
Effacer les filtres

Substitute syms in 2D array to have 3D array

2 vues (au cours des 30 derniers jours)
Saurav Agarwal
Saurav Agarwal le 22 Déc 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

Réponse acceptée

Walter Roberson
Walter Roberson le 22 Déc 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 commentaire
Walter Roberson
Walter Roberson le 23 Déc 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) ));

Connectez-vous pour commenter.

Plus de réponses (1)

Saurav Agarwal
Saurav Agarwal le 23 Déc 2012
Taking a loop take a lot of time.. is there an alternate way? please help.
  2 commentaires
Walter Roberson
Walter Roberson le 23 Déc 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 le 23 Déc 2012
I have edited the question to show the code using loop.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by