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

Spärlich besetzte Matrix via Glättung füllen

 

smaica
Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2014, 12:17     Titel: Spärlich besetzte Matrix via Glättung füllen
  Antworten mit Zitat      
Hallo,

ich habe eine sehr spärlich besetzte Matrix gegeben (lasst es etwa 50 von 100000 Werten sein, die besetzt sind).
Diese Matrix möchte ich nun füllen, so dass möglichst gut zwischen den einzelnen Werten interpoliert wird.

Ich habe ein beispiel einer solchen Matrix mal eingefügt. Diese enthält nun nur die Werte "10", ich habe allerdings auch Fälle, in denen die Werte variieren.

Versucht habe ich das ganze schon mit Griddata:

Code:
[X,Y]=meshgrid(0:1:100,0:1:100);
Z=griddata(X,Y,dat,X,Y,'cubic');


Das funktioniert allerdings bei mir nicht (vielleicht mache ich auch etwas falsch).

Kann mir jemand helfen?
Vielen Dank,
smaica

SollAusgeweitetWerden.zip
 Beschreibung:

Download
 Dateiname:  SollAusgeweitetWerden.zip
 Dateigröße:  762 Bytes
 Heruntergeladen:  251 mal
Private Nachricht senden Benutzer-Profile anzeigen


Supertyp
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 09.06.08
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 10.10.2014, 13:22     Titel:
  Antworten mit Zitat      
In deinem Anhang fehlen die daten, da ist nur die verknüpfung. Am besten auch ohne zippen ablegen.
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2014, 13:36     Titel:
  Antworten mit Zitat      
Ah okay, danke für den Hinweis. Da ich weder .mat noch .dat Dateien anhängen kann, habe ich das ganze mal als Excel-Tabelle angefügt.

SollAusgeweitetWerden.xls
 Beschreibung:

Download
 Dateiname:  SollAusgeweitetWerden.xls
 Dateigröße:  165.5 KB
 Heruntergeladen:  215 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Supertyp
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 09.06.08
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 10.10.2014, 13:47     Titel:
  Antworten mit Zitat      
Nimm zuerst mal die NaN raus und probier die Interpolation nochmal. Mit NaN kann Matlab nicht rechnen. Falls die NaN Null sein sollen geht das z.B. mit:

Code:
deine_matrix(isnan(deine_matrix))=0;
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2014, 13:52     Titel:
  Antworten mit Zitat      
Die NaN sollten ja eben nicht 0 sein, sonst versucht Matlab ja gegen 0 zu glätten.
NaN sind Orte an denen mir keine Daten zur Verfügung stehen.
Im Idealfall sollte ich bei der gegebenen Matrix am Ende überall 10 stehen haben. Sollten meine Werte im "oberen" Bereich z.B. 5 sein und unten 10, dann hätte ich gerne eine "abfallende" Oberfläche.

Ich will das ganze im prinzip zwischen den Werten interpolieren bzw extrapolieren an Orte, an denen ich keine Werte zur Verfüung habe.
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2014, 13:57     Titel:
  Antworten mit Zitat      
Hallo,

hat denn niemand eine Idee dafür?
Muss kein bestehender Code sein, mir hilft auch Brainstorming (;

Danke!
smaica
Private Nachricht senden Benutzer-Profile anzeigen
 
Supertyp
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 09.06.08
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 13.10.2014, 15:12     Titel:
  Antworten mit Zitat      
Als ein Beitrag zum Brainstorming, wie wärs damit:
Aus deinen Daten eine spärlich besetzte Matrix erzeugen ("Sparse Matrix")
und schauen was mit
Code:
scatteredInterpolant
oder dem veralteteten
Code:
TriScatteredInterp
geht.

Das sieht auch interessant aus:
http://stackoverflow.com/questions/.....interpolation-with-matlab
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2014, 17:54     Titel:
  Antworten mit Zitat      
SuperTyp - Name ist Program. Herzlichen Dank, ich habe es mit der Funktion inpaint_nans aus dem FileExchange gemacht: http://www.mathworks.com/matlabcent.....int_nans/test/test_main.m

klappt super!
smaica
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2014, 12:34     Titel:
  Antworten mit Zitat      
Hallo,

leider hat das ganze nur auf den ersten Blick mit einem ganz simplen Beispiel geklappt, mit meinen "realen" Daten gibt es Probleme, deswegen habe ich nun angefangen TriScatteredInterp zu nutzen.

Allerdings habe ich bei TriScatteredInterp das Problem, dass meine Ergebnismatrix mit den Daten (die Teilweise nur auf einer einzelnen Trajektorie bestehen, auf der Daten vorhanden sind) nicht gefüllt ist, sonern weiterhin NaN enthält, nur "zwischen" den Messwerten interpoliert ist. Also nicht extrapoliert.

Dazu meine Frage: Wie extrapoliere ich das Ergebnis mit TriScatteredInterp?

Im Anhang als Beispiel meine Matrix (DATA), die ich dann mit folgendem code analysiert habe:

Code:
known_ind=find(~isnan(DATA));
        [X, Y] = ind2sub(size(DATA),known_ind);
        Z=DATA(known_ind);
        us= TriScatteredInterp(X,Y,Z,'linear');
        ti = 1:1:100;
        [qx,qy] = meshgrid(ti,ti);
        qz = us(qx,qy);


        figure(k)
        mesh(qx,qy,qz);
        hold on;
        plot3(X,Y,Z,'o');
        hold off
 


Data.xls
 Beschreibung:

Download
 Dateiname:  Data.xls
 Dateigröße:  163 KB
 Heruntergeladen:  257 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Supertyp
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 09.06.08
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 14.10.2014, 14:53     Titel:
  Antworten mit Zitat      
Welche Version von MAttlab hast du? Laut Doku kann das neuere

Code:
scatteredInterpolant

auch extrapolieren.
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.