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

Symbolisch Integrieren: heaviside(...)*(1-heaviside(...))

 

XEM
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2011, 16:12     Titel: Symbolisch Integrieren: heaviside(...)*(1-heaviside(...))
  Antworten mit Zitat      
Hallo zusammen,

ich versuche für den Bewegungsverlauf eines Elektrogefährts die Bewegungsgleichungen aufzustellen.
Zugrunde liegen die Datenreihen der Distanzwerte. Der Bewegungsvorgang ist immer gleich. D.h. näherungsweise gleichmäßige Beschleunigung, halten der konstanten Geschwindigkeit, näherungsweise gleichmäßige Abbremsung. All das in Geradeausfahrt.
Für den angehängten Plot wurden die Distanzdaten einfach differenziert.

Ich würde gerne für Fittingzwecke eine Gleichung aufstellen, die dem Distanzvektorverlauf nahe kommt. Diese könnte man dann z.B. mit dem Fitting Tool als "Custom Equation" angeben.
Ich habe bereits den Beschleunigungsverlauf in eine Gleichung gepackt: Dieser stellt im Endeffekt zwei Rechtecke dar.
Das erste Rechteck besitzt die Höhe a1, beginnt bei T0 und endet bei T1. Das Zweite ist a2 hoch beginnt bei T2 und endet bei T3.
Code:

EQ_acc = sym((sqrt(a1)*heaviside(t-T0))*(sqrt(a1)-sqrt(a1)*heaviside(t-T1))+(sqrt(a2)*heaviside(t-T2))*(sqrt(a2)-sqrt(a2)*heaviside(t-T3)));
EQ_vel = int(EQ_acc,t);
EQ_pos = int(EQ_vel,t);
 

Nun ist meine Frage: Matlab kann die oben gezeigte Funktion nicht integrieren da bereits
Code:

int(sym(heaviside(t-1)*heaviside(t-2)))  
Probleme macht. Es gibt kein explizites Integral dafür. Per Hand komme ich auch nicht wirklich weiter...
Habt ihr eine Idee wie ich das ganze noch integrieren kann, wenn möglich symbolisch, sodass ich es als "custom equation" in der Fitting Toolbox verwenden kann?

Plot.png
 Beschreibung:

Download
 Dateiname:  Plot.png
 Dateigröße:  15.11 KB
 Heruntergeladen:  768 mal
Private Nachricht senden Benutzer-Profile anzeigen


Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2011, 22:46     Titel:
  Antworten mit Zitat      
Hallo,

naja die Sprungfunktion ist ja eine nichstetige Funktion. Matlab weis nicht welche Zeiten (T0,T1,T2,T3) vorliegen und kann daher die Gelichungen nicht vereinfachen. Gibst man direkt Zeitpunkte an, so ist die Lösung kein Problem:
Code:
int(simple(heaviside(t-2)*heaviside(t-3)),t)

Du solltest dir überlegen, ob du es mit der Sprungfunktion machen willst oder vielleicht die Optimization Toolbox nutzen, zum Beispiel
Code:
.
Per Hand sollte die Lösung auch kein Problem darstellen, das Integral von 1 sollte bekannt sein, du musst nur noch den Einschaltzeitpunkt einbringen Wink

Viele Grüße
Coja
Private Nachricht senden Benutzer-Profile anzeigen
 
XEM
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.12.2011, 13:36     Titel:
  Antworten mit Zitat      
Zunächst einmal vielen Dank für Ihre rasche Antwort.

Ich habe das Integrieren, so wie Sie es erwähnt haben ausprobiert. Leider wird auch dann kein explizites Integral gefunden...?
Code:

syms t;
int(simple(heaviside(t-1)*heaviside(t-2)));
 

Mach ich da was falsch oder funktioniert das nicht?

Könnten Sie evtl. den Vorschlag mit lsqnonlin etwas konkretisieren? Ich habe zwar etwas recherchiert, habe aber keine Vorgehensweise gefunden die ich auf mein Problem anwenden könnte. Dafür wäre ich sehr dankbar.

Grüße XEM
Private Nachricht senden Benutzer-Profile anzeigen
 
Coja
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 20.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2012, 23:23     Titel:
  Antworten mit Zitat      
Hallo,

also das explizite Integral beinhaltet natürlich wieder eine Sprungfunktion:
Code:
syms t;
Y=simple(heaviside(t-1)*heaviside(t-2));
int_Y=int(Y);
tn=0:0.1:5;
Yn=subs(Y,t,tn);
int_Yn=subs(int_Y,t,tn);
plot(tn,Yn,tn,int_Yn)


Mit
Code:
kannst du eine selbstdefinierte Funktion mit Messdaten füttern und dir Parameter (LS-)optimieren lassen.
Code:

Sprungfunktionen sind hierfür jedoch nicht geeignet.

Viele Grüße
COja
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.