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

Function zur Matrixmultiplikation

 

hallo123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 16:11     Titel: Function zur Matrixmultiplikation
  Antworten mit Zitat      
Hallo Leute,
ich muss eine Funktion zur Matrixmultiplikation schreiben. Es soll gepräft werden ob A*B überhaupt existiert.
Ich darf allerdings keine vorgefertigten Matlabfunktionen zur Matrixberechnung verwenden.

Ich hab jetzt mal folgendes probiert:
Code:
function [C] = mmult(A,B)
A = input('Geben Sie die Matrix A ein:');
B = input('Geben Sie die Matrix B ein:');
[ra,sa] = size(A);
[rb,sb] = size(A);
if sa == rb
    for i = 1 : ra
        for j = 1 : sb
           C(i,j) = A(i)*B(j);
        end
    end
    fprintf('A * B = \n');
    disp(C);
elseif fprintf('Error!');
end
end


Ich muss sagen, dass ich noch ein Neuling in Sachen programmieren bin und ich irgendwie gar nicht mit den for Schleifen zurecht komme.

Ich hoffe ihr könnt mir ein paar Tipps geben.

MfG


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.12.2011, 17:11     Titel:
  Antworten mit Zitat      
Hallo,

ein Anfang ist das ja schon mal.
Es ist allerdings sinnlos, die Matrizen als Eingabeargumente zu übergeben UND sie zur Laufzeit eingeben zu lassen, da solltest du dich (vorzugsweise für die erste Variante) entscheiden.
Nun ergeben sich die Einträge der Matrix C ja nicht nur aus einem Produkt von je einem Element von A und B, sondern als Summe von mehreren solcher Produkte; siehe z.B. hier:
http://de.wikipedia.org/wiki/Matrix.....29#Matrizenmultiplikation
Desweiteren solltest du C vorbelegen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
hallo123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 17:21     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort.

Zitat:
Es ist allerdings sinnlos, die Matrizen als Eingabeargumente zu übergeben UND sie zur Laufzeit eingeben zu lassen, da solltest du dich (vorzugsweise für die erste Variante) entscheiden.


Okay aber das ist nicht dringend notwendig oder? Sprich es trägt nicht dazu bei dass das Programm nicht läuft oder?

Zitat:
Es ist allerdings sinnlos, die Matrizen als Eingabeargumente zu übergeben UND sie zur Laufzeit eingeben zu lassen, da solltest du dich (vorzugsweise für die erste Variante) entscheiden.


Jo mir ist klar, dass ich quasi diese Summenformel mit Hilfe von for-Schleifen umschreiben muss. Allerdings verstehe ich nicht so ganz wie. Brauche ich 2 oder 3 vorschleifen? Und wie kann ich dann die einzelnen Elemente noch addieren?

Zitat:
http://upload.wikimedia.org/wikipedia/de/math/b/1/3/b13959ba2f284e6b586b23eb1de93a5f.png


Das verstehe ich leider nicht. Könntest du das vielleicht ein bisschen genauer erklären?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.12.2011, 17:58     Titel:
  Antworten mit Zitat      
Hallo,

du kannst die Elemente entweder in einer weiteren for-Schleife aufsummieren
Code:
C(i,j) = 0;
for k = 1:m
C(i,j) = C(i,j) + ...;
end

oder den SUM-Befehl verwenden, um die Elemente vektorisiert zu berechnen und dann aufzusummieren.

Was genau verstehst du an der Formel nicht? Du musst sie für jedes i und j implementieren, so wie du ja auch schon angefangen hast.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
hallo123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2011, 14:11     Titel:
  Antworten mit Zitat      
Sodala ich hab jetzt schon alles probiert, aber ich bekomm es einfach nicht zum laufen. Wenn ich für A eine 3x3 und für B eine 3x2 Matrix eingebe bekomme ich immer folgende Fehlermeldung:
Code:
??? Attempted to access B(1,3); index out of bounds because size(B)=[3,2].

Error in ==> mmult at 11
                C(i,j) = C(i,j) + A(i,k) * B(k,j);

Error in ==> run at 74
    evalin('caller',[script ';']);

Ich bin schon am verzweifeln. Kann mir bitte jemand sagen, was ich konkret falsch gemacht habe? Hier nochmal mein endgültiger Code:
Code:
function [C] = mmult(A,B)
A = input('Geben Sie die Matrix A ein:');
B = input('Geben Sie die Matrix B ein:');
[ra,sa] = size(A);
[rb,sb] = size(A);
if sa == rb
    for i = 1 : ra
        for j = 1 : sb
            C(i,j) = 0;
            for k = 1 : sa
                C(i,j) = C(i,j) + A(i,k) * B(k,j);
            end
        end
    end
    fprintf('A * B = \n');
    disp(C);
elseif fprintf('Error!');
end
end


Bitte um Hilfe Smile

MfG
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.12.2011, 15:52     Titel:
  Antworten mit Zitat      
Hallo,

kleiner Tipp: das Problem liegt in dieser Zeile:

Code:
[rb,sb] = size(A);


Grüße,
Harald
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.