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

Messwerte an Funktion anpassen durch Lsqcurvefit ..

 

Sonya

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2012, 17:08     Titel: Messwerte an Funktion anpassen durch Lsqcurvefit ..
  Antworten mit Zitat      
Hallo ihr lieben Helfer!


Ich habe folgendes Problem:


Ich habe jetzt schon öfter mit der Funktion lsqcurvefit Messdaten an eine Modellfunktion angepasst bzw. die zugehörigen Parameter der Modellfunktion berechnet aber das war mit 1 Argument.
Jetzt muss ich das ganze für eine Funktion mit 3 unterschiedlichen Argumente (Eingangsgröße) machen, es hat leide nicht funktioniert , bekomme immer Fehler Meldung .
ich habe eine Reihe von Meßdaten und eine nichtlineare Funktion mit 3 unbekannten Parametern.
Nun möchte ich die Parameter der Funktion als Zahlenwerte so ermitteln, dass der die Funktion am besten auf die Messdaten passt.

Finde die Parametern a(1), a(2) und a(3), so dass bei vorgegebenen X (meine 3 unterschiedliche Eingangsgröße als Matrix ) und Y (Messdaten) der Fehler zwischen der gerechneten Funktions-Y und gegebenen Y möglichst klein wird.(Methode der kleinste Quadrate)


wer kann mir helfen?
Gibt es alternative Matlab-Funktion, die das kann?

Danke und Gruß
Sonya

Das ist mein Versuch:

Code:


function RSSI=Fit(a,X)

Data=[[30, 30, 0 ,92.7];
[0 ,15, 90, 47.4];
[ 15 ,0, 0 ,83.4]];
X = Data(:,1:3);% Eingangsgröße
Y = Data(:,4);% Messdaten
a0=[20;15;300];%Startwerte

RSSI =(-0.0523.*sqrt((X(:,1)-a(1)).^2+(X(:,2)-a(2))^2)+7.7633).*sin(1.3017*X(:,3) + 2.1586) + ( -0.5239.*sqrt((X(:,1)-a(1)).^2+(X(:,2)-a(2)).^2) + 11.3191).*sin(2.005*a(3) +(-0.5827))+ (-1.5180.*sqrt((X(:,1)-a(1)).^2+(X(:,2)-a(2)).^2) + 100.9843);

[a,resnorm]=lsqcurvefit(@Fit,a0,X,Y)%Aufruf der Funktion


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.03.2012, 17:11     Titel:
  Antworten mit Zitat      
doppelposts sind nicht sehr sinnvoll
Private Nachricht senden Benutzer-Profile anzeigen
 
Sonya

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2012, 17:17     Titel: lsqcurvefit
  Antworten mit Zitat      
Sorry habe zuerst in falsche Forum gepostet deswegen
Sonya
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2012, 18:47     Titel:
  Antworten mit Zitat      
Hallo,

zwei Probleme:
1. Du hast Funktion und Funktionsaufruf gemischt.
2. In der Funktion war noch ein ^ statt .^


Code:
Data=[[30, 30, 0 ,92.7];
[0 ,15, 90, 47.4];
[ 15 ,0, 0 ,83.4]];
X = Data(:,1:3);% Eingangsgröße
Y = Data(:,4);% Messdaten
a0=[20;15;300];%Startwerte
[a,resnorm]=lsqcurvefit(@ToFit,a0,X,Y)%Aufruf der Funktion
 

mit

Code:
function RSSI=ToFit(a,X)

RSSI =(-0.0523.*sqrt((X(:,1)-a(1)).^2+(X(:,2)-a(2)).^2)+7.7633).*sin(1.3017*X(:,3) + 2.1586) + ( -0.5239.*sqrt((X(:,1)-a(1)).^2+(X(:,2)-a(2)).^2) + 11.3191).*sin(2.005*a(3) +(-0.5827))+ (-1.5180.*sqrt((X(:,1)-a(1)).^2+(X(:,2)-a(2)).^2) + 100.9843);
 


Achtung, die Ergebnisse sind wahrscheinlich noch nicht optimal. Das kann an nicht ausreichend guten Startwerten liegen.

Grüße,
Harald

P.S.: Wenn es eine Fehlermeldung gibt, dann diese bitte immer hier reinkopieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sonya

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2012, 17:03     Titel:
  Antworten mit Zitat      
Hallo,

sorry das ich zu spät beantworte, hatte Problem in meinem Laptop....

Danke schön , es hat gut funktioniert Smile ..
habe noch eine Frage und zwar:

um ich einen kleinen Fehler zwischen Messwerte und berechnete Funktionswerte erhalten zu können ..muss ich die Startwerte a(1), a(2 und a(3) wechseln bis ich ein klein '' resnorm'' bekomme oder wie?

Danke Gruß
Sonya
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.03.2012, 17:53     Titel:
  Antworten mit Zitat      
Hallo,

ja. Allerdings solltest du vorsichtig sein, wenn du 3 Parameter aus 3 (mit Ungenauigkeiten behafteten) Messwerten schätzt.


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sonya

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2012, 18:52     Titel:
  Antworten mit Zitat      
Hallo,

Okay....Danke sehr Smile


Gruß
Sonya
 
epsilon92
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 03.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2015, 15:18     Titel:
  Antworten mit Zitat      
##################################

In folge der Anmerkung von Winkow verweise ich auf ff Thread:

http://www.gomatlab.de/viewtopic,p,153380.html#153380

########################################

[size=7]Hallo,

ich denke der Beitrag von Sonya passt auch ganz gut zu meinem Problem, weswegen ich kein neues Thema öffnen möchte.

Ich habe eine vorgegebene Funktion mit 3 unbekannten Parametern, der den Zusammenhang zwischen y und x beschreibt.
y= a(1)+a(2)*ln(x)+a(3)*T*ln(x). T ist die Temperatur, bei welchem der Versuch gefahren wurde, also eine konstante Größe. Ich habe dazu Messwerte aufgenommen und möchte die Parameter der Funktion genau wie Sonya finden.
Bei vorgegebenen x und y (Messdaten) soll der Fehler zwischen der gerechneten Funktions-y und gegebenen y möglichst klein werden.(Methode der kleinste Quadrate)

Ich habe natürlich den Matlab-Code oben durchgespielt und es erscheint eine Fehlermeldung. s. Anhang

Ich hoffe mir kann jmd helfen und bedanke mich bei denjenigen schon einmal sehr herzlich!
[/size]

Zuletzt bearbeitet von epsilon92 am 04.08.2015, 17:08, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.08.2015, 15:36     Titel:
  Antworten mit Zitat      
hallo. bitte keinen alten thread karpern. sondern einen neuen aufmachen.
fehlermeldungen in einer doc anzuhängen ist sehr umständlich. man sollte es den lesern leicht machen und code und fehlermeldungen direkt posten. für anregungen kann ich den thread aus meiner signatur empfehlen.
grüße
_________________

richtig Fragen
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.