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

Regression

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 13:12     Titel: Regression
  Antworten mit Zitat      
Hallo liebes Forum!

Ich bin noch ziemlich neu im Umgang mit Matlab und habe eine, wahrscheinlich ganz triviale frage:

ich habe zwei vektoren gegeneinaner geplottet:
x = 852, 780, 707, 713, 616, 485, 438, 462, 588, 352, 375, 163 ...
y = 0.8, 1.5, 0.1579, 0.30,0.29, 0.23, 0.24, 0.09, -0.03, -1.2, 0.66, 0.14 ...

und ich möchte jetzt keine regressionsgerade reinlegen, sondern eine kurve, die den verlauf folgt, ähnlich einer regressionsgraden. gibt es da in matlab auch eine möglichkeit das zu machen.

MFG


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 27.08.2012, 14:30     Titel:
  Antworten mit Zitat      
Scheint so, als suchtest du einen Glätter.
Code:
.

Viele Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.08.2012, 17:08     Titel: Re: Regression
  Antworten mit Zitat      
Hallo,

Es gibt unendlich viele Kurven, die dem Verlauf der Punkte ähnlich sind. Möchtest Du Polynom, wenn ja, welchen Grades? Dann siehe "help polyfit". Sollen alle Punkte getroffen werden, oder soll eine möglichst glatte Kurve durch die "Mitte" der Punkte gelegt werden?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 18:02     Titel:
  Antworten mit Zitat      
danke für eure Antworten!
Es sollte eine möglichst glatte Kurve durch die Mitte der Punkte gelegt werden. So in der Art der Bias, jedoch bekomme ich mit der Formel keine schöne Kurve hin!

Irgendwie komm ich nicht weiter, vielleicht habt ihr noch ein paar Tipps für mich.

MFG
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 08:42     Titel:
  Antworten mit Zitat      
hallo!

hab jetzt mal die function polyfit ausprobiert. Leider funktioniert das nicht bei mir, weil ich in meinen variablen NaN-werte habe und ich deshalb bei

Code:

p = polyfit(x,y,2)
f = polyval(x,p)
 


NaN-werte herausbekomme.
Die NaN-Werte bekomme ich, weil ich eine Divison durch Null habe, wenn ich jedoch die NaN-Werte als Null definiere, werde diese dann in der Graphik geplottet, was auch nicht sein sollte.

Definiere ich die NaN-Werte mit Null, bekomme ich Werte bei den beiden obrigen Funktionen, jedoch stimmt meine Graphik nicht. Lasse ich meine NaN-Werte, stimmt die Graphik, aber ich bekomme keine Kurve. Irgendwie dreh ich mich im Kreis und weiß leider nicht mehr weiter.

Ich bitte euch, noch um weitere Hilfe, da ich das Problem bis morgen gelöst haben sollte, und ich jetzt schon seit Mittwoch daranherum probiere!

thousand thx!!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.08.2012, 12:07     Titel:
  Antworten mit Zitat      
Hallo,

Für die Interpolation müssen die NaN-Werte ausgeschlossen werden:
Code:
index = ~isnan(y);
p = polyfit(x(index), y(index), 2)
f = polyval(x, p)

Nun könntest Du bei Bedarf "f(~index) = NaN" setzen. Aber ich vermute, dass das nicht notwendig ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 13:20     Titel:
  Antworten mit Zitat      
Hallo zusammen!

Danke, mit diesem Code funktioniert es schon mal, nur jetzt bekomme ich keine schöne glatte Kurve, wie in dem Beispiel in der Help-Funktion, sondern mehrere Kurven, die knapp übereinander liegen. Ein richtiges Strichgewirr.

Wie bekomm ich das in den Griff?

MFG
 
madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 28.08.2012, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

wie rufst du denn deine polyval funktion genau auf?
normalerweise müsstest du, beim aufruf von polyval(x,p) einen ergebnisvektor y zurück bekommen, der die länge von x hat.
wenn du den dann plottest hast du eignetlich nur eine kurve.
kannst du uns vllt. den ausschnitt deines code zeigen wo du die plots erzeugst?

grüße,

mad
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 18:10     Titel:
  Antworten mit Zitat      
hi,

mein code ist:

Code:


index = find(~isnan(yi));
p = polyfit(xi(index),yi(index),2);
f = polyval(p,x1(index));

figure
plot(xi,yi,'x')
hold on
plot(xi(index),f);
grid on

 


Die Schreibweise habe ich in der Matlab-Hilfsfunktion gefunden und übernommen.

Danke, MFG
 
madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 29.08.2012, 11:08     Titel:
  Antworten mit Zitat      
Hi Gast,

ich vermute mal die unschöne Darstellung liegt daran, dass du deine x-Messerwerte nicht sortiert hast.
Ich hab mal folgendes ausporbiert:

Code:

sortmepls= [xi;yi]';
sortmepls= sortrows(sortmepls,1);
xi = sortmepls(:,1);
yi = sortmepls(:,2);

index = find(~isnan(yi));
p = polyfit(xi(index),yi(index),2);
f = polyval(p,xi(index));

figure
plot(xi,yi,'x')
hold on
plot(xi(index),f);
grid on
 


ist zwar sicher nich die hübscheste Lösung (da umständlich lang) aber ich glaube es kann dir weiter helfen.


Grüße,

mad
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.08.2012, 11:36     Titel:
  Antworten mit Zitat      
Hallo madlab,

Code:
index = find(~isnan(yi));
% Effizienter ohne FIND:
index = ~isnan(yi);

Dies nennt man "logical indexing" und es ist im Allgemeinen deutlich schneller.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2012, 11:52     Titel:
  Antworten mit Zitat      
super, danke, hat funktioniert!!!!
 
madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 29.08.2012, 12:24     Titel:
  Antworten mit Zitat      
hi jan,

ich kenn logical indexing, hab ich hier von euch aus dem Forum gelernt. Smile
Ich habe mir den Code von unserem Gast nur nahezu 1 zu 1 kopiert und das sortieren davor gehängt ohne genauer zu schauen was besser wäre. ^^
Hast aber Recht, ist eine wesentlich schönere Lösung Smile

Grüße,

mad


P.S. ich glaube meine Tastatur klemmt einfach, manchmal klappts Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.08.2012, 17:07     Titel:
  Antworten mit Zitat      
Hallo madlab,

Du kannst den Text ja in Matlab verfassen und per Logical Indexing und der UPPER Funktion die Großbuchstaben erzeugen. Dann per CLIPBOARD-Befehl in die Zwischenablage kopieren und im Forum pasten.

Ich habe immer gewusst, dass man mit Matlab auch echte Aufgaben lösen kann! :-)

Gruß, Jan
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.