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

Matritze mit Variablen füllen und das ergebnis plotten

 

tomtom1986
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.05.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2021, 12:52     Titel: Matritze mit Variablen füllen und das ergebnis plotten
  Antworten mit Zitat      
Ich muss eine Matrize mit Variablen Füllen und das ergebnis anschließend plotten, finde aber keine Lösung wie ich das hinbekommen kann.

Version 1: Hir werden mir die gewünschten Ergebnisse angezeigt jedoch bekomm ich es nicht hin diese in einem einzelnen Plott als Kurve zu generieren. Meine Idee wäre das die 100 Ergebnisse als Liste ausgegeben werden jedoch finde ich nichts dazu wie das gehen sollte.

Code:
for x=((1:100))/87
    Fs=DeformationsgradientSchub()
    disp('x:', x)
end

function [z]=DeformationsgradientSchub(x)
        z=[1 x 0; 0 1 0; 0 0 1];
endfunction

z=DeformationsgradientSchub(x)(1,2)
disp('z: ',z);



plot2d(z,y), title("Spannungs-Dehnungskurve reiner Schub"),xlabel("x"),ylabel("y")


Version 2: Hier fütter ich die Funktion mit einer Liste jedoch kann die Funktion damit nicht arbeiten. (uneinheitliche Reihen/Spalten- Dimension)

Code:
y=linspace(0,10,100)
x=linspace(0,10,100)

function [z]=DeformationsgradientSchub(x)
        z=[1 x 0; 0 1 0; 0 0 1];
endfunction

z=DeformationsgradientSchub(x)(1,2)
disp('z: ',z);



plot2d(z,y), title("Spannungs-Dehnungskurve reiner Schub"),xlabel("x"),ylabel("y")
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 09.05.2021, 20:35     Titel:
  Antworten mit Zitat      
Wie sollen denn deine Ergebnisse aussehen? Das lässt sich aus dem Quellcode nicht ablesen.

in jeder Schleife erzeugst du:
[1 x/87 0;
0 1 0;
0 0 1]
?


Wie soll daraus EINE Kurve werden, zum plotten?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtom1986
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.05.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2021, 16:30     Titel:
  Antworten mit Zitat      
Ja aber mit

Code:
z=DeformationsgradientSchub(x)(1,2)


entnehme ich ja nur einen Wert, den Wert Zeile 1, Spalte 2, aus der Matrize.

Also ich will eine Funktion mit 100 Variablen durchlaufen lassen die mit Matrizen rechnt und mir dann von den 100 berechneten Matrizen jeweils einen Wert ausgibt.
Es sollte vereinfacht gesagt der einzelne z-Wert aus der Matrizen Berechnung (funktion) über den x-Wert geplottet werden.

Das bei dem Bsp. z und x Wert in endeffekt gleich sind ist egal, weil die Funktion eigentlich deutlich länger ist aber vom Prinzip her keinen Unterschied macht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 18.05.2021, 19:40     Titel:
  Antworten mit Zitat      
Code:
z_ausgabe=DeformationsgradientSchub(x)
z = z_ausgabe(1,2)

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtom1986
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.05.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2021, 18:23     Titel:
  Antworten mit Zitat      
Mmmartina hat Folgendes geschrieben:
Code:
z_ausgabe=DeformationsgradientSchub(x)
z = z_ausgabe(1,2)


Vielen Dank das hab ich jetzt soweit hinbekommen, dass es bei mir funktioniert.

Also ich bekomme jetzt aus der Funktion die Outputs als Spaltenvektoren in eine Matrize zusammengefasst.
Spaltenvektor 1 beinhaltet die Spannungen und Spaltenvektor 2 die Dehnungen.
Ich würde gerne den Spaltenvektor mit den den Dehnungen Filtern das hier nur noch Zahlen zwischen 0 und 2 vorkommen. Und dann müsste ich irgendwie den Spaltenvektor mit den Spannungen auf die gleiche Länge bringen und die beiden gegeneinander zu Plotten.

Da Plotten ist kein Problem aber die beiden Filter bekomm ich nicht hin. Gibt da zwar einige möglichkeiten zu Filtern aber nichts mit dem ich was für meinen Fall anfangen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtom1986
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.05.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2021, 14:28     Titel:
  Antworten mit Zitat      
So ich hab das nochmal vereinfacht da ich noch ein kleines Problem habe.

Code:
function [L]=Deformationsgradient(x)
   
    F=[1 tand(x) 0; 0 1 0; 0 0 1]
   
//richtigen Output generieren
        L(1)=F(1,2);
endfunction


for x = 1:10
    [L(x)]=Deformationsgradient(x)

    //Outputs für Schub
    output(x,1)=L(x)
end


disp("output",output);


Ich würde gerne das x von 0-10 laufen lassen, mit einer Abstufung von 0,1.

Müsste ja Grundsätzlich nur die for Schleife geändert werden auf:
Code:
for x = 1:0.1:10
end


Aber wenn ich das so schreibe, habe ich nur 10 Outputs und ich will ja eingentlich 100, sonnst gehen ja wieder Daten verloren. Hab da jetzt schon ein paar Sachen ausprobiert z.B mit ner zweiten Schleife usw. bekomm das aber einfach nicht hin.

Wichitg, ich brauch die outputs als Spaltenvektor sonnst kann ich sie später nicht Plotten.

Und gibt es da nen Grund warum ich nicht bei 0 starten kann also:
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 24.06.2021, 19:13     Titel:
  Antworten mit Zitat      
1:0.1:10 müssten ziemlich genau 91 Werte ergeben.
0:0.1:10 sollten 101 Elemente ergeben.


Außerdem versuchst du dann mit gebrochenen Zahlen auf L(x) bzw output(x,1) zuzugreifen => mit gebrochenen Zahlen kann man nicht indexieren.
=> lass es doch von 1 .. 100 laufen.

Code:

for x = 1:100
    [L(x)]=Deformationsgradient(x/10)

    // Outputs fuer Schub
    output(x,1)=L(x)
end
 


(Alternativ belege dir outputs als 100-Elementiger Spaltenvektor vor (zeros(100,1)).)

@ Null starten:
Dazu gibt es sicherlich große Erörterungen in den weiten des Internets. Da die Frage, ob man bei Null anfängt zu zählen, oder so wie es im Alltagsleben üblich ist bei 1, in den gängigen Hochsprachen unterschiedlich gehandhabt wird (meist aber start bei Null).
Grundsätzlich aber gibt dies dann noch häufiger den typischen +1 Fehler!

Sogar du begehst schon diesen Fehler in deiner Frage: 0 bis 10 ergibt 11 Werte - das dürfte dir wohl auch nicht helfen.
Du musst dich entscheiden, ob du von
0 bis 9
oder 1 bis 10
deine 10 Elemente anordnest.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
tomtom1986
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.05.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2021, 19:50     Titel:
  Antworten mit Zitat      
Mein Problem liegt hapsächlich darin das ich die Funktion mit sehr sehr kleinen Zahlen füttern muss. Vermutlich Zahlen von 0-2.

Die Funktion ist eigentlich deutlich länger und ich bekomme eine Spannung und eine Dehnung ausgegeben. Die ich dan Plotten muss mit Dehnungen bis 0,02 deshalb muss ich die Funktion mit sehr kleinen Zahlen füttern. Aber mit 0-2 würde ich eben nur 3 Ergebnisse bekommen und das entspricht keiner Sinnvollen Spannung Dehnungs Kurve.

Ich denke das eine Zahlenreihe mit:
Code:
for x = 0:0.01:2
end

sinnvoll wäre.

Die genaue Anzahl der Outputs ist nicht so wichtig es geht nur darum das eine sinnvolle Spannung Dehnungskurve rauskommt. Also irgendwas zwischen 50-500 Outputs.

Irgendwie wäre ich der Meinung das es über zwei for-Schleifen gehen könnte also eine for-Schleife für 100 Outputs und eine for Schleifen mit 100 x-Werten die von 0-2 gehen. Hab das schon mit ein paar Varianten versucht aber noch nicht fündig geworden das es auch Funktioniert. Sind dann alle 100 Werte gleich oder nur der Letzte Wert sinnvoll alle anderen 0 oder sonnst was.

Oder gibt es eine andere Möglichkeit das ich eine Funktion mit einer Zahlenreihe füttere und dann aus einer 3x3 Matrix die sich in der Funktion befindet immer auf die Selbe Position der Matrix zugreife und mit die durchgerechneten Werte ausgeben lasse und zwar so, dass ich anschließend einen Plot mit den Werten aus der Funktion machen kann. Mit linspace hab ich das auch schon mal versucht und nicht hinbekommen da ich da einzelne Werte bekomme und immer nur einzelne Punkte in extra Fenstern plotten kann und keine Kurve in einem Fenster.
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 - 2024 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.