【问题标题】:Matlab: Estimating coefficients of nonlinear differential equationsMatlab:估计非线性微分方程的系数
【发布时间】:2016-08-08 14:17:38
【问题描述】:

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

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 和 x3 的时间导数,即 dx1/dt、dx2/dt 和 dx3/dt。

我们有 x1、x2 和 x3 以及 u1、u2 和 u3 的离散数据。为了得到未知系数a1, a2, ..., a10,我们需要解决这个问题。

查看了很多帖子,可以说解决方案涉及 ODE45(或其他 ODEX),可能涉及 fsolve 或 fminsearch(Matlab),但未能正确设置问题,猜想我们对编码不太了解。请,建议。

【问题讨论】:

    标签: matlab system solver equations


    【解决方案1】:

    您应该使用导数的定义替换 x1p、x2p 和 x3p: x1p = (x1(i+1) - x(i))/ dt ,对其他人也是如此。 然后使用以下算法(不完整):

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

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多