|
Autor |
Matrix quadrieren |
|
damian89
Ehemals Aktiv  Dabei seit: 12.03.2020 Mitteilungen: 53
 | Themenstart: 2020-03-12
|
Hi,
ich müsste ein kleines Skript schreiben wo ich eine Matrix mittels einer Schleife quadriere. Ich habe bereits ein kleines Skript geschrieben:
a=([1 2 3; 4 5 6; 7 8 9])
f= quadrat(a)
function [f] = quadrat(a)
f= a*a
end
Aber erstens funktioniert das nicht und ich müsste dies noch mittels einer Schleife berechnen. Kann mir jmd helfen?
|
Profil
|
Diophant
Senior  Dabei seit: 18.01.2019 Mitteilungen: 10690
Wohnort: Rosenfeld, BW
 | Beitrag No.1, eingetragen 2020-03-12
|
Hallo und willkommen hier im Forum!
Vorneweg: Experte bin ich nicht. Mir kam gerade aber seltsam vor, dass du eine Funktion erst aufrufst und dann erst definierst. Folgerichtig ergab ein Test mit GNU Octave, dass der Code beim ersten Mal einen Fehler erzeugt und beim zweiten Durchgang funktioniert.
Jetzt könnte man das umdrehen, also zuerst die Funktion definieren und dann aufrufen. Letzteres ist aber nicht notwendig, da schon die Definition eine Ausgabe erzeugt.
Aber wie gesagt: das habe ich jetzt mit Octave getestet.
Übrigens gibt es hier sog. Quelltextbereiche, die sind genau für solche Code-Beispiele vorgesehen. Das sieht dann so aus:
Dein Code:
\sourceon Matlab
a=([1 2 3; 4 5 6; 7 8 9])
f= quadrat(a)
function [f] = quadrat(a)
f= a*a
end
\sourceoff
Meine Alternative:
\sourceon Matlab
a=([1 2 3; 4 5 6; 7 8 9])
function [f] = quadrat(a)
f= a*a
end
\sourceoff
Ausgabe:
\sourceon Matlab
f =
30 36 42
66 81 96
102 126 150
>>
\sourceoff
Gruß, Diophant
|
Profil
|
ligning
Senior  Dabei seit: 07.12.2014 Mitteilungen: 3542
Wohnort: Berlin
 | Beitrag No.2, eingetragen 2020-03-12
|
Kannst du bitte die exakte Aufgabenstellung, den genauen Programmcode, die verwendete Software (Matlab oder doch Octave) und eine genaue Fehlerbeschreibung (besser als "funktioniert nicht") posten?
|
Profil
|
damian89
Ehemals Aktiv  Dabei seit: 12.03.2020 Mitteilungen: 53
 | Beitrag No.3, vom Themenstarter, eingetragen 2020-03-12
|
Aufgabenstellung:
Schreiben Sie eine Funktion quadrat(A) die eine Matrix berechnet, deren Einträge die Quadrate von A sind. Benutzen Sie dazu Schleifen. Erstellen Sie eine alternative Implementierung mittels des Punkt-Operators.
Das Skript wäre in Matlab zu schreiben, dies habe ich auch versucht.
Naja ich bin mir nicht sicher ob mein Ansatz da überhaupt stimmt oder nicht.
|
Profil
|
ligning
Senior  Dabei seit: 07.12.2014 Mitteilungen: 3542
Wohnort: Berlin
 | Beitrag No.4, eingetragen 2020-03-12
|
Aha, es geht also um eine komponentenweise Quadrierung.
In Matlab kann man soweit ich weiß keine Funktionen in einem Script definieren. Und du sollst ja auch kein Script, sondern eine Funktion (als m-File) schreiben:
\sourceon Matlab
function y = quadrat(a)
y = a.*a;
end
\sourceoff
Das ist die übliche Variante. Du sollst das jetzt ohne .*, sondern dafür mit Schleifen schreiben. Das Grundgerüst wäre ungefähr so:
\sourceon Matlab
function y = quadrat(a)
y = % irgendwie sinnvoll initialisieren
for i = % schleife über die Zeilen
for j = % schleife über die Spalten
y(i,j) = % ja, was?
end
end
end
\sourceoff
Die Lücken kannst du sicher selbst füllen. Nochmals der Hinweis: So macht man das nicht, wenn es auch anders geht, weil das um Größenordnungen langsamer ist.
|
Profil
|
damian89
Ehemals Aktiv  Dabei seit: 12.03.2020 Mitteilungen: 53
 | Beitrag No.5, vom Themenstarter, eingetragen 2020-03-12
|
Danke für die Antwort
In etwa so?
\sourceon Matlab
A=(1 2 3; 4 5 6; 7 8 9)
function y = quadrat(a)
y = a*a;
for i = 1:3
for j = 1:3
y(i,j) = A
end
end
end
\sourceoff
Was muss ich hier genau eingeben? : y(i,j) = A? Kann mir jemand kurz erklären wie eine Schleife genau funktioniert?
Bzw. kann mir jmd einen Tipp geben wie ich als Matlab Neuanfänger mich in Matlab reinarbeiten kann?
Ich benötige zum Teil Stunden um kleinere Aufgaben zu lösen :/
thx
|
Profil
|
ligning
Senior  Dabei seit: 07.12.2014 Mitteilungen: 3542
Wohnort: Berlin
 | Beitrag No.6, eingetragen 2020-03-12
|
\quoteon(2020-03-12 17:37 - damian89 in Beitrag No. 5)
In etwa so?
\sourceon Matlab
A=(1 2 3; 4 5 6; 7 8 9)
function y = quadrat(a)
y = a*a;
for i = 1:3
for j = 1:3
y(i,j) = A
end
end
end
\sourceoff
\quoteoff
Die Funktion gehört in eine Datei namens quadrat.m. Die erste Zeile (mit dem A = ...) gehört nicht dazu. Dann gibst du in Matlab ein:
\sourceon Matlab
A=(1 2 3; 4 5 6; 7 8 9)
quadrat(A)
\sourceoff
Kritik zum Quellcode:
\sourceon Matlab
function y = quadrat(a)
y = a*a; % das ist nicht sinnvoll -- erstens funktioniert das nur für quadratische Matrizen, zweitens wird das Ergebnis nicht benötigt
for i = 1:3 % was ist mit Matrizen, die mehr als 3 Zeilen haben
for j = 1:3 % dto. für Spalten
y(i,j) = A % ???
end
end
end
\sourceoff
Falls es nicht klar ist, y soll am Ende der Funktion das Ergebnis enthalten. Du musst also y am Anfang auf die richtige Größe setzen (das kann theoretisch entfallen, dann wird y ggf. beim schreibenden Zugriff vergrößert, aber das sollte man auf jeden Fall vermeiden) und dann jedem Eintrag von y das Quadrat des entsprechenden Eintrags von a zuweisen.
Lies dir die Hilfe der Funktionen zero und size durch.
\quoteon
Was muss ich hier genau eingeben? : y(i,j) = A? Kann mir jemand kurz erklären wie eine Schleife genau funktioniert?
\quoteoff
Ich möchte hier keine Einführung für Programmieranfänger schreiben. Wenn du keine genaue Frage dazu hast, verweise ich auf die Matlab-Hilfe.
|
Profil
|
damian89 hat die Antworten auf ihre/seine Frage gesehen. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 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]
|