Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

MATLAB und Mathematik kompetent einsetzen

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matrix füllen mit zwei for-Schleifen. Parametervariation

 

DaveXY

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2021, 12:14     Titel: Matrix füllen mit zwei for-Schleifen. Parametervariation
  Antworten mit Zitat      
Hallo,

ich habe ein Problem beim Füllen einer Matrix mittels einer for-Schleife. Ich habe in anderen Threads leider nur ähnliche Probleme entdeckt, deren Lösung mir leider nicht weitergeholfen hat.

Und zwar sollen zwei Parameter variiert und jeweils daraus ein dritter Wert berechnet werden, den ich in der besagten Matrix abspeichern möchte.

hier dazu die relevanten Teile des Codes:
Code:

average_magnitude = zeros(steps_damp,steps_stif);
j=1;
for d = 0:100:1000
for k = 0:100:1000
%Hier steht steht die Berechnung für "average"
average_magnitude(j,:) = average;
end
j=j+1;
end
 


Ich möchte in den Zeile den Parameter d und in den Spalten k variieren. Die Werte steps_damp und steps_stif geben die Anzahl der variierten Werte eines Parameters an.
Die Dimension muss dann logischerweise steps_damp x steps_stif ergeben, was allerdings nicht der Fall ist.

Viele Grüße
David


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 674
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 05.03.2021, 12:41     Titel:
  Antworten mit Zitat      
Dann gib doch bitte mal an, wie groß steps_damp und steps_stif sein sollen.

Wenn du d und k jeweils in 100er-Schritten von 0-1000 laufen läßt, erhält man einen Vektor mit 11 Werten. Somit müssten deine beiden Werte steps_damp und steps_stif jeweils auch 11 sein.

Wenn nein, hast du vermutlich die Schrittweite falsch gewählt.
_________________

LG
Martina

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2021, 12:52     Titel:
  Antworten mit Zitat      
Je nach dem in welchem Bereich ich d und k variieren möchte, berechne ich es so:
Code:

anfangsdamp = 1e2;
enddamp = 1e5;
anfangssteifigkeit = 1e4;
endsteifigkeit = 5e6;
Schritt_damp = 1e4;
Schritt_Stif = 1e5;

steps_damp = ceil((enddamp-anfangsdamp)/Schritt_damp);
steps_stif = ceil((endsteifigkeit-anfangssteifigkeit)/Schritt_Stiff);
j=1;

aver_ampl = zeros(steps_damp,steps_stif);


for d_pri = anfangsdamp:Schritt_damp:enddamp
  for   k_pri = anfangssteifigkeit:Schritt_Stif:endsteifigkeit;

%... hier der Code, den ich zuvor hochgeladen habe
 


Für diese Werte kommt statt der Dimension 1x50, 10x50 heraus.

Die Werte eben, hatte ich nur als Beispiel eingesetzt. In dem Workspace habe ich überprüft, ob step_damp und step_stif die richtigen Werte haben.
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 674
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 05.03.2021, 15:29     Titel:
  Antworten mit Zitat      
Zitat:
Für diese Werte kommt statt der Dimension 1x50, 10x50 heraus.


Du initialisierst aber doch aver_ampl mit 10x50 ?
D.h. das muss so!?

Oder geht es dir um das ansprechen der richtigen Zelle der Matrix innerhalb der Funktion?
Denn im oberen Beispiel hast du nur die Zeile mir j angesprochen und alle Elemente über die Spalten mit dem gleichen Wert belegt.
Code:
aver_ampl(j,:) = ... % alle Spalten werden gleich belegt
aver_ampl(j,1)  = .... % nur die erste Spalte wird befüllt
aver_ampl(j,k_pri) = ... % die jeweils k_pri-te Spalte wird befüllt



Wie soll das Ergebnis aussehen?
Was weicht davon ab?

_________________

LG
Martina

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2021, 18:24     Titel:
  Antworten mit Zitat      
Hallo,

ich habe das Problem wahrscheinlich falsch formuliert. Herausbekommen möchte ich keine Matrix, die an der Stelle i,j die Amplitude für die Dämpfung i und die Steifigkeit j enthält. Da ich nur einen Bereich der Beiden Parameter später plotten möchte. Stattdessen soll in der i-ten Zeile, die Amplitude für den Dämpfungswert (Anfangsdämpfung+ i*Schrittweite_damp), mit den spaltenweise variierten Steifigkeiten (Anfangssteifigkeit +j*Schrittweite_stif) berechnen.

Ich habe es jetzt wie folgt gelöst. Der Einfachheit halber, ist Anzahl von Steifigkeiten und Dämpfungen identisch und die Matrix damit symmetrisch.

Code:

%Festlegen des Bereichs
anfangsdamp = 1e2;
enddamp = 1e5;
anfangssteifigkeit = 1e4;
endsteifigkeit = 5e6;

%festlegen der Anzahl an überprüften Parametern (für d_pri und k_pri gleich viele)
Schritte = 10;
Schrittweite_damp = (enddamp-anfangsdamp)/Schritte;
Schrittweite_stif = (endsteifigkeit-anfangssteifigkeit)/Schritte;

aver_ampl = zeros(Schritte);
Vari_k = zeros(Schritte,1);
Vari_d = zeros(Schritte,1);
j=1;

for d_pri = anfangsdamp:Schrittweite_damp:enddamp
   
f=1;

for   k_pri = anfangssteifigkeit:Schrittweite_stif:endsteifigkeit

% ... Berechnung average_amplitude, abh. von d_pri und k_pri ...

aver_ampl(j,f) = average_ampl;

Vari_d(j) = d_pri;
f=f+1;
end

Vari_k(j) = k_pri;
j=j+1;

end
 


In den Variablen Vari_d(j) und Vari_k(j) möchte ich die Dämpfungen und Steifigkeiten speichern, für die in der Matrix der Berechnete Wert average_ampl steht.

Die Matrix sieht jetzt damit richtig aus. Der Fehler lag wie du vermutet hast daran, dass ich in alle Spalten die gleichen Werte gespeichert habe.


Das letzte Problem, das ich noch habe ist, dass die Variable Vari_k(j), immer den selben Wert enthält, statt in jeder Zeile einmal die Schrittweite_stif dazu zu addieren.
 
DaveXY

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2021, 18:26     Titel:
  Antworten mit Zitat      
DaveXY hat Folgendes geschrieben:


Herausbekommen möchte ich keine Matrix, die an der Stelle i,j die Amplitude für die Dämpfung i und die Steifigkeit j enthält.


Sorry, es soll eine nicht keine heißen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 674
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 05.03.2021, 20:47     Titel:
  Antworten mit Zitat      
Dir geht es also um die Zeile
Code:
Vari_k(j) = k_pri;

?
Die muss immer den letzen Wert von k_pri enthalten, da erst nach Ende der Schleife geschrieben wird.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.