Ich bin noch kompletter Anfänger und komme bei einem wohl sehr einfachen Problem leider nicht weiter.
Ich habe 2 Matrizen A und B. Solange in der Matrix A ein Wert größer ist als z.B. 400, soll bei Matrix B ab einer bestimmten Zeile (z.B. ab Zeile 2), jeder Wert der Zeile mit -1,-2,-3,-4...etc. subtrahiert werden.
Matrix B sollte dann beispielsweise so aussehen:
200 200 200
199 199 199
198 198 198
197 197 197 (ab hier ist A(i) = 400)
197 197 197
197 197 197
..und so weiter
Das einzige was mir einfiel, ist eine Matrix zu erstellen, die entsprechend jede Zeile mit 1,2,3..etc. subtrahiert. Das ist aber 1. etwas umständlich und 2. macht der Code immer noch nicht das was ich eigentlich haben will.
Code:
% ab Zeile 601 soll jede Zeile von B um 1,2,3,4...abnehmen bis Bedingung A(i) > 400 nicht mehr erfüllt ist
mir zumindest ist nicht klar, was du erreichen möchtest. Bisher verstehe ich nur, dass ab irgendwann irgendwo irgendwas abgezogen werden soll.
Wenn du am Anfang zwei Matrizen hast, wäre es hilfreich, einen ausreichenden Ausschnitt von beiden zur Verfügung zu stellen. Dann noch das gewünschte Ergebnis, und das ganze dürfte viel klarer werden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Matrix A wird im Verlauf des Codes noch berechnet und ist unter anderem eine Funktion von B. Dieser Code steht schon und funktioniert.
Ich möchte ihn aber folgendermaßen überarbeiten:
B soll schrittweise ab Zeile 601 verringert werden, sobald ab einer bestimmten Zeile (Bsp. ab Zeile 800) die Werte von A über 400 betragen und das solange bis die Werte der letzten Zeilen und der letzten Spalte (bpsw. Zeilen 1100 bis 1201 und Spalte 100) von A = 400 sind.
Matrix B sollte dann bspw. so aussehen (natürlich als 1201x100 Matrix):
300 300 300
300 300 300
299 299 299
298 298 298
297 297 297 (ab hier Bedingung erfüllt)
297 297 297
297 297 297
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken.
sobald ab einer bestimmten Zeile (Bsp. ab Zeile 800) die Werte von A über 400 betragen
Was soll das genau heißen? Dass ein Wert ab dieser Zeile über 400 ist? Oder alle? Diese Zeile eingeschlossen oder nicht?
Welcher Ausschnitt der Ergebnismatrix wird angezeigt?
Mein ehrlicher Eindruck ist, dass das Problem nur in einer für Dritte klar verständlichen Logik formuliert werden muss und die Umsetzung in MATLAB dann quasi trivial ist.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Mein ehrlicher Eindruck ist, dass das Problem nur in einer für Dritte klar verständlichen Logik formuliert werden muss und die Umsetzung in MATLAB dann quasi trivial ist.
Ja das glaube ich auch.
Zitat:
Dass ein Wert ab dieser Zeile über 400 ist? Oder alle?
Es sind definitiv alle Werte ab dieser Zeile über 400. Es soll geprüft werden, ob mindestens ein Wert über 400 ist. In den letzten Zeilen darf kein einziger Wert mehr über 400 sein.
Zitat:
Diese Zeile eingeschlossen oder nicht?
Ja, diese Zeile eingeschlossen.
Zitat:
Welcher Ausschnitt der Ergebnismatrix wird angezeigt?
Versteh diese Frage nicht.
Am Ende werden A und B über die Zeit geplottet, d.h. über alle Zeilen (jede Zeile stellt 1 s dar) und für A über die 1. 50. und 100. Spalte und bei B über die letzte 100. Spalte. Im Anhang ist der Plot.
A soll bspw. (hier im Plot ab der 400. s also 1000. Zeile) "langsam" wieder auf den Ursprungswert (hier 320) gebracht werden.
Da A eine Funktion von B ist, soll B bspw. hier ab Zeile 800/Sekunde 200 pro Sekunde/pro Zeile um 1 abnehmen, bis zumindest in A in den letzten Zeilen kein einziger Wert mehr über 320 ist.
Zusammenfassung:
- Prüfen, ob in A ab bspw. Zeile 1000 mindestens ein Wert über 400 ist
- Wenn ja: B ab bspw. Zeile 800 pro Zeile um 1,2,3,4,.... verringern (1.Zeile mit -1, 2. Zeile mit -2, 3. Zeile mit -3, usw..)
- Verringerung stoppen wenn in A in den letzten Zeilen (bspw. Zeile 1100 bis 1201) alle Werte = 400 sind
Tut mir echt leid, dass ich mich nicht so verständlich ausdrücken kann. Ich hoffe es ist jetzt einiges klarer geworden.
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
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.