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

Maximalwerte ausgeben lassen

 

Studentin
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 09.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 10:40     Titel: Maximalwerte ausgeben lassen
  Antworten mit Zitat      
Hallo!
Könnte mir eventuell jemand mit dem folgendem Problem helfen: Ich habe eine Function mit verschachtelten Schleife und möchte, dass das Program nur einen maximalen Wert für jeden l-Schritt in Abhängigkeit von teta rausgibt. Um maximum zu finden habe ich folgende if-Bedingung ( siehe Kodeausschnitt unten). Mein Problem besteht darin, dass das Program rechnet bis zum maximalen Wert und bricht ab (das ist gut) aber es werden die werte davor auch gezeigt. Weis jemand wie ich den Kode schreiben soll damit die Werte vor dem maximum auch weggelassen werden?


Code:

.
.
.
    for  l=10:30
    mmax=0;
    for teta=45+fi/2:90
.
.
.
    m=Eahr/(Eah);
    if m>mmax
      mmax=m;  
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: 09.10.2015, 10:45     Titel:
  Antworten mit Zitat      
der code ist so nicht lauffähig. er erzeugt auch keine ausgabe. ich weis also nicht was du mit
Zitat:
aber es werden die werte davor auch gezeigt.
meinst.
bitte poste ein lauffähiges minimalbeispiel das das von dir beschriebene verhalten reproduziert.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Studentin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 09.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 13:44     Titel:
  Antworten mit Zitat      
Hier ist meine Funktion:
Code:
function Erddruck_W_H()
fileID = fopen('ergebnisse.txt','w');
fprintf(fileID,'Räumlicher Erddruck nach W+H, ky=ko\n');
fprintf(fileID,'%6s  %12s  %12s  %12s\r\n','l','tetamax','mmax','n');
fprintf('Räumlicher Erddruck nach Walz und Hock, ky=ko\n');
fi=input('Reibungswinkel Eingeben:\n');
delta=input('delta eingeben:\n');
for  l=10:30
    mmax=0;
    for teta=45+fi/2:90
    gamma=19;
    t=10;
    ky=1-sind(fi);
    k=cotd(teta)/(tand(delta)+cotd((teta)-(fi)));
    b=(2*ky*sind(fi))/sind((teta)-(fi));
    n=t/l;
    Eahr=k*gamma*l.^2/b*(n-1/b*(1-2.71828^(-b*n)));
    ka=tand(45-fi/2)^2;
    Eah=ka*gamma*t^2/2;
    m=Eahr/(Eah);
    if m>mmax
      mmax=m;  
    fprintf(fileID,'%6.2f  %12.3f  %12.3f  %12.3f\r\n',l,teta,mmax,n);
fopen(fileID);
    end
    end
end
end
Winkow hat Folgendes geschrieben:
der code ist so nicht lauffähig. er erzeugt auch keine ausgabe. ich weis also nicht was du mit
Zitat:
aber es werden die werte davor auch gezeigt.
meinst.
bitte poste ein lauffähiges minimalbeispiel das das von dir beschriebene verhalten reproduziert.
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: 09.10.2015, 14:27     Titel:
  Antworten mit Zitat      
du musst meinen beitrag nicht komplett zitieren. er steht direkt über deinem beitrag und ist nicht so schwer zu finden Smile
du hast immernoch nicht gesagt welche ausgabe du meinst
Code:
   fprintf(fileID,'%6.2f  %12.3f  %12.3f  %12.3f\r\n',l,teta,mmax,n);
fopen(fileID);

die syntax von fopen ist da sehr komisch. ich weis auch nicht wozu das da sein soll
fals du die ausgabe mit frintf meinst dann musst du halt nur am ende eine ausgabe in die datei erzeugen und nicht jedes mal wenn m mmax überschreitet.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Studentin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 09.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 15:03     Titel:
  Antworten mit Zitat      
ok, bin noch etwas verloren hier Smile Also was ich meinte sind die Ausgaben in Textdatei: z.B für l=10 gibt es 4 Schritte bis am 5. Schritt das maximum erreicht wird und so weiter...:
l tetamax mmax n
10.00 62.500 0.724 1.000
10.00 63.500 0.730 1.000
10.00 64.500 0.734 1.000
10.00 65.500 0.736 1.000
10.00 66.500 0.737 1.000
11.00 62.500 0.743 0.909
11.00 63.500 0.749 0.909
11.00 64.500 0.753 0.909
11.00 65.500 0.755 0.909
12.00 62.500 0.761 0.833
..ich will, dass nut der 5. Schritt vom Program gezeigt wird weis aber nicht wie ich dieses Befehl kodieren soll:(
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: 09.10.2015, 15:16     Titel:
  Antworten mit Zitat      
Zitat:
fals du die ausgabe mit frintf meinst dann musst du halt nur am ende eine ausgabe in die datei erzeugen und nicht jedes mal wenn m mmax überschreitet.

du machst jedes mal in deiner teta schleife eine ausgabe wenn m mmax überschrietet. wenn du aber das erst für alle teat ausrechen willst und dann das endergebnis in die datei schrieben willst musst du es halt nicht in der teta schleife haben sondern dahinter in der l schleife
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Studentin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 09.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 15:42     Titel:
  Antworten mit Zitat      
Ich will, dass zu jedem m>mmax dazugehöriger teta ausgerechnet jedoch nicht angezeigt wird. Da ab den 6. Wert m immer kleiner wird - bricht die Berechnung ab - das will ich auch. Was ich nicht will ist die Anzeige jedes m ( und teta, n,l)solange m mit jedem Schritt wächst bis zu dem m, dass kleiner wird als vorheriges m. Es muss nur der letzter größter m mit dazugehörigen teta, l und n angezeigt werden. Verstehst du was ich meine?
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: 09.10.2015, 15:44     Titel:
  Antworten mit Zitat      
Zitat:
Verstehst du was ich meine?

nein

Zitat:
Es muss nur der letzter größter m mit dazugehörigen teta, l und n angezeigt werden.

ich hab bereits gesagt das du dann das aus der teta schleife rauszihen musst.

Zitat:
Da ab den 6. Wert m immer kleiner wird - bricht die Berechnung ab - das will ich auch.

ich kann kein break in deine if bedingung sehen. ich sehe also nicht wo da eine berechnung "abbricht"
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Studentin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 09.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 16:50     Titel:
  Antworten mit Zitat      
Wenn ich die Bedingung :
if m>mmax
mmax=m;
aus der teta-Schleife rausziehe, dann bekomme ich unerwünschte Berechnungsvorgang/Ergebnisse. Aus der obengenannter Bedingung folgt, dass die Berechnung solange läuft bis m größten wert erreicht. Es tut mir leid aber im Moment weis ich nicht wie ich dies besser Erklären soll. Vielen Dank für die 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: 09.10.2015, 16:54     Titel:
  Antworten mit Zitat      
ich hab nicht gesagt das du die if bedingung rauszihen sollst sondern die ausgabe.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Studentin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 09.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 18:04     Titel:
  Antworten mit Zitat      
Wow! Das funktioniert, ich habe jetzt verstanden wie du es gemeint hast! Ich musste zwar noch eine Zusatzbedingung für teta schreiben aber das hat geklappt! Vielen Dank für die Hilfe und deine Geduld!
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: 09.10.2015, 18:18     Titel:
  Antworten mit Zitat      
na sihst du Smile
ich denke das man die innere schleife auch komplett weglassen kann
Code:
teta=45+fi/2:90;
gamma=19;
t=10;
ky=1-sind(fi);
k=cotd(teta)./(tand(delta)+cotd((teta)-(fi)));
b=(2*ky*sind(fi))./sind((teta)-(fi));
n=t/l;
Eahr=k.*gamma.*l.^2./b.*(n-1./b.*(1-2.71828.^(-b.*n)));
ka=tand(45-fi/2)^2;
Eah=ka.*gamma.*t.^2/2;
m=Eahr./(Eah);
[mmax,I]=max(m);
fprintf(fileID,'%6.2f  %12.3f  %12.3f  %12.3f\r\n',l,teta(I),mmax,n);

man kann denke ich auch die äußere weglassen. wenn man l in die richtige dimmension bringt so das bei den vektor operationen am ende eine mXn matrix rauskommt bei der n die dimension von l ist und m die diemension von teta.
grüße
_________________

richtig Fragen
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.