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

lsqcurvefit Ausgleichskurve durch Messpunkte zwingen

 

B.G
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.09.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2019, 11:37     Titel: lsqcurvefit Ausgleichskurve durch Messpunkte zwingen
  Antworten mit Zitat      
Hallo zusammen,

Ich habe mehrere Messwerte die ich mit lsqcurvefit fitten lasse. Jetzt möchte ich die Kurve durch einen bestimmten Punkt zwingen, von dem ich weiß, dass dieser richtig ist. Weiß aber nicht so recht wie ich das anstellen solle. Ich habe leider keine aktuellen Beiträge dazu gefunden.

Vielen Dank schon mal für Eure Hilfe!

Beste Grüße

Benny
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2019, 13:01     Titel:
  Antworten mit Zitat      
Hallo,

wie sieht das Modell denn aus?
Wenn das ohne größeren Aufwand möglich ist, wäre es am einfachsten, die entsprechenden Modellparameter zu eliminieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
B.G
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.09.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2019, 13:26     Titel:
  Antworten mit Zitat      
Hallo Harald;

mein Code sieht wie folgt aus:

Code:
xdata=[0;86400;259200;604800;1209600;2419200];
ydata=[0;0.310650000000000;0.350600000000000;0.348100000000000;0.344790000000000;0.343800000000000];

x0=[5*10.^(-5),3];  
x = lsqcurvefit(@(x, xdata) sorptio(x, xdata),x0,xdata,ydata);
D=x(1);
h=x(2);
plot(xdata,y1data,'r*', zdata, kurve(zdata,D,h), 'b--')

function ydata=sorptio(x,xdata) % Funktion fitten
D=x(1);
h=x(2);
t=xdata(:);
n=0:11;
S=(2*n+1).^(-2) .* exp( (-((2*n+1).^2 * pi^2 * D .*t)/(h^2)));
S=sum(S,2);
ydata=1-S*(8/(pi^2));
ydata=reshape(ydata,size(xdata));
end

function ydata= kurve ( zdata,D,h)   % Funktion mit berechneten Parametern D und h darstellen
t=zdata(:);
n=0:11;
S=(2*n+1).^(-2) .* exp( (-(2*n+1).^2 * pi^2 * D .*t)/(h^2));
S=sum(S,2);
ydata=1-S*(8/(pi^2));
ydata=reshape(ydata,size(zdata));
end


Dabei möchte ich, dass die Fitkurve durch mein zweiten Messpunkt geht.

Beste Grüße

Benjamin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2019, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

da sollte es möglich sein, h durch Einsetzen des Punkts und Auflösen der Gleichung in Abhängigkeit von D anzugeben? Dann müsste man nur noch D finden.

Alternative: fmincon verwenden und die Bedingung, dass die Kurve durch den Punkt gehen muss, als Nebenbedingung festlegen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
B.G
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.09.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2019, 20:03     Titel:
  Antworten mit Zitat      
Vielen Dank!

Gibt es auch eine Möglichkeit die einzelnen Werte zu gewichten?


Beste Grüße

Benny
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2019, 20:08     Titel:
  Antworten mit Zitat      
Hallo,

bei lsqcurvefit meines Wissens nicht. Beim verwandten lsqnonlin kannst du auf 0 zu bringenden Komponenten mit einem Gewichtsvektor multiplizieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2019, 23:30     Titel:
  Antworten mit Zitat      
Hallo,

ein Problem übrigens bei dem Modell: wenn ich das richtig sehe, hast du eigentlich nur einen Parameter D/h^2.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
B.G
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.09.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2019, 11:58     Titel:
  Antworten mit Zitat      
Hallo,

hast du eine Idee wie ich es dann hinbekommen, dass ich D einzeln berechne? Denn h habe ich nicht. Habe es schon versucht mit umstellen und einsetzen in die Formel, aber dann kürzt sich bei mir das D raus. Möglicherweise habe ich es nur falsch umgestellt, aber bin mir bei dem zusammenfassen der Summenfunktion nicht ganz sicher.

Vielen Dank für Deine Geduld und Hilfe.

Beste Grüße

Benny
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.10.2019, 22:00     Titel:
  Antworten mit Zitat      
Hallo,

so wie ich das sehe, geht das allein mit dem Modell nicht. Wenn du h verdoppelst und D vervierfachst, kürzt sich das raus und es kommt wieder dasselbe raus. Du hast also im Grunde nur einen Parameter: D/h^2. Wenn dann ein D gegeben hast, kannst du ein h daraus ermitteln - oder umgekehrt. Beide aus Daten bestimmen geht jedenfalls nicht.

Meine anfängliche Idee, h aus dem Datenpunkt zu berechnen, funktioniert bei diesem Modell nicht. Ich war durch die vielen (teils unnötigen) Klammern durcheinander geraten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.