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;
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
du musst meinen beitrag nicht komplett zitieren. er steht direkt über deinem beitrag und ist nicht so schwer zu finden
du hast immernoch nicht gesagt welche ausgabe du meinst
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.
_________________
ok, bin noch etwas verloren hier 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:(
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
_________________
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?
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!
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!
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
_________________
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
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.