print values in one matrix to another
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi,
I have very large matricies but will abbreviate them as best as possible here.
I have a matrix called "connectivity" which contains 5884 rows (total_elements = 5884) and 5 columns. The first column is the element number, the second column is node 1 and the third column is node 2:
connectivity(total_elements, 5);
connectivity(:,1) = 1:total_elements;
connectivity(:,2) = N1;
connectivity(:,3) = N2;
making this matrix look like
1 900 175
2 175 200
3 200 145
4 145 300...
I have a second matrix "C" which has the x and y coordinates for each of the nodes.
NodeNumber Xcomponent Ycomponent
...
I need to write a loop that will search matrix "C" for the correct x and y coordinates for each node and create a new matrix "length," which looks like the following:
length = zeros(total_elements, 7);
length(:,1) = 1:total_elements
length(:,2) = N1;
length(:,3) = N2;
length(:,4) = x1; %x coordinate of node 1
length(:,5)=x2; %x coordinate of node 2
length(:,6)=y1; %y coordinate of node 1
legnth(:,7)=y2; %y coordinate of node 2
being:
element# N1 N2 x1 x2 y1 y2
2 commentaires
Walter Roberson
le 16 Avr 2020
Is it mandatory to use a for loop? This is something that is easily vectorized.
Réponse acceptée
Tommy
le 16 Avr 2020
Modifié(e) : Tommy
le 16 Avr 2020
Let me know if this works:
length = [connectivity, zeros(total_elements, 4)];
for i = 1:total_elements
length(i, [4 6]) = C(C(:,1)==connectivity(i,2),[2 3]);
length(i, [5 7]) = C(C(:,1)==connectivity(i,3),[2 3]);
end
(edit) If you want to avoid the loop, and to match the format you've given in the comments:
[~,i] = ismember(connectivity(:,[2 3]),C(:,1));
length = [connectivity(:,[1 2]), C(i(:,1),[2 3]), connectivity(:,3), C(i(:,2),[2 3])];
Either way should work for any number of elements and nodes, provided your connectivity and C matrices are formatted as you've described.
8 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!