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

Inzidenzmatrix aus einem Array

 

Hannes_91
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2016, 12:31     Titel: Inzidenzmatrix aus einem Array
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problm bei der Erstellung einer Inzidenzmatrix.

Ich habe ein Array erstellt, das meine Knoten darstellen soll. Nun möchte ich auf Grundlage dieses Arrays eine Inzidenzmatrix erstellen, um die Kirchhoff'sche Knotenregel auf diese Knoten anwenden zu können.

Leider ist mir das nicht gelungen. Weiß jemand, ob das so möglich ist und wie man das realisiert?

Vielen Dank schon mal für die Unterstützung!!!
_________________

Viele Grüße,

Hannes_91
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.01.2016, 14:03     Titel: Re: Inzidenzmatrix aus einem Array
  Antworten mit Zitat      
Hallo Hannes_91,

Biotte erklärer "nicht gelungen" mit Details. Poste den Code und erkläre, was noch nicht wie gewünscht läuft. Andernfalls muss man bei Ratschlägen zu viel erraten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hannes_91
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2016, 18:15     Titel:
  Antworten mit Zitat      
Hallo,

ich kann leider keinen Code posten, da ich es nicht geschafft habe, den Befehl "incidence" auf Werte in einem Array anzuwenden.

Ich habe in einem 3-dimensionalem Array Punkte gespeichert, die meine Knoten darstellen. Im weiteren Schritt müsste ich eine Inzidenzmatrix auf Basis dieser Knoten erstellen.

Nur leider weiß ich nicht bzw. habe ich es nicht herausgefunden, wie man eine Inzidenzmatrix auf Basis eines Arrays erstellt, also wie ich den Befehl "incidence" auf ein Array anwende.
_________________

Viele Grüße,

Hannes_91
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.01.2016, 18:53     Titel:
  Antworten mit Zitat      
Hallo Hannes_91,

Zitat:
ich kann leider keinen Code posten, da ich es nicht geschafft habe, den Befehl "incidence" auf Werte in einem Array anzuwenden.

Das verstehe ich nicht. Du hast doch offensichtlich versucht einen Code zu schreiben. Dann poste bitte den Code, mit dem Du es versucht hast, denn dieser Versuch enthält doch einen Fehler, oder? Und wenn wir den Code nicht sehen können, können wir den Fehler nicht verbessern.

Der Befehl "incidence" gehört nicht zur Matlab-Toolbox so weit ich sehe. Ich finde nur incidenceMatrix .
Genaue Erklärungen zu dem von Dir gewünschten Befehl solltest Du im Source-Code des Befehls finden. Versuche mal "help incidence".

Zitat:
Ich habe in einem 3-dimensionalem Array Punkte gespeichert, die meine Knoten darstellen.

Bitte erkläre das genau: Wie sind die Punkt gespeichert?

Bisher ist es kaum möglich, Dir eine sinnvolle Antwort zu geben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hannes_91
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 18:23     Titel:
  Antworten mit Zitat      
Die Punkte habe ich mit for-Schleifen in das Array gespeichert. Darin sind aufgrund verschiedener Bedingungen, Punkte mit den Bezeichnungen 'm', 's' und 'l' gespeichert.
Vereinfacht dargestellt, z.B.

for x=1:nx
for y=1:ny
for z=1:nz

Array{x,y,z}='m'

end
end
end

für bestimmte nx, ny und nz


Nun benötige ich für alle diese Knoten in dem Array eine Inzidenzmatrix.

Hier der incidence-Befehl:
Code:

function A = incidence(B)
%
%  A = incidence(B)
%    
%  Determines incidence matrix A corresponding to edge matrix B
%
%  B is a matrix with 2 columns giving the edges
%        the ith row of B says which two nodes are connected by edge i
%
%   See also CEDGE, NETW

nedge = size(B,1);

nvert = max(max(B));

A = zeros(nedge,nvert);

for i=1:nedge,
  A(i,B(i,1)) = 1;
  A(i,B(i,2)) = -1;
end
 


-> Introduced in R2015b

Ich bin neu bei MATLAB und habe nicht den Hauch einer Ahnung, ob es möglich ist ein Array zu verwenden, um eine Inzidenzmatrix aufzustellen. Und falls es möglich sein sollte, habe ich keine Ahnung, wie ich an das Thema rangehen muss. Aus diesem Grund wollte ich mein Glück in diesem Forum suchen. Ich habe daher auch keinen Code, den ich hochladen könnte. Sorry!


Vielen Dank schon mal!
_________________

Viele Grüße,

Hannes_91
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.01.2016, 14:12     Titel:
  Antworten mit Zitat      
Hallo Hannes_91,

Dein Beispiel-Code erzeugt ein 3D Cell-String, der für alle Elemente den Buchstaben 'm' enthält.
Der Befehl "incidence" benötigt eine numerische [n x 2] Matrix, die die Kanten enthält.

Ich erkenne nicht, wie man Deine Daten zur Erstellung der Inzidenz-Matrix verwenden könnte.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hannes_91
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2016, 18:58     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank! Schade, dass es so nicht geht.

Hast du zufällig eine Ahnung, ob es möglich ist, nur mit vorhandenen Knoten auf irgendeine andere Art und Weise eine Inzidenzmatrix zu erstellen?

Vielen Dank und viele Grüße, Hannes
_________________

Viele Grüße,

Hannes_91
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2016, 00:22     Titel:
  Antworten mit Zitat      
Hallo Hannes_91,

Ich weiß nicht, was "vorhandene Knoten" bedeutet.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hannes_91
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2016, 11:39     Titel:
  Antworten mit Zitat      
Ich habe halt das Array mit den Bezeichnungen 'm', 's' und 'l' bereits für einen anderen Zweck benötigt. Diese Bezeichnungen stellen bzw. sollen meine Knoten darstellen. Und jetzt war es mein Ziel auf Basis dieser Knoten eine Inzidenzmatrix aufzustellen, um die Kirchhoff'sche Knotenregel anwenden zu können.



Ich habe auch eine andere Methode versucht:
Ich habe ein anderes Array noch zusätzlich als struct definiert, da von einem Knoten ja in 3 Achsrichtungen meine Ströme weggehen sollen, z.B.

Array_Strom{1,1,1}.X stellt den Strom vom Knoten {1,1,1} in x-Richtung dar, als zu Knoten {2,1,1}.

Dann wollte ich die Knotenregel anwenden und mit den Bezeichnungen des struct-Arrays rechnen.
Ein einfaches Beispiel für diese Rechnung wäre (soll nicht die tatsächliche Knotenregel darstellen)
I. Array_Strom{1,1,1}.X-Array_Strom{1,1,1}.Y=0
II. Array_Strom{1,1,1}.X+Array_Strom{1,1,1}.Y=2
-> Array_Strom{1,1,1}.X=1; Array_Strom{1,1,1}.Y=1

-> MATLAB rechnet eine solche Gleichung aber nicht aus, sondern es kommt immer der Fehler, dass MATLAB nicht damit rechnen kann, weil in diesem Feld des struct-Arrays kein Wert vorhanden ist. Das Problem ist, dass ich genau diese Werte ja mit meiner Rechnung ausrechnen wollte.

Gibt es dafür eine Möglichkeit, um damit zu rechnen oder diesem Fehler zu umgehen? Vielleicht mit Hilfe eine Art von Zeiger?
Das Problem ist, dass ich in diese Felder zu Beginn nichts reinspeichern kann, weil ich sie erst mit der Knotenregel ausrechnen muss.


Vielen Dank!
_________________

Viele Grüße,

Hannes_91
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.01.2016, 14:01     Titel:
  Antworten mit Zitat      
Hallo Hannes_91,

Vielleicht stehe ich auf dem Schlauch.
Ich habe immer noch keine Ahnung, auf welche Weise ein 3D-Cell-String, welches die Buchstaben 'm', 's' und 'l' enthält, die Knoten repräsentiert. Eventuell ist das für jemand ersichtlich, der in diesem Thema arbeitet, aber mir wird es überhaupt nicht klar.

Ich nehme an, wenn Du eindeutig erklärst, inwiefern dieses Array die Knoten definiert, ist man damit bereits sehr in der Nähe der Lösung.

Zitat:
-> MATLAB rechnet eine solche Gleichung aber nicht aus, sondern es kommt immer der Fehler, dass MATLAB nicht damit rechnen kann, weil in diesem Feld des struct-Arrays kein Wert vorhanden ist.

Das lässt sich nicht nachvollziehen.

Wenn Du erklärst, dass Dein Code einen fehler erzeugt, poste ein lauffähiges Minimal-Beispiel des Code und die Fehlermeldung. Ansonsten kann man damit in einem Forum nichts anfangen.

Wenn Du die Gleichung in Form eine Matrix (!) aufstellst, kann Matlab das auch lösen.

"Zeiger" ist wildes Raten. Das hilft niemals weiter beim Programmieren.
Es hilft dagegen, die vorhandenen Inputs klar zu definieren, sowie die gewünschten Outputs und die mathematische Definition des Rechenweges.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hannes_91
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2016, 16:07     Titel:
  Antworten mit Zitat      
Das Array, das diese Bezeichnugen enthält, soll meine Knoten darstellen. Ob das geht oder möglich ist, weiß ich nicht. Da kenn ich mich mit MATLLAB leider zu wenig aus. Deswegen meine Frage, ob das geht. Und wie es dann gehen könnte, weiß ich leider auch nicht. Deswegen wollte ich hier nachfragen, bei Leuten, die sich mit MATLAB auskennen.
Dieses Array habe ich erstellt, dass man weiß, was sich an einem bestimmten Punkt befindet (m steht für Metall, s für Schweißnaht und l für Luft). Aber bezüglich des Themas Inzidenzmatrix tut das nichts zur Sache. Ich wollte einfach auf Basis dieses Arrays eine Inzidenzmatrix erstellen. Aber wie gesagt, ich habe leider keine Ahnung, ob und wie das möglich sein könnte.



Zu Thema 2:

Hier ein einfaches Beispiel:
Code:

Array=cell(2,1);
x=1;
y=1;
Array{x,y}=struct('X',0,'Y',0);

Array{2,1}.X+Array{2,1}.Y==2;
Array{2,1}.X-Array{2,1}.Y==2;
 


Fehlermeldung: "Struct contents reference from a non-struct array object"

Im Array-Element {2,1}.X und {2,1}.Y sind noch keine Werte gespeichert. Ich möchte diese Werte aber durch deren Bedingung zueinander berechnen. Leider rechnet mir das MATLAB jedoch nicht, sondern spuckt diesen Fehler aus.

Für mein Beispiel wäre die Lösung halt:
Array{2,1}.X=1 und Array{2,1}.Y=1


Vielen Dank!
_________________

Viele Grüße,

Hannes_91
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.01.2016, 14:21     Titel:
  Antworten mit Zitat      
Hallo Hannes_91,

Ein Cell-Array, das Structs enthält, ist ein ganz schön komplizierter Ansatz. Wie wäre es zwei numerischer Arrays für X und Y zu verwenden?

Code:
A = [1, 1;
    1, -1];
b = [2; 2];
V = A \ b;

X = V(1);
Y = V(2);

Bemerkung: Mit X=1 und Y=1 ist X-Y nit gleich 2, wie in Deiner zweiten Gleichung.

Zitat:
Code:
Array{2,1}.X+Array{2,1}.Y==2;
Array{2,1}.X-Array{2,1}.Y==2;

Das ist keine Matlab-Syntax. Zu raten bringt da nichts.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Hannes_91
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 17:26     Titel:
  Antworten mit Zitat      
Ich habe ein ziemlich großes, kompliziertes System. Deswegen habe ich ein Array mit structs, um es übersichtlich darstellen zu können und die enzelnen Elemente klar zu bestimmten Orten zuordnen zu können.

Durch das Array {x,y,z} weiß ich, welcher Punkt in meinem 3D-System gemeint ist. Und mit dem struct .X, .Y oder .Z kann ich die Ströme, die von einem bestimmten Punkt {x,y,z} in x-,y- und z-Richtung fließen, klar zuordnen. Deswegen habe ich es so dargestellt. Anders ist es sehr schwierig zu gestalten, um einen Überblick zu haben und auch mit den richtigen Werten rechnen zu können.


Was meinst du damit, dass es keine Matlab-Syntax ist?
Ich müsste halt mit den einzelnen Elementen des struct-Arrays rechnen (bei meinem einfachen Beispiel: Array{2,1}.X und Array{2,1}.Y), da sie von einander abhängig sind -> Die einzelnen Element-Bezeichnungen kann ich aber nicht in eine Formel schreiben, das ist mein Problem.
Das Ergebnis (bei meinem einfachen Beispiel: Array{2,1}.X=1 und Array{2,1}.Y=1) sollte dann als Wert in dieses struct-Array-Element gespeichert werden -> also 1 in Array{2,1}.X und 1 in Array{2,1}.Y

-> Ist es möglich, das irgendwie zu realisieren, also dem Fehler, den mir Matlab auspuckt, zu umgehen und trotzdem diese Rechnung durchzuführen? Ich kann die Einträge nämlich nur über die Abhängigkeiten der einzelnen Elemente zueinander berechnen.

Vielen Dank!
_________________

Viele Grüße,

Hannes_91
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.