matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabError: Improper assignment...
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
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.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]