|
|
Problem: eine beliebige Matrixzeile(Spalte) definieren |
|
TeChierys |
Forum-Anfänger
|
|
Beiträge: 37
|
|
|
|
Anmeldedatum: 14.11.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.11.2013, 14:35
Titel: Problem: eine beliebige Matrixzeile(Spalte) definieren
|
|
Hallo liebe Matlabern,
Ich muss für meine Bachelorarbeit ein Matlab-Program schreiben, in dem ich den User eine Matrix eingeben und am Ende eine Einrangapproximation(rank-k-approximation) ausspucken lasse. Also der Algorithmus heißt Adaptive Cross Approximation.
Source dazu (seite 12 auf
http://www.mis.mpg.de/preprints/2006/preprint2006_46.pdf )
Ich bin so blöd und schaffe zunächst nicht einen Befehl herzuzaubern, der mir ermöglicht, eine beliebige Matrixzeile festzuhalten, und damit weiterzu rechnen.
Vielleicht kann mir da jemand helfen.
Meine email-adresse: georgekerschensteiner at gmail dot com
p.s. Falls jemand den Algorithmus leicht finde, bin ich auch bereit, gegen Bezahlung die Code zu kaufen. Aber erwarte nicht viel. Ich bin nur ein armer Student.
|
|
|
Verschoben: 14.11.2013, 14:40 Uhr von denny Von Programmierung nach Programmieraufträge |
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.11.2013, 14:42
Titel:
|
|
Hallo,
m-te Zeile:
n-te Spalte:
Grüße,
Harald
|
|
|
TeChierys |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 37
|
|
|
|
Anmeldedatum: 14.11.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.11.2013, 14:45
Titel:
|
|
Harald hat Folgendes geschrieben: |
Hallo,
m-te Zeile:
n-te Spalte:
Grüße,
Harald |
Danke Harald,
also damit definiere ich die m-te Zeile, kann ich dann einfach so weitermachen mit
x=random(m); machen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.11.2013, 16:28
Titel:
|
|
Hallo,
das lässt sich nicht beantworten ohne zu wissen, was du damit bezweckst.
In der Form wird es nicht laufen, weil dieser Aufruf von random nicht unterstützt wird.
Grüße,
Harald
|
|
|
TeChierys |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 37
|
|
|
|
Anmeldedatum: 14.11.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.11.2013, 13:01
Titel:
|
|
|
|
|
Was ich zunächst defieren will:
Startpunkt soll festgehalten werden an der erste Zeile, das hier funktioniert leider nicht, weil i keine Laufindex ist
Deshalb mache ich als alternative:
Das soll in eine While-Schleife eingepackt werden mit
while e größer gleich erf do
wähle von a_n die betragsmäßig maximale Stelle(Jetzt sind die a_n Spaltenvektor, zunächst wird a_1 wie oben definiert untersucht). Dann nehmen wir die Matrixzeile an Stelle dieses Malximalwerts abgezogen von b_n(jetzt erstmal b_1, was wir vorher ausgerechnet haben) multipliziert mit dem Maximalwert von a_n. Quasi bekommen wir einen Rest, was an dieser Zeile übrig bleibt, diese nennen wir dann b_2, also b_n wird rekursiv bestimmt durch [b_n+1=M(argmax(a_n,:)-max(a_n)*b_n]
Dann bestimmen wir den betragsmäßig Maximum von dem Restzeile, und definieren den als unsren Normierungsfaktor d(so ne Art wie Singulärwert). Zum Schluss wird dann a_n rekursiv ausgerechnet:
[a_n+1=(M(:;argmax(b_n+1)-a_n*max(b_n+1))/d]
Jetzt wird es kritisch:
wir prüfen das Stoppkriterium:
Wir nehmen einen beliebigen Eintrag aus der Orignalmatrix M, der nicht von den vorherigen Rechenschritte betroffen werden, also nicht auf die Zeilen und Spalten sein, die a_n getroffen sind, weil da der Rest mit dem Orginalmatrix sehr wahrscheinlich 0 ist. Also außerhalb bereits gewählte Zeilen und Spalten aber dennoch beliebig. Zum Beispiel M(8;17) Mit diesem Eintrag wird geprüft, wie groß der Differenz von neu ausgerechneten Rang-k-Approximation a_n*b_n mit der Orginalmatrix beträgt. Also:
erf=abs(M(8;17)-a_n(8)*b_n(17))
Dann soll e mit erf verglichen werden. das macht denk ich die While-Schleife. Habe aber die Schleife niht hinbekommen. System sagt mir, ich soll erf zunächst definieren. Wie geht das?
Output soll die Rang-k-Approximation:
Das ist latexcode, weiß noch net wie man summe in matlab schreibt...
Hoffe auf freundliche Hand
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|