www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - Error: Improper assignment...
Error: Improper assignment... < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Error: Improper assignment...: Idee
Status: (Frage) beantwortet Status 
Datum: 09:48 Fr 20.03.2015
Autor: Rocky14

Hallo Leute,
ich soll im Rahmen einer Projektarbeit einige Beispielsortimente mit Optics clustern. Ich habe im Internet dazu einen fertig implementierten Algorithmus gefunden:

% Written by Michal Daszykowski
% Department of Chemometrics, Institute of Chemistry,
% The University of Silesia
% December 2004


function [RD,CD,order]=optics(x,k)

[m,n]=size(x);
CD=zeros(1,m);
RD=ones(1,m)*10^10;

% Calculate Core Distances
for i=1:m
    D=sort(dist(x(i,:),x));
    CD(i)=D(k+1);  
end

order=[];
seeds=[1:m];

ind=1;

while ~isempty(seeds)
    ob=seeds(ind);        
    seeds(ind)=[];
    order=[order ob];
    mm=max([ones(1,length(seeds))*CD(ob);dist(x(ob,:),x(seeds,:))]);
    ii=(RD(seeds))>mm;
    RD(seeds(ii))=mm(ii);
    [i1 ind]=min(RD(seeds));
end  

RD(1)=max(RD(2:m))+.1*max(RD(2:m));


function [D]=dist(i,x)

% function: [D]=dist(i,x)
%
% Aim:
% Calculates the Euclidean distances between the i-th object and all objects in x
% Input:
% i - an object (1,n)
% x - data matrix (m,n); m-objects, n-variables     
%                                                                
% Output:
% D - Euclidean distance (m,1)

[m,n]=size(x);
D=(sum((((ones(m,1)*i)-x).^2)'));

if n==1
   D=abs((ones(m,1)*i-x))';
end

Leider ist mir noch nicht so ganz klar, was da gemacht wird. Was generell bei Optics gemacht wird, habe ich verstanden. Nur finde ich die Schritte hier leider nicht wieder. Da ich ein absoluter Matlab Neuling bin, wollte ich erstmal versuchen, den Code zum Laufen zu bringen und mir erst dann Gedanken zu machen, ob er überhaupt stimmt. Einfach  nur so zur Übung. Leider erhalte ich folgende Fehlermeldung:

>> OpticsAlgorithmus(Beispielsortiment,3)
Improper assignment with rectangular empty matrix.

Error in OpticsAlgorithmus (line 25)
RD(1) = max(RD(2:m))+.1*max(RD(2:m));

Habt ihr vielleicht eine Idee, wie ich das lösen kann?
Falls ihr mehr Infos zu Optics benötigt, sagt mir Bescheid :)

        
Bezug
Error: Improper assignment...: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:48 Fr 20.03.2015
Autor: Rocky14

Ich weiß nicht warum - ich habe dieselbe Funktion jetzt nochmal unter einem anderen Namen abgespeichert und erhalte nun folgendes Ergebnis:
optics(x,4)

ans =

  Columns 1 through 13

   10.8113    0.1440    0.2817    0.0437    0.5044    0.1875    0.0371    0.0459    0.4629    0.2002    0.1627    0.3620    0.1282

  Columns 14 through 26

    0.0995    0.0296    0.0371    0.0286    0.1087    0.1282    0.1282    0.0195    0.1057    0.0195    0.1092    0.0459    0.1282

  Columns 27 through 39

    0.0192    0.0286    0.0459    0.1204    0.0609    0.0579    0.0882    0.1222    0.2290    0.0877    0.1167    0.1081    0.1630

  Columns 40 through 52

    0.2625    0.6593    0.1222    0.1207    0.2588    0.0609    0.1414    0.1167    0.3125    0.0882    0.0530    0.9040    0.1188

  Columns 53 through 65

    0.1188    0.1222    0.0877    0.1035    0.1212    0.0882    0.1118    9.8284    0.1414    0.0530    0.1222    0.2815    0.0609

  Columns 66 through 70

    0.0882    0.0530    0.1559    0.0921    0.1414

Das ist aber leider nicht das, was rausgeworfen werden sollte:
Output:
% RD - vector with reachability distances (m,1)
% CD - vector with core distances (m,1)
% order - vector specifying the order of objects (1,m)

Offensichtlich habe ich nur order als Ergebnis erhalten :(

Bezug
        
Bezug
Error: Improper assignment...: Antwort
Status: (Antwort) fertig Status 
Datum: 08:12 Mo 23.03.2015
Autor: naf

Hallo Rocky!

Ich denke Du solltest dir erstmal kurz die Grundzüge von Matlab aneignen. Der Grund, warum du jetzt nicht alle Mengen von der Funktion zurück kriegst ist, dass Du diese von der Funktion gar nocht verlangt hast:

bei Matlab kann rine funktion sowohl mehrere Parameter entgegen nehmen wie auch zurückgeben: [result1, result2, result3] = funktionsname(argument1,argument2,...)

wenn du z.B von der Funktion das zweite und dritte Resultat möchtest aber das erste nicht, schreibst du;

[~,B,C]=funktionsname(1,2,3)

wenn du nur 
A=funktionsname(1,2,3) schreibst, kriegst du entsprechend nur A.

Konkret für deinen Fall:

[RD,CD,order]=OpticsAlgorithmus(argumente,...)

dann wird das klappen. 
Gruss
 

Bezug
                
Bezug
Error: Improper assignment...: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:36 Mo 23.03.2015
Autor: Rocky14

Vielen vielen Dank für deine Hilfe! Es hat geklappt!
Weißt du  zufällig auch, wie ich mir diese Ergebnisse jetzt als Graph zeichnen lassen kann? plot und figure funktionieren nicht.

Lese mich, wie von dir geraten, zur Zeit in Matlab ein, aber habe noch nichts Passendes gefunden ;)

Bezug
                        
Bezug
Error: Improper assignment...: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:07 Mo 23.03.2015
Autor: Rocky14

Ich habe jetzt durch folgenden Befehl eine Grafik erhalten.
subplot(2,2,1);
[RD,CD,order] = optics(Beispielsortiment,2);
bar(RD(order))
title('mind 2 pro Cluster');
subplot(2,2,2);
[RD,CD,order] = optics(Beispielsortiment,3);
bar(RD(order))
title('mind 3 pro Cluster');
subplot(2,2,3);
[RD,CD,order] = optics(Beispielsortiment,4);
bar(RD(order))
title('mind 4 pro Cluster');
subplot(2,2,4);
[RD,CD,order] = optics(Beispielsortiment,5);
bar(RD(order))
title('mind 5 pro Cluster');

Damit erhalte ich eine Grafik "4 in 1".

Meine Frage: Was macht bar(RD(order)) genau?
Offensichtlich erhalte ich ein Balkendiagramm. Werden in diesem Balkendiagramm RD und order miteinander verknüpft?

Bezug
                                
Bezug
Error: Improper assignment...: Antwort
Status: (Antwort) fertig Status 
Datum: 23:16 Mo 23.03.2015
Autor: naf

Das klingt doch schon mal gut. Ich wollte dich even auf folgende Seite aufmerksam machen: https://github.com/alexgkendall/OPTICS_Clustering?files=1

aber du scheinst den plot ja schon selber in den griff bekommen zu haben. Ansonsten schau dir mal die Matlab beispiele der funktionen "scatter" und "dendrogram" an.

zu deiner frage: 
order ist eine liste von indizes und du greifst damit auf die werte an den entsprechenden stellen von RD zu.

simples beispiel:
du hast ein vektor A = [6,1,2,4,3] und willst auf den wert an stelle zwei zugreifen, das machst du mit A(2) was dann also 1 wär.(ja, matlab startet bei 1 ubd bicht wie die meisten programmiersprachen bei 0) Du kannst aber auch an mehrere stelle. Zugreifen zum beispiel die dritte und vierte: A([3,4]) was dir dann [2,4] gibt. Du kannst dafür aber auch eine variable verwenden: b=[3,4] und dann gibt A(b) entsprechend [2,4]. Dein order ist also ein vektor von indizes mit der gleichen länge/anzahl einträgen wie RD. In diesem fall zum beispiel möchten wir nach grösse ordnen, das heisst wir definieren c=[2,3,5,4,1] (hab ich jetzt manuell geschaut an weöcher position jeweils die nächst tiefere ziffer steht. Dann wär A(c) also [1,2,3,4,6].

genau das macht die optics funktion

Bezug
                                        
Bezug
Error: Improper assignment...: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 09:23 Di 24.03.2015
Autor: Rocky14

Vielen Dank für deine Hilfe.
Ich habe auch  mal den Link ausprobiert - aber erhalte nur Fehlermeldungen.
Und zwar folgende:

>> [SetOfCluster, RD, CD, order] = cluster_optics3(Beispielsortiment, 4,15)
Undefined function 'cluster_optics3' for input arguments of type 'table'.

>> [SetOfCluster, RD, CD, order] = cluster_optics3(Beispielsortiment1, 4,15)
Undefined function 'cluster_optics3' for input arguments of type 'double'.

>> [SetOfClusters, RD, CD, order] = cluster_optics3(Beispielsortiment1, 4,15);
bar(RD(order));
figure;
%Cycle through all clusters
for i = 2:length(SetOfClusters)
    bar(RD(order(SetOfClusters(i).start:SetOfCluster(i).end)));
    pause(0.5)
end
Undefined function 'cluster_optics3' for input arguments of type 'double'.

Muss ich das Beispielsortiment irgendwie anders speichern?

Bezug
                                                
Bezug
Error: Improper assignment...: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:20 Do 26.03.2015
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
                                        
Bezug
Error: Improper assignment...: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 09:32 Di 24.03.2015
Autor: Rocky14

Ich habe festgestellt, dass ich vergessen habe, den "Current Folder" zu laden. Jetzt macht das Programm zwar was, aber am Ende wirft es trotzdem nur Fehler raus:
[SetOfClusters, RD, CD, order] = cluster_optics3(Beispielsortiment1, 4,15);
bar(RD(order));
figure;
%Cycle through all clusters
for i = 2:length(SetOfClusters)
    bar(RD(order(SetOfClusters(i).start:SetOfCluster(i).end)));
    pause(0.5)
end
Calculating reachability for all points.
Error using load
Number of columns on line 38 of ASCII file optics.m must be the same as previous lines.

Error in cluster_optics3 (line 6)
load('optics.m');


Bezug
                                                
Bezug
Error: Improper assignment...: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:20 Do 26.03.2015
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]