WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bestimmte Elemente zweier Matrizen in eine dritte Matrix

 

kojoteKarl
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 16.06.2015, 09:01     Titel: Bestimmte Elemente zweier Matrizen in eine dritte Matrix
  Antworten mit Zitat      
Hallo miteinander,

ich hätte gern mal ein Problem.
Zum grundverständniss: ich habe 2 Ausgangsmatrizen deren Zeilen und spalten sich nach einer 3ten richten und an die richtige Position einer vierten eingeordnet werden müssen.
z.B. Kte1=[A1 A2 A3 A4 A5 A6; A7 A8 A9 A10 A11 A12;A13 A14 A15 A16 A17...] so das eine 6x6 Matrix entsteht. Abhängig sind diese jetzt von[v11 v12 v21 v22 v31 v32]. Die Kte2 Mtrix ist jetzt ebenfalls eine 6x6 Matrix die abhängig ist von [v31 v32 v41 v42 v11 v12]. In einer 3ten ist bestimmt wie die zuordnung ist, in dem fall [1 2 3; 3 4 1](jeweils zu vij, i=1-4, j=1-2).
jetzt wird auf die einzelnen Matrizen zugegriffen und in eine vierte an die richtige Position geschrieben. Diese Matrix ist jetzt eine 8x8 Matrix(aus 2 mal 4 unterschiedlichen Elementen von [1 2 3; 3 4 1]) mit der richtigen reihenfolge [v11 v12 v21 v22 v31 v32 v41 v42]. jetzt müssen die jeweiligen Elemente aus den ersten beiden an die richtige stelle der 4ten.
Mein bisheriger Code
HP
Code:
%load 'Mesh_Tri_vCoarse'
% load 'Mesh_Tri_Coarse'
 %load 'Mesh_Tri_Fine'
 %load 'Mesh_Tri_vFine'
%load 'Mesh_Tri_uniform'
 node_connectivity=[1.0 2.0 3.0;3.0   4.0   1.0];
 COORD=[0.0 0.0; 1.0 0.0; 1.0 1.0; 0.0 1.0];

E=120000; %N/mm^2
nu=0.3;

C=(E/((1+nu)*(1-2*nu)))*[(1-nu) nu 0;nu (1-nu) 0; 0 0 ((1-2*nu)/2)];
KnotenM=size(COORD);
Knoten=KnotenM(1,1);

elementeM=size(node_connectivity);
elemente=elementeM(1,1);
Fint=zeros(2*Knoten,1)
Kt=zeros(2*Knoten) %2 Verschiebungen pro Knoten, erzeugt eine leere Steifigkeitsmatrix
k=0;
kk=0
%% Kte und Fint
for m=1:elemente;
  ue=[2;3;5;1;4;7];
    [Feint,Kte] = Elementroutine(m,C,COORD,node_connectivity,ue);
    %% Einbau in die Gesamtmatrizen
    Kte
      for z=1:2:6;
          kk=kk+1
         for s=1:2:6;
           Kt(node_connectivity(m,kk)+2,node_connectivity(m,kk)+2) = ...
           Kt(node_connectivity(m,kk)+2,node_connectivity(m,kk)+2)+ Kte(z,s);
       
           Kt(node_connectivity(m,kk)+3,node_connectivity(m,kk)+s+1) =...
           Kt(node_connectivity(m,kk)+z+2,node_connectivity(m,kk)+s+1)+ Kte(z+1,s);
       
           Kt(node_connectivity(m,kk)+1,node_connectivity(m,kk)+s+2) = ...
           Kt(node_connectivity(m,kk)+1,node_connectivity(m,kk)+s+2)+ Kte(z,s+1);
       
           Kt(node_connectivity(m,kk)+z+2,node_connectivity(m,kk)+s+2) =...
           Kt(node_connectivity(m,kk)+z+2,node_connectivity(m,kk)+s+2)+ Kte(z+1,s+1);
       
           Kt
         end
         k=0;
      end
      kk=0
    %% Materialroutine
    round(Kt)
    round(Feint)
end
 


Unterprogramm

Code:
function [Feint,Kte] = Elementroutine(m,C,COORD,node_connectivity,ue)

syms Xi eta

N{1}(Xi,eta)=1-Xi-eta;
N{2}(Xi,eta)=Xi;
N{3}(Xi,eta)=eta;

for n=1:3;
        xe{n}=N{n}*COORD(node_connectivity(m,n),1);
        ye{n}=N{n}*COORD(node_connectivity(m,n),2);  
end
   
    x=xe{1}+xe{2}+xe{3};
    y=ye{1}+ye{2}+ye{3};
   
    Bz1=[diff(N{1},Xi)*(1/diff(x,Xi)),0,diff(N{2},Xi)*(1/diff(x,Xi)),0,diff(N{3},Xi)*(1/diff(x,Xi)),0];
    Bz2=[0,diff(N{1},eta)*(1/diff(y,eta)),0,diff(N{2},eta)*(1/diff(y,eta)),0,diff(N{3},eta)*(1/diff(y,eta))];
    Bz3=[diff(N{1},eta)*(1/diff(y,eta)),diff(N{1},Xi)*(1/diff(x,Xi)),diff(N{2},eta)*(1/diff(y,eta)),diff(N{2},Xi)*(1/diff(x,Xi)),diff(N{3},eta)*(1/diff(y,eta)),diff(N{3},Xi)*(1/diff(x,Xi))];
   
    B=[Bz1; Bz2; Bz3];
   
    J=[diff(x,Xi),diff(y,Xi);
        diff(x,eta),diff(y,eta)];
   
    f=B'*C*B*det(J);
   
   
    sigma=C*B*ue;
    Feint(Xi,eta)=1/2*1/2*B'*sigma;
    Kte(Xi,eta)=1/2*1/2*f;
    y=1/3;
    x=1/3;
    Kte=Kte(x,y);
    Feint=Feint(x,y);
    return
Private Nachricht senden Benutzer-Profile anzeigen


kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 16.06.2015, 09:17     Titel:
  Antworten mit Zitat      
Hoffentlich habe ich mich verständlich ausdrücken können?!
Ich bin für jede Hilfe dankbar, da ich hier schon zwei Tage am verzweifeln bin.

Ich sag schonmal vielen Dank

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 16.06.2015, 09:52     Titel:
  Antworten mit Zitat      
Ich weiss nicht wie es den anderen geht, aber mein Gefühl lautet "aaargh, das muss ich alles durchlesen und verstehen bevor ich helfen kann????"


Gleichzeitig ist die Überschrift simpel: "Bestimmte Elemente zweier Matrizen in eine dritte Matrix". Da denke ich mir, wo ist das Problem, kann er nicht einfach das Beispiel auf etwas runterbreche so wie:

Code:

A=[1 2 3; 4 5 6] % Start
B=[A(2,3), A(1,1); A(2,1:2)] % Ziel - aber es soll eigentlich ganz anders aussehen, oder es wirft einen Fehler
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.06.2015, 10:13     Titel:
  Antworten mit Zitat      
Zitat:
ich hätte gern mal ein Problem.

und welches?
sonst kann ich mich andreas nur anschließen.
ich seh da nicht durch was da passieren soll. die bildungsvorschrift die du versuchst verbal im text zu beschrieben raff ich so erstmal nicht auf die schnelle Smile
am besten ist du brichst das auf ein minimalbeispiel runter. ohne überflüssige passagen. so wie ich das verstehe haben 90% deines codes garnichts mit dem problem zu tun.
grüsse winkow
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 16.06.2015, 10:38     Titel:
  Antworten mit Zitat      
Hallo vielen Dank für den Hinweis.
Ich hab hier mal versucht das runter zu brechen.

Code:
K1=[1 2 3 4;
    5 6 7 8;
    9 10 11 12;
    13 14 15 16]%1te Matrix geht von v11 bis v22

K2=[1 2 3 4;
    5 6 7 8;
    9 10 11 12;
    13 14 15 16]%2te Matrix beinhaltet [v31 v32 v11 v12]

b=[1 2 ;3 1]%Unbekanten der ersten und zweiten Matrix[K1;K2] in b steht 1 für v11 und v12 , die 2 v21 und v22 usw.
%Ziel
K=[K1(1,1)+K2(3,3), K1(1,2)+K2(3,4), K1(1,3), K1(1,4), K2(3,1), K2(3,2);
   K1(2,1)+ K2(4,3),K1(2,2)+K2(4,4) usw...] %in der Endmatrix sind die Werte dann geordnet von v11 bis v32
 

Vieleicht wird es durch das angehängte Bild deutlicher was ich meine.

MfG

CAM00294[1].jpg
 Beschreibung:

Download
 Dateiname:  CAM00294[1].jpg
 Dateigröße:  823.87 KB
 Heruntergeladen:  420 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 16.06.2015, 11:27     Titel:
  Antworten mit Zitat      
Also das grundlegende Problem ist das erzeugen der Gesamtmatrix. Kt1, Kt2 und b habe ich, ich komm aber auf kein möglichen Algorithmus, der das hinbekommt.
Private Nachricht senden Benutzer-Profile anzeigen
 
kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 16.06.2015, 20:56     Titel:
  Antworten mit Zitat      
Hat denn niemand eine Idee wie das funktionieren könnte?
ich bin echt am verzweifeln.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.06.2015, 21:09     Titel:
  Antworten mit Zitat      
Hallo,

ich zumindest kann keiner deiner Frageformulierungen folgen, und dir somit leider auch nicht helfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 17.06.2015, 09:44     Titel:
  Antworten mit Zitat      
Der Code ist zumindest einfacher. Die ersten drei Zuweisungen funktionieren. Wenn man dann

Code:

K=[K1(1,1)+K2(3,3), K1(1,2)+K2(3,4), K1(1,3), K1(1,4), K2(3,1), K2(3,2)]
 


schreibt funktioniert es ja auch. Die nächste Frage ist was heisst "usw." in dem Zusammenhang. Ich verstehe die Logik noch nicht. Soll es vielleicht

Code:

K=[K1(1,1)+K2(3,3), K1(1,2)+K2(3,4), K1(1,3)+K2(3,1), K1(1,4)+K2(3,2)]
 


heissen? Da würde ich eine Logik erkennen. Alle Elemement K1(1,Smile werden mit allen K2(3,Smile addiert, nur halt über einen verschobenen Index. Und die Frage wäre dann wir man das automatisiert, richtig?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 18.06.2015, 09:31     Titel:
  Antworten mit Zitat      
Hallo und Danke für deinen Beitrag.

Eine Logik steckt nicht hinter der Reihenfolge. Die Reihenfolge hängt von der Matrix ,indem Fall b, ab. Das heißt die erste zeile von b gibt den Spalten bzw Zeilennamen für die erste Matrix. Die zweite Zeile dementsprechend für die zweite Matrix.
bsp.
K2=[1 2 3 4;
5 6 7 8;
9 10 11 12;
13 14 15 16]
dazu gehört von b=[ 3 1] (3= 5 und 6, 1=1 und 2)diese Zahlen geben jetzt gleichzeitig vor, in welcher Zeile bzw. Spalte die Elemente in die Hauptmatrix K geschrieben werden müssen.
K=[11 12 0 0 9 10;
15 16 0 0 13 14;
0 0 0 0 0 0;
0 0 0 0 0 0;
3 4 0 0 1 2;
7 8 0 0 5 6;]
MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 18.06.2015, 09:33     Titel:
  Antworten mit Zitat      
Ich habe jetzt einen code geschrieben der das kann, der ist aber nicht sonderlich elegant

Code:


for z=1:6;
         for s=1:6;
           if z<=2 && s<=2;
               ze=node_connectivity(m,1);
               se=node_connectivity(m,1);
           end
           
                   if z<=2 && s>=3 && s<=4;
                   ze=node_connectivity(m,1);
                   se=node_connectivity(m,2);
                                       
                   end
                       if z<=2 && s>=5 && s<=6;
                       ze=node_connectivity(m,1);
                       se=node_connectivity(m,3);
                       end
                       
                       if z>=3 && z<=4 && s<=2;
                          ze=node_connectivity(m,2);
                          se=node_connectivity(m,1);
                       end
                       
                          if z>=3 && z<=4 && s>=3 && s<=4;
                             ze=node_connectivity(m,2);
                             se=node_connectivity(m,2);
                          end
                         
                             if z>=3 && z<=4 && s>=5 && s<=6;
                             ze=node_connectivity(m,2);
                             se=node_connectivity(m,3);
                             end
                             
                             if z>=5 && z<=6 && s<=2;
                                ze=node_connectivity(m,3);
                                se=node_connectivity(m,1);
                             end
                                 
                                if z>=5 && z<=6 && s>=3 && s<=4;
                                    ze=node_connectivity(m,3);
                                    se=node_connectivity(m,2);
                                end
                               
                                    if z>=5 && z<=6 && s>=5 && s<=6;
                                         ze=node_connectivity(m,3);
                                         se=node_connectivity(m,3);
                                    end
                                         if (z == 1 || z==3 || z==5 )  && (s==2 || s==4 || s==6);
                                             Kt(ze*2-1,se*2)=Kt(ze*2-1,se*2)+Kte(z,s);
                                         end
                                         if (z==2 || z==4 || z==6) && (s==1 || s==3 || s==5);
                                             Kt(ze*2,se*2-1)=Kt(ze*2,se*2-1)+Kte(z,s);
                                         end
                                         if (z==2 || z==4 || z==6) && (s==2 || s==4 || s==6);
                                             Kt(ze*2,se*2)=Kt(ze*2,se*2)+Kte(z,s);
                                         end
                                         if (z==1 || z==3 || z==5) && (s==1 || s==3 || s==5);
                                             Kt(ze*2-1,se*2-1)=Kt(ze*2-1,se*2-1)+Kte(z,s);
                                         end
                                         
                                         
         end
         end
Private Nachricht senden Benutzer-Profile anzeigen
 
kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 18.06.2015, 09:39     Titel:
  Antworten mit Zitat      
Die dazu gehörigen Matrizen.Hier ist Kte1 und 2 aus bestimmten Gründen gleich, das ist aber nicht immer der Fall.
Code:
node_connectivity=[1.0   2.0   3.0;
3.0   4.0   1.0];
Kte1=[  7136253353353845/137438953472,    991146299076923/34359738368,    -346901204676923/8589934592, -1585834078523077/137438953472, -1585834078523077/137438953472, -2378751117784615/137438953472]
[    991146299076923/34359738368,  7136253353353845/137438953472, -2378751117784615/137438953472, -1585834078523077/137438953472, -1585834078523077/137438953472,    -346901204676923/8589934592]
[    -346901204676923/8589934592, -2378751117784615/137438953472,     346901204676923/8589934592,                              0,                              0,  2378751117784615/137438953472]
[ -1585834078523077/137438953472, -1585834078523077/137438953472,                              0,  1585834078523077/137438953472,  1585834078523077/137438953472,                              0]
[ -1585834078523077/137438953472, -1585834078523077/137438953472,                              0,  1585834078523077/137438953472,  1585834078523077/137438953472,                              0]
[ -2378751117784615/137438953472,    -346901204676923/8589934592,  2378751117784615/137438953472,                              0,                              0,     346901204676923/8589934592]

 Kte2=[  7136253353353845/137438953472,    991146299076923/34359738368,    -346901204676923/8589934592, -1585834078523077/137438953472, -1585834078523077/137438953472, -2378751117784615/137438953472]
[    991146299076923/34359738368,  7136253353353845/137438953472, -2378751117784615/137438953472, -1585834078523077/137438953472, -1585834078523077/137438953472,    -346901204676923/8589934592]
[    -346901204676923/8589934592, -2378751117784615/137438953472,     346901204676923/8589934592,                              0,                              0,  2378751117784615/137438953472]
[ -1585834078523077/137438953472, -1585834078523077/137438953472,                              0,  1585834078523077/137438953472,  1585834078523077/137438953472,                              0]
[ -1585834078523077/137438953472, -1585834078523077/137438953472,                              0,  1585834078523077/137438953472,  1585834078523077/137438953472,                              0]
[ -2378751117784615/137438953472,    -346901204676923/8589934592,  2378751117784615/137438953472,                              0,                              0,     346901204676923/8589934592]
 
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.06.2015, 09:49     Titel:
  Antworten mit Zitat      
Hallo,

zur Reproduzierbarkeit fehlt dann ja nur noch m und Kt.

Soweit ich das sehe, ist ze ja unabhängig von s und se unabhängig von z. Dann wäre es unnötig, alle Kombinationen von s und z durchzugehen.

Zudem scheint es möglich, stattdessen mit Rundungen zu arbeiten:
Code:
ze=node_connectivity(m, ceil(z/2));
se=node_connectivity(m, ceil(s/2));


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
kojoteKarl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 18.06.2015, 11:22     Titel:
  Antworten mit Zitat      
Harald das war schonmal klasse.
Das macht die Sache schonmal etwas eleganter.

m gehört zu einer Schleife und beschreibt das Element. m=1 dann wird Kte1 bearbeitet ; m = 2 , Kte2.

K ist die Matrix in die die Elemente geschrieben werden. Das heißt in dem Fall eine leere 8x8 Matrix.

Vielen Dank
MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.06.2015, 11:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
m gehört zu einer Schleife und beschreibt das Element. m=1 dann wird Kte1 bearbeitet ; m = 2 , Kte2.

Dann solltest du Kte als Cell Array definieren und Kte{m} verwenden. Das dürfte es deutlich erleichtern.

Für weitere Unterstützung bitte den kompletten aktuellen Code, gerne als .m angehängt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.