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

Fitten von numerischen Verteilungsfunktionen

 

giant_zorg
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2013, 15:25     Titel: Fitten von numerischen Verteilungsfunktionen
  Antworten mit Zitat      
Hallo zusammen

Hoffentlich kennt jemand von euch die Funktionen, die ich suche, im Internet und auf der Matlab-Hilfeseite hab ich nichts passendes gefunden. Und hoffentlich bin ich hier im richtigen Teil des Forums gelandet.

Ich hab Daten aus MS-Experimenten, an welche ich eine Verteilungsfunktion fitten möchte. Später sollten es mehrere sein, damit man verschiedene Signale sozusagen auseinanderrechnen kann, aber wenn es mal nur mit einem Peak geht, wäre es schon mal ein Anfang.
Die Verteilungsfunktion bekomme ich mit isotopicdist(), allerdings nur in numerischer Form als Kurve, das heisst ich hab einen Vektor mit den y-Werten der Verteilung.

Gibt es nun eine Funktion, welche mir diese (numerische) Kurve an meine experimentellen Daten anpassen (skalieren und verschieben) kann?

Falls das nicht geht, wie mache ich eigene Verteilungsfunktionen, welche ich anschliessend z.B. mit fitdist() aufrufen kann?

Ich möchte wenn möglich keine der vorgefertigten Verteilungsfunktionen verwenden, wenn das geht. Und wenn, dann muss sie asymmetrisch sein, was die Sache nicht einfacher macht.

Grüsse giant_zorg
Private Nachricht senden Benutzer-Profile anzeigen


Caravaggio
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 20.04.12
Wohnort: Braunschweig
Version: R2012a
     Beitrag Verfasst am: 27.01.2013, 16:05     Titel:
  Antworten mit Zitat      
Bin mir nicht sicher, ob ich dich richtig verstanden habe, aber du möchtest Messwerte bzw. deine numerischen Werte an eine beliebige analytische Verteilung fitten und deren Parameter erhalten?
Private Nachricht senden Benutzer-Profile anzeigen
 
giant_zorg
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2013, 17:00     Titel:
  Antworten mit Zitat      
Ja. Ich möchte meine Daten an eine Verteilungsfunktion fitten, welche ich aber nur numerisch, nicht analytisch habe
Private Nachricht senden Benutzer-Profile anzeigen
 
Caravaggio
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 20.04.12
Wohnort: Braunschweig
Version: R2012a
     Beitrag Verfasst am: 27.01.2013, 17:52     Titel:
  Antworten mit Zitat      
Du musst doch irgendwelche Parameter haben, womit du fitten kannst..ich verstehe es ehrlich gesagt noch nicht...

- Du hast (numerische) Messdaten, die einer bestimmten Verteilung unterliegen
- Diese bestimmte Verteilung liegt dir auch nur numerisch vor
- Du möchtest die Messdaten an diese numerische Verteilung fitten (hierfür brauchst du Parameter an denen Du drehen kannst)

Soweit habe ich es verstanden oder habe ich bei den beiden Punkten schon einen Fehler in meiner Logik?!
Private Nachricht senden Benutzer-Profile anzeigen
 
giant_zorg
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2013, 18:11     Titel:
  Antworten mit Zitat      
Ich versuchs mal mit ein bisschen code:

str.C = 700;
str.H = 1100;
str.N = 200;
str.O = 200;
str.S = 10;

[~,~,rho] = isotopicdist(str, 'ShowPlot', true, 'Resolution', 0.6);
rhoX = d(:,1);
rhoY = d(:,2);

Dann hast du in rhoY die Dichteverteilungsfunktion mit rhoX der aktuellen x-Achse. Als Parameter kann man dann einführen:
Eine Verschiebung in x-Richtung (z.B. rhoX + a)
Eine Streckung der x-Achse (z.B. rhoX * b)
Eine Streckung in y-Richtung (z.B. rhoY * c)

Das gibt die Dichtefunktion. Die soll nun an einen Datensatz angepasst werden.

Ich denke, ich könnte selber eine Least-square methode schreiben, welche das Problem löst, aber dann hätte ich keine Ahnung über die Fehler. Ausserdem hätte ich doch gehofft, das Matlab eine Lösung dafür hat.
Private Nachricht senden Benutzer-Profile anzeigen
 
Caravaggio
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 20.04.12
Wohnort: Braunschweig
Version: R2012a
     Beitrag Verfasst am: 27.01.2013, 18:32     Titel:
  Antworten mit Zitat      
ich würde es einfach mit
Code:

machen. Ist das so, wie Du es dir vorstellst?

Code:
function [x fval] = Beispiel()

str.C = 700;
str.H = 1100;
str.N = 200;
str.O = 200;
str.S = 10;

[~,~,Verteilung] = isotopicdist(str, 'ShowPlot', true, 'Resolution', 0.6);

% Erzeuge Messdaten
A = 5;
B = 2;
C = 3;
Mess(:,1) = Verteilung(:,1)*B + A;
Mess(:,2) = Verteilung(:,2)*C;

%Startwerte
x(1) = 1; % a
x(2) = 1; % b
x(3) = 1; % c
x0 = [x(1) x(2) x(3)];

Optionen = optimset('Display','iter','TolFun',1e-12,'TolX',1e-12,'MaxFunEvals',5000,'MaxIter',5000);
[x fval] = fminsearch(@(x) Kostenfunktion(x,Verteilung,Mess),x0,Optionen);
end

function Fehler = Kostenfunktion(x, Verteilung, Mess)

% Parameter
a = x(1);
b = x(2);
c = x(3);

% Kostenfunktion
Fehler = sum(1./2.*(Verteilung(:,1)*b + a - Mess(:,1)).^2 + 1./2.*(Verteilung(:,2)*c - Mess(:,2)).^2);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
giant_zorg
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2013, 19:32     Titel:
  Antworten mit Zitat      
Danke vielmals!

Ich habs mir ein bisschen anders vorgestellt. Insbesondere die neue Indexierung in der Kostenfunktion werde ich noch einbauen müssen. Danach muss es noch auf mehrere Verteilungen überlagert ausgeweitet werden.

Aber das ist mein Problem, nicht deines. Du hast mir einen guten Anfang geliefert, den Rest kann ich da nicht auch noch sofort erwarten
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 28.01.2013, 09:39     Titel:
  Antworten mit Zitat      
Hallo,

ich habe deine Frage so verstanden, dass du eine Menge von Merkmalsausprägungen vorliegen hast. Nun möchtest du eine Dichtefunktion dazu finden, hast aber Unkenntnis über den Verteilungstyp. Es liegt also keine Modellfunktion vor, dessen Parameter du an die Daten anpassen kannst. Bei Unkenntnis des Modells greift man zu sog. nicht-parametrisierten Ansätzen.

Falls du die Statistic Toolbox hast, wäre das hier etwas für dich:
http://www.mathworks.de/de/help/stats/ksdensity.html

Was du indes mit der Verschiebung und Skalierung gemeint hast, verstehe ich nicht. Meintest du damit Transformationen der Ausprägungen. Z-Werte, Exponential-Transformation zur Beseitigung der Schiefe?

Es liegt doch eine statistisches Problem vor?

Grüße, Marc
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 - 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.