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

Ergebnis der doppelten For-Schleife in Matrix speichern

 

parnhold
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2014, 01:21     Titel: Ergebnis der doppelten For-Schleife in Matrix speichern
  Antworten mit Zitat      
Hallo zusammen,

ich lasse innerhalb einer for schleife, eine weitere for schleife laufen.

Am Ende bekomm ich einen einzelnen Zahlenwert, welcher in einer 2D Matrix (31x31) abgespeichert werden soll.

Der bisherige Code ist folgender:
Code:


for i = 1:1:31
    for j = i:1:31

b = i*50 +450;
a = j*50 +450;
c = a/b;
%einige weitere Berechnungen
LS1 = po_all/po_d*100;
    end
end
 


LS1 ist dabei der gesuchte Wert. b muss immer groesser gleich a sein,

Die einzelnen Parametern zur LS1 Berechnung haengen dabei von a und b ab.
b lauft von 500 bis 2000 in 50er Schritten.
a lauft vom Startwert b bis zu 2000 in 50er Schritten.

Ziel ist am Ende eine Matrix oder Tabelle in der auf der x Achse a von 500-2000 und auf der y-Achse b von 500-2000 lauft.

Gefuellt werden die Raume mit den berechneten LS1 Werten. Sodass fuer z. bsp a = 500, Werte fuer b von 500:50:2000 berechnet wurden. Fuer a = 550 sollen Werte fuer b = 500:50:2000 berechnet werden usw.

Mein Problem:
Wenn ich jeden Zahlenwert einzeln berechne funktioniert alles. Aber das dauert ewig. Daher will ich, dass Matlab die Matrix mit den LS1 Ergebnissen selber aufstellt.

Mein Problem:
1) Die Schleife funktioniert nicht so wie ich das will. Es sind bei weiten nicht genug Ergebnisse.
2) ich weiss nicht wie ich Matlab die Matrix automatisch aufstellen lasse.

Vielen Dank fuer eure Hilfe
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.04.2014, 01:56     Titel:
  Antworten mit Zitat      
Zitat:
Die Schleife funktioniert nicht so wie ich das will.
das ist natürlich sehr eindeutig formuliert ^^
in deiner schleife erzeugst du nirgends eine matrix
Code:

LS1=zeros(31,31);
for i = 1:1:31
    for j = i:1:31

b = i*50 +450;
a = j*50 +450;
c = a/b;
%einige weitere Berechnungen
LS1(j,i) = po_all/po_d*100;
    end
end
 

alternativ kannst du dir mal die beispiele zu
Code:
angucken. vieleicht ist da etwas bei das du gebrauchen kannst. für mehr hilfe bräuchte man schon weitere infos über deinen code.
des weiteren sei angemerkt das i und j in matlab die imaginäre einheit darstellen und somit denkbar ungeeignet als variablennamen sind:)
grüße winkow
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
parnhold
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2014, 02:26     Titel:
  Antworten mit Zitat      
Hey,
erst einmal vielen vielen Dank fuer die schnelle Antwort =)

Das mit der Matrix erstellen klappt gut, nur das nun das Problem auftaucht, dass meine Ergebnisse nicht immer ein reiner Zahlenwert, sondern eine summe mit einer komplexen Zahl ist.

Das i und j habe ich bereits mit k und l ausgetauscht.

Hier nun der komplette Code:
Code:

LS1 = zeros (31,31);
for k = 1:1:31
    for l = k:1:31

b = k*50 +450;
a = l*50 +450;
c = a/b;

   Bvs = [1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1;
           0.0194 0.0237 0.0288 0.035 0.0421 0.0501 0.0587 0.0676 0.0767 0.0857];
 
   Bv= spline(Bvs(1,:),  Bvs(2,:) ,c);

%Die nachfolgenden Werte sind in meinem Versuch stets konstant und stehen jeweils in einer eigenen Zeile. Damit der Code nicht unnoetig lang wird, hab ich sie hier hintereinander geschrieben%
E = 70000;  do = 5.56;  di = 5.56;  das = 8; po = 0.001;  pi = 0;  Tma = 20;   Tas = 20;   pma = 0.1;   pe = 0.1;

po_d = po+pi;
d = do+di+das;
A = a*b;
v = A*(a^4)*Bv/(E*d^3);
Vma = A*das
roh_outside = (do^3)/((do^3)+(di^3));
roh_inside = (di^3)/((di^3)+(do^3));

a2 = 28.9*(das/Bv*(do^3)*(di^3)/((do^3)+(di^3)))^0.25;

phi = 1/(1+((a/a2)^0.25));

delta_p = (1-phi)*(roh_inside*po+roh_outside*pi)+phi*(Tas/Tma*pma-pe);

pas = pe + delta_p;

Vas = (Tas*pma*Vma)/(Tma*pas);

po_all = po - delta_p;

po_all_2 = (roh_outside+phi*roh_inside)*po_d;
pi_all_2 = (1-phi)*roh_inside*po_d;
LS1(l,k) = po_all/po_d*100;

    end
end
 


Das Problem tritt auf, sobald a groesser als b ist.
Dann ist die Interpolation bei Bv nicht mehr moeglich und es werden komplexe Zahlen generiert um das Problem zu loesen.

Das ganze sollte ich mit einer while-Schleife loesen koennen, unter der Bedingung das b<= a ist. Oder hat jemand eine andere/bessere idee?
Danke im voraus =)

Zuletzt bearbeitet von parnhold am 29.04.2014, 02:50, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.04.2014, 02:47     Titel:
  Antworten mit Zitat      
Zitat:
Wenn ich die Zahlenwerte einzeln ermittle, bekomm ich ganz normale Ergebnisse.
kannst du auch dazu bitte den code posten? irgendwo machst du etwas anders Smile matlab produziert bei gleichen berechnungen normaler weise auch gleiche ergebnisse Smile

noch ein paar anmerkungen: konstanten kannst du aus der schleife rausziehen. das frisst nur rechen zeit und bringt ja nix. außerdem bist du dir mit der verwendung von spline sicher? bei solchen extrapolationen muss man immer vorsichtig sein. wenn ich das so plotte siht das nicht so aus als würde das passen. zb:
Code:
c = 4;
   Bvs = [1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1;...
           0.0194 0.0237 0.0288 0.035 0.0421 0.0501 0.0587 0.0676 0.0767 0.0857];
   plot(Bvs(1,:),  Bvs(2,:))
   hold on
    plot(c,spline(Bvs(1,:),  Bvs(2,:) ,c),'+r')

vieleicht wäre
Code:
   c = 4;
   Bvs = [1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1;...
           0.0194 0.0237 0.0288 0.035 0.0421 0.0501 0.0587 0.0676 0.0767 0.0857];
   plot(Bvs(1,:),  Bvs(2,:))
   hold on
   plot(c,interp1(Bvs(1,:),  Bvs(2,:) ,c,'linear','extrap'),'+r')

besser
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
parnhold
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 15.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2014, 18:59     Titel:
  Antworten mit Zitat      
Hey =)

das mit spline funktioniert super und die Werte machen auch Sinn.

Generell konnte ich das auftretende Problem mit dne komplexen Zahlen loesen. Ich habe einfach die Parameter l und k ausgetauscht. Damit sind zwar die Achsen bei der Matrix vertauscht, aber alle Ergebnisse machen Sinn und korrekt =)

An der Stelle vielen Dank fuer die Hilfe =)

Voller Vorfreude darf ich mich jetzt in die Auswertun von 4500 Zahlenwerten stuerzen =)
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.