Matlab:估计非线性微分方程的系数

时间:2016-04-16 16:50:51

标签: matlab system solver equations

需要求解非线性微分方程组:

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是x1,x2和amp;的时间导数。 x3,即dx1 / dt,dx2 / dt& DX3 / DT。

我们有x1,x2和amp;的数据。 x3以及u1,u2和amp; U3。我们需要解决这个问题才能得到未知系数a1,a2,...,a10。

检查了很多帖子,可以说解决方案涉及ODE45(或其他ODEX),可能还有fsolve或fminsearch(Matlab),但还没有设法正确设置问题,猜测我们不能很好地理解编码。请,建议。

1 个答案:

答案 0 :(得分:0)

你应该使用衍生物的定义来替换x1p,x2p和x3p:     x1p =(x1(i + 1) - x(i))/ dt,对于其他人来说就像这样。 然后使用folowing算法(它不完整):

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,:))