2016-03-21 6 views
1

Ich muss die Werte von a, b und c in den folgenden Gleichungen erhalten, damit die Sprungantwort des Systems mit der folgenden Abbildung übereinstimmt.Lösen des Gleichungssystems, um die gewünschte Sprungantwort zu erhalten

x_dot = a*x + b+u; 
y = c*x; 

Dabei ist x_dot die erste Ableitung von x.

Figure 1: Desired output

Ich habe versucht, dies durch Matlab zu erreichen und haben bisher die folgenden erreicht, a, b und c zu Testzwecken nur beliebige Werte für die Anwendung:

clc; 
close all; 
clear all; 

a=1; 
b=2; 
c=3; 

tspan = [0:0.01:12]; 

x_dot = a*x+b*xu; 
x = (a*x^2)/2 + b*u*x; 
y = c*x; 

f = @(t,x) [a*x(1)+b*x(2); c*x(1)]; 
[t, xa] = ode45(f,tspan,[0,0]); 

plot(t,xa(:,1)); 
+0

Haben Sie die Toolbox Systemidentifikation? Wenn ja, schauen Sie sich [dieses Video] (http://uk.mathworks.com/videos/estimating-state-space-and-polynomial-models-68898.html) an. Oder wenn Sie über die Optimierungs-Toolbox verfügen, können Sie eine Kostenfunktion mit der geringsten quadratischen Abweichung des Fehlers zwischen der vorhergesagten Schrittantwort und der gewünschten erstellen und versuchen, diese durch Optimierung der Parameter zu minimieren. – am304

+0

Ist das 'y' (von dem ich annehme, dass' x (2) 'im Code ist) auch eine zeitliche Ableitung im ersten Codeblock, so dass Sie seine rechte Seite in den' ode45'-Aufruf einschließen? Was ist "du" und was ist "xu" (was fehlt in dem System, das du gepostet hast)? Und auf welche Informationen haben Sie Zugriff, um die Abbildung anzupassen: nur die Zahl oder die anfängliche Steigung oder die Endwerte und die Steigung oder etwas anderes? – TroyHaskin

Antwort

0

Diese sicherlich klingt wie ein Parameterschätzungsproblem, wie bereits angedeutet. Sie möchten den Fehler zwischen dem mit Ihrer Ode modellierten Ergebnis und den Werten in Ihrem Diagramm minimieren (indem Sie die drei Parameter a, b und c an die Daten anpassen).

Ein erster Schritt besteht darin, eine Fehlerfunktion zu schreiben, die die Ode-Ausgabewerte übernimmt und vergleicht, wie nahe sie an den Datenwerten ist (Summe der Fehlerquadrate zum Beispiel).

Dann müssen Sie einen Bereich von a, b, c-Werten durchsuchen (was ein großer Suchraum sein kann) und Sie wählen die Menge von (a, b, c), die Ihre Fehlerfunktion minimiert möglichst nahe an Ihrem Graphen).

Viele Such-/Optimierungsstrategien existieren (.. z. B. genetischer Algorithmus/etc.).

Bitte beachten Sie, dass die Parameter Elemente reeller Zahlen sind (einschließlich negativer Werte und extrem großer oder kleiner Werte). Der große Suchraum ist normalerweise der Grund, warum diese Probleme schwierig zu lösen sind.
Auch ich denke, Sie müssen auf Anfangsbedingungen, z. [0,0] scheint nicht zu interessanten Ergebnissen zu führen. (Versuchen, ein = -0,5 b = 0,2 und c = -0,00000001, mit IC von [0,10], wie unten)

clc; 
close all; 
clear all; 

a=-0.5; 
b=0.2; 
c=-0.00000001; 

tspan = [0:0.01:12]; 

f = @(t,x) [a*x(1)+b*x(2); c*x(1)]; 
[t, xa] = ode45(f,tspan,[0,10]); 

plot(t,xa); 
hold on 
plot(t,4) 

Hier 10 ist der Ausgangspunkt der grünen Linie und blaue Linie beginnt bei 0 Was ich auch bemerken würde ist, dass der IC die Ergebnisse ändert .. also gibt es viele mögliche Lösungen für a, b, c gegebene IC.

Sieht interessant aus .. viel Glück.

ode plot

Verwandte Themen