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

Matrix-Dimension Beibehalten, Aber Wie?

 

Dimension

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2016, 19:05     Titel: Matrix-Dimension Beibehalten, Aber Wie?
  Antworten mit Zitat      
Hallo zusammen,

kenne mich mit MATLAB kaum aus und würde mich sehr auf Eure Hilfe freuen Smile

Und zwar lautet die Aufgabe:
"B is a matrix given as [3 2 -1; -1 0 4; 4 4 7; 2 -2 -10]
Write a MATLAB function which check each element of the matrix one by one, and does the
following:
- subtract 5 if the value is positive
- add 5 if the value is negative
- makes the value equal to 15 if the value is zero."

Den Code habe ich folgendermaßen geschrieben:
Code:
B = [3 2 -1; -1 0 4; 4 4 7; 2 -2 -10]
for x = 1:12
    if B(x) > 0
        C(x) = [B(x) - 5];
    elseif B(x) < 0
        C(x) = [B(x) + 5];
    elseif B(x) == 0
        C(x) = [15];
    end
end
C


Allerdings erhalte ich für C:
C =
-2 4 -1 -3 -3 15 -1 3 4 -1 2 -5

Was muss ich tun um folgendes zu erhalten:
C =
-2 -3 4
4 15 -1
-1 -1 2
-3 3 -5


Kraftkleber
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2016, 20:09     Titel:
  Antworten mit Zitat      
Moin,

so funktioniert das.

Code:
%
B = [3 2 -1; -1 0 4; 4 4 7; 2 -2 -10]
 
 
[Zeilen,Spalten]= size(B)
 
for i=1:Zeilen
    for j=1:Spalten
        if B(i,j)>0
            C(i,j)=B(i,j)-5;
        elseif B(i,j)<0
            C(i,j)=B(i,j)+5;
        elseif B(i,j)==0
            C(i,j)=15;
        end
    end
end
 


Keine Ahnung ob es die effizienteste Lösung ist aber sie funktioniert.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Dimension

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2016, 21:54     Titel:
  Antworten mit Zitat      
Vielen lieben Dank Kraftkleber!
Hatte dies zwar ausprobiert, allerdings vergeblich. Wahrscheinlich war einfach irgendwas falsch Smile

Nun bin ich mit einem zweiten Problem konfrontiert: Und zwar muss ich die Absolutsummen aller vier Zeilen berechnen und die größte Summe finden. Bis dahin keine Probleme. Allerdings soll das Programm zudem noch sagen, welche Zeile den größten Wert hat.

Code bisher:
Code:
B = [3 2 -1; -1 0 4; 4 4 7; 2 -2 -10]

[rows, columns] = size(B);

for i = 1:rows
    for j = 1:columns
        if B(i,j) > 0
            C(i,j) = B(i,j) - 5;
        elseif B(i,j) < 0
            C(i,j) = B(i,j) + 5;
        elseif B(i,j) == 0
            C(i,j) = 15;
        end
    end
end
C

display('Absolute sum of the first row:');
S1 = sumabs(C(1,:))
display('Absolute sum of the second row:');
S2 = sumabs(C(2,:))
display('Absolute sum of the third row:');
S3 = sumabs(C(3,:))
display('Absolute sum of the fourth row:');
S4 = sumabs(C(4,:))

display('The largest absolute sum is the following:');
M = max([S1,S2,S3,S4])


Gruß
 
Kraftkleber
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2016, 22:45     Titel:
  Antworten mit Zitat      
Eine Möglichkeit wäre die Summe der Zeilen ans Ende der Zeile an deine Matrix zu schreiben und dann guckst du am Ende in welcher Zeile der größte Wert steht.

Ist sehr umständlich und ich denke das geht sicher einfacher aber ich bin halt auch noch nicht so lange dabei.
Private Nachricht senden Benutzer-Profile anzeigen
 
Dimension

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2016, 13:00     Titel:
  Antworten mit Zitat      
Ich habe mich wahrscheinlich etwas falsch ausgedrückt Rolling Eyes
Die absoluten Summen berechnet mir das Programm ja schon. Auch der Wert der größten Summe wird angezeigt. Was ich noch machen muss, ist, dass das Programm automatisch sagen soll, dass die Summe der zweiten Zeile die größte ist. Ich habe null Ahnung, wie ich das hinkriegen soll Sad
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.10.2016, 00:00     Titel:
  Antworten mit Zitat      
Hallo Dimension,

Wie wäre dies:
Code:
S = sum(abs(C), 2);
[maxS, Index] = max(S)

Beim Ausdruck "Maximum" ist es eine gute Idee, sich die Dokumentation des Befehls max anzuschauen. Dort findet man die Beschreibung des 2. Outputs.

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
.





 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.