需要求解非线性微分方程组:
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),但还没有设法正确设置问题,猜测我们不能很好地理解编码。请,建议。
答案 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,:))