Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

MATLAB und Mathematik kompetent einsetzen

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Werte auf minimalen Wert addieren

 

Mathias2021quq

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2021, 16:24     Titel: Werte auf minimalen Wert addieren
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem bei dem ich nicht weiß wie ich es umsetzten könnte.

Input
Code:

A = [55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44];
 


Erste Iteration:
Den Wert aus A(1,1) nehmen und auf den niedrigsten Wert aus B draufaddieren.
Code:
B =[91 102 170 75 99];


Zweite Iteration:
Den Wert aus A(1,2) nehmen und auf den niedrigsten Wert aus B (der ersten Iteration) draufaddieren.
Code:
B =[91 102 170 106 99];


Dritte Iteration:
Den Wert aus A(1,3) nehmen und auf den niedrigsten Wert aus B (der zweiten Iteration) draufaddieren.
Code:
B =[115 102 170 106 99];


Die Durchläufe weiter vornehmen bis alle Werte aus A auf B draufaddiert sind.

Hinweis!
Nach der sechsten Iteration liegen zwei identische Werte innerhalb des Vektors B vor.
Und zwar:
Code:
B =[115 118 170 117 115];

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

Siebte Iteration:
Den Wert aus A(1,7) nehmen und auf den niedrigsten Wert aus B (der sechsten Iteration) draufaddieren.
Code:
B =[115 118 170 117 125];


Das Ergebnis nach der neunten Iteration müsste der folgende Vektor sein:
Code:
B =[123 118 170 122 125];


Danke für Eure Tipps!
Mathias


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 610
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2011a
     Beitrag Verfasst am: 22.02.2021, 17:43     Titel:
  Antworten mit Zitat      
Was hast du denn bereits versucht?
Welche Fehlermeldungen kommen, wo genau kommst du bei deinem Code nicht weiter?
_________________

LG
Martina

„Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt.“ (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Mathias2021quq

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2021, 17:56     Titel: Ansatz fehlt
  Antworten mit Zitat      
Mir fehlt der Ansatz. Matlab ist ein Neuland für mich. Ich weiß wie das Ergebnis sein soll, aber die Umsetzung in MATLAB kenne ich nicht.

Es wäre sehr nett, wenn ihr mir paar Tipps oder Gedankenanstöße geben könntet.

Gruß
Mathias
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 610
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2011a
     Beitrag Verfasst am: 22.02.2021, 18:02     Titel:
  Antworten mit Zitat      
https://de.mathworks.com/learn/tutorials/matlab-onramp.html

Insbesondere der Teil 4 Vektoren und Matrizen.
_________________

LG
Martina

„Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt.“ (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Mathias2021quq

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2021, 12:00     Titel:
  Antworten mit Zitat      
Ausgangslage ist immer noch der Input:

Code:

A = [55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44];
 


Manuelle Ermittlung:
Code:

B(1,5) = min(B) + A(1,1);   % Erste Iteration
B(1,4) = min(B) + A(1,2);   % Zweite Iteration
B(1,1) = min(B) + A(1,3);   % Dritte Iteration
B(1,5) = min(B) + A(1,4);   % Vierte Iteration
B(1,2) = min(B) + A(1,5);   % Fünfte Iteration
B(1,4) = min(B) + A(1,6);   % Sechste Iteration
 


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



Ich möchte, dass Matlab nach der ersten Iteration, für die zweite Iteration
automatisch die nächste bzw. nächstniedrigere Zahl aus A (somit 31) für die Addition auswählt und auf die niedrigste Zahl aus B (aus der ersten Iteration) addiert! Dies sollte für die nachfolgenden Schritte genau so erfolgen.

Wie könnte man es so umsetzen, dass ich die Spaltenzuweisung für A wie auch für B nicht manuell eingeben muss?

.
 
Mathias2021quq

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2021, 19:11     Titel:
  Antworten mit Zitat      
Das ist meine Zwischen-Lösung:

Code:

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:
Code:

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).

Wie kann man es realisieren?
Damit das Ergebnis der siebten Iteration folgendermaßen aussieht und die for-Schleife fortgesetzt wird:
Code:

B = [125 116 170 117 115]
 



.
 
Mathias2021quq

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2021, 21:16     Titel: For-Schleife mit Bezug auf Matrizen mit Min und Max-Addition
  Antworten mit Zitat      
Lösung:

Code:

A = [55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44];
for n = 1:length(A)      
    [was_a,wo_a]=max(A);
    [was_b,wo_b]=min(B);
    B(wo_b) = was_b+was_a;
    A(wo_a)=-inf;
    B
end
 



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:
Code:

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.


.
 
Jan S
Moderator

Moderator


Beiträge: 10.998
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: Heute 14:13     Titel: Re: Werte auf minimalen Wert addieren
  Antworten mit Zitat      
Hallo Mathias2021quq,

Iterativ immer denkleinsten Wert zu suchen ist nicht effizient. Stattdessen kann man den Vektor sortieren:
Code:
A = [55 31 24 16 14 11 10 8 5];
B = [91 102 170 75 44];
[sB, idx] = sort(B);
C(idx) = sB + A(1:numel(sB));


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

Wie soll dann das Endergebnis aussehen? Das ging wahrscheinlich mit dem fast dem gleichen Code, wenn du das zeilenweise meinst:
Code:
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];
[sB, idx] = sort(B, 2);
C = zeros(size(B));    % Pre-allocation
for iRow = 1:size(B, 1)
  C(iRow, idx(iRow, :)) = sB(iRow, :) + A(iRow, 1:size(sB, 2));
end

Gruß Jan
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.