2016-04-16 20 views
1

Notwendigkeit, das System von nicht-linearen Differentialgleichungen zu lösen:Matlab: Abschätzen Koeffizienten der nichtlinearen Differentialgleichungen

x1p = a1*u2*x1^1.3 + a2*u1 + a3*u3 
x2p = (a4*u2 + a5)*x1^1.3 + a6*x2 
x3p = (a7*u3 + (a8*u2-a9)*x1)/a10 

x1p, x2p & X3P sind Zeitableitungen von x1, x2 & x3, dh dx1/dt, dx2/dt & dx3/dt.

Wir haben diskrete Daten von x1, x2 & x3 sowie von u1, u2 & u3. Wir müssen das Problem lösen, um die unbekannten Koeffizienten a1, a2, ..., a10 zu erhalten.

Haben viele Beiträge überprüft und können sagen, die Lösung beinhaltet ODE45 (oder andere ODEX) und wahrscheinlich fsolve oder fminsearch (Matlab), aber nicht gelungen, das Problem richtig einzurichten, denke, dass wir die Codierung nicht gut verstehen. Bitte, Vorschläge.

Antwort

0

Sie sollten x1p, x2p und x3p ersetzen, indem Sie die Definition der Ableitung verwenden: x1p = (x1 (i + 1) - x (i))/dt, und so für die anderen. dann folgenden Algorithmus verwenden (ist nicht vollständig):

descrete data of x1, x2 & x3 as well as of u1, u2 & u3 
dt = 0.01 
myFun = @(a,x1,x2,x3,u1,u2,u3) 
    [ (x1(i+1) - x1(i))/ dt = a(1)*u2(i)*x1(i)^1.3 + a(2)*u1(i) + a(3)*u3(i); 
    (x2(i+1) - x2(i))/ dt = (a(4)*u2(i) + a(5)*x1(i)^1.3 + a(6)*x2(i); 
    (x3(i+1) - x3(i))/ dt = (a(7)*u3(i) + (a(8)*u2(i)-a(9))*x1(i))/a(10) ] 
A=[]; 
a0 = [0; 0; 0 ;0 ;.... ] 
for i= 1:1: lenngth(x1) 
a=fsolve(@(a)myFun(a,x1,x2,x3,u1,u2,u3),a0,options); 
a0 = [ a(1,1) ; a(2,1); a(3,1) ; .......] 
A = cat(1,A,a) ; 
end 
a1 = mean(A(1,:)) 
a2 = mean(A(2,:)) 
. 
. 
a10 = mean(A(10,:))