Antworte auf:  Addition von Vektoren in einer for-Schleife mit max und min-Bedingungen von Max1997
Forum:  Matlab, moderiert von: mire2

[Zur Forum-Gliederung] [Wie man Fragen beantwortet] [Themenstart einblenden]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                   
                  
              
Nachricht:


 
 


Input assistance tools (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-area] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-area][show-area] [Source code [num.]][?]
 Show Preview      Write using fedgeo formula editor or Latex.

Smilies for your message:
😃 😄 😁 🙂 🙃 😉 🤗 🤫 🤔 🙄 😴 🤒 😎 😮 😲 😂
🙁 😖 😒 😐 😡 👌 👍 👎 🤢 🤧 🥵 🥶 😵 🤯 😛 😷
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
Kitaktus
Senior
Dabei seit: 11.09.2008
Mitteilungen: 6852
Wohnort: Niedersachsen

 Beitrag No.5, eingetragen 2021-02-26 10:03    [Diesen Beitrag zitieren]

Ich frage nochmal konkreter:

Wenn A so aussieht
[6 2 1
 5 4 3]
und B so
[1 2 3
 6 5 4]

ist dann _ein_ Schritt, die A(1,1) zu B(1,1) und A(2,1) zu B(2,3) zu addieren
A =
[- 3 2
 - 4 1]
B =
[7 2 3
 6 5 9]
und im nächsten Schritt kommt A(1,2) zu B(1,2) und A(2,2) zu B(2,2)?

Wenn ja, musst Du nur die beiden Schleifen vertauschen.

Wenn es aber wichtig ist, dass zuerst A(1,1), dann A(2,1), A(2,2), A(2,3), A(1,2) und am Ende A(1,3) verarbeitet wird - man also nacheinander die jeweils größten Einträge der ganzen Matrix A verarbeitet, dann wird der Code etwas komplexer.
Du müsstest erst die Zeilenmaxima bestimmen, dann das Maximum davon ermitteln und danach genau die Zeile behandeln, in denen das Maximum angenommen wird.
A = [55 31 24 16 14 11 10 8 5; 55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44; 11 102 30 35 64];
for n = 1:size(A,1)*size(A,2)
    Zeilenmaxima=max(A'); %max arbeitet spaltenweise, deher die Invertierung
    [wer_m,m]=max(Zeilenmaxima);
        [wer_a,wo_a]=max(A(m,:));
        [wer_b,wo_b]=min(B(m,:));
        B(m,wo_b) = wer_b+wer_a;
        A(m,wo_a)=-inf;
        A, B, pause % nur damit man sieht, was passiert
end
B



Max1997
Neu
Dabei seit: 23.02.2021
Mitteilungen: 3
 Beitrag No.4, eingetragen 2021-02-25 09:43    [Diesen Beitrag zitieren]

Hallo Kitaktus,

ja, die Einträge der ersten (zweiten) Zeile von A werden nur auf die erste (zweite) Zeile von B verteilt! Somit soll eine Addition je Zeile erfolgen.

Es kommt auf die Zwischenergebnisse je Schritt und auf das Endergebnis nach 9 Schritten an.

Wenn es nicht umsetzbar ist eine Lösung mit Zwischenergebnissen zu entwickeln, dann wäre ich mit einer Lösung zufrieden, die das Endergebnis liefert.


Kitaktus
Senior
Dabei seit: 11.09.2008
Mitteilungen: 6852
Wohnort: Niedersachsen

 Beitrag No.3, eingetragen 2021-02-25 08:53    [Diesen Beitrag zitieren]

Die Frage ist nicht klar genug.

Werden die Einträge der ersten (zweiten) Zeile von A nur auf die erste (zweite) Zeile von B verteilt?

Wenn ja, kommt es nur auf das Endergebnis an? Oder ist es z.B. wichitg zu wissen, wie das Zwischenergebnis nach 7 Schritten aussieht, bei denen fünfmal die Werte aus der ersten Zeile verrechnet wurden und zweimal die aus der zweiten?

Wenn nein, dann sieht das etwa so aus (Code ist ungetestet!):
Matlab
A = [55 31 24 16 14 11 10 8 5; 55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44; 11 102 30 35 64];
for m = 1:size(A,1)      
    for n = 1:size(A,2)      
        [wer_a,wo_a]=max(A(m,:));
        [wer_b,wo_b]=min(B(m,:));
        B(m,wo_b) = wer_b+wer_a;
        A(m,wo_a)=-inf;
    end
end
B
 


Max1997
Neu
Dabei seit: 23.02.2021
Mitteilungen: 3
 Beitrag No.2, eingetragen 2021-02-24 13:23    [Diesen Beitrag zitieren]

Vielen Dank Kitaktus für deinen Vorschlag,

es erfüllt den gewünschten Zweck!


Wie kann ich die Funktion umgestalten, wenn mir je Vektor mehr als nur eine Zeile vorliegen?

Hier bspw. die ursprünglichen Zeilenvektoren A und B jeweils ergänzt mit einer zusätzlichen Zeile:
A =
[55 31 24 16 14 11 10 8 5;
 92 84 65 60 45 31 22 16 12];

B =
[91 102 170 75 44;
124 45 83 60 38];

Die Berechnungen sollten weiterhin je Zeile erfolgen.


Kitaktus
Senior
Dabei seit: 11.09.2008
Mitteilungen: 6852
Wohnort: Niedersachsen

 Beitrag No.1, eingetragen 2021-02-23 21:33    [Diesen Beitrag zitieren]

Die Funktionen max und min haben zwei Ausgabeparameter, den Wert des Maximums bzw. Minimums und die Stelle an der das Maximum bzw. Minimum angenommen wird. Gibt es mehrere solche Stellen, so wird eine davon ausgegeben.
Das könnte man dann so umsetzen:
Matlab
A = [55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44];
for n = 1:length(A)      
    [wer_a,wo_a]=max(A);
    [wer_b,wo_b]=min(B);
    B(wo_b) = wer_b+wer_a;
    A(wo_a)=-inf;
    B
end


Max1997
Neu
Dabei seit: 23.02.2021
Mitteilungen: 3
 Themenstart: 2021-02-23 20:37    [Diesen Beitrag zitieren]

Hallo liebe Leute,

ich habe folgende For-Schleife erstellt und komme leider nicht mehr weiter voran.
Mein Ziel ist es den maximalen Wert aus A mit dem minimalen Wert aus B zu addieren. Dies soll solange passieren bis alle Zahlen aus A auf die minimalen Zahlen aus B draufaddiert sind.

Das ist meine Zwischenlösung:

A = [55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44];
for n = 1:length(A)                        
    B(B == min(B)) = min(B) + max(A)
    A = A(A < max(A))                    
end

Das Ergebnis nach der sechsten Iteration lautet:
B = [115 116 170 117 115].

Ab hier sollte die nächste Addition folgen und zwar der Zahl 10 aus Vektor A mit der 115 aus Vektor B. Es soll die 115 gewählt werden mit dem geringsten Abstand zur nächsten Zahl, somit die B(1,1).

Wenn mehrere Werte minimal sind, dann muss einer der Werte gewählt werden, in Abhängigkeit von dem unmittelbaren Nachbarwert mit geringsten Unterschied.

Wie kann man es realisieren?
Damit das Ergebnis der siebten Iteration folgendermaßen aussieht und die for-Schleife fortgesetzt wird:
B = [125 116 170 117 115].


 


 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]