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

Polyfit für eine anharmonische Schwingung erstellen

 

MAPu07
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 14.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2021, 12:16     Titel: Polyfit für eine anharmonische Schwingung erstellen
  Antworten mit Zitat      
Hallo Matlab Freunde,
weiß wer wie man einen Polyfit für eine anharmonische Schwingung erstellt? Ich habe eine Funktion für die anharmonsiche Schwingung mit Koeffizienten für den fminsearch erstellt, jedoch schaffe ich es leider nicht einen richtigen Fit für die Schwingung auszugeben... Wie kommt man auf die richtigen Koeffizienten für fminsearch? Für die fünf Koeffizienten wurden derzeit folgende Werte ausprobiert: [0.01 1 0.1 1 1]

Vielen Dank für jede Hilfe!

Anbei der derzeitige Polyfit Plot

Code:

%Bereinigung des Skripts
%-----------------------
clc; close all; clear variables;

%Laden der Messdaten
%-------------------
A1Daten;

%Definition der Zeitwerte t[s] und der Anfangsamplitude theta[rad] für die Fit-Funktion
%---------------------------------------------------------
t = (0:0.1:20);
theta = (-1:0.01:1);

%Messwerte für Zeit t[s] und Amplitude y[rad] definieren
%--------------------------------
t1 = A1Daten1(:,1);
y1 = A1Daten1(:,2);

%Berechnung der Winkelfrequenz für die Gleichung des anharmonischen Oszillators
w = sqrt(3.480666667/9.81)*(1-((1/16)*0.46675340186084.^2));


%Output der Koeffizienten und finale Fehler E aus den Funktionen
%---------------------------------------------------------------
[coeff01,E01] = fminsearch('funktion_A1',[0.01 1 0.1 1 1]);


%Input des Fitparameter in die jeweilige Funktion
%------------------------------------------------
y_fit01 = coeff01(1)+coeff01(2)*0.46675340186084*sin(coeff01(3).*w.*t)+coeff01(4)*(0.46675340186084.^2/192)*0.46675340186084*sin(coeff01(5)*3.*w.*t);

%---------------------------------------
%Plot der Funktion ausgeben
%---------------------------------------

% Plot erstellen
figure(1)
plot(t,y_fit01,t1,y1,'o');
ylabel('Theta (rad)');
xlabel('t (s)');


function [E] = funktion_A1(x0)

%Funktion für anharmonische Oszillator
%--------------------------

%Messdaten einlesen
%------------------
A1Daten;

%Messwerte für Zeit t[s] und Anfangsamplitude y[rad] definieren
%--------------------------------
t1 = A1Daten1(:,1);
y1 = A1Daten1(:,2);

%Zwischenrechnung für die Winkelfrequenz w
w = sqrt(3.480666667/9.81)*(1-((1/16)*0.46675340186084.^2));


%Fehler E für die Funktion des anharmonischen Oszillators
%---------------------------------

E= sum(((x0(1)+x0(2)*0.46675340186084*sin(x0(3).*w.*t1)+x0(4)*(0.46675340186084.^2/192)*0.46675340186084*sin(x0(5)*3.*w.*t1))-y1).^2);

end

 


AnharmonischeSchwingung.png
 Beschreibung:

Download
 Dateiname:  AnharmonischeSchwingung.png
 Dateigröße:  244.75 KB
 Heruntergeladen:  117 mal
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: 18.01.2021, 13:26     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe ein Problem mit der angesetzten Funktion. Du arbeitest mit sin-Termen, lässt aber keine Phasenverschiebung zu. Das kann also am Anfang nicht mit den Daten zusammenpassen, die mit einem Peak starten. Ich würde also cos statt sin verwenden oder eine Phasenverschiebung mit einbauen.
Mich verwundert übrigens, dass du zwei Schwingungen überlagerst. Ich erkenne in den Daten nur eine Schwingung mit leicht abnehmender Amplitude. Ich würde also Modell insgesamt also eher sowas wählen:
y = a * exp(-b*t) * cos(w*t)
y = (a*t + b) * cos(w*t)

Sofern die benötigten Toolboxen zur Verfügung stehen, sind lsqcurvefit oder fitnlm für diese Aufgabenstellung besser geeignet als fminsearch.

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.